Name: series-workflowjfqtg Phase: Succeeded StartedAt: 2026-06-25 04:39:23 +0000 UTC FinishedAt: 2026-06-25 08:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[0] Phase: Succeeded StartedAt: 2026-06-25 04:39:23 +0000 UTC FinishedAt: 2026-06-25 04:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 04:39:23 +0000 UTC FinishedAt: 2026-06-25 04:48:54 +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": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "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": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "d333f38a-0915-4ae6-8e51-e62a4c651ec1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_owner_open", "page_owner_release", "page_owner_write", "read_page_owner", "print_page_owner" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX293bmVyX29wZW4mIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0OywKICAgICYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O3ByaW50X3BhZ2Vfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3cml0ZSBpbnRlcmZhY2UgdG8gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIHRvIGFsbG93IGZpbHRlcmluZyBwYWdlIG93bmVyIG91dHB1dCBieSBwcmludCBtb2RlIGFuZCBOVU1BIG5vZGUuIEl0IGludHJvZHVjZXMgbmV3IHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGVidWdmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYXJlIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI1OGYwY2JmMjdjMWU0ODdhZDA4NTk3MWQ1ZGIxZTdjZmVjNDFiOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNDo0Nzo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggNmIxMmYzYjAwN2VjOTEuLjM4M2U1OWM0Mjc0M2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuQEAgLTY1LDcgJiM0Mzs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS5cbiBVc2FnZVxuID09PT09XG4gXG4tMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXI6OlxuJiM0MzsxKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcnM6OlxuJiM0MztcbiYjNDM7VG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0OlxuJiM0MztcbiYjNDM7XHRjZCB0b29scy9tbVxuJiM0MztcdG1ha2UgcGFnZV9vd25lcl9maWx0ZXJcbiYjNDM7XG4mIzQzO1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XG4gXG4gXHRjZCB0b29scy9tbVxuIFx0bWFrZSBwYWdlX293bmVyX3NvcnRcbkBAIC03NCw3ICYjNDM7ODEsMTEgQEAgVXNhZ2VcbiBcbiAzKSBEbyB0aGUgam9iIHRoYXQgeW91IHdhbnQgdG8gZGVidWcuXG4gXG4tNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OlxuJiM0Mzs0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XG4mIzQzO1xuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMSwyIFx1MDAzZSBmaWx0ZXJlZF9wYWdlX293bmVyLnR4dFxuJiM0MztcbiYjNDM7NSkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OlxuIFxuIFx0Y2F0IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJfc3RhY2tzL3Nob3dfc3RhY2tzIFx1MDAzZSBzdGFja3MudHh0XG4gXHRjYXQgc3RhY2tzLnR4dFxuQEAgLTI2MywzICYjNDM7Mjc0LDY1IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gXHRmXHRcdGZyZWVcdFx0d2hldGhlciB0aGUgcGFnZSBoYXMgYmVlbiByZWxlYXNlZCBvciBub3RcbiBcdHN0XHRcdHN0YWNrdHJhY2VcdHN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb25cbiBcdGF0b3JcdFx0YWxsb2NhdG9yXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xuJiM0MztcbiYjNDM7RmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxuJiM0Mzt3aGljaCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiB1c2Vyc3BhY2UuXG4mIzQzO1xuJiM0MztUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xuJiM0MztjYXBhYmlsaXR5LiBJdCBzdXBwb3J0cyB0d28gdHlwZXMgb2YgZmlsdGVyczpcbiYjNDM7XG4mIzQzOzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxuJiM0MztcdC0gYGBzdGFja2BgOiBQcmludCBmdWxsIHN0YWNrIHRyYWNlcyAoZGVmYXVsdCwgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIHVzYWdlKVxuJiM0MztcdC0gYGBoYW5kbGVgYDogUHJpbnQgb25seSBzdGFjayBoYW5kbGUgbnVtYmVycyAobXVjaCBmYXN0ZXIsIHNtYWxsZXIgb3V0cHV0KVxuJiM0MztcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXG4mIzQzO1xuJiM0MztcdFRoZSBgYGhhbmRsZWBgIG1vZGUgdXNlcyBudW1lcmljIGlkZW50aWZpZXJzIGluc3RlYWQgb2YgZnVsbCBzdGFjayB0cmFjZXMuXG4mIzQzO1x0VGhlIG1hcHBpbmcgZnJvbSBoYW5kbGVzIHRvIGFjdHVhbCBzdGFjayB0cmFjZXMgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGVcbiYjNDM7XHRzaG93X3N0YWNrc19oYW5kbGVzIGludGVyZmFjZS5cbiYjNDM7XG4mIzQzOzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXG4mIzQzO1x0LSBTdXBwb3J0cyBzaW5nbGUgbm9kZTogYGAtbiAwYGBcbiYjNDM7XHQtIE11bHRpcGxlIG5vZGVzOiBgYC1uIDAsMSwyYGBcbiYjNDM7XHQtIFJhbmdlczogYGAtbiAwLTNgYFxuJiM0MztcdC0gTWl4ZWQgZm9ybWF0OiBgYC1uIDAsMi0zLDVgYFxuJiM0MztcbiYjNDM7VXNhZ2UgZXhhbXBsZXM6OlxuJiM0MztcbiYjNDM7XHQjIEZpbHRlciBieSBwcmludCBtb2RlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZVxuJiM0MztcbiYjNDM7XHQjIEZpbHRlciBieSBOVU1BIG5vZGVcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDBcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAtM1xuJiM0MztcbiYjNDM7XHQjIENvbWJpbmVkIGZpbHRlcnNcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwyLTNcbiYjNDM7XG4mIzQzO1x0IyBTYXZlIHRvIGZpbGVcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XG4mIzQzO1xuJiM0MztUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcbiYjNDM7c2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxuJiM0MztyZWR1Y2Ugb3V0cHV0IHNpemUgYnkgfjY2JSAoODRNQiB2cyAyNDRNQikgYW5kIGltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZSBieSB+NC40eFxuJiM0Mztjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cbiYjNDM7XG4mIzQzO1RoZSBOVU1BIG5vZGUgZmlsdGVyIGlzIHVzZWZ1bCBmb3IgTlVNQS1hd2FyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxuJiM0MztcbiYjNDM7QmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXG4mIzQzO3dyaXRlcyBmaWx0ZXIgY29tbWFuZHMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbHRlcmVkIG91dHB1dC4gVGhlIGZpbHRlcmluZyB1c2VzXG4mIzQzO3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxuJiM0MztcbiYjNDM7RWFjaCBmaWxlIGRlc2NyaXB0b3IgbWFpbnRhaW5zIGl0cyBvd24gZmlsdGVyIHN0YXRlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGVcbiYjNDM7aW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcbiYjNDM7dGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcbiYjNDM7XG4mIzQzO1x0IyBUZXJtaW5hbCAxOiBGaWx0ZXIgbm9kZSAwXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwIFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XG4mIzQzO1xuJiM0MztcdCMgVGVybWluYWwgMjogRmlsdGVyIG5vZGUgMSAocnVucyBjb25jdXJyZW50bHkpXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAxIFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCA4MTc4ZTBiZTU1N2Y4Ny4uY2FlNWFiZjBhYzlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTU0LDYgJiM0Mzs1NCwyNSBAQCBzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4IHtcbiBcdHU4IGZsYWdzO1xuIH07XG4gXG4mIzQzO2VudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHtcbiYjNDM7XHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxuJiM0MztcdFBBR0VfT1dORVJfUFJJTlRfSEFORExFLFxuJiM0MztcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5nc1tdID0ge1xuJiM0MztcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVx0PSBcJiMzNDtzdGFja1wmIzM0OyxcbiYjNDM7XHRbUEFHRV9PV05FUl9QUklOVF9IQU5ETEVdXHQ9IFwmIzM0O2hhbmRsZVwmIzM0OyxcbiYjNDM7XHRbUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEVdXHQ9IFwmIzM0O3N0YWNrX2hhbmRsZVwmIzM0OyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSB7XG4mIzQzO1x0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcbiYjNDM7XHRub2RlbWFza190IG5pZF9maWx0ZXI7XG4mIzQzO1x0Ym9vbCBuaWRfZmlsdGVyX2VuYWJsZWQ7XG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgYm9vbCBwYWdlX293bmVyX2VuYWJsZWQgX19pbml0ZGF0YTtcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XG4gXG5AQCAtNTQ3LDE2ICYjNDM7NTY2LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXG4tXHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcbiYjNDM7XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xuIFx0Y2hhciAqa2J1ZjtcbiYjNDM7XHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4gXHRrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWtidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRwcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRyZXQgPSBzY25wcmludGYoa2J1ZiwgY291bnQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXG5cJiMzNDssXG4gXHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciwgcGFnZV9vd25lci1cdTAwM2VnZnBfbWFzayxcbkBAIC01NzUsOSAmIzQzOzYwMSwxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0bWlncmF0ZXR5cGVfbmFtZXNbcGFnZWJsb2NrX210XSxcbiBcdFx0XHRcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldCAmIzQzOz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgMCk7XG4tXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0spIHtcbiYjNDM7XHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgXCYjMzQ7aGFuZGxlOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaGFuZGxlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG5AQCAtNjY0LDYgJiM0Mzs2OTksOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuJiM0MztcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzQwLDE1ICYjNDM7Nzc3LDM3IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdGlmICghaGFuZGxlKVxuIFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbiBcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQpIHtcbiYjNDM7XHRcdFx0aW50IG5pZDtcbiYjNDM7XHRcdFx0bWVtZGVzY19mbGFnc190IHBhZ2VfZmxhZ3MgPSBSRUFEX09OQ0UocGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkXG4mIzQzO1x0XHRcdCAqIFZNX0JVR19PTiB3aGVuIGFjY2Vzc2luZyBwb2lzb25lZCBwYWdlcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikge1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcikpIHtcbiYjNDM7XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGV4dF9wdXRfY29udGludWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xuIFx0XHQqcHBvcyA9IHBmbiAmIzQzOyAxO1xuIFxuIFx0XHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xuIFx0XHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuIFx0XHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXG4tXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODQ3LDcgJiM0Mzs5MDYsMTIyIEBAIHN0YXRpYyB2b2lkIGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzKHZvaWQpXG4gXHRcdGluaXRfcGFnZXNfaW5fem9uZSh6b25lKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xuJiM0MztcdGlmICghc3RhdGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhdGUtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0s7XG4mIzQzO1x0bm9kZXNfY2xlYXIoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcik7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gZmFsc2U7XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBzdGF0ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhZ2Vfb3duZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4mIzQzO1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqa2J1ZjtcbiYjNDM7XHRjaGFyICpvcmlnO1xuJiM0MztcdGNoYXIgKnRva2VuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c2l6ZV90IG1heF9pbnB1dF9sZW47XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xuJiM0MztcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XG4mIzQzO1x0Ym9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWF4aW11bSBpbnB1dCBsZW5ndGggZm9yIGZpbHRlciBjb21tYW5kczpcbiYjNDM7XHQgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoXCYjMzQ7bW9kZT1zdGFja19oYW5kbGVcJiMzNDspXG4mIzQzO1x0ICogICAgICAgIHdpdGggc3VmZmljaWVudCBidWZmZXJcbiYjNDM7XHQgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0XG4mIzQzO1x0ICogICBXb3JzdCBjYXNlIHBlciBub2RlOiBcJiMzNDssTk5OTk5cJiMzNDsgKGNvbW1hICYjNDM7IDUtZGlnaXQgbm9kZSBudW1iZXIpID0gNiBieXRlc1xuJiM0MztcdCAqL1xuJiM0MztcdG1heF9pbnB1dF9sZW4gPSAzMiAmIzQzOyA2ICogTUFYX05VTU5PREVTO1xuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlIG1heF9pbnB1dF9sZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGtidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XG4mIzQzO1xuJiM0MztcdG9yaWcgPSBrYnVmO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0bmV3X3ByaW50X21vZGUgPSBzdGF0ZS1cdTAwM2VwcmludF9tb2RlO1xuJiM0MztcdG5ld19uaWRfZmlsdGVyID0gc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcjtcbiYjNDM7XHRuZXdfbmlkX2ZpbHRlcl9lbmFibGVkID0gc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKHRva2VuID0gc3Ryc2VwKFx1MDAyNmtidWYsIFwmIzM0OyBcXHRcXG5cJiMzNDspKSAhPSBOVUxMKSB7XG4mIzQzO1x0XHRpZiAoKnRva2VuID09ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3RybmNtcCh0b2tlbiwgXCYjMzQ7bW9kZT1cJiMzNDssIDUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcbiYjNDM7XHRcdFx0XHRcdFx0dG9rZW4gJiM0MzsgNSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdFx0bmV3X3ByaW50X21vZGUgPSByZXQ7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcJiMzNDtuaWQ9XCYjMzQ7LCA0KSkge1xuJiM0MztcdFx0XHRyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiAmIzQzOyA0LCBuZXdfbmlkX2ZpbHRlcik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChub2Rlc19lbXB0eShuZXdfbmlkX2ZpbHRlcikpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIHdhbnQgdG8gZmlsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBieSBudW1hIG5vZGVzLCBzbyBtYWtlIHN1cmVcbiYjNDM7XHRcdFx0ICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKCFub2Rlc19zdWJzZXQobmV3X25pZF9maWx0ZXIsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbW1pdCBhbGwgZmlsdGVyIGNoYW5nZXMgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IG5ld19wcmludF9tb2RlO1xuJiM0MztcdHN0YXRlLVx1MDAzZW5pZF9maWx0ZXIgPSBuZXdfbmlkX2ZpbHRlcjtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBjb3VudDtcbiYjNDM7XG4mIzQzO291dF9mcmVlOlxuJiM0MztcdGtmcmVlKG9yaWcpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9vcGVuLFxuJiM0MztcdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbiYjNDM7XHQud3JpdGVcdFx0PSBwYWdlX293bmVyX3dyaXRlLFxuIFx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4gXHQubGxzZWVrXHRcdD0gbHNlZWtfcGFnZV9vd25lcixcbiB9O1xuQEAgLTk4MCw3ICYjNDM7MTE1NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtwYWdlX293bmVyXCYjMzQ7LCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGFnZV9vd25lclwmIzM0OywgMDYwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcbiBcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDtwYWdlX293bmVyX3N0YWNrc1wmIzM0OywgTlVMTCk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3Nob3dfc3RhY2tzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IGY1NzI1YjVjMjNhYTI2Li44NTgxODZhNmVlZmRiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsNyAmIzQzOzMsNyBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgJChMSUJTKTpcbiBcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXHUwMDNjICQoTERGTEFHUylcbiBcbiBjbGVhbjpcbi1cdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbkBAIC0wLDAgJiM0MzsxLDMxMCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkXG4mIzQzOyAqXG4mIzQzOyAqIEV4YW1wbGUgdXNlOlxuJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXG4mIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcbiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAsMSwyXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3R5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVhfQ01EX0xFTlx0NTEyXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VzYWdlOiAlcyBbT1BUSU9OU11cXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5PcHRpb25zOlxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLW0sIC0tbW9kZSBNT0RFICAgICAgOiBwcmludF9tb2RlIChzdGFjaywgaGFuZGxlLCBvciBzdGFja19oYW5kbGUpXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtbiwgLS1uaWQgTklEX0xJU1QgICA6IE5VTUEgbm9kZSBJRHMgKGNvbW1hLXNlcGFyYXRlZCBvciByYW5nZXMpXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtbywgLS1vdXRwdXQgRklMRSAgICA6IG91dHB1dCBmaWxlIChkZWZhdWx0OiBzdGRvdXQpXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtaCwgLS1oZWxwICAgICAgICAgICA6IHNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5FeGFtcGxlczpcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBoYW5kbGVcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrX2hhbmRsZVxcblwmIzM0OywgcHJvZyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgJXMgLW0gc3RhY2sgLW8gb3V0cHV0LnR4dFxcblwmIzM0OywgcHJvZyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgJXMgLW4gMCwxLDJcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrIC1uIDBcXG5cJiMzNDssIHByb2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdHJjbXAobW9kZSwgXCYjMzQ7c3RhY2tcJiMzNDspID09IDAgfHxcbiYjNDM7XHQgICAgc3RyY21wKG1vZGUsIFwmIzM0O2hhbmRsZVwmIzM0OykgPT0gMCB8fFxuJiM0MztcdCAgICBzdHJjbXAobW9kZSwgXCYjMzQ7c3RhY2tfaGFuZGxlXCYjMzQ7KSA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogSW52YWxpZCBtb2RlICYjMzk7JXMmIzM5O1xcblwmIzM0OywgbW9kZSk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1ZhbGlkIG1vZGVzOiBzdGFjaywgaGFuZGxlLCBzdGFja19oYW5kbGVcXG5cJiMzNDspO1xuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnA7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcdGludCBoYXNfZGlnaXQgPSAwO1xuJiM0MztcdGludCBpbl9yYW5nZSA9IDA7XG4mIzQzO1x0aW50IHByZXZfbnVtID0gMDtcbiYjNDM7XHRpbnQgY3Vycl9udW0gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoKnAgPT0gJiMzOTssJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGluX3JhbmdlIFx1MDAyNlx1MDAyNiBwcmV2X251bSBcdTAwM2UgY3Vycl9udW0pIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHByZXZfbnVtLCBjdXJyX251bSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGkgPSAwO1xuJiM0MztcdFx0XHRoYXNfZGlnaXQgPSAwO1xuJiM0MztcdFx0XHRpbl9yYW5nZSA9IDA7XG4mIzQzO1x0XHRcdHByZXZfbnVtID0gMDtcbiYjNDM7XHRcdFx0Y3Vycl9udW0gPSAwO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoKnAgPT0gJiMzOTstJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCBcJiMzNDspO1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7KGRhc2ggd2l0aG91dCBwcmVjZWRpbmcgbnVtYmVyKVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChpbl9yYW5nZSkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogTXVsdGlwbGUgZGFzaGVzIGluIG5pZF9saXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cHJldl9udW0gPSBjdXJyX251bTtcbiYjNDM7XHRcdFx0Y3Vycl9udW0gPSAwO1xuJiM0MztcdFx0XHRpID0gMDtcbiYjNDM7XHRcdFx0aGFzX2RpZ2l0ID0gMDtcbiYjNDM7XHRcdFx0aW5fcmFuZ2UgPSAxO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnApKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJiMzOTslYyYjMzk7IGluIG5pZF9saXN0XFxuXCYjMzQ7LCAqcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2UgNSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IE5JRCB0b28gbG9uZyAobWF4IDY1NTM2KVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGN1cnJfbnVtID0gY3Vycl9udW0gKiAxMCAmIzQzOyAoKnAgLSAmIzM5OzAmIzM5Oyk7XG4mIzQzO1x0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdGhhc19kaWdpdCA9IDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhhc19kaWdpdCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaW5fcmFuZ2UgXHUwMDI2XHUwMDI2IHByZXZfbnVtIFx1MDAzZSBjdXJyX251bSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFwmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJldl9udW0sIGN1cnJfbnVtKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMO1xuJiM0MztcdGNoYXIgZmlsdGVyX2NtZFtNQVhfQ01EX0xFTl07XG4mIzQzO1x0RklMRSAqb3V0cHV0ID0gTlVMTDtcbiYjNDM7XHRpbnQgZmQgPSAtMTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRjaGFyIGJ1Zls0MDk2XTtcbiYjNDM7XHRpbnQgb3B0O1xuJiM0MztcdHNpemVfdCBjbWRfbGVuID0gMDtcbiYjNDM7XG4mIzQzO1x0c2lnbmFsKFNJR1BJUEUsIFNJR19JR04pO1xuJiM0MztcbiYjNDM7XHRzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHtcbiYjNDM7XHRcdHtcJiMzNDttb2RlXCYjMzQ7LFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7bSYjMzk7fSxcbiYjNDM7XHRcdHtcJiMzNDtuaWRcJiMzNDssXHRcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O24mIzM5O30sXG4mIzQzO1x0XHR7XCYjMzQ7b3V0cHV0XCYjMzQ7LFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7byYjMzk7fSxcbiYjNDM7XHRcdHtcJiMzNDtoZWxwXCYjMzQ7LFx0bm9fYXJndW1lbnQsXHQgICAwLCAmIzM5O2gmIzM5O30sXG4mIzQzO1x0XHR7MCwgMCwgMCwgMH1cbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRmaWx0ZXJfY21kWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0aWYgKGFyZ2MgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoc3RyY21wKGFyZ3ZbaV0sIFwmIzM0Oy1oXCYjMzQ7KSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCBcJiMzNDstLWhlbHBcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdFx0XHR1c2FnZShhcmd2WzBdKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgaWYgcGFnZV9vd25lciBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovXG4mIzQzO1x0aWYgKGFjY2VzcyhcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7LCBGX09LKSAhPSAwKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgZG9lcyBub3QgZXhpc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7RXJyb3IgYWNjZXNzaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcJiMzNDspO1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O01ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcJiMzNDttOm46bzpoXCYjMzQ7LCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkge1xuJiM0MztcdFx0aW50IGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKG9wdCkge1xuJiM0MztcdFx0Y2FzZSAmIzM5O20mIzM5Ozoge1xuJiM0MztcdFx0XHRjb25zdCBjaGFyICptb2RlID0gb3B0YXJnO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHZhbGlkYXRlX21vZGUobW9kZSkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslc21vZGU9JXNcJiMzNDssIGNtZF9sZW4gXHUwMDNlIDAgPyBcJiMzNDsgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBtb2RlKTtcbiYjNDM7XHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiBcdTAwM2U9IE1BWF9DTURfTEVOKSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjbWRfbGVuICYjNDM7PSBsZW47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSAmIzM5O24mIzM5Ozoge1xuJiM0MztcdFx0XHRjb25zdCBjaGFyICpuaWRfbGlzdCA9IG9wdGFyZztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2YWxpZGF0ZV9uaWRfbGlzdChuaWRfbGlzdCkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslc25pZD0lc1wmIzM0OywgY21kX2xlbiBcdTAwM2UgMCA/IFwmIzM0OyBcJiMzNDsgOiBcJiMzNDtcJiMzNDssIG5pZF9saXN0KTtcbiYjNDM7XHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiBcdTAwM2U9IE1BWF9DTURfTEVOKSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjbWRfbGVuICYjNDM7PSBsZW47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSAmIzM5O28mIzM5OzpcbiYjNDM7XHRcdFx0b3V0cHV0X2ZpbGUgPSBvcHRhcmc7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0LyogQWxyZWFkeSBoYW5kbGVkIGFib3ZlICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0dXNhZ2UoYXJndlswXSk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXQgbGVhc3Qgb25lIGZpbHRlciBtdXN0IGJlIHNwZWNpZmllZCAqL1xuJiM0MztcdGlmIChjbWRfbGVuID09IDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXFxuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBPcGVuIHBhZ2Vfb3duZXIgZm9yIHJlYWQtd3JpdGUgLSB0aGlzIHdpbGwgZmFpbCBpZiBrZXJuZWwgZG9lc24mIzM5O3Qgc3VwcG9ydCB3cml0ZSAqL1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7LCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVBQ0NFUyB8fCBlcnJubyA9PSBFUEVSTSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2RvZXMgbm90IHN1cHBvcnQgd3JpdGUgYWNjZXNzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1RoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3Blci1mZCBmaWx0ZXJpbmcuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1BsZWFzZSBlbnN1cmUgeW91IGhhdmUgYSBrZXJuZWwgd2l0aCBcJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cGVyLWZkIGZpbHRlcmluZyBzdXBwb3J0LlxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7RXJyb3Igb3BlbmluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG91dHB1dF9maWxlKSB7XG4mIzQzO1x0XHRvdXRwdXQgPSBmb3BlbihvdXRwdXRfZmlsZSwgXCYjMzQ7d1wmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIW91dHB1dCkge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7b3BlbiBvdXRwdXQgZmlsZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG91dHB1dCA9IHN0ZG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHdyaXRlKGZkLCBmaWx0ZXJfY21kLCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRUlOVkFMKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogS2VybmVsIHJlamVjdGVkIHRoZSBmaWx0ZXIgY29tbWFuZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7UG9zc2libGUgY2F1c2VzOlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgIC0gS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyLWZkIGZpbHRlcmluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgIC0gTlVNQSBub2RlIGhhcyBubyBtZW1vcnlcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtIFVua25vd24gcmVhc29uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBlcnJvcihcJiMzNDt3cml0ZSBmaWx0ZXIgY29tbWFuZFwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICgoc2l6ZV90KXJldCAhPSBzdHJsZW4oZmlsdGVyX2NtZCkpXG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcXG5cJiMzNDssIHJldCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCBhbmQgZGlzcGxheSBmaWx0ZXJlZCBvdXRwdXQgKi9cbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcdHdoaWxlICgocmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzaXplX3Qgd3JpdHRlbiA9IGZ3cml0ZShidWYsIDEsIHJldCwgb3V0cHV0KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAod3JpdHRlbiAhPSAoc2l6ZV90KXJldCkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbiYjNDM7XHRcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuJiM0MztcdFx0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O3dyaXRlIG91dHB1dFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IC0xO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtyZWFkIHBhZ2Vfb3duZXJcJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmZsdXNoKG91dHB1dCkpIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFUElQRSkge1xuJiM0MztcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O2ZsdXNoIG91dHB1dFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG91dHB1dCAhPSBzdGRvdXQpXG4mIzQzO1x0XHRmY2xvc2Uob3V0cHV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gMSA6IDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9vd25lcl9vcGVuJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtwcmludF9wYWdlX293bmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1OGYwY2JmMjdjMWU0ODdhZDA4NTk3MWQ1ZGIxZTdjZmVjNDFiOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwNDo0Nzo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CkBAIC02NSw3ICYjNDM7NjUsMTQgQEAgdW4tdHJhY2tpbmcgc3RhdGUuCiBVc2FnZQogPT09PT0KIAotMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXI6OgomIzQzOzEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyczo6CiYjNDM7CiYjNDM7VG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0OgomIzQzOwomIzQzOwljZCB0b29scy9tbQomIzQzOwltYWtlIHBhZ2Vfb3duZXJfZmlsdGVyCiYjNDM7CiYjNDM7VG8gc29ydCBhbmQgYW5hbHl6ZSBwYWdlX293bmVyIG91dHB1dDoKIAogCWNkIHRvb2xzL21tCiAJbWFrZSBwYWdlX293bmVyX3NvcnQKQEAgLTc0LDcgJiM0Mzs4MSwxMSBAQCBVc2FnZQogCiAzKSBEbyB0aGUgam9iIHRoYXQgeW91IHdhbnQgdG8gZGVidWcuCiAKLTQpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjoKJiM0Mzs0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6CiYjNDM7CiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMSwyICZndDsgZmlsdGVyZWRfcGFnZV9vd25lci50eHQKJiM0MzsKJiM0Mzs1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6CiAKIAljYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgJmd0OyBzdGFja3MudHh0CiAJY2F0IHN0YWNrcy50eHQKQEAgLTI2MywzICYjNDM7Mjc0LDY1IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTCiAJZgkJZnJlZQkJd2hldGhlciB0aGUgcGFnZSBoYXMgYmVlbiByZWxlYXNlZCBvciBub3QKIAlzdAkJc3RhY2t0cmFjZQlzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uCiAJYXRvcgkJYWxsb2NhdG9yCW1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzCiYjNDM7CiYjNDM7RmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0CiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLAomIzQzO3doaWNoIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGluIHVzZXJzcGFjZS4KJiM0MzsKJiM0MztUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZwomIzQzO2NhcGFiaWxpdHkuIEl0IHN1cHBvcnRzIHR3byB0eXBlcyBvZiBmaWx0ZXJzOgomIzQzOwomIzQzOzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZQomIzQzOwktIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSkKJiM0MzsJLSBgYGhhbmRsZWBgOiBQcmludCBvbmx5IHN0YWNrIGhhbmRsZSBudW1iZXJzIChtdWNoIGZhc3Rlciwgc21hbGxlciBvdXRwdXQpCiYjNDM7CS0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzCiYjNDM7CiYjNDM7CVRoZSBgYGhhbmRsZWBgIG1vZGUgdXNlcyBudW1lcmljIGlkZW50aWZpZXJzIGluc3RlYWQgb2YgZnVsbCBzdGFjayB0cmFjZXMuCiYjNDM7CVRoZSBtYXBwaW5nIGZyb20gaGFuZGxlcyB0byBhY3R1YWwgc3RhY2sgdHJhY2VzIGNhbiBiZSBvYnRhaW5lZCB2aWEgdGhlCiYjNDM7CXNob3dfc3RhY2tzX2hhbmRsZXMgaW50ZXJmYWNlLgomIzQzOwomIzQzOzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElECiYjNDM7CS0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgCiYjNDM7CS0gTXVsdGlwbGUgbm9kZXM6IGBgLW4gMCwxLDJgYAomIzQzOwktIFJhbmdlczogYGAtbiAwLTNgYAomIzQzOwktIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGAKJiM0MzsKJiM0MztVc2FnZSBleGFtcGxlczo6CiYjNDM7CiYjNDM7CSMgRmlsdGVyIGJ5IHByaW50IG1vZGUKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGUKJiM0MzsKJiM0MzsJIyBGaWx0ZXIgYnkgTlVNQSBub2RlCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMAomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAtMwomIzQzOwomIzQzOwkjIENvbWJpbmVkIGZpbHRlcnMKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFjayAtbiAwLDEsMgomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDItMwomIzQzOwomIzQzOwkjIFNhdmUgdG8gZmlsZQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0CiYjNDM7CiYjNDM7VGhlIGhhbmRsZSBtb2RlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgYW5kIHBlcmZvcm1hbmNlLWNyaXRpY2FsCiYjNDM7c2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhbgomIzQzO3JlZHVjZSBvdXRwdXQgc2l6ZSBieSB+NjYlICg4NE1CIHZzIDI0NE1CKSBhbmQgaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlIGJ5IH40LjR4CiYjNDM7Y29tcGFyZWQgdG8gZnVsbCBzdGFjayBvdXRwdXQuCiYjNDM7CiYjNDM7VGhlIE5VTUEgbm9kZSBmaWx0ZXIgaXMgdXNlZnVsIGZvciBOVU1BLWF3YXJlIG1lbW9yeSBhbGxvY2F0aW9uIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuCiYjNDM7CiYjNDM7QmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kCiYjNDM7d3JpdGVzIGZpbHRlciBjb21tYW5kcyBiZWZvcmUgcmVhZGluZyB0aGUgZmlsdGVyZWQgb3V0cHV0LiBUaGUgZmlsdGVyaW5nIHVzZXMKJiM0MztwZXItZmlsZS1kZXNjcmlwdG9yIHN0YXRlLCBhbGxvd2luZyBlYWNoIG9wZW4oKSB0byBoYXZlIGluZGVwZW5kZW50IGZpbHRlciBzZXR0aW5ncy4KJiM0MzsKJiM0MztFYWNoIGZpbGUgZGVzY3JpcHRvciBtYWludGFpbnMgaXRzIG93biBmaWx0ZXIgc3RhdGUsIHNvIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZQomIzQzO2luZGVwZW5kZW50IGZpbHRlcmluZyBvcGVyYXRpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiBGb3IgZXhhbXBsZSwgaW4gZGlmZmVyZW50CiYjNDM7dGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjoKJiM0MzsKJiM0MzsJIyBUZXJtaW5hbCAxOiBGaWx0ZXIgbm9kZSAwCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCAmZ3Q7IG5vZGUwX291dHB1dC50eHQKJiM0MzsKJiM0MzsJIyBUZXJtaW5hbCAyOiBGaWx0ZXIgbm9kZSAxIChydW5zIGNvbmN1cnJlbnRseSkKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbiAxICZndDsgbm9kZTFfb3V0cHV0LnR4dApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5jYWU1YWJmMGFjOWFmYSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9vd25lci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuYwpAQCAtNTQsNiAmIzQzOzU0LDI1IEBAIHN0cnVjdCBzdGFja19wcmludF9jdHggewogCXU4IGZsYWdzOwogfTsKIAomIzQzO2VudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHsKJiM0MzsJUEFHRV9PV05FUl9QUklOVF9TVEFDSywKJiM0MzsJUEFHRV9PV05FUl9QUklOVF9IQU5ETEUsCiYjNDM7CVBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5nc1tdID0gewomIzQzOwlbUEFHRV9PV05FUl9QUklOVF9TVEFDS10JPSAmIzM0O3N0YWNrJiMzNDssCiYjNDM7CVtQQUdFX09XTkVSX1BSSU5UX0hBTkRMRV0JPSAmIzM0O2hhbmRsZSYjMzQ7LAomIzQzOwlbUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEVdCT0gJiMzNDtzdGFja19oYW5kbGUmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSB7CiYjNDM7CWVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHByaW50X21vZGU7CiYjNDM7CW5vZGVtYXNrX3QgbmlkX2ZpbHRlcjsKJiM0MzsJYm9vbCBuaWRfZmlsdGVyX2VuYWJsZWQ7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7CiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7CiAKQEAgLTU0NywxNiAmIzQzOzU2NiwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCwKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCXN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lciwKLQkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKQomIzQzOwkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLAomIzQzOwkJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgcmV0LCBwYWdlYmxvY2tfbXQsIHBhZ2VfbXQ7CiAJY2hhciAqa2J1ZjsKJiM0MzsJZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTsKIAlrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXByaW50X21vZGUgPSBzdGF0ZS0mZ3Q7cHJpbnRfbW9kZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiAJcmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LAogCQkJJiMzNDtQYWdlIGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSBuc1xuJiMzNDssCiAJCQlwYWdlX293bmVyLSZndDtvcmRlciwgcGFnZV9vd25lci0mZ3Q7Z2ZwX21hc2ssCkBAIC01NzUsOSAmIzQzOzYwMSwxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQltaWdyYXRldHlwZV9uYW1lc1twYWdlYmxvY2tfbXRdLAogCQkJJmFtcDtwYWdlLSZndDtmbGFncyk7CiAKLQlyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApOwotCWlmIChyZXQgJmd0Oz0gY291bnQpCi0JCWdvdG8gZXJyOwomIzQzOwlpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSkgewomIzQzOwkJcmV0ICYjNDM7PSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAwKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykgewomIzQzOwkJcmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAmIzM0O2hhbmRsZTogJXVcbiYjMzQ7LAomIzQzOwkJCQkgaGFuZGxlKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KIAogCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKQEAgLTY2NCw2ICYjNDM7Njk5LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0OwogCXN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyOwogCWRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTsKJiM0MzsJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3BhZ2Vfb3duZXJfaW5pdGVkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDAsMTUgJiM0Mzs3NzcsMzcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJaWYgKCFoYW5kbGUpCiAJCQlnb3RvIGV4dF9wdXRfY29udGludWU7CiAKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmIChzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkKSB7CiYjNDM7CQkJaW50IG5pZDsKJiM0MzsJCQltZW1kZXNjX2ZsYWdzX3QgcGFnZV9mbGFncyA9IFJFQURfT05DRShwYWdlLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkCiYjNDM7CQkJICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikgewomIzQzOwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCQkJZ290byBleHRfcHV0X2NvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQluaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTsKJiM0MzsJCQlpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcikpIHsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJCWdvdG8gZXh0X3B1dF9jb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKIAkJLyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqLwogCQkqcHBvcyA9IHBmbiAmIzQzOyAxOwogCiAJCXBhZ2Vfb3duZXJfdG1wID0gKnBhZ2Vfb3duZXI7CiAJCXBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7CiAJCXJldHVybiBwcmludF9wYWdlX293bmVyKGJ1ZiwgY291bnQsIHBmbiwgcGFnZSwKLQkJCQkmYW1wO3BhZ2Vfb3duZXJfdG1wLCBoYW5kbGUpOwomIzQzOwkJCQkmYW1wO3BhZ2Vfb3duZXJfdG1wLCBoYW5kbGUsIHN0YXRlKTsKIGV4dF9wdXRfY29udGludWU6CiAJCXBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTg0Nyw3ICYjNDM7OTA2LDEyMiBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKQogCQlpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBhZ2Vfb3duZXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7CiYjNDM7CiYjNDM7CXN0YXRlID0ga3phbGxvY19vYmooKnN0YXRlKTsKJiM0MzsJaWYgKCFzdGF0ZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3N0YXRlLSZndDtsb2NrKTsKJiM0MzsJc3RhdGUtJmd0O3ByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLOwomIzQzOwlub2Rlc19jbGVhcihzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcik7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gc3RhdGU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWtmcmVlKGZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCQkgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKJiM0MzsJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJY2hhciAqa2J1ZjsKJiM0MzsJY2hhciAqb3JpZzsKJiM0MzsJY2hhciAqdG9rZW47CiYjNDM7CWludCByZXQ7CiYjNDM7CXNpemVfdCBtYXhfaW5wdXRfbGVuOwomIzQzOwlzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwllbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBuZXdfcHJpbnRfbW9kZTsKJiM0MzsJbm9kZW1hc2tfdCBuZXdfbmlkX2ZpbHRlcjsKJiM0MzsJYm9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOgomIzQzOwkgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoJiMzNDttb2RlPXN0YWNrX2hhbmRsZSYjMzQ7KQomIzQzOwkgKiAgICAgICAgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlcgomIzQzOwkgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0CiYjNDM7CSAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogJiMzNDssTk5OTk4mIzM0OyAoY29tbWEgJiM0MzsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzCiYjNDM7CSAqLwomIzQzOwltYXhfaW5wdXRfbGVuID0gMzIgJiM0MzsgNiAqIE1BWF9OVU1OT0RFUzsKJiM0MzsKJiM0MzsJaWYgKGNvdW50ICZndDsgbWF4X2lucHV0X2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlrYnVmID0gbWVtZHVwX3VzZXJfbnVsKGJ1ZiwgY291bnQpOwomIzQzOwlpZiAoSVNfRVJSKGtidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoa2J1Zik7CiYjNDM7CiYjNDM7CW9yaWcgPSBrYnVmOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CW5ld19wcmludF9tb2RlID0gc3RhdGUtJmd0O3ByaW50X21vZGU7CiYjNDM7CW5ld19uaWRfZmlsdGVyID0gc3RhdGUtJmd0O25pZF9maWx0ZXI7CiYjNDM7CW5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmYW1wO2tidWYsICYjMzQ7IFx0XG4mIzM0OykpICE9IE5VTEwpIHsKJiM0MzsJCWlmICgqdG9rZW4gPT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFzdHJuY21wKHRva2VuLCAmIzM0O21vZGU9JiMzNDssIDUpKSB7CiYjNDM7CQkJcmV0ID0gc3lzZnNfbWF0Y2hfc3RyaW5nKHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzLAomIzQzOwkJCQkJCXRva2VuICYjNDM7IDUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJCW5ld19wcmludF9tb2RlID0gcmV0OwomIzQzOwkJfSBlbHNlIGlmICghc3RybmNtcCh0b2tlbiwgJiMzNDtuaWQ9JiMzNDssIDQpKSB7CiYjNDM7CQkJcmV0ID0gbm9kZWxpc3RfcGFyc2UodG9rZW4gJiM0MzsgNCwgbmV3X25pZF9maWx0ZXIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwomIzQzOwomIzQzOwkJCWlmIChub2Rlc19lbXB0eShuZXdfbmlkX2ZpbHRlcikpIHsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlCiYjNDM7CQkJICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7CiYjNDM7CQkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCW5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSB0cnVlOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29tbWl0IGFsbCBmaWx0ZXIgY2hhbmdlcyAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXN0YXRlLSZndDtwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0ID0gY291bnQ7CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWtmcmVlKG9yaWcpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkub3BlbgkJPSBwYWdlX293bmVyX29wZW4sCiYjNDM7CS5yZWxlYXNlCT0gcGFnZV9vd25lcl9yZWxlYXNlLAomIzQzOwkud3JpdGUJCT0gcGFnZV9vd25lcl93cml0ZSwKIAkucmVhZAkJPSByZWFkX3BhZ2Vfb3duZXIsCiAJLmxsc2VlawkJPSBsc2Vla19wYWdlX293bmVyLAogfTsKQEAgLTk4MCw3ICYjNDM7MTE1NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiAJCXJldHVybiAwOwogCX0KIAotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtwYWdlX293bmVyJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsICZhbXA7cGFnZV9vd25lcl9mb3BzKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDYwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpOwogCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigmIzM0O3BhZ2Vfb3duZXJfc3RhY2tzJiMzNDssIE5VTEwpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8CmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlCmluZGV4IGY1NzI1YjVjMjNhYTI2Li44NTgxODZhNmVlZmRiZCAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGUKQEAgLTMsNyAmIzQzOzMsNyBAQAogIwogaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUKIAotQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwcwogCiBMSUJfRElSID0gLi4vbGliL2FwaQpAQCAtMjMsNyAmIzQzOzIzLDcgQEAgJChMSUJTKToKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgJCZsdDsgJChMREZMQUdTKQogCiBjbGVhbjoKLQkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzOwkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAogCW1ha2UgLUMgJChMSUJfRElSKSBjbGVhbgogCiBzYmluZGlyID89IC91c3Ivc2JpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYwpAQCAtMCwwICYjNDM7MSwzMTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVXNlci1zcGFjZSBoZWxwZXIgdG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0IHBlci1mZAomIzQzOyAqCiYjNDM7ICogRXhhbXBsZSB1c2U6CiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZQomIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGUKJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCwxLDIKJiM0MzsgKgomIzQzOyAqIFNlZSBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2N0eXBlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1BWF9DTURfTEVOCTUxMgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpCiYjNDM7ewomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVc2FnZTogJXMgW09QVElPTlNdXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1xuT3B0aW9uczpcbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtbSwgLS1tb2RlIE1PREUgICAgICA6IHByaW50X21vZGUgKHN0YWNrLCBoYW5kbGUsIG9yIHN0YWNrX2hhbmRsZSlcbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtbiwgLS1uaWQgTklEX0xJU1QgICA6IE5VTUEgbm9kZSBJRHMgKGNvbW1hLXNlcGFyYXRlZCBvciByYW5nZXMpXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC1oLCAtLWhlbHAgICAgICAgICAgIDogc2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcbkV4YW1wbGVzOlxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgICVzIC1tIHN0YWNrXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gaGFuZGxlXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2tfaGFuZGxlXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2sgLW8gb3V0cHV0LnR4dFxuJiMzNDssIHByb2cpOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgICVzIC1uIDAsMSwyXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2sgLW4gMFxuJiMzNDssIHByb2cpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSkKJiM0Mzt7CiYjNDM7CWlmIChzdHJjbXAobW9kZSwgJiMzNDtzdGFjayYjMzQ7KSA9PSAwIHx8CiYjNDM7CSAgICBzdHJjbXAobW9kZSwgJiMzNDtoYW5kbGUmIzM0OykgPT0gMCB8fAomIzQzOwkgICAgc3RyY21wKG1vZGUsICYjMzQ7c3RhY2tfaGFuZGxlJiMzNDspID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEludmFsaWQgbW9kZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBtb2RlKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7VmFsaWQgbW9kZXM6IHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZVxuJiMzNDspOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdmFsaWRhdGVfbmlkX2xpc3QoY29uc3QgY2hhciAqbmlkX2xpc3QpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpwOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CWludCBoYXNfZGlnaXQgPSAwOwomIzQzOwlpbnQgaW5fcmFuZ2UgPSAwOwomIzQzOwlpbnQgcHJldl9udW0gPSAwOwomIzQzOwlpbnQgY3Vycl9udW0gPSAwOwomIzQzOwomIzQzOwlpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHAmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoKnAgPT0gJiMzOTssJiMzOTspIHsKJiM0MzsJCQlpZiAoIWhhc19kaWdpdCkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoaW5fcmFuZ2UgJmFtcDsmYW1wOyBwcmV2X251bSAmZ3Q7IGN1cnJfbnVtKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSAmbHQ7PSBlbmQpXG4mIzM0OywKJiM0MzsJCQkJCXByZXZfbnVtLCBjdXJyX251bSk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CQkJaSA9IDA7CiYjNDM7CQkJaGFzX2RpZ2l0ID0gMDsKJiM0MzsJCQlpbl9yYW5nZSA9IDA7CiYjNDM7CQkJcHJldl9udW0gPSAwOwomIzQzOwkJCWN1cnJfbnVtID0gMDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICgqcCA9PSAmIzM5Oy0mIzM5OykgewomIzQzOwkJCWlmICghaGFzX2RpZ2l0KSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXQgJiMzNDspOwomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwKJiM0MzsJCQkJCSYjMzQ7KGRhc2ggd2l0aG91dCBwcmVjZWRpbmcgbnVtYmVyKVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLTE7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChpbl9yYW5nZSkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogTXVsdGlwbGUgZGFzaGVzIGluIG5pZF9saXN0XG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CQkJcHJldl9udW0gPSBjdXJyX251bTsKJiM0MzsJCQljdXJyX251bSA9IDA7CiYjNDM7CQkJaSA9IDA7CiYjNDM7CQkJaGFzX2RpZ2l0ID0gMDsKJiM0MzsJCQlpbl9yYW5nZSA9IDE7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnApKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEludmFsaWQgY2hhcmFjdGVyICYjMzk7JWMmIzM5OyBpbiBuaWRfbGlzdFxuJiMzNDssICpwKTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoaSAmZ3Q7IDUpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogTklEIHRvbyBsb25nIChtYXggNjU1MzYpXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJY3Vycl9udW0gPSBjdXJyX251bSAqIDEwICYjNDM7ICgqcCAtICYjMzk7MCYjMzk7KTsKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwkJaGFzX2RpZ2l0ID0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhc19kaWdpdCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGluX3JhbmdlICZhbXA7JmFtcDsgcHJldl9udW0gJmd0OyBjdXJyX251bSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSAmbHQ7PSBlbmQpXG4mIzM0OywKJiM0MzsJCQlwcmV2X251bSwgY3Vycl9udW0pOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMOwomIzQzOwljaGFyIGZpbHRlcl9jbWRbTUFYX0NNRF9MRU5dOwomIzQzOwlGSUxFICpvdXRwdXQgPSBOVUxMOwomIzQzOwlpbnQgZmQgPSAtMTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWNoYXIgYnVmWzQwOTZdOwomIzQzOwlpbnQgb3B0OwomIzQzOwlzaXplX3QgY21kX2xlbiA9IDA7CiYjNDM7CiYjNDM7CXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKJiM0MzsKJiM0MzsJc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CiYjNDM7CQl7JiMzNDttb2RlJiMzNDssCXJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O20mIzM5O30sCiYjNDM7CQl7JiMzNDtuaWQmIzM0OywJCXJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O24mIzM5O30sCiYjNDM7CQl7JiMzNDtvdXRwdXQmIzM0OywJcmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7byYjMzk7fSwKJiM0MzsJCXsmIzM0O2hlbHAmIzM0OywJbm9fYXJndW1lbnQsCSAgIDAsICYjMzk7aCYjMzk7fSwKJiM0MzsJCXswLCAwLCAwLCAwfQomIzQzOwl9OwomIzQzOwomIzQzOwlmaWx0ZXJfY21kWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwlpZiAoYXJnYyAmZ3Q7IDEpIHsKJiM0MzsJCWZvciAoaW50IGkgPSAxOyBpICZsdDsgYXJnYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICYjMzQ7LWgmIzM0OykgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgJiMzNDstLWhlbHAmIzM0OykgPT0gMCkgewomIzQzOwkJCQl1c2FnZShhcmd2WzBdKTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqLwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7LCBGX09LKSAhPSAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU5PRU5UKQomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XG4mIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGVycm9yKCYjMzQ7RXJyb3IgYWNjZXNzaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXImIzM0Oyk7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtNYWtlIHN1cmUgcGFnZV9vd25lciBpcyBlbmFibGVkIGluIGtlcm5lbFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O206bjpvOmgmIzM0OywgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKJiM0MzsJCWludCBsZW47CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKG9wdCkgewomIzQzOwkJY2FzZSAmIzM5O20mIzM5OzogewomIzQzOwkJCWNvbnN0IGNoYXIgKm1vZGUgPSBvcHRhcmc7CiYjNDM7CiYjNDM7CQkJaWYgKHZhbGlkYXRlX21vZGUobW9kZSkgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQlsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbiwKJiM0MzsJCQkJICAgICAgICYjMzQ7JXNtb2RlPSVzJiMzNDssIGNtZF9sZW4gJmd0OyAwID8gJiMzNDsgJiMzNDsgOiAmIzM0OyYjMzQ7LCBtb2RlKTsKJiM0MzsJCQlpZiAobGVuICZsdDsgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiAmZ3Q7PSBNQVhfQ01EX0xFTikgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQl9CiYjNDM7CQkJY21kX2xlbiAmIzQzOz0gbGVuOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzogewomIzQzOwkJCWNvbnN0IGNoYXIgKm5pZF9saXN0ID0gb3B0YXJnOwomIzQzOwomIzQzOwkJCWlmICh2YWxpZGF0ZV9uaWRfbGlzdChuaWRfbGlzdCkgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQlsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbiwKJiM0MzsJCQkJICAgICAgICYjMzQ7JXNuaWQ9JXMmIzM0OywgY21kX2xlbiAmZ3Q7IDAgPyAmIzM0OyAmIzM0OyA6ICYjMzQ7JiMzNDssIG5pZF9saXN0KTsKJiM0MzsJCQlpZiAobGVuICZsdDsgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiAmZ3Q7PSBNQVhfQ01EX0xFTikgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQl9CiYjNDM7CQkJY21kX2xlbiAmIzQzOz0gbGVuOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSAmIzM5O28mIzM5OzoKJiM0MzsJCQlvdXRwdXRfZmlsZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtoJiMzOTs6CiYjNDM7CQkJLyogQWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXVzYWdlKGFyZ3ZbMF0pOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEF0IGxlYXN0IG9uZSBmaWx0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgKi8KJiM0MzsJaWYgKGNtZF9sZW4gPT0gMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEF0IGxlYXN0IG9uZSBmaWx0ZXIgKC1tIG9yIC1uKSBtdXN0IGJlIHNwZWNpZmllZFxuXG4mIzM0Oyk7CiYjNDM7CQl1c2FnZShhcmd2WzBdKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE9wZW4gcGFnZV9vd25lciBmb3IgcmVhZC13cml0ZSAtIHRoaXMgd2lsbCBmYWlsIGlmIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IHdyaXRlICovCiYjNDM7CWZkID0gb3BlbigmIzM0Oy9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXImIzM0OywgT19SRFdSKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJaWYgKGVycm5vID09IEVBQ0NFUyB8fCBlcnJubyA9PSBFUEVSTSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyICYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1RoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3Blci1mZCBmaWx0ZXJpbmcuXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7UGxlYXNlIGVuc3VyZSB5b3UgaGF2ZSBhIGtlcm5lbCB3aXRoICYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwZXItZmQgZmlsdGVyaW5nIHN1cHBvcnQuXG4mIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBlcnJvcigmIzM0O0Vycm9yIG9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdXRwdXRfZmlsZSkgewomIzQzOwkJb3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsICYjMzQ7dyYjMzQ7KTsKJiM0MzsJCWlmICghb3V0cHV0KSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7b3BlbiBvdXRwdXQgZmlsZSYjMzQ7KTsKJiM0MzsJCQljbG9zZShmZCk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlvdXRwdXQgPSBzdGRvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGUoZmQsIGZpbHRlcl9jbWQsIHN0cmxlbihmaWx0ZXJfY21kKSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUlOVkFMKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7UG9zc2libGUgY2F1c2VzOlxuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0OyAgLSBLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBwZXItZmQgZmlsdGVyaW5nXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtIFVua25vd24gcmVhc29uXG4mIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBlcnJvcigmIzM0O3dyaXRlIGZpbHRlciBjb21tYW5kJiMzNDspOwomIzQzOwkJfQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChzaXplX3QpcmV0ICE9IHN0cmxlbihmaWx0ZXJfY21kKSkKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXG4mIzM0OywgcmV0LCBzdHJsZW4oZmlsdGVyX2NtZCkpOwomIzQzOwomIzQzOwkvKiBSZWFkIGFuZCBkaXNwbGF5IGZpbHRlcmVkIG91dHB1dCAqLwomIzQzOwlyZXQgPSAwOwomIzQzOwl3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSAmZ3Q7IDApIHsKJiM0MzsJCXNpemVfdCB3cml0dGVuID0gZndyaXRlKGJ1ZiwgMSwgcmV0LCBvdXRwdXQpOwomIzQzOwomIzQzOwkJaWYgKHdyaXR0ZW4gIT0gKHNpemVfdClyZXQpIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRVBJUEUpIHsKJiM0MzsJCQkJLyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi8KJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJCXBlcnJvcigmIzM0O3dyaXRlIG91dHB1dCYjMzQ7KTsKJiM0MzsJCQlyZXQgPSAtMTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJcGVycm9yKCYjMzQ7cmVhZCBwYWdlX293bmVyJiMzNDspOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZmbHVzaChvdXRwdXQpKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRVBJUEUpIHsKJiM0MzsJCQkvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqLwomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBlcnJvcigmIzM0O2ZsdXNoIG91dHB1dCYjMzQ7KTsKJiM0MzsJCQlyZXQgPSAtMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAob3V0cHV0ICE9IHN0ZG91dCkKJiM0MzsJCWZjbG9zZShvdXRwdXQpOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IDEgOiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBQYWdlIE93bmVyIEZpbHRlcmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIGJlZW4gc3VibWl0dGVkLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBpbnRlcmVzdGluZyBhZGRpdGlvbiB0byB0aGUgYHBhZ2Vfb3duZXJgIGRlYnVnZ2luZyBmZWF0dXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhZGRzIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgYmFzZWQgb24gcHJpbnQgbW9kZXMgKHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZSkgYW5kIE5VTUEgbm9kZSBJRHMuIFRoZSBjb3JlIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgY2VudGVycyBhcm91bmQgYSBuZXcgYHdyaXRlYCBvcGVyYXRpb24gb24gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgLiBUaGlzIHdyaXRlIG9wZXJhdGlvbiBpcyB3aGF0IHNldHMgdXAgYSBmaWx0ZXIgc3RhdGUsIHN0b3JlZCBpbiBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCwgd2hpY2ggYHJlYWRfcGFnZV9vd25lcmAgdGhlbiByZXNwZWN0cy4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBUaGUgYHBhZ2Vfb3duZXJgIGZlYXR1cmUgaXRzZWxmIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfUEFHRV9PV05FUmAsIHNvIHRoYXQmIzM5O3MgdGhlIGZpcnN0IGNvbmZpZyBJIHdhbnQgdG8gY2hlY2suIEdvb2QsIGl0JiMzOTtzIGEga2VybmVsIGNvbmZpZy4gTm93LCBsZXTigJlzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gYWRkZWQgYW5kIG1vZGlmaWVkIGluIGBtbS9wYWdlX293bmVyLmNgLiBJIHNlZSBuZXcgZnVuY3Rpb25zOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAuCgpUaGlzIGlzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBhIG5ldyB3cml0ZSBpbnRlcmZhY2UgdG8gYSBkZWJ1Z2ZzIGZpbGUuIEFuZCBpdCYjMzk7cyBwYXJzaW5nIHVzZXIgaW5wdXQuIEkgc2VlIGBzdHJzZXBgLCBgc3lzZnNfbWF0Y2hfc3RyaW5nYCwgYG5vZGVsaXN0X3BhcnNlYCwgYWxsIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIGNvdWxkIHVuY292ZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvci4gTWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGBtZW1kdXBfdXNlcl9udWxgLCBhbmQgdGhlcmUmIzM5O3MgYSBzcGlubG9jayB3aXRoIGBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncylgLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgYXNzdW1pbmcgZGVidWdmcyBpcyBtb3VudGVkLCBhbmQgZ2l2ZW4gU3l6a2FsbGVyIHJ1bnMgYXMgcm9vdCBvciBjYW4gYWNjZXNzIGRlYnVnZnMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGUga2V5IGlzIHJvb3QuIFdhaXQuLi4gSSBhbHNvIHNlZSB0aGUgZmlsZSBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gY2hhbmdlZC4gVGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIDA2MDAgcGVybWlzc2lvbnMsIHNvIHJvb3QgY2FuIHdyaXRlLiBQZXJmZWN0LgoKU28sIHRoZSBmb2N1cyBwb2ludHMgYXJlOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHJlYWRfcGFnZV9vd25lcmAsIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAuIEdvb2QsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgYFBBR0VfT1dORVJgLiBBbmQsIGBERUJVR19GU2AgaXMgbmVlZGVkLCBidXQgdGhhdCBpcyB1c3VhbGx5IGVuYWJsZWQuIExldCYjMzk7cyBkbyBhIHF1aWNrIGdyZXAgZm9yIGBQQUdFX09XTkVSYCB0byBkb3VibGUgY2hlY2suIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGdvb2QgdG8gZ28uIFRpbWUgdG8gc3BpbiB1cCB0aGUgZnV6emVycyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfT1dORVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYFBBR0VfT1dORVJgIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYFBBR0VfT1dORVJgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaW1lIHRvIGRyaWxsIGRvd24gYW5kIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIExldCYjMzk7cyBqdW1wIGludG8gdGhlIGNvZGUgYW5kIGludmVzdGlnYXRlIHRoZSBgcGFnZV9vd25lcl93cml0ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcyEpIGFyZSBwcm9iYWJseSBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3cml0ZSBiZWhhdmlvciB3aXRoaW4gdGhhdCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTkyNT1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5tbS9wYWdlX293bmVyLmMtOTMwLVxubW0vcGFnZV9vd25lci5jOjkzMTpzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubW0vcGFnZV9vd25lci5jLTkzMi1cdFx0XHRcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0xMDIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbi0tXG5tbS9wYWdlX293bmVyLmMtMTAyMy1cdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDI0Olx0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbm1tL3BhZ2Vfb3duZXIuYy0xMDI1LVx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgcmVhZF9wYWdlX293bmVyYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmVhZF9wYWdlX293bmVyYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgcHJvYmFibHkgbWVhbnMgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBpdHMgbGlrZWx5IGNvZGUgcGF0aC4gSSB3YW50IHRvIHF1aWNrbHkgZW5zdXJlIHRoYXQ6CgoqICAgSXQmIzM5O3MgaGFuZGxpbmcgYWxsIGV4cGVjdGVkIGVkZ2UgY2FzZXMgcHJvcGVybHkuCiogICBUaGUgZGF0YSB2YWxpZGF0aW9uIGlzIHJvYnVzdCBlbm91Z2gsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhpbmdzIGxpa2Ugb3duZXJzaGlwLCBzZWN1cml0eSBjb250ZXh0IGFuZCBhbnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gYWNjZXNzIHRoZSB0YXJnZXQgaW5mb3JtYXRpb24uCiogICBUaGF0IHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBvcGVuaW5nIGFueSBzZWN1cml0eSBob2xlcywgbGlrZSBleHBvc2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gb3IgY3JlYXRpbmcgb3Bwb3J0dW5pdGllcyBmb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uCiogICBJdCYjMzk7cyB0aHJlYWQtc2FmZSBvciBwcm9wZXJseSBwcm90ZWN0ZWQgYnkgd2hhdGV2ZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgd2UmIzM5O3JlIHVzaW5nLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBkZXNpZ24sIG9mIGNvdXJzZS4KKiAgIFRoYXQgcGVyZm9ybWFuY2UgaXMgYWNjZXB0YWJsZS4gSSYjMzk7bSBub3QgZXhwZWN0aW5nIGFueXRoaW5nIGdyb3VuZGJyZWFraW5nIGhlcmUsIGJ1dCBJIGRvbiYjMzk7dCB3YW50IGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLgoKVGhpcyBpcyBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGF2b2lkIGEgcG90ZW50aWFsbHkgbmFzdHkgb3ZlcnNpZ2h0IGxhdGVyLiBBIGdvb2QgZnVuY3Rpb24gbmFtZSBpcyBvbmx5IGdvb2QgYXMgdGhlIGNvZGUgdGhhdCBleGVjdXRlcyBpdC4gSSYjMzk7bGwgZ2V0IHRoYXQgZnJlc2ggaW4gbXkgbWluZCBhbmQsIGp1c3QgZG91YmxlIGNoZWNrIGl0LCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTY5ND1zdGF0aWMgc3NpemVfdFxubW0vcGFnZV9vd25lci5jOjY5NTpyZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxubW0vcGFnZV9vd25lci5jLTY5Ni17XG4tLVxubW0vcGFnZV9vd25lci5jPTEwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xMDI0LVx0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDI1Olx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG5tbS9wYWdlX293bmVyLmMtMTAyNi1cdC5sbHNlZWtcdFx0PSBsc2Vla19wYWdlX293bmVyLFxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk9MzA9Y2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS01Mi0gICAgICAgIGlmIGxlbihhcmd2KSA9PSAwOlxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo1MzogICAgICAgICAgICAgIHNlbGYucmVhZF9wYWdlX293bmVyKClcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTQtICAgICAgICBlbGlmIGxlbihhcmd2KSA9PSAyOlxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTYtICAgICAgICAgICAgICAgIHBmbiA9IGludChhcmd2WzFdKVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo1NzogICAgICAgICAgICAgICAgc2VsZi5yZWFkX3BhZ2Vfb3duZXJfYnlfYWRkcihzZWxmLnBfb3BzLnBmbl90b19wYWdlKHBmbikpXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTU4LSAgICAgICAgICAgIGVsc2U6XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS05Ny1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk6OTg6ICAgIGRlZiByZWFkX3BhZ2Vfb3duZXJfYnlfYWRkcihzZWxmLCBzdHJ1Y3RfcGFnZV9hZGRyKTpcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktOTktICAgICAgICBwYWdlID0gZ2RiLlZhbHVlKHN0cnVjdF9wYWdlX2FkZHIpLmNhc3QodXRpbHMuZ2V0X3BhZ2VfdHlwZSgpLnBvaW50ZXIoKSlcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTE0My1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk6MTQ0OiAgICBkZWYgcmVhZF9wYWdlX293bmVyKHNlbGYpOlxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNDUtICAgICAgICBwZm4gPSBzZWxmLm1pbl9wZm5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgT3duZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCByZWZpbmluZyB0aGUgYHBhZ2Vfb3duZXJgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGxldmVyYWdpbmcgdGhlIGZpbHRlciBzdGF0ZSB3aXRoaW4gdGhlIGByZWFkX3BhZ2Vfb3duZXJgIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyBnb29kOyBhbnkgb3B0aW1pemF0aW9uIHRoYXQgc3RyZWFtbGluZXMgdGhpcyBpcyB3ZWxjb21lLiBJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIGBwcmludF9wYWdlX293bmVyYCwgd2hpY2ggSSBhc3N1bWUgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyB3ZSYjMzk7cmUgcHJlc2VudGluZyB0aGlzIGluZm9ybWF0aW9uIOKAkyBwb3RlbnRpYWxseSBpbXByb3ZlZCBjbGFyaXR5IG9yIGFkZGVkIGNvbnRleHQuCgpUaGUgbWVhdCBvZiB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIHRoZXNlIG5ldyBmdW5jdGlvbnM6IGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYW5kIGBwYWdlX293bmVyX3dyaXRlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24uIFRoZXNlIHNvdW5kIGxpa2UgdGhleSYjMzk7cmUgbWFuYWdpbmcgYWNjZXNzIHRvIG9yIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2Ugb3duZXIgZGF0YSwgcGVyaGFwcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgc3RhdGUuCgpTbywgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG9uIHRoZXNlIGZpdmUgZnVuY3Rpb24gY2FsbHM6CiogICBgcGFnZV9vd25lcl9vcGVuYAoqICAgYHBhZ2Vfb3duZXJfcmVsZWFzZWAKKiAgIGBwYWdlX293bmVyX3dyaXRlYAoqICAgYHJlYWRfcGFnZV9vd25lcmAKKiAgIGBwcmludF9wYWdlX293bmVyYAoKQnV0LCBiZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCB0aGUgYFBBR0VfT1dORVJgIGNvbmZpZyBpdHNlbGYgZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCBhbmQgYFNUQUNLVFJBQ0VfU1VQUE9SVGAuIEkgc2hvdWxkIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYG1tL0tjb25maWcuZGVidWdgIHRvIHZlcmlmeSBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2UgZGVwZW5kZW5jaWVzIGNvbWUgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvbmZpZ3Mgd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxuIDEwMTpcdFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwMjpcdFxuIDEwMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwNDpcdFxuIDEwNTpcdGNvbmZpZyBQQUdFX09XTkVSXG4gMTA2Olx0XHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiAxMDc6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxMDg6XHRcdHNlbGVjdCBERUJVR19GU1xuIDEwOTpcdFx0c2VsZWN0IFNUQUNLVFJBQ0VcbiAxMTA6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gMTExOlx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAxMTI6XHRcdGhlbHBcbiAxMTM6XHRcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XG4gMTE0Olx0XHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xuIDExNTpcdFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xuIDExNjpcdFx0ICBcJiMzNDtwYWdlX293bmVyPW9uXCYjMzQ7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xuIDExNzpcdFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbiAxMTg6XHRcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxMQoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiA5NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgUGFnZSBPd25lciBGZWF0dXJlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYmVzdCB0ZXN0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb25zIGFyb3VuZCB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGludGVyZmFjZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYFBBR0VfT1dORVJgIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCBlbmFibGluZyBpdCBuZWVkcyB0aGUgYHBhZ2Vfb3duZXI9b25gIGJvb3QgcGFyYW1ldGVyLiYjMzQ7IFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHN5emthbGxlciBoYW5kbGUgdGhhdCBib290IHBhcmFtZXRlcj8gVXN1YWxseSwgc3l6a2FsbGVyIHBhcmFtZXRlcnMgYXJlIGZpeGVkLCBidXQgaWYgYFBBR0VfT1dORVJgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgQU5EIGBwYWdlX293bmVyPW9uYCBpcyBwYXNzZWQsIHRoZW4gc3l6a2FsbGVyIGNvdWxkIHRlc3QgaXQuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIGZvciBrZXJuZWwgKmNvbmZpZyogZmxhZ3MuIFNvLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgSSBkZWZpbml0ZWx5IG5lZWQgdG8gbGlzdCBgUEFHRV9PV05FUmAuIFRoZW4sIEkgc3RhcnRlZCB0byB0aGluaywgJiMzNDtJZiB0aGUgZmVhdHVyZSBuZWVkcyBhIGJvb3QgcGFyYW1ldGVyIHRvIGJlIHRydWx5IGFjdGl2ZSwgd29uJiMzOTt0IHN5emthbGxlciBzdHJ1Z2dsZSB0byB0ZXN0IGl0IGlmIHdlIGRvbiYjMzk7dCBhbHNvIGFkZCB0aGUgcGFyYW1ldGVyPyYjMzQ7CgpJIHRoZW4gd2VudCBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNsYXJpZnkgdGhpcy4gSSBzZWUgYHBhZ2Vfb3duZXJfZW5hYmxlZGAgaXMgY2hlY2tlZCBpbiBgcmVhZF9wYWdlX293bmVyYC4gSWYgYHBhZ2Vfb3duZXI9b25gIGlzbiYjMzk7dCBwYXNzZWQsIHRoZW4gYHBhZ2Vfb3duZXJfaW5pdGVkYCB3aWxsIGJlIGZhbHNlLCBhbmQgYHJlYWRfcGFnZV9vd25lcmAgd2lsbCByZXR1cm4gYW4gZXJyb3IuIEkgdGhvdWdodCwgd2hhdCBhYm91dCBgcGFnZV9vd25lcl93cml0ZWA/IEludGVyZXN0aW5nbHksIGl0ICpkb2VzbiYjMzk7dCogY2hlY2sgYHBhZ2Vfb3duZXJfaW5pdGVkYC4gU28sIHRoZSBgcGFnZV9vd25lcl93cml0ZWAgZnVuY3Rpb24gKmNvdWxkKiBiZSBleGVjdXRlZCBldmVuIGlmIHRoZSBib290IHBhcmFtZXRlciB3YXNuJiMzOTt0IHBhc3NlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNhbWUgZ29lcyBmb3IgYHBhZ2Vfb3duZXJfb3BlbmAuCgpCdXQgdGhlbiBJIHNlZSB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGZpbGUgaXMgKm9ubHkqIGNyZWF0ZWQgaWYgYHBhZ2Vfb3duZXJfaW5pdGVkYCBpcyB0cnVlLiBTbywgdGhlIGZpbGUgaXNuJiMzOTt0IGV2ZW4gdGhlcmUgdW5sZXNzIGBwYWdlX293bmVyPW9uYCBpcyBwYXNzZWQuIFRoaXMgbWVhbnMgbm8gZGlyZWN0IGludGVyYWN0aW9uLiBUaGVuIEkgY29uc2lkZXJlZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgaW4gc3l6a2FsbGVyLCBtYXliZSBpdCBoYW5kbGVzIGJvb3QgcGFyYW1ldGVycywgb3IgcGVyaGFwcyBpdCBhbHJlYWR5IGhhcyBgcGFnZV9vd25lcj1vbmAgb24gc29tZSBpbnN0YW5jZXMuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIG1haW4gdGhpbmcgdG8gcHJvdmlkZSBpcyBgUEFHRV9PV05FUmAgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKSSB0aGVuIG1hZGUgYSBtZW50YWwgbGlzdCBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zOiBgcGFnZV9vd25lcl9vcGVuYCwgYHBhZ2Vfb3duZXJfcmVsZWFzZWAsIGBwYWdlX293bmVyX3dyaXRlYCwgYHJlYWRfcGFnZV9vd25lcmAsIGBwcmludF9wYWdlX293bmVyYC4gSSBlbGltaW5hdGVkIHRoZSB1c2Vyc3BhY2UgdG9vbC4KClNvLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBmaWx0ZXIgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBhZGRzIHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFuZCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MuCgpUaGVyZWZvcmU6CgoqICAgQ29uZmlnczogYFBBR0VfT1dORVJgCiogICBGb2N1c1N5bWJvbHM6IGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHBhZ2Vfb3duZXJfd3JpdGVgLCBgcmVhZF9wYWdlX293bmVyYCwgYHByaW50X3BhZ2Vfb3duZXJgCgpJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCBhbGwgdGhlIGZ1bmN0aW9ucyBJIGxpc3RlZCBhcmUgc3RhdGljLgoKTm93IEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfb3duZXJfb3BlbiYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl93cml0ZSYjMzQ7LAogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cHJpbnRfcGFnZV9vd25lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgdG8gYWxsb3cgZmlsdGVyaW5nIHBhZ2Ugb3duZXIgb3V0cHV0IGJ5IHByaW50IG1vZGUgYW5kIE5VTUEgbm9kZS4gSXQgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBsb2dpYywgc3RhdGUgbWFuYWdlbWVudCBwZXIgZmlsZSBkZXNjcmlwdG9yLCBhbmQgbW9kaWZpZXMgdGhlIHJlYWQgcGF0aCB0byByZXNwZWN0IHRoZSBmaWx0ZXIuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudCBhcmUgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9vd25lcl9vcGVuJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtwcmludF9wYWdlX293bmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODowMC40Njk1NTM4OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU1MzI2OTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInBhZ2Vfb3duZXJfd3JpdGVcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiLFxuICAgIFwicHJpbnRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA0OjQ4OjAwLjQ2OTU1ODg4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MzMwMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjU4ZjBjYmYyN2MxZTQ4N2FkMDg1OTcxZDVkYjFlN2NmZWM0MWI4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1biAyNSAwNDo0Nzo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbkBAIC02NSw3ICs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS5cXG4gVXNhZ2VcXG4gPT09PT1cXG4gXFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcXG4rMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcXG4rXFxuK1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcXG4rXFxuK1xcdGNkIHRvb2xzL21tXFxuK1xcdG1ha2UgcGFnZV9vd25lcl9maWx0ZXJcXG4rXFxuK1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XFxuIFxcbiBcXHRjZCB0b29scy9tbVxcbiBcXHRtYWtlIHBhZ2Vfb3duZXJfc29ydFxcbkBAIC03NCw3ICs4MSwxMSBAQCBVc2FnZVxcbiBcXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxcbiBcXG4tNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6Olxcbis0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XFxuK1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcXHUwMDNlIGZpbHRlcmVkX3BhZ2Vfb3duZXIudHh0XFxuK1xcbis1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XFxuIFxcbiBcXHRjYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgXFx1MDAzZSBzdGFja3MudHh0XFxuIFxcdGNhdCBzdGFja3MudHh0XFxuQEAgLTI2MywzICsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZlxcdFxcdGZyZWVcXHRcXHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxcbiBcXHRzdFxcdFxcdHN0YWNrdHJhY2VcXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXG4rRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxcbit3aGljaCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiB1c2Vyc3BhY2UuXFxuK1xcbitUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xcbitjYXBhYmlsaXR5LiBJdCBzdXBwb3J0cyB0d28gdHlwZXMgb2YgZmlsdGVyczpcXG4rXFxuKzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxcbitcXHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcXG4rXFx0LSBgYGhhbmRsZWBgOiBQcmludCBvbmx5IHN0YWNrIGhhbmRsZSBudW1iZXJzIChtdWNoIGZhc3Rlciwgc21hbGxlciBvdXRwdXQpXFxuK1xcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXFxuK1xcbitcXHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxcbitcXHRUaGUgbWFwcGluZyBmcm9tIGhhbmRsZXMgdG8gYWN0dWFsIHN0YWNrIHRyYWNlcyBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZVxcbitcXHRzaG93X3N0YWNrc19oYW5kbGVzIGludGVyZmFjZS5cXG4rXFxuKzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXFxuK1xcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXFxuK1xcdC0gTXVsdGlwbGUgbm9kZXM6IGBgLW4gMCwxLDJgYFxcbitcXHQtIFJhbmdlczogYGAtbiAwLTNgYFxcbitcXHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcXG4rXFxuK1VzYWdlIGV4YW1wbGVzOjpcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IHByaW50IG1vZGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IE5VTUEgbm9kZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDBcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcXG4rXFxuK1xcdCMgQ29tYmluZWQgZmlsdGVyc1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXFxuK1xcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zXFxuK1xcbitcXHQjIFNhdmUgdG8gZmlsZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XFxuK1xcbitUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcXG4rc2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxcbityZWR1Y2Ugb3V0cHV0IHNpemUgYnkgfjY2JSAoODRNQiB2cyAyNDRNQikgYW5kIGltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZSBieSB+NC40eFxcbitjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cXG4rXFxuK1RoZSBOVU1BIG5vZGUgZmlsdGVyIGlzIHVzZWZ1bCBmb3IgTlVNQS1hd2FyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxcbitcXG4rQmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXFxuK3dyaXRlcyBmaWx0ZXIgY29tbWFuZHMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbHRlcmVkIG91dHB1dC4gVGhlIGZpbHRlcmluZyB1c2VzXFxuK3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxcbitcXG4rRWFjaCBmaWxlIGRlc2NyaXB0b3IgbWFpbnRhaW5zIGl0cyBvd24gZmlsdGVyIHN0YXRlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGVcXG4raW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcXG4rdGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcXG4rXFxuK1xcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAgXFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XFxuK1xcbitcXHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgXFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xcbmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5jYWU1YWJmMGFjOWFmYSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX293bmVyLmNcXG4rKysgYi9tbS9wYWdlX293bmVyLmNcXG5AQCAtNTQsNiArNTQsMjUgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XFxuIFxcdHU4IGZsYWdzO1xcbiB9O1xcbiBcXG4rZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUge1xcbitcXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxcbitcXHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcXG4rXFx0UEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7XFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVxcdD0gXFxcInN0YWNrXFxcIixcXG4rXFx0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVxcdD0gXFxcImhhbmRsZVxcXCIsXFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cXHQ9IFxcXCJzdGFja19oYW5kbGVcXFwiLFxcbit9O1xcbitcXG4rc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlIHtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcXG4rXFx0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xcbitcXHRib29sIG5pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbit9O1xcbitcXG4gc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7XFxuIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHBhZ2Vfb3duZXJfaW5pdGVkKTtcXG4gXFxuQEAgLTU0NywxNiArNTY2LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxcbiBzdGF0aWMgc3NpemVfdFxcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcixcXG4tXFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKVxcbitcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuK1xcdFxcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xcbiBcXHRjaGFyICprYnVmO1xcbitcXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0Y291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBQQUdFX1NJWkUpO1xcbiBcXHRrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICgha2J1ZilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3RhdGUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0cHJpbnRfbW9kZSA9IHN0YXRlLVxcdTAwM2VwcmludF9tb2RlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0cmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LFxcbiBcXHRcXHRcXHRcXFwiUGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBwYWdlX293bmVyLVxcdTAwM2VnZnBfbWFzayxcXG5AQCAtNTc1LDkgKzYwMSwxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdG1pZ3JhdGV0eXBlX25hbWVzW3BhZ2VibG9ja19tdF0sXFxuIFxcdFxcdFxcdFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4tXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XFxuK1xcdFxcdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IGNvdW50KVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xcbitcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcXFwiaGFuZGxlOiAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGhhbmRsZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbiBcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbkBAIC02NjQsNiArNjk5LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gXFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4rXFx0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtNzQwLDE1ICs3NzcsMzcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0aWYgKCFoYW5kbGUpXFxuIFxcdFxcdFxcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcXG4gXFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCkge1xcbitcXHRcXHRcXHRpbnQgbmlkO1xcbitcXHRcXHRcXHRtZW1kZXNjX2ZsYWdzX3QgcGFnZV9mbGFncyA9IFJFQURfT05DRShwYWdlLVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkXFxuK1xcdFxcdFxcdCAqIFZNX0JVR19PTiB3aGVuIGFjY2Vzc2luZyBwb2lzb25lZCBwYWdlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikge1xcbitcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGV4dF9wdXRfY29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmlkID0gbWVtZGVzY19uaWQocGFnZV9mbGFncyk7XFxuK1xcdFxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyKSkge1xcbitcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGV4dF9wdXRfY29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0XFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xcbiBcXHRcXHQqcHBvcyA9IHBmbiArIDE7XFxuIFxcbiBcXHRcXHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xcbiBcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiBcXHRcXHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdG1wLCBoYW5kbGUsIHN0YXRlKTtcXG4gZXh0X3B1dF9jb250aW51ZTpcXG4gXFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC04NDcsNyArOTA2LDEyMiBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbiBcXHRcXHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XFxuK1xcbitcXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XFxuK1xcdGlmICghc3RhdGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN0YXRlLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xcbitcXHRub2Rlc19jbGVhcihzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcik7XFxuK1xcdHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gc3RhdGU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRrZnJlZShmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuK1xcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRjaGFyICprYnVmO1xcbitcXHRjaGFyICpvcmlnO1xcbitcXHRjaGFyICp0b2tlbjtcXG4rXFx0aW50IHJldDtcXG4rXFx0c2l6ZV90IG1heF9pbnB1dF9sZW47XFxuK1xcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xcbitcXHRub2RlbWFza190IG5ld19uaWRfZmlsdGVyO1xcbitcXHRib29sIG5ld19uaWRfZmlsdGVyX2VuYWJsZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOlxcbitcXHQgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoXFxcIm1vZGU9c3RhY2tfaGFuZGxlXFxcIilcXG4rXFx0ICogICAgICAgIHdpdGggc3VmZmljaWVudCBidWZmZXJcXG4rXFx0ICogLSA2ICogTUFYX05VTU5PREVTOiB3b3JzdCBjYXNlIGZvciBuaWQgbGlzdFxcbitcXHQgKiAgIFdvcnN0IGNhc2UgcGVyIG5vZGU6IFxcXCIsTk5OTk5cXFwiIChjb21tYSArIDUtZGlnaXQgbm9kZSBudW1iZXIpID0gNiBieXRlc1xcbitcXHQgKi9cXG4rXFx0bWF4X2lucHV0X2xlbiA9IDMyICsgNiAqIE1BWF9OVU1OT0RFUztcXG4rXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlIG1heF9pbnB1dF9sZW4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcXG4rXFx0aWYgKElTX0VSUihrYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XFxuK1xcbitcXHRvcmlnID0ga2J1ZjtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRuZXdfcHJpbnRfbW9kZSA9IHN0YXRlLVxcdTAwM2VwcmludF9tb2RlO1xcbitcXHRuZXdfbmlkX2ZpbHRlciA9IHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyO1xcbitcXHRuZXdfbmlkX2ZpbHRlcl9lbmFibGVkID0gc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3RhdGUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXFx1MDAyNmtidWYsIFxcXCIgXFxcXHRcXFxcblxcXCIpKSAhPSBOVUxMKSB7XFxuK1xcdFxcdGlmICgqdG9rZW4gPT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIXN0cm5jbXAodG9rZW4sIFxcXCJtb2RlPVxcXCIsIDUpKSB7XFxuK1xcdFxcdFxcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dG9rZW4gKyA1KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdFxcdG5ld19wcmludF9tb2RlID0gcmV0O1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcXFwibmlkPVxcXCIsIDQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IG5vZGVsaXN0X3BhcnNlKHRva2VuICsgNCwgbmV3X25pZF9maWx0ZXIpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFxuK1xcdFxcdFxcdGlmIChub2Rlc19lbXB0eShuZXdfbmlkX2ZpbHRlcikpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2Ugd2FudCB0byBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IG51bWEgbm9kZXMsIHNvIG1ha2Ugc3VyZVxcbitcXHRcXHRcXHQgKiB0aGF0IHRoZSBzcGVjaWZpZWQgbm9kZXMgaGF2ZSBtZW1vcnkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoIW5vZGVzX3N1YnNldChuZXdfbmlkX2ZpbHRlciwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRuZXdfbmlkX2ZpbHRlcl9lbmFibGVkID0gdHJ1ZTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRzdGF0ZS1cXHUwMDNlcHJpbnRfbW9kZSA9IG5ld19wcmludF9tb2RlO1xcbitcXHRzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlciA9IG5ld19uaWRfZmlsdGVyO1xcbitcXHRzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3RhdGUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldCA9IGNvdW50O1xcbitcXG4rb3V0X2ZyZWU6XFxuK1xcdGtmcmVlKG9yaWcpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxuK1xcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuK1xcdC5vcGVuXFx0XFx0PSBwYWdlX293bmVyX29wZW4sXFxuK1xcdC5yZWxlYXNlXFx0PSBwYWdlX293bmVyX3JlbGVhc2UsXFxuK1xcdC53cml0ZVxcdFxcdD0gcGFnZV9vd25lcl93cml0ZSxcXG4gXFx0LnJlYWRcXHRcXHQ9IHJlYWRfcGFnZV9vd25lcixcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gbHNlZWtfcGFnZV9vd25lcixcXG4gfTtcXG5AQCAtOTgwLDcgKzExNTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicGFnZV9vd25lclxcXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwYWdlX293bmVyXFxcIiwgMDYwMCwgTlVMTCwgTlVMTCwgXFx1MDAyNnBhZ2Vfb3duZXJfZm9wcyk7XFxuIFxcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcXFwicGFnZV9vd25lcl9zdGFja3NcXFwiLCBOVUxMKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19zdGFja3NcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxcbmluZGV4IGY1NzI1YjVjMjNhYTI2Li44NTgxODZhNmVlZmRiZCAxMDA2NDRcXG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXFxuQEAgLTMsNyArMyw3IEBAXFxuICNcXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcXG4gXFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcXG4gXFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXFxuQEAgLTIzLDcgKzIzLDcgQEAgJChMSUJTKTpcXG4gXFx0JChDQykgJChDRkxBR1MpIC1vICRAICRcXHUwMDNjICQoTERGTEFHUylcXG4gXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbiBcXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cXG4gXFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuY1xcbkBAIC0wLDAgKzEsMzEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFVzZXItc3BhY2UgaGVscGVyIHRvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dCBwZXItZmRcXG4rICpcXG4rICogRXhhbXBsZSB1c2U6XFxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZVxcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCwxLDJcXG4rICpcXG4rICogU2VlIERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3R5cGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIE1BWF9DTURfTEVOXFx0NTEyXFxuK1xcbitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKVxcbit7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiVXNhZ2U6ICVzIFtPUFRJT05TXVxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5PcHRpb25zOlxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtbSwgLS1tb2RlIE1PREUgICAgICA6IHByaW50X21vZGUgKHN0YWNrLCBoYW5kbGUsIG9yIHN0YWNrX2hhbmRsZSlcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLW4sIC0tbmlkIE5JRF9MSVNUICAgOiBOVU1BIG5vZGUgSURzIChjb21tYS1zZXBhcmF0ZWQgb3IgcmFuZ2VzKVxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtbywgLS1vdXRwdXQgRklMRSAgICA6IG91dHB1dCBmaWxlIChkZWZhdWx0OiBzdGRvdXQpXFxcXG5cXFwiKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC1oLCAtLWhlbHAgICAgICAgICAgIDogc2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5FeGFtcGxlczpcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgJXMgLW0gc3RhY2tcXFxcblxcXCIsIHByb2cpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgJXMgLW0gaGFuZGxlXFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIHN0YWNrX2hhbmRsZVxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbSBzdGFjayAtbyBvdXRwdXQudHh0XFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1uIDAsMSwyXFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIHN0YWNrIC1uIDBcXFxcblxcXCIsIHByb2cpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSlcXG4re1xcbitcXHRpZiAoc3RyY21wKG1vZGUsIFxcXCJzdGFja1xcXCIpID09IDAgfHxcXG4rXFx0ICAgIHN0cmNtcChtb2RlLCBcXFwiaGFuZGxlXFxcIikgPT0gMCB8fFxcbitcXHQgICAgc3RyY21wKG1vZGUsIFxcXCJzdGFja19oYW5kbGVcXFwiKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEludmFsaWQgbW9kZSAnJXMnXFxcXG5cXFwiLCBtb2RlKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJWYWxpZCBtb2Rlczogc3RhY2ssIGhhbmRsZSwgc3RhY2tfaGFuZGxlXFxcXG5cXFwiKTtcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZhbGlkYXRlX25pZF9saXN0KGNvbnN0IGNoYXIgKm5pZF9saXN0KVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnA7XFxuK1xcdGludCBpID0gMDtcXG4rXFx0aW50IGhhc19kaWdpdCA9IDA7XFxuK1xcdGludCBpbl9yYW5nZSA9IDA7XFxuK1xcdGludCBwcmV2X251bSA9IDA7XFxuK1xcdGludCBjdXJyX251bSA9IDA7XFxuK1xcbitcXHRpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHArKykge1xcbitcXHRcXHRpZiAoKnAgPT0gJywnKSB7XFxuK1xcdFxcdFxcdGlmICghaGFzX2RpZ2l0KSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChpbl9yYW5nZSBcXHUwMDI2XFx1MDAyNiBwcmV2X251bSBcXHUwMDNlIGN1cnJfbnVtKSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiRXJyb3I6IEludmFsaWQgcmFuZ2UgJWQtJWQgKHN0YXJ0IG11c3QgYmUgXFx1MDAzYz0gZW5kKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cHJldl9udW0sIGN1cnJfbnVtKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGkgPSAwO1xcbitcXHRcXHRcXHRoYXNfZGlnaXQgPSAwO1xcbitcXHRcXHRcXHRpbl9yYW5nZSA9IDA7XFxuK1xcdFxcdFxcdHByZXZfbnVtID0gMDtcXG4rXFx0XFx0XFx0Y3Vycl9udW0gPSAwO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCpwID09ICctJykge1xcbitcXHRcXHRcXHRpZiAoIWhhc19kaWdpdCkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCBcXFwiKTtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCIoZGFzaCB3aXRob3V0IHByZWNlZGluZyBudW1iZXIpXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChpbl9yYW5nZSkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBNdWx0aXBsZSBkYXNoZXMgaW4gbmlkX2xpc3RcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cHJldl9udW0gPSBjdXJyX251bTtcXG4rXFx0XFx0XFx0Y3Vycl9udW0gPSAwO1xcbitcXHRcXHRcXHRpID0gMDtcXG4rXFx0XFx0XFx0aGFzX2RpZ2l0ID0gMDtcXG4rXFx0XFx0XFx0aW5fcmFuZ2UgPSAxO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpwKSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIGNoYXJhY3RlciAnJWMnIGluIG5pZF9saXN0XFxcXG5cXFwiLCAqcCk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZSA1KSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IE5JRCB0b28gbG9uZyAobWF4IDY1NTM2KVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRjdXJyX251bSA9IGN1cnJfbnVtICogMTAgKyAoKnAgLSAnMCcpO1xcbitcXHRcXHRpKys7XFxuK1xcdFxcdGhhc19kaWdpdCA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGFzX2RpZ2l0KSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW5fcmFuZ2UgXFx1MDAyNlxcdTAwMjYgcHJldl9udW0gXFx1MDAzZSBjdXJyX251bSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG4rXFx0XFx0XFx0XFxcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFxcdTAwM2M9IGVuZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByZXZfbnVtLCBjdXJyX251bSk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMO1xcbitcXHRjaGFyIGZpbHRlcl9jbWRbTUFYX0NNRF9MRU5dO1xcbitcXHRGSUxFICpvdXRwdXQgPSBOVUxMO1xcbitcXHRpbnQgZmQgPSAtMTtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdGNoYXIgYnVmWzQwOTZdO1xcbitcXHRpbnQgb3B0O1xcbitcXHRzaXplX3QgY21kX2xlbiA9IDA7XFxuK1xcbitcXHRzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7XFxuK1xcbitcXHRzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHtcXG4rXFx0XFx0e1xcXCJtb2RlXFxcIixcXHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJ20nfSxcXG4rXFx0XFx0e1xcXCJuaWRcXFwiLFxcdFxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbid9LFxcbitcXHRcXHR7XFxcIm91dHB1dFxcXCIsXFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICdvJ30sXFxuK1xcdFxcdHtcXFwiaGVscFxcXCIsXFx0bm9fYXJndW1lbnQsXFx0ICAgMCwgJ2gnfSxcXG4rXFx0XFx0ezAsIDAsIDAsIDB9XFxuK1xcdH07XFxuK1xcbitcXHRmaWx0ZXJfY21kWzBdID0gJ1xcXFwwJztcXG4rXFxuK1xcdGlmIChhcmdjIFxcdTAwM2UgMSkge1xcbitcXHRcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIGFyZ2M7IGkrKykge1xcbitcXHRcXHRcXHRpZiAoc3RyY21wKGFyZ3ZbaV0sIFxcXCItaFxcXCIpID09IDAgfHwgc3RyY21wKGFyZ3ZbaV0sIFxcXCItLWhlbHBcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqL1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXFxcIiwgRl9PSykgIT0gMCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKVxcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwZXJyb3IoXFxcIkVycm9yIGFjY2Vzc2luZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXFxcIik7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTWFrZSBzdXJlIHBhZ2Vfb3duZXIgaXMgZW5hYmxlZCBpbiBrZXJuZWxcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwibTpuOm86aFxcXCIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7XFxuK1xcdFxcdGludCBsZW47XFxuK1xcbitcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbitcXHRcXHRjYXNlICdtJzoge1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICptb2RlID0gb3B0YXJnO1xcbitcXG4rXFx0XFx0XFx0aWYgKHZhbGlkYXRlX21vZGUobW9kZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlc21vZGU9JXNcXFwiLCBjbWRfbGVuIFxcdTAwM2UgMCA/IFxcXCIgXFxcIiA6IFxcXCJcXFwiLCBtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgY21kX2xlbiArIGxlbiBcXHUwMDNlPSBNQVhfQ01EX0xFTikge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y21kX2xlbiArPSBsZW47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgJ24nOiB7XFxuK1xcdFxcdFxcdGNvbnN0IGNoYXIgKm5pZF9saXN0ID0gb3B0YXJnO1xcbitcXG4rXFx0XFx0XFx0aWYgKHZhbGlkYXRlX25pZF9saXN0KG5pZF9saXN0KSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHRsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzbmlkPSVzXFxcIiwgY21kX2xlbiBcXHUwMDNlIDAgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIiwgbmlkX2xpc3QpO1xcbitcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCBjbWRfbGVuICsgbGVuIFxcdTAwM2U9IE1BWF9DTURfTEVOKSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IENvbW1hbmQgdG9vIGxvbmdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjbWRfbGVuICs9IGxlbjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2FzZSAnbyc6XFxuK1xcdFxcdFxcdG91dHB1dF9maWxlID0gb3B0YXJnO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnaCc6XFxuK1xcdFxcdFxcdC8qIEFscmVhZHkgaGFuZGxlZCBhYm92ZSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0dXNhZ2UoYXJndlswXSk7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEF0IGxlYXN0IG9uZSBmaWx0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgKi9cXG4rXFx0aWYgKGNtZF9sZW4gPT0gMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBBdCBsZWFzdCBvbmUgZmlsdGVyICgtbSBvciAtbikgbXVzdCBiZSBzcGVjaWZpZWRcXFxcblxcXFxuXFxcIik7XFxuK1xcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0LyogT3BlbiBwYWdlX293bmVyIGZvciByZWFkLXdyaXRlIC0gdGhpcyB3aWxsIGZhaWwgaWYga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCB3cml0ZSAqL1xcbitcXHRmZCA9IG9wZW4oXFxcIi9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcXFwiLCBPX1JEV1IpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFQUNDRVMgfHwgZXJybm8gPT0gRVBFUk0pIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBcXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiVGhpcyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBcXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwZXItZmQgZmlsdGVyaW5nLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUGxlYXNlIGVuc3VyZSB5b3UgaGF2ZSBhIGtlcm5lbCB3aXRoIFxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInBlci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cXFxcblxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIkVycm9yIG9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3V0cHV0X2ZpbGUpIHtcXG4rXFx0XFx0b3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsIFxcXCJ3XFxcIik7XFxuK1xcdFxcdGlmICghb3V0cHV0KSB7XFxuK1xcdFxcdFxcdHBlcnJvcihcXFwib3BlbiBvdXRwdXQgZmlsZVxcXCIpO1xcbitcXHRcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG91dHB1dCA9IHN0ZG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gd3JpdGUoZmQsIGZpbHRlcl9jbWQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUlOVkFMKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJQb3NzaWJsZSBjYXVzZXM6XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC0gS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyLWZkIGZpbHRlcmluZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC0gVW5rbm93biByZWFzb25cXFxcblxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIndyaXRlIGZpbHRlciBjb21tYW5kXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgoc2l6ZV90KXJldCAhPSBzdHJsZW4oZmlsdGVyX2NtZCkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcXFxcblxcXCIsIHJldCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcXG4rXFxuK1xcdC8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovXFxuK1xcdHJldCA9IDA7XFxuK1xcdHdoaWxlICgocmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzaXplX3Qgd3JpdHRlbiA9IGZ3cml0ZShidWYsIDEsIHJldCwgb3V0cHV0KTtcXG4rXFxuK1xcdFxcdGlmICh3cml0dGVuICE9IChzaXplX3QpcmV0KSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFUElQRSkge1xcbitcXHRcXHRcXHRcXHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRwZXJyb3IoXFxcIndyaXRlIG91dHB1dFxcXCIpO1xcbitcXHRcXHRcXHRyZXQgPSAtMTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGVycm9yKFxcXCJyZWFkIHBhZ2Vfb3duZXJcXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmZmx1c2gob3V0cHV0KSkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcXG4rXFx0XFx0XFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJmbHVzaCBvdXRwdXRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0ID0gLTE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRjbG9zZShmZCk7XFxuK1xcdGlmIChvdXRwdXQgIT0gc3Rkb3V0KVxcbitcXHRcXHRmY2xvc2Uob3V0cHV0KTtcXG4rXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyAxIDogMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODowMS4wMjc4OTY4OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTk0OTE5NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX293bmVyX29wZW5cIixcbiAgICBcInBhZ2Vfb3duZXJfcmVsZWFzZVwiLFxuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicmVhZF9wYWdlX293bmVyXCIsXG4gICAgXCJwcmludF9wYWdlX293bmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3cml0ZSBpbnRlcmZhY2UgdG8gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIHRvIGFsbG93IGZpbHRlcmluZyBwYWdlIG93bmVyIG91dHB1dCBieSBwcmludCBtb2RlIGFuZCBOVU1BIG5vZGUuIEl0IGludHJvZHVjZXMgbmV3IHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGVidWdmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYXJlIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNThmMGNiZjI3YzFlNDg3YWQwODU5NzFkNWRiMWU3Y2ZlYzQxYjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMDQ6NDc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggNmIxMmYzYjAwN2VjOTEuLjM4M2U1OWM0Mjc0M2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuQEAgLTY1LDcgKzY1LDE0IEBAIHVuLXRyYWNraW5nIHN0YXRlLlxuIFVzYWdlXG4gPT09PT1cbiBcbi0xKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcjo6XG4rMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcbitcbitUbyBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6XG4rXG4rXHRjZCB0b29scy9tbVxuK1x0bWFrZSBwYWdlX293bmVyX2ZpbHRlclxuK1xuK1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XG4gXG4gXHRjZCB0b29scy9tbVxuIFx0bWFrZSBwYWdlX293bmVyX3NvcnRcbkBAIC03NCw3ICs4MSwxMSBAQCBVc2FnZVxuIFxuIDMpIERvIHRoZSBqb2IgdGhhdCB5b3Ugd2FudCB0byBkZWJ1Zy5cbiBcbi00KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XG4rNCkgKE9wdGlvbmFsKSBGaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6OlxuK1xuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwxLDIgXHUwMDNlIGZpbHRlcmVkX3BhZ2Vfb3duZXIudHh0XG4rXG4rNSkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OlxuIFxuIFx0Y2F0IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJfc3RhY2tzL3Nob3dfc3RhY2tzIFx1MDAzZSBzdGFja3MudHh0XG4gXHRjYXQgc3RhY2tzLnR4dFxuQEAgLTI2MywzICsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcbiBcdGZcdFx0ZnJlZVx0XHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxuIFx0c3RcdFx0c3RhY2t0cmFjZVx0c3RhY2sgdHJhY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdGlvblxuIFx0YXRvclx0XHRhbGxvY2F0b3JcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXG4rXG4rRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxuK3doaWNoIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGluIHVzZXJzcGFjZS5cbitcbitUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xuK2NhcGFiaWxpdHkuIEl0IHN1cHBvcnRzIHR3byB0eXBlcyBvZiBmaWx0ZXJzOlxuK1xuKzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxuK1x0LSBgYHN0YWNrYGA6IFByaW50IGZ1bGwgc3RhY2sgdHJhY2VzIChkZWZhdWx0LCBjb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgdXNhZ2UpXG4rXHQtIGBgaGFuZGxlYGA6IFByaW50IG9ubHkgc3RhY2sgaGFuZGxlIG51bWJlcnMgKG11Y2ggZmFzdGVyLCBzbWFsbGVyIG91dHB1dClcbitcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXG4rXG4rXHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxuK1x0VGhlIG1hcHBpbmcgZnJvbSBoYW5kbGVzIHRvIGFjdHVhbCBzdGFjayB0cmFjZXMgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGVcbitcdHNob3dfc3RhY2tzX2hhbmRsZXMgaW50ZXJmYWNlLlxuK1xuKzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXG4rXHQtIFN1cHBvcnRzIHNpbmdsZSBub2RlOiBgYC1uIDBgYFxuK1x0LSBNdWx0aXBsZSBub2RlczogYGAtbiAwLDEsMmBgXG4rXHQtIFJhbmdlczogYGAtbiAwLTNgYFxuK1x0LSBNaXhlZCBmb3JtYXQ6IGBgLW4gMCwyLTMsNWBgXG4rXG4rVXNhZ2UgZXhhbXBsZXM6OlxuK1xuK1x0IyBGaWx0ZXIgYnkgcHJpbnQgbW9kZVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcbitcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gc3RhY2tfaGFuZGxlXG4rXG4rXHQjIEZpbHRlciBieSBOVU1BIG5vZGVcbitcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMFxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcbitcbitcdCMgQ29tYmluZWQgZmlsdGVyc1xuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFjayAtbiAwLDEsMlxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwyLTNcbitcbitcdCMgU2F2ZSB0byBmaWxlXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XG4rXG4rVGhlIGhhbmRsZSBtb2RlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgYW5kIHBlcmZvcm1hbmNlLWNyaXRpY2FsXG4rc2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxuK3JlZHVjZSBvdXRwdXQgc2l6ZSBieSB+NjYlICg4NE1CIHZzIDI0NE1CKSBhbmQgaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlIGJ5IH40LjR4XG4rY29tcGFyZWQgdG8gZnVsbCBzdGFjayBvdXRwdXQuXG4rXG4rVGhlIE5VTUEgbm9kZSBmaWx0ZXIgaXMgdXNlZnVsIGZvciBOVU1BLWF3YXJlIG1lbW9yeSBhbGxvY2F0aW9uIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuXG4rXG4rQmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXG4rd3JpdGVzIGZpbHRlciBjb21tYW5kcyBiZWZvcmUgcmVhZGluZyB0aGUgZmlsdGVyZWQgb3V0cHV0LiBUaGUgZmlsdGVyaW5nIHVzZXNcbitwZXItZmlsZS1kZXNjcmlwdG9yIHN0YXRlLCBhbGxvd2luZyBlYWNoIG9wZW4oKSB0byBoYXZlIGluZGVwZW5kZW50IGZpbHRlciBzZXR0aW5ncy5cbitcbitFYWNoIGZpbGUgZGVzY3JpcHRvciBtYWludGFpbnMgaXRzIG93biBmaWx0ZXIgc3RhdGUsIHNvIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZVxuK2luZGVwZW5kZW50IGZpbHRlcmluZyBvcGVyYXRpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiBGb3IgZXhhbXBsZSwgaW4gZGlmZmVyZW50XG4rdGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcbitcbitcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwIFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XG4rXG4rXHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAxIFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCA4MTc4ZTBiZTU1N2Y4Ny4uY2FlNWFiZjBhYzlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTU0LDYgKzU0LDI1IEBAIHN0cnVjdCBzdGFja19wcmludF9jdHgge1xuIFx0dTggZmxhZ3M7XG4gfTtcbiBcbitlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSB7XG4rXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxuK1x0UEFHRV9PV05FUl9QUklOVF9IQU5ETEUsXG4rXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3NbXSA9IHtcbitcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVx0PSBcInN0YWNrXCIsXG4rXHRbUEFHRV9PV05FUl9QUklOVF9IQU5ETEVdXHQ9IFwiaGFuZGxlXCIsXG4rXHRbUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEVdXHQ9IFwic3RhY2tfaGFuZGxlXCIsXG4rfTtcbitcbitzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUge1xuK1x0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcbitcdG5vZGVtYXNrX3QgbmlkX2ZpbHRlcjtcbitcdGJvb2wgbmlkX2ZpbHRlcl9lbmFibGVkO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK307XG4rXG4gc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7XG4gREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UocGFnZV9vd25lcl9pbml0ZWQpO1xuIFxuQEAgLTU0NywxNiArNTY2LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXG4tXHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcbitcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxuK1x0XHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdGludCByZXQsIHBhZ2VibG9ja19tdCwgcGFnZV9tdDtcbiBcdGNoYXIgKmtidWY7XG4rXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTtcbiBcdGtidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTtcbiBcdGlmICgha2J1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRwcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuIFx0cmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LFxuIFx0XHRcdFwiUGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXG5cIixcbiBcdFx0XHRwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBwYWdlX293bmVyLVx1MDAzZWdmcF9tYXNrLFxuQEAgLTU3NSw5ICs2MDEsMTggQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdG1pZ3JhdGV0eXBlX25hbWVzW3BhZ2VibG9ja19tdF0sXG4gXHRcdFx0XHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXG4tXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbi1cdFx0Z290byBlcnI7XG4rXHRpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSkge1xuK1x0XHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xuK1x0XHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcImhhbmRsZTogJXVcXG5cIixcbitcdFx0XHRcdCBoYW5kbGUpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4gXHRcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsXG5AQCAtNjY0LDYgKzY5OSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4rXHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzQwLDE1ICs3NzcsMzcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiBcdFx0aWYgKCFoYW5kbGUpXG4gXHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuIFxuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQpIHtcbitcdFx0XHRpbnQgbmlkO1xuK1x0XHRcdG1lbWRlc2NfZmxhZ3NfdCBwYWdlX2ZsYWdzID0gUkVBRF9PTkNFKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQnlwYXNzIFBGX1BPSVNPTkVEX0NIRUNLKCkgaW4gcGFnZV90b19uaWQoKSB0byBhdm9pZFxuK1x0XHRcdCAqIFZNX0JVR19PTiB3aGVuIGFjY2Vzc2luZyBwb2lzb25lZCBwYWdlcy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAocGFnZV9mbGFncy5mID09IFBBR0VfUE9JU09OX1BBVFRFUk4pIHtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuK1x0XHRcdH1cbitcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbitcdFx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKSkge1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRnb3RvIGV4dF9wdXRfY29udGludWU7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuIFx0XHQvKiBSZWNvcmQgdGhlIG5leHQgUEZOIHRvIHJlYWQgaW4gdGhlIGZpbGUgb2Zmc2V0ICovXG4gXHRcdCpwcG9zID0gcGZuICsgMTtcbiBcbiBcdFx0cGFnZV9vd25lcl90bXAgPSAqcGFnZV9vd25lcjtcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiBcdFx0cmV0dXJuIHByaW50X3BhZ2Vfb3duZXIoYnVmLCBjb3VudCwgcGZuLCBwYWdlLFxuLVx0XHRcdFx0XHUwMDI2cGFnZV9vd25lcl90bXAsIGhhbmRsZSk7XG4rXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NDcsNyArOTA2LDEyMiBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuIFx0XHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XG4rXG4rXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XG4rXHRpZiAoIXN0YXRlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnN0YXRlLVx1MDAzZWxvY2spO1xuK1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0s7XG4rXHRub2Rlc19jbGVhcihzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKTtcbitcdHN0YXRlLVx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCA9IGZhbHNlO1xuK1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBzdGF0ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbitcdFx0XHRcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuK1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuK3tcbitcdGNoYXIgKmtidWY7XG4rXHRjaGFyICpvcmlnO1xuK1x0Y2hhciAqdG9rZW47XG4rXHRpbnQgcmV0O1xuK1x0c2l6ZV90IG1heF9pbnB1dF9sZW47XG4rXHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBuZXdfcHJpbnRfbW9kZTtcbitcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XG4rXHRib29sIG5ld19uaWRfZmlsdGVyX2VuYWJsZWQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LypcbitcdCAqIE1heGltdW0gaW5wdXQgbGVuZ3RoIGZvciBmaWx0ZXIgY29tbWFuZHM6XG4rXHQgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoXCJtb2RlPXN0YWNrX2hhbmRsZVwiKVxuK1x0ICogICAgICAgIHdpdGggc3VmZmljaWVudCBidWZmZXJcbitcdCAqIC0gNiAqIE1BWF9OVU1OT0RFUzogd29yc3QgY2FzZSBmb3IgbmlkIGxpc3RcbitcdCAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogXCIsTk5OTk5cIiAoY29tbWEgKyA1LWRpZ2l0IG5vZGUgbnVtYmVyKSA9IDYgYnl0ZXNcbitcdCAqL1xuK1x0bWF4X2lucHV0X2xlbiA9IDMyICsgNiAqIE1BWF9OVU1OT0RFUztcbitcbitcdGlmIChjb3VudCBcdTAwM2UgbWF4X2lucHV0X2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRrYnVmID0gbWVtZHVwX3VzZXJfbnVsKGJ1ZiwgY291bnQpO1xuK1x0aWYgKElTX0VSUihrYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XG4rXG4rXHRvcmlnID0ga2J1ZjtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdG5ld19wcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbitcdG5ld19uaWRfZmlsdGVyID0gc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcjtcbitcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQ7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXHUwMDI2a2J1ZiwgXCIgXFx0XFxuXCIpKSAhPSBOVUxMKSB7XG4rXHRcdGlmICgqdG9rZW4gPT0gJ1xcMCcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghc3RybmNtcCh0b2tlbiwgXCJtb2RlPVwiLCA1KSkge1xuK1x0XHRcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcbitcdFx0XHRcdFx0XHR0b2tlbiArIDUpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRcdG5ld19wcmludF9tb2RlID0gcmV0O1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcIm5pZD1cIiwgNCkpIHtcbitcdFx0XHRyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiArIDQsIG5ld19uaWRfZmlsdGVyKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcbitcdFx0XHRpZiAobm9kZXNfZW1wdHkobmV3X25pZF9maWx0ZXIpKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlXG4rXHRcdFx0ICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRzdGF0ZS1cdTAwM2VwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRyZXQgPSBjb3VudDtcbitcbitvdXRfZnJlZTpcbitcdGtmcmVlKG9yaWcpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQub3Blblx0XHQ9IHBhZ2Vfb3duZXJfb3BlbixcbitcdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbitcdC53cml0ZVx0XHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXG4gXHQucmVhZFx0XHQ9IHJlYWRfcGFnZV9vd25lcixcbiBcdC5sbHNlZWtcdFx0PSBsc2Vla19wYWdlX293bmVyLFxuIH07XG5AQCAtOTgwLDcgKzExNTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJwYWdlX293bmVyXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnBhZ2Vfb3duZXJfZm9wcyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGFnZV9vd25lclwiLCAwNjAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xuIFx0ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKFwicGFnZV9vd25lcl9zdGFja3NcIiwgTlVMTCk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19zdGFja3NcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXG5pbmRleCBmNTcyNWI1YzIzYWEyNi4uODU4MTg2YTZlZWZkYmQgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDcgKzMsNyBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbkBAIC0yMyw3ICsyMyw3IEBAICQoTElCUyk6XG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbkBAIC0wLDAgKzEsMzEwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFVzZXItc3BhY2UgaGVscGVyIHRvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dCBwZXItZmRcbisgKlxuKyAqIEV4YW1wbGUgdXNlOlxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gc3RhY2tfaGFuZGxlXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAsMSwyXG4rICpcbisgKiBTZWUgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2N0eXBlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rXG4rI2RlZmluZSBNQVhfQ01EX0xFTlx0NTEyXG4rXG4rc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbit7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJVc2FnZTogJXMgW09QVElPTlNdXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFxuT3B0aW9uczpcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1tLCAtLW1vZGUgTU9ERSAgICAgIDogcHJpbnRfbW9kZSAoc3RhY2ssIGhhbmRsZSwgb3Igc3RhY2tfaGFuZGxlKVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgLW4sIC0tbmlkIE5JRF9MSVNUICAgOiBOVU1BIG5vZGUgSURzIChjb21tYS1zZXBhcmF0ZWQgb3IgcmFuZ2VzKVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgLWgsIC0taGVscCAgICAgICAgICAgOiBzaG93IHRoaXMgaGVscCBtZXNzYWdlXFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFxuRXhhbXBsZXM6XFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFja1xcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gaGFuZGxlXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFja19oYW5kbGVcXG5cIiwgcHJvZyk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzIC1tIHN0YWNrIC1vIG91dHB1dC50eHRcXG5cIiwgcHJvZyk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzIC1uIDAsMSwyXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFjayAtbiAwXFxuXCIsIHByb2cpO1xuK31cbitcbitzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSlcbit7XG4rXHRpZiAoc3RyY21wKG1vZGUsIFwic3RhY2tcIikgPT0gMCB8fFxuK1x0ICAgIHN0cmNtcChtb2RlLCBcImhhbmRsZVwiKSA9PSAwIHx8XG4rXHQgICAgc3RyY21wKG1vZGUsIFwic3RhY2tfaGFuZGxlXCIpID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IEludmFsaWQgbW9kZSAnJXMnXFxuXCIsIG1vZGUpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiVmFsaWQgbW9kZXM6IHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZVxcblwiKTtcbitcdHJldHVybiAtMTtcbit9XG4rXG4rc3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdClcbit7XG4rXHRjb25zdCBjaGFyICpwO1xuK1x0aW50IGkgPSAwO1xuK1x0aW50IGhhc19kaWdpdCA9IDA7XG4rXHRpbnQgaW5fcmFuZ2UgPSAwO1xuK1x0aW50IHByZXZfbnVtID0gMDtcbitcdGludCBjdXJyX251bSA9IDA7XG4rXG4rXHRpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHArKykge1xuK1x0XHRpZiAoKnAgPT0gJywnKSB7XG4rXHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcblwiKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKGluX3JhbmdlIFx1MDAyNlx1MDAyNiBwcmV2X251bSBcdTAwM2UgY3Vycl9udW0pIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFx0XHRcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwiLFxuK1x0XHRcdFx0XHRwcmV2X251bSwgY3Vycl9udW0pO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdH1cbitcdFx0XHRpID0gMDtcbitcdFx0XHRoYXNfZGlnaXQgPSAwO1xuK1x0XHRcdGluX3JhbmdlID0gMDtcbitcdFx0XHRwcmV2X251bSA9IDA7XG4rXHRcdFx0Y3Vycl9udW0gPSAwO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICgqcCA9PSAnLScpIHtcbitcdFx0XHRpZiAoIWhhc19kaWdpdCkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4rXHRcdFx0XHRcdFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0IFwiKTtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFx0XHRcIihkYXNoIHdpdGhvdXQgcHJlY2VkaW5nIG51bWJlcilcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChpbl9yYW5nZSkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IE11bHRpcGxlIGRhc2hlcyBpbiBuaWRfbGlzdFxcblwiKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXHRcdFx0cHJldl9udW0gPSBjdXJyX251bTtcbitcdFx0XHRjdXJyX251bSA9IDA7XG4rXHRcdFx0aSA9IDA7XG4rXHRcdFx0aGFzX2RpZ2l0ID0gMDtcbitcdFx0XHRpbl9yYW5nZSA9IDE7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpwKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBJbnZhbGlkIGNoYXJhY3RlciAnJWMnIGluIG5pZF9saXN0XFxuXCIsICpwKTtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcbitcdFx0aWYgKGkgXHUwMDNlIDUpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogTklEIHRvbyBsb25nIChtYXggNjU1MzYpXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0XHRjdXJyX251bSA9IGN1cnJfbnVtICogMTAgKyAoKnAgLSAnMCcpO1xuK1x0XHRpKys7XG4rXHRcdGhhc19kaWdpdCA9IDE7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19kaWdpdCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcXG5cIik7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdGlmIChpbl9yYW5nZSBcdTAwMjZcdTAwMjYgcHJldl9udW0gXHUwMDNlIGN1cnJfbnVtKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFwiRXJyb3I6IEludmFsaWQgcmFuZ2UgJWQtJWQgKHN0YXJ0IG11c3QgYmUgXHUwMDNjPSBlbmQpXFxuXCIsXG4rXHRcdFx0cHJldl9udW0sIGN1cnJfbnVtKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4re1xuK1x0Y29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMO1xuK1x0Y2hhciBmaWx0ZXJfY21kW01BWF9DTURfTEVOXTtcbitcdEZJTEUgKm91dHB1dCA9IE5VTEw7XG4rXHRpbnQgZmQgPSAtMTtcbitcdHNzaXplX3QgcmV0O1xuK1x0Y2hhciBidWZbNDA5Nl07XG4rXHRpbnQgb3B0O1xuK1x0c2l6ZV90IGNtZF9sZW4gPSAwO1xuK1xuK1x0c2lnbmFsKFNJR1BJUEUsIFNJR19JR04pO1xuK1xuK1x0c3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7XG4rXHRcdHtcIm1vZGVcIixcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbSd9LFxuK1x0XHR7XCJuaWRcIixcdFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICduJ30sXG4rXHRcdHtcIm91dHB1dFwiLFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICdvJ30sXG4rXHRcdHtcImhlbHBcIixcdG5vX2FyZ3VtZW50LFx0ICAgMCwgJ2gnfSxcbitcdFx0ezAsIDAsIDAsIDB9XG4rXHR9O1xuK1xuK1x0ZmlsdGVyX2NtZFswXSA9ICdcXDAnO1xuK1xuK1x0aWYgKGFyZ2MgXHUwMDNlIDEpIHtcbitcdFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGFyZ2M7IGkrKykge1xuK1x0XHRcdGlmIChzdHJjbXAoYXJndltpXSwgXCItaFwiKSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCBcIi0taGVscFwiKSA9PSAwKSB7XG4rXHRcdFx0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQ2hlY2sgaWYgcGFnZV9vd25lciBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovXG4rXHRpZiAoYWNjZXNzKFwiL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwiLCBGX09LKSAhPSAwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgZG9lcyBub3QgZXhpc3RcXG5cIik7XG4rXHRcdGVsc2VcbitcdFx0XHRwZXJyb3IoXCJFcnJvciBhY2Nlc3NpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwiKTtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiTWFrZSBzdXJlIHBhZ2Vfb3duZXIgaXMgZW5hYmxlZCBpbiBrZXJuZWxcXG5cIik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcIm06bjpvOmhcIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHtcbitcdFx0aW50IGxlbjtcbitcbitcdFx0c3dpdGNoIChvcHQpIHtcbitcdFx0Y2FzZSAnbSc6IHtcbitcdFx0XHRjb25zdCBjaGFyICptb2RlID0gb3B0YXJnO1xuK1xuK1x0XHRcdGlmICh2YWxpZGF0ZV9tb2RlKG1vZGUpIFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbitcdFx0XHRcdCAgICAgICBcIiVzbW9kZT0lc1wiLCBjbWRfbGVuIFx1MDAzZSAwID8gXCIgXCIgOiBcIlwiLCBtb2RlKTtcbitcdFx0XHRpZiAobGVuIFx1MDAzYyAwIHx8IGNtZF9sZW4gKyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IENvbW1hbmQgdG9vIGxvbmdcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHR9XG4rXHRcdFx0Y21kX2xlbiArPSBsZW47XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSAnbic6IHtcbitcdFx0XHRjb25zdCBjaGFyICpuaWRfbGlzdCA9IG9wdGFyZztcbitcbitcdFx0XHRpZiAodmFsaWRhdGVfbmlkX2xpc3QobmlkX2xpc3QpIFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbitcdFx0XHRcdCAgICAgICBcIiVzbmlkPSVzXCIsIGNtZF9sZW4gXHUwMDNlIDAgPyBcIiBcIiA6IFwiXCIsIG5pZF9saXN0KTtcbitcdFx0XHRpZiAobGVuIFx1MDAzYyAwIHx8IGNtZF9sZW4gKyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IENvbW1hbmQgdG9vIGxvbmdcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHR9XG4rXHRcdFx0Y21kX2xlbiArPSBsZW47XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSAnbyc6XG4rXHRcdFx0b3V0cHV0X2ZpbGUgPSBvcHRhcmc7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2gnOlxuK1x0XHRcdC8qIEFscmVhZHkgaGFuZGxlZCBhYm92ZSAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuK1x0XHRcdHJldHVybiAxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBBdCBsZWFzdCBvbmUgZmlsdGVyIG11c3QgYmUgc3BlY2lmaWVkICovXG4rXHRpZiAoY21kX2xlbiA9PSAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBBdCBsZWFzdCBvbmUgZmlsdGVyICgtbSBvciAtbikgbXVzdCBiZSBzcGVjaWZpZWRcXG5cXG5cIik7XG4rXHRcdHVzYWdlKGFyZ3ZbMF0pO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdC8qIE9wZW4gcGFnZV9vd25lciBmb3IgcmVhZC13cml0ZSAtIHRoaXMgd2lsbCBmYWlsIGlmIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgd3JpdGUgKi9cbitcdGZkID0gb3BlbihcIi9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIiwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVQRVJNKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcImRvZXMgbm90IHN1cHBvcnQgd3JpdGUgYWNjZXNzXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlRoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcInBlci1mZCBmaWx0ZXJpbmcuXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlBsZWFzZSBlbnN1cmUgeW91IGhhdmUgYSBrZXJuZWwgd2l0aCBcIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicGVyLWZkIGZpbHRlcmluZyBzdXBwb3J0LlxcblwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwZXJyb3IoXCJFcnJvciBvcGVuaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRpZiAob3V0cHV0X2ZpbGUpIHtcbitcdFx0b3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsIFwid1wiKTtcbitcdFx0aWYgKCFvdXRwdXQpIHtcbitcdFx0XHRwZXJyb3IoXCJvcGVuIG91dHB1dCBmaWxlXCIpO1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0b3V0cHV0ID0gc3Rkb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gd3JpdGUoZmQsIGZpbHRlcl9jbWQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFSU5WQUwpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogS2VybmVsIHJlamVjdGVkIHRoZSBmaWx0ZXIgY29tbWFuZC5cXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiUG9zc2libGUgY2F1c2VzOlxcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCIgIC0gS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyLWZkIGZpbHRlcmluZ1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCIgIC0gTlVNQSBub2RlIGhhcyBubyBtZW1vcnlcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiICAtIFVua25vd24gcmVhc29uXFxuXCIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBlcnJvcihcIndyaXRlIGZpbHRlciBjb21tYW5kXCIpO1xuK1x0XHR9XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKChzaXplX3QpcmV0ICE9IHN0cmxlbihmaWx0ZXJfY21kKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcXG5cIiwgcmV0LCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xuK1xuK1x0LyogUmVhZCBhbmQgZGlzcGxheSBmaWx0ZXJlZCBvdXRwdXQgKi9cbitcdHJldCA9IDA7XG4rXHR3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcdTAwM2UgMCkge1xuK1x0XHRzaXplX3Qgd3JpdHRlbiA9IGZ3cml0ZShidWYsIDEsIHJldCwgb3V0cHV0KTtcbitcbitcdFx0aWYgKHdyaXR0ZW4gIT0gKHNpemVfdClyZXQpIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbitcdFx0XHRcdC8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovXG4rXHRcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0fVxuK1x0XHRcdHBlcnJvcihcIndyaXRlIG91dHB1dFwiKTtcbitcdFx0XHRyZXQgPSAtMTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwZXJyb3IoXCJyZWFkIHBhZ2Vfb3duZXJcIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKGZmbHVzaChvdXRwdXQpKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFUElQRSkge1xuK1x0XHRcdC8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovXG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwZXJyb3IoXCJmbHVzaCBvdXRwdXRcIik7XG4rXHRcdFx0cmV0ID0gLTE7XG4rXHRcdH1cbitcdH1cbitcbitvdXQ6XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAob3V0cHV0ICE9IHN0ZG91dClcbitcdFx0ZmNsb3NlKG91dHB1dCk7XG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gMSA6IDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MDEuMDI3ODk4NjY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyMTcyNDU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQYWdlIE93bmVyIEZpbHRlcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyBiZWVuIHN1Ym1pdHRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgaW50ZXJlc3RpbmcgYWRkaXRpb24gdG8gdGhlIGBwYWdlX293bmVyYCBkZWJ1Z2dpbmcgZmVhdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgYWRkcyBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHByaW50IG1vZGVzIChzdGFjaywgaGFuZGxlLCBzdGFja19oYW5kbGUpIGFuZCBOVU1BIG5vZGUgSURzLiBUaGUgY29yZSBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGNlbnRlcnMgYXJvdW5kIGEgbmV3IGB3cml0ZWAgb3BlcmF0aW9uIG9uIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhpcyB3cml0ZSBvcGVyYXRpb24gaXMgd2hhdCBzZXRzIHVwIGEgZmlsdGVyIHN0YXRlLCBzdG9yZWQgaW4gYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCwgd2hpY2ggYHJlYWRfcGFnZV9vd25lcmAgdGhlbiByZXNwZWN0cy5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFRoZSBgcGFnZV9vd25lcmAgZmVhdHVyZSBpdHNlbGYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19QQUdFX09XTkVSYCwgc28gdGhhdCdzIHRoZSBmaXJzdCBjb25maWcgSSB3YW50IHRvIGNoZWNrLiBHb29kLCBpdCdzIGEga2VybmVsIGNvbmZpZy4gTm93LCBsZXTigJlzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVlbiBhZGRlZCBhbmQgbW9kaWZpZWQgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIEkgc2VlIG5ldyBmdW5jdGlvbnM6IGBwYWdlX293bmVyX3dyaXRlYCwgYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYHJlYWRfcGFnZV9vd25lcmAgYW5kIGBwcmludF9wYWdlX293bmVyYC5cblxuVGhpcyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGEgZGVidWdmcyBmaWxlLiBBbmQgaXQncyBwYXJzaW5nIHVzZXIgaW5wdXQuIEkgc2VlIGBzdHJzZXBgLCBgc3lzZnNfbWF0Y2hfc3RyaW5nYCwgYG5vZGVsaXN0X3BhcnNlYCwgYWxsIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIGNvdWxkIHVuY292ZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvci4gTWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGBtZW1kdXBfdXNlcl9udWxgLCBhbmQgdGhlcmUncyBhIHNwaW5sb2NrIHdpdGggYHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKWAuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBhc3N1bWluZyBkZWJ1Z2ZzIGlzIG1vdW50ZWQsIGFuZCBnaXZlbiBTeXprYWxsZXIgcnVucyBhcyByb290IG9yIGNhbiBhY2Nlc3MgZGVidWdmcywgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGNvZGUuIFRoZSBrZXkgaXMgcm9vdC4gV2FpdC4uLiBJIGFsc28gc2VlIHRoZSBmaWxlIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBjaGFuZ2VkLiBUaGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggMDYwMCBwZXJtaXNzaW9ucywgc28gcm9vdCBjYW4gd3JpdGUuIFBlcmZlY3QuXG5cblNvLCB0aGUgZm9jdXMgcG9pbnRzIGFyZTogYHBhZ2Vfb3duZXJfd3JpdGVgLCBgcGFnZV9vd25lcl9vcGVuYCwgYHBhZ2Vfb3duZXJfcmVsZWFzZWAsIGByZWFkX3BhZ2Vfb3duZXJgLCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgLiBHb29kLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgYFBBR0VfT1dORVJgLiBBbmQsIGBERUJVR19GU2AgaXMgbmVlZGVkLCBidXQgdGhhdCBpcyB1c3VhbGx5IGVuYWJsZWQuIExldCdzIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYFBBR0VfT1dORVJgIHRvIGRvdWJsZSBjaGVjay4gTG9va3MgbGlrZSB3ZSdyZSBnb29kIHRvIGdvLiBUaW1lIHRvIHNwaW4gdXAgdGhlIGZ1enplcnMgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjA4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MTAuODQ5NjI0OTg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjU5ODAyODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTA0LVxcbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXFx0Ym9vbCBcXFwiVHJhY2sgcGFnZSBvd25lclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MTMuODc1NjEyOTU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NDE4MzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYFBBR0VfT1dORVJgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUEFHRV9PV05FUmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gVGltZSB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIExldCdzIGp1bXAgaW50byB0aGUgY29kZSBhbmQgaW52ZXN0aWdhdGUgdGhlIGBwYWdlX293bmVyX3dyaXRlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMhKSBhcmUgcHJvYmFibHkgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGUgYmVoYXZpb3Igd2l0aGluIHRoYXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODoxNi42MTk3OTg5MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NzYxNDkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX293bmVyX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz05MjU9c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtOTMwLVxcbm1tL3BhZ2Vfb3duZXIuYzo5MzE6c3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5tbS9wYWdlX293bmVyLmMtOTMyLVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTEwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xcbi0tXFxubW0vcGFnZV9vd25lci5jLTEwMjMtXFx0LnJlbGVhc2VcXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcXG5tbS9wYWdlX293bmVyLmM6MTAyNDpcXHQud3JpdGVcXHRcXHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXFxubW0vcGFnZV9vd25lci5jLTEwMjUtXFx0LnJlYWRcXHRcXHQ9IHJlYWRfcGFnZV9vd25lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MTguNTg3NDE4NzkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NzMxMTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHJlYWRfcGFnZV9vd25lcmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgd2Ugc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmVhZF9wYWdlX293bmVyYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgcHJvYmFibHkgbWVhbnMgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBpdHMgbGlrZWx5IGNvZGUgcGF0aC4gSSB3YW50IHRvIHF1aWNrbHkgZW5zdXJlIHRoYXQ6XG5cbiogICBJdCdzIGhhbmRsaW5nIGFsbCBleHBlY3RlZCBlZGdlIGNhc2VzIHByb3Blcmx5LlxuKiAgIFRoZSBkYXRhIHZhbGlkYXRpb24gaXMgcm9idXN0IGVub3VnaCwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGluZ3MgbGlrZSBvd25lcnNoaXAsIHNlY3VyaXR5IGNvbnRleHQgYW5kIGFueSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBhY2Nlc3MgdGhlIHRhcmdldCBpbmZvcm1hdGlvbi5cbiogICBUaGF0IHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IG9wZW5pbmcgYW55IHNlY3VyaXR5IGhvbGVzLCBsaWtlIGV4cG9zaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBvciBjcmVhdGluZyBvcHBvcnR1bml0aWVzIGZvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi5cbiogICBJdCdzIHRocmVhZC1zYWZlIG9yIHByb3Blcmx5IHByb3RlY3RlZCBieSB3aGF0ZXZlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB3ZSdyZSB1c2luZywgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gZGVzaWduLCBvZiBjb3Vyc2UuXG4qICAgVGhhdCBwZXJmb3JtYW5jZSBpcyBhY2NlcHRhYmxlLiBJJ20gbm90IGV4cGVjdGluZyBhbnl0aGluZyBncm91bmRicmVha2luZyBoZXJlLCBidXQgSSBkb24ndCB3YW50IGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLlxuXG5UaGlzIGlzIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYXZvaWQgYSBwb3RlbnRpYWxseSBuYXN0eSBvdmVyc2lnaHQgbGF0ZXIuIEEgZ29vZCBmdW5jdGlvbiBuYW1lIGlzIG9ubHkgZ29vZCBhcyB0aGUgY29kZSB0aGF0IGV4ZWN1dGVzIGl0LiBJJ2xsIGdldCB0aGF0IGZyZXNoIGluIG15IG1pbmQgYW5kLCBqdXN0IGRvdWJsZSBjaGVjayBpdCwgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MjIuNDc0NzQwOTI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE5NDY0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9wYWdlX293bmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz02OTQ9c3RhdGljIHNzaXplX3RcXG5tbS9wYWdlX293bmVyLmM6Njk1OnJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxubW0vcGFnZV9vd25lci5jLTY5Ni17XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MTAyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMTAyNC1cXHQud3JpdGVcXHRcXHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXFxubW0vcGFnZV9vd25lci5jOjEwMjU6XFx0LnJlYWRcXHRcXHQ9IHJlYWRfcGFnZV9vd25lcixcXG5tbS9wYWdlX293bmVyLmMtMTAyNi1cXHQubGxzZWVrXFx0XFx0PSBsc2Vla19wYWdlX293bmVyLFxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weT0zMD1jbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTItICAgICAgICBpZiBsZW4oYXJndikgPT0gMDpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjUzOiAgICAgICAgICAgICAgc2VsZi5yZWFkX3BhZ2Vfb3duZXIoKVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTQtICAgICAgICBlbGlmIGxlbihhcmd2KSA9PSAyOlxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS01Ni0gICAgICAgICAgICAgICAgcGZuID0gaW50KGFyZ3ZbMV0pXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo1NzogICAgICAgICAgICAgICAgc2VsZi5yZWFkX3BhZ2Vfb3duZXJfYnlfYWRkcihzZWxmLnBfb3BzLnBmbl90b19wYWdlKHBmbikpXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS01OC0gICAgICAgICAgICBlbHNlOlxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS05Ny1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5Ojk4OiAgICBkZWYgcmVhZF9wYWdlX293bmVyX2J5X2FkZHIoc2VsZiwgc3RydWN0X3BhZ2VfYWRkcik6XFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS05OS0gICAgICAgIHBhZ2UgPSBnZGIuVmFsdWUoc3RydWN0X3BhZ2VfYWRkcikuY2FzdCh1dGlscy5nZXRfcGFnZV90eXBlKCkucG9pbnRlcigpKVxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNDMtXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weToxNDQ6ICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNDUtICAgICAgICBwZm4gPSBzZWxmLm1pbl9wZm5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MjQuNTc2NjkyMzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxMDIwNjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgT3duZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHJlZmluaW5nIHRoZSBgcGFnZV9vd25lcmAgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgbGlrZSB3ZSdyZSBsZXZlcmFnaW5nIHRoZSBmaWx0ZXIgc3RhdGUgd2l0aGluIHRoZSBgcmVhZF9wYWdlX293bmVyYCBmdW5jdGlvbiwgYW5kIHRoYXQncyBnb29kOyBhbnkgb3B0aW1pemF0aW9uIHRoYXQgc3RyZWFtbGluZXMgdGhpcyBpcyB3ZWxjb21lLiBJdCdzIGFsc28gdG91Y2hpbmcgYHByaW50X3BhZ2Vfb3duZXJgLCB3aGljaCBJIGFzc3VtZSBpbmRpY2F0ZXMgYSBjaGFuZ2UgaW4gaG93IHdlJ3JlIHByZXNlbnRpbmcgdGhpcyBpbmZvcm1hdGlvbiDigJMgcG90ZW50aWFsbHkgaW1wcm92ZWQgY2xhcml0eSBvciBhZGRlZCBjb250ZXh0LlxuXG5UaGUgbWVhdCBvZiB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIHRoZXNlIG5ldyBmdW5jdGlvbnM6IGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYW5kIGBwYWdlX293bmVyX3dyaXRlYC4gVGhhdCdzIHdoZXJlIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uLiBUaGVzZSBzb3VuZCBsaWtlIHRoZXkncmUgbWFuYWdpbmcgYWNjZXNzIHRvIG9yIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2Ugb3duZXIgZGF0YSwgcGVyaGFwcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgc3RhdGUuXG5cblNvLCBsZXQncyBrZWVwIGFuIGV5ZSBvbiB0aGVzZSBmaXZlIGZ1bmN0aW9uIGNhbGxzOlxuKiAgIGBwYWdlX293bmVyX29wZW5gXG4qICAgYHBhZ2Vfb3duZXJfcmVsZWFzZWBcbiogICBgcGFnZV9vd25lcl93cml0ZWBcbiogICBgcmVhZF9wYWdlX293bmVyYFxuKiAgIGBwcmludF9wYWdlX293bmVyYFxuXG5CdXQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IHRoZSBgUEFHRV9PV05FUmAgY29uZmlnIGl0c2VsZiBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgIGFuZCBgU1RBQ0tUUkFDRV9TVVBQT1JUYC4gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBgbW0vS2NvbmZpZy5kZWJ1Z2AgdG8gdmVyaWZ5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgY29tZSBpbnRvIHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29uZmlncyB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODozMS41ODY5MDA2NjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0ICBUaGlzIGlzIGRlc2lnbmVkIGFzIGEgZGVidWdnaW5nIGZlYXR1cmUsIG5vdCBhIHNlY3VyaXR5IGZlYXR1cmUuXFxuIDEwMTpcXHRcXHQgIE9iamVjdHMgYXJlIHNvbWV0aW1lcyByZWN5Y2xlZCB3aXRob3V0IFJDVSBkZWxheSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTA0OlxcdFxcbiAxMDU6XFx0Y29uZmlnIFBBR0VfT1dORVJcXG4gMTA2OlxcdFxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMTA4OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAxMDk6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0VcXG4gMTEwOlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UXFxuIDExMTpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMTEyOlxcdFxcdGhlbHBcXG4gMTEzOlxcdFxcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XFxuIDExNDpcXHRcXHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xcbiAxMTU6XFx0XFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xcbiAxMTY6XFx0XFx0ICBcXFwicGFnZV9vd25lcj1vblxcXCIgdG8gYm9vdCBwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LiBFYXRzXFxuIDExNzpcXHRcXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbiAxMTg6XFx0XFx0ICBmb3IgdXNlci1zcGFjZSBoZWxwZXIuXFxuIDExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MzEuNTg2OTk3ODQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzYxODA2MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgUGFnZSBPd25lciBGZWF0dXJlIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgdGVzdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9ucyBhcm91bmQgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBpbnRlcmZhY2UuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBQQUdFX09XTkVSYCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgZW5hYmxpbmcgaXQgbmVlZHMgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlci5cIiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyBzeXprYWxsZXIgaGFuZGxlIHRoYXQgYm9vdCBwYXJhbWV0ZXI/IFVzdWFsbHksIHN5emthbGxlciBwYXJhbWV0ZXJzIGFyZSBmaXhlZCwgYnV0IGlmIGBQQUdFX09XTkVSYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnIEFORCBgcGFnZV9vd25lcj1vbmAgaXMgcGFzc2VkLCB0aGVuIHN5emthbGxlciBjb3VsZCB0ZXN0IGl0LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIGZvciBrZXJuZWwgKmNvbmZpZyogZmxhZ3MuIFNvLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgSSBkZWZpbml0ZWx5IG5lZWQgdG8gbGlzdCBgUEFHRV9PV05FUmAuIFRoZW4sIEkgc3RhcnRlZCB0byB0aGluaywgXCJJZiB0aGUgZmVhdHVyZSBuZWVkcyBhIGJvb3QgcGFyYW1ldGVyIHRvIGJlIHRydWx5IGFjdGl2ZSwgd29uJ3Qgc3l6a2FsbGVyIHN0cnVnZ2xlIHRvIHRlc3QgaXQgaWYgd2UgZG9uJ3QgYWxzbyBhZGQgdGhlIHBhcmFtZXRlcj9cIlxuXG5JIHRoZW4gd2VudCBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNsYXJpZnkgdGhpcy4gSSBzZWUgYHBhZ2Vfb3duZXJfZW5hYmxlZGAgaXMgY2hlY2tlZCBpbiBgcmVhZF9wYWdlX293bmVyYC4gSWYgYHBhZ2Vfb3duZXI9b25gIGlzbid0IHBhc3NlZCwgdGhlbiBgcGFnZV9vd25lcl9pbml0ZWRgIHdpbGwgYmUgZmFsc2UsIGFuZCBgcmVhZF9wYWdlX293bmVyYCB3aWxsIHJldHVybiBhbiBlcnJvci4gSSB0aG91Z2h0LCB3aGF0IGFib3V0IGBwYWdlX293bmVyX3dyaXRlYD8gSW50ZXJlc3RpbmdseSwgaXQgKmRvZXNuJ3QqIGNoZWNrIGBwYWdlX293bmVyX2luaXRlZGAuIFNvLCB0aGUgYHBhZ2Vfb3duZXJfd3JpdGVgIGZ1bmN0aW9uICpjb3VsZCogYmUgZXhlY3V0ZWQgZXZlbiBpZiB0aGUgYm9vdCBwYXJhbWV0ZXIgd2Fzbid0IHBhc3NlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNhbWUgZ29lcyBmb3IgYHBhZ2Vfb3duZXJfb3BlbmAuXG5cbkJ1dCB0aGVuIEkgc2VlIHRoZSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgZmlsZSBpcyAqb25seSogY3JlYXRlZCBpZiBgcGFnZV9vd25lcl9pbml0ZWRgIGlzIHRydWUuIFNvLCB0aGUgZmlsZSBpc24ndCBldmVuIHRoZXJlIHVubGVzcyBgcGFnZV9vd25lcj1vbmAgaXMgcGFzc2VkLiBUaGlzIG1lYW5zIG5vIGRpcmVjdCBpbnRlcmFjdGlvbi4gVGhlbiBJIGNvbnNpZGVyZWQgdGhlIGluZnJhc3RydWN0dXJlIGluIHN5emthbGxlciwgbWF5YmUgaXQgaGFuZGxlcyBib290IHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgaXQgYWxyZWFkeSBoYXMgYHBhZ2Vfb3duZXI9b25gIG9uIHNvbWUgaW5zdGFuY2VzLlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgbWFpbiB0aGluZyB0byBwcm92aWRlIGlzIGBQQUdFX09XTkVSYCBpbiBgRW5hYmxlQ29uZmlnc2AuXG5cbkkgdGhlbiBtYWRlIGEgbWVudGFsIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9uczogYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBgcGFnZV9vd25lcl93cml0ZWAsIGByZWFkX3BhZ2Vfb3duZXJgLCBgcHJpbnRfcGFnZV9vd25lcmAuIEkgZWxpbWluYXRlZCB0aGUgdXNlcnNwYWNlIHRvb2wuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBmaWx0ZXIgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBhZGRzIHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFuZCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MuXG5cblRoZXJlZm9yZTpcblxuKiAgIENvbmZpZ3M6IGBQQUdFX09XTkVSYFxuKiAgIEZvY3VzU3ltYm9sczogYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBgcGFnZV9vd25lcl93cml0ZWAsIGByZWFkX3BhZ2Vfb3duZXJgLCBgcHJpbnRfcGFnZV9vd25lcmBcblxuSSBxdWlja2x5IHZlcmlmaWVkIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgSSBsaXN0ZWQgYXJlIHN0YXRpYy5cblxuTm93IEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYxMSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODo0My45NDg4MDYwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDA3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInBhZ2Vfb3duZXJfd3JpdGVcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiLFxuICAgIFwicHJpbnRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2Vfb3duZXJfb3BlblwiLFxuICAgIFwicGFnZV9vd25lcl9yZWxlYXNlXCIsXG4gICAgXCJwYWdlX293bmVyX3dyaXRlXCIsXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgdG8gYWxsb3cgZmlsdGVyaW5nIHBhZ2Ugb3duZXIgb3V0cHV0IGJ5IHByaW50IG1vZGUgYW5kIE5VTUEgbm9kZS4gSXQgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBsb2dpYywgc3RhdGUgbWFuYWdlbWVudCBwZXIgZmlsZSBkZXNjcmlwdG9yLCBhbmQgbW9kaWZpZXMgdGhlIHJlYWQgcGF0aCB0byByZXNwZWN0IHRoZSBmaWx0ZXIuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudCBhcmUgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 04:39:23 +0000 UTC FinishedAt: 2026-06-25 04:48:44 +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": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "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": "dcfbdd5886ab8ecd3887d6a81216e82b8614ba78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "d333f38a-0915-4ae6-8e51-e62a4c651ec1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_owner_open", "page_owner_release", "page_owner_write", "read_page_owner", "print_page_owner" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX293bmVyX29wZW4mIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0OywKICAgICYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O3ByaW50X3BhZ2Vfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3cml0ZSBpbnRlcmZhY2UgdG8gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIHRvIGFsbG93IGZpbHRlcmluZyBwYWdlIG93bmVyIG91dHB1dCBieSBwcmludCBtb2RlIGFuZCBOVU1BIG5vZGUuIEl0IGludHJvZHVjZXMgbmV3IHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGVidWdmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYXJlIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI1OGYwY2JmMjdjMWU0ODdhZDA4NTk3MWQ1ZGIxZTdjZmVjNDFiOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNDo0Nzo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggNmIxMmYzYjAwN2VjOTEuLjM4M2U1OWM0Mjc0M2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuQEAgLTY1LDcgJiM0Mzs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS5cbiBVc2FnZVxuID09PT09XG4gXG4tMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXI6OlxuJiM0MzsxKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcnM6OlxuJiM0MztcbiYjNDM7VG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0OlxuJiM0MztcbiYjNDM7XHRjZCB0b29scy9tbVxuJiM0MztcdG1ha2UgcGFnZV9vd25lcl9maWx0ZXJcbiYjNDM7XG4mIzQzO1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XG4gXG4gXHRjZCB0b29scy9tbVxuIFx0bWFrZSBwYWdlX293bmVyX3NvcnRcbkBAIC03NCw3ICYjNDM7ODEsMTEgQEAgVXNhZ2VcbiBcbiAzKSBEbyB0aGUgam9iIHRoYXQgeW91IHdhbnQgdG8gZGVidWcuXG4gXG4tNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OlxuJiM0Mzs0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XG4mIzQzO1xuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMSwyIFx1MDAzZSBmaWx0ZXJlZF9wYWdlX293bmVyLnR4dFxuJiM0MztcbiYjNDM7NSkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OlxuIFxuIFx0Y2F0IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJfc3RhY2tzL3Nob3dfc3RhY2tzIFx1MDAzZSBzdGFja3MudHh0XG4gXHRjYXQgc3RhY2tzLnR4dFxuQEAgLTI2MywzICYjNDM7Mjc0LDY1IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gXHRmXHRcdGZyZWVcdFx0d2hldGhlciB0aGUgcGFnZSBoYXMgYmVlbiByZWxlYXNlZCBvciBub3RcbiBcdHN0XHRcdHN0YWNrdHJhY2VcdHN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb25cbiBcdGF0b3JcdFx0YWxsb2NhdG9yXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xuJiM0MztcbiYjNDM7RmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxuJiM0Mzt3aGljaCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiB1c2Vyc3BhY2UuXG4mIzQzO1xuJiM0MztUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xuJiM0MztjYXBhYmlsaXR5LiBJdCBzdXBwb3J0cyB0d28gdHlwZXMgb2YgZmlsdGVyczpcbiYjNDM7XG4mIzQzOzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxuJiM0MztcdC0gYGBzdGFja2BgOiBQcmludCBmdWxsIHN0YWNrIHRyYWNlcyAoZGVmYXVsdCwgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIHVzYWdlKVxuJiM0MztcdC0gYGBoYW5kbGVgYDogUHJpbnQgb25seSBzdGFjayBoYW5kbGUgbnVtYmVycyAobXVjaCBmYXN0ZXIsIHNtYWxsZXIgb3V0cHV0KVxuJiM0MztcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXG4mIzQzO1xuJiM0MztcdFRoZSBgYGhhbmRsZWBgIG1vZGUgdXNlcyBudW1lcmljIGlkZW50aWZpZXJzIGluc3RlYWQgb2YgZnVsbCBzdGFjayB0cmFjZXMuXG4mIzQzO1x0VGhlIG1hcHBpbmcgZnJvbSBoYW5kbGVzIHRvIGFjdHVhbCBzdGFjayB0cmFjZXMgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGVcbiYjNDM7XHRzaG93X3N0YWNrc19oYW5kbGVzIGludGVyZmFjZS5cbiYjNDM7XG4mIzQzOzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXG4mIzQzO1x0LSBTdXBwb3J0cyBzaW5nbGUgbm9kZTogYGAtbiAwYGBcbiYjNDM7XHQtIE11bHRpcGxlIG5vZGVzOiBgYC1uIDAsMSwyYGBcbiYjNDM7XHQtIFJhbmdlczogYGAtbiAwLTNgYFxuJiM0MztcdC0gTWl4ZWQgZm9ybWF0OiBgYC1uIDAsMi0zLDVgYFxuJiM0MztcbiYjNDM7VXNhZ2UgZXhhbXBsZXM6OlxuJiM0MztcbiYjNDM7XHQjIEZpbHRlciBieSBwcmludCBtb2RlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZVxuJiM0MztcbiYjNDM7XHQjIEZpbHRlciBieSBOVU1BIG5vZGVcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDBcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAtM1xuJiM0MztcbiYjNDM7XHQjIENvbWJpbmVkIGZpbHRlcnNcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwyLTNcbiYjNDM7XG4mIzQzO1x0IyBTYXZlIHRvIGZpbGVcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XG4mIzQzO1xuJiM0MztUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcbiYjNDM7c2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxuJiM0MztyZWR1Y2Ugb3V0cHV0IHNpemUgYnkgfjY2JSAoODRNQiB2cyAyNDRNQikgYW5kIGltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZSBieSB+NC40eFxuJiM0Mztjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cbiYjNDM7XG4mIzQzO1RoZSBOVU1BIG5vZGUgZmlsdGVyIGlzIHVzZWZ1bCBmb3IgTlVNQS1hd2FyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxuJiM0MztcbiYjNDM7QmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXG4mIzQzO3dyaXRlcyBmaWx0ZXIgY29tbWFuZHMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbHRlcmVkIG91dHB1dC4gVGhlIGZpbHRlcmluZyB1c2VzXG4mIzQzO3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxuJiM0MztcbiYjNDM7RWFjaCBmaWxlIGRlc2NyaXB0b3IgbWFpbnRhaW5zIGl0cyBvd24gZmlsdGVyIHN0YXRlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGVcbiYjNDM7aW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcbiYjNDM7dGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcbiYjNDM7XG4mIzQzO1x0IyBUZXJtaW5hbCAxOiBGaWx0ZXIgbm9kZSAwXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwIFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XG4mIzQzO1xuJiM0MztcdCMgVGVybWluYWwgMjogRmlsdGVyIG5vZGUgMSAocnVucyBjb25jdXJyZW50bHkpXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAxIFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCA4MTc4ZTBiZTU1N2Y4Ny4uY2FlNWFiZjBhYzlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTU0LDYgJiM0Mzs1NCwyNSBAQCBzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4IHtcbiBcdHU4IGZsYWdzO1xuIH07XG4gXG4mIzQzO2VudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHtcbiYjNDM7XHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxuJiM0MztcdFBBR0VfT1dORVJfUFJJTlRfSEFORExFLFxuJiM0MztcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5nc1tdID0ge1xuJiM0MztcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVx0PSBcJiMzNDtzdGFja1wmIzM0OyxcbiYjNDM7XHRbUEFHRV9PV05FUl9QUklOVF9IQU5ETEVdXHQ9IFwmIzM0O2hhbmRsZVwmIzM0OyxcbiYjNDM7XHRbUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEVdXHQ9IFwmIzM0O3N0YWNrX2hhbmRsZVwmIzM0OyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSB7XG4mIzQzO1x0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcbiYjNDM7XHRub2RlbWFza190IG5pZF9maWx0ZXI7XG4mIzQzO1x0Ym9vbCBuaWRfZmlsdGVyX2VuYWJsZWQ7XG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgYm9vbCBwYWdlX293bmVyX2VuYWJsZWQgX19pbml0ZGF0YTtcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XG4gXG5AQCAtNTQ3LDE2ICYjNDM7NTY2LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXG4tXHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcbiYjNDM7XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xuIFx0Y2hhciAqa2J1ZjtcbiYjNDM7XHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4gXHRrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWtidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRwcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRyZXQgPSBzY25wcmludGYoa2J1ZiwgY291bnQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXG5cJiMzNDssXG4gXHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciwgcGFnZV9vd25lci1cdTAwM2VnZnBfbWFzayxcbkBAIC01NzUsOSAmIzQzOzYwMSwxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0bWlncmF0ZXR5cGVfbmFtZXNbcGFnZWJsb2NrX210XSxcbiBcdFx0XHRcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldCAmIzQzOz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgMCk7XG4tXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0spIHtcbiYjNDM7XHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgXCYjMzQ7aGFuZGxlOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaGFuZGxlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG5AQCAtNjY0LDYgJiM0Mzs2OTksOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuJiM0MztcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzQwLDE1ICYjNDM7Nzc3LDM3IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdGlmICghaGFuZGxlKVxuIFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbiBcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQpIHtcbiYjNDM7XHRcdFx0aW50IG5pZDtcbiYjNDM7XHRcdFx0bWVtZGVzY19mbGFnc190IHBhZ2VfZmxhZ3MgPSBSRUFEX09OQ0UocGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkXG4mIzQzO1x0XHRcdCAqIFZNX0JVR19PTiB3aGVuIGFjY2Vzc2luZyBwb2lzb25lZCBwYWdlcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikge1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcikpIHtcbiYjNDM7XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGV4dF9wdXRfY29udGludWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xuIFx0XHQqcHBvcyA9IHBmbiAmIzQzOyAxO1xuIFxuIFx0XHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xuIFx0XHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuIFx0XHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXG4tXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODQ3LDcgJiM0Mzs5MDYsMTIyIEBAIHN0YXRpYyB2b2lkIGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzKHZvaWQpXG4gXHRcdGluaXRfcGFnZXNfaW5fem9uZSh6b25lKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xuJiM0MztcdGlmICghc3RhdGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhdGUtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0s7XG4mIzQzO1x0bm9kZXNfY2xlYXIoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcik7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gZmFsc2U7XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBzdGF0ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhZ2Vfb3duZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4mIzQzO1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqa2J1ZjtcbiYjNDM7XHRjaGFyICpvcmlnO1xuJiM0MztcdGNoYXIgKnRva2VuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c2l6ZV90IG1heF9pbnB1dF9sZW47XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xuJiM0MztcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XG4mIzQzO1x0Ym9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWF4aW11bSBpbnB1dCBsZW5ndGggZm9yIGZpbHRlciBjb21tYW5kczpcbiYjNDM7XHQgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoXCYjMzQ7bW9kZT1zdGFja19oYW5kbGVcJiMzNDspXG4mIzQzO1x0ICogICAgICAgIHdpdGggc3VmZmljaWVudCBidWZmZXJcbiYjNDM7XHQgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0XG4mIzQzO1x0ICogICBXb3JzdCBjYXNlIHBlciBub2RlOiBcJiMzNDssTk5OTk5cJiMzNDsgKGNvbW1hICYjNDM7IDUtZGlnaXQgbm9kZSBudW1iZXIpID0gNiBieXRlc1xuJiM0MztcdCAqL1xuJiM0MztcdG1heF9pbnB1dF9sZW4gPSAzMiAmIzQzOyA2ICogTUFYX05VTU5PREVTO1xuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlIG1heF9pbnB1dF9sZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGtidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XG4mIzQzO1xuJiM0MztcdG9yaWcgPSBrYnVmO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0bmV3X3ByaW50X21vZGUgPSBzdGF0ZS1cdTAwM2VwcmludF9tb2RlO1xuJiM0MztcdG5ld19uaWRfZmlsdGVyID0gc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcjtcbiYjNDM7XHRuZXdfbmlkX2ZpbHRlcl9lbmFibGVkID0gc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKHRva2VuID0gc3Ryc2VwKFx1MDAyNmtidWYsIFwmIzM0OyBcXHRcXG5cJiMzNDspKSAhPSBOVUxMKSB7XG4mIzQzO1x0XHRpZiAoKnRva2VuID09ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3RybmNtcCh0b2tlbiwgXCYjMzQ7bW9kZT1cJiMzNDssIDUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcbiYjNDM7XHRcdFx0XHRcdFx0dG9rZW4gJiM0MzsgNSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdFx0bmV3X3ByaW50X21vZGUgPSByZXQ7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcJiMzNDtuaWQ9XCYjMzQ7LCA0KSkge1xuJiM0MztcdFx0XHRyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiAmIzQzOyA0LCBuZXdfbmlkX2ZpbHRlcik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChub2Rlc19lbXB0eShuZXdfbmlkX2ZpbHRlcikpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIHdhbnQgdG8gZmlsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBieSBudW1hIG5vZGVzLCBzbyBtYWtlIHN1cmVcbiYjNDM7XHRcdFx0ICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKCFub2Rlc19zdWJzZXQobmV3X25pZF9maWx0ZXIsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbW1pdCBhbGwgZmlsdGVyIGNoYW5nZXMgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IG5ld19wcmludF9tb2RlO1xuJiM0MztcdHN0YXRlLVx1MDAzZW5pZF9maWx0ZXIgPSBuZXdfbmlkX2ZpbHRlcjtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBjb3VudDtcbiYjNDM7XG4mIzQzO291dF9mcmVlOlxuJiM0MztcdGtmcmVlKG9yaWcpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9vcGVuLFxuJiM0MztcdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbiYjNDM7XHQud3JpdGVcdFx0PSBwYWdlX293bmVyX3dyaXRlLFxuIFx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4gXHQubGxzZWVrXHRcdD0gbHNlZWtfcGFnZV9vd25lcixcbiB9O1xuQEAgLTk4MCw3ICYjNDM7MTE1NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtwYWdlX293bmVyXCYjMzQ7LCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGFnZV9vd25lclwmIzM0OywgMDYwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcbiBcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDtwYWdlX293bmVyX3N0YWNrc1wmIzM0OywgTlVMTCk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3Nob3dfc3RhY2tzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IGY1NzI1YjVjMjNhYTI2Li44NTgxODZhNmVlZmRiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsNyAmIzQzOzMsNyBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgJChMSUJTKTpcbiBcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXHUwMDNjICQoTERGTEFHUylcbiBcbiBjbGVhbjpcbi1cdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbkBAIC0wLDAgJiM0MzsxLDMxMCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkXG4mIzQzOyAqXG4mIzQzOyAqIEV4YW1wbGUgdXNlOlxuJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXG4mIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcbiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAsMSwyXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3R5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVhfQ01EX0xFTlx0NTEyXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VzYWdlOiAlcyBbT1BUSU9OU11cXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5PcHRpb25zOlxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLW0sIC0tbW9kZSBNT0RFICAgICAgOiBwcmludF9tb2RlIChzdGFjaywgaGFuZGxlLCBvciBzdGFja19oYW5kbGUpXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtbiwgLS1uaWQgTklEX0xJU1QgICA6IE5VTUEgbm9kZSBJRHMgKGNvbW1hLXNlcGFyYXRlZCBvciByYW5nZXMpXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtbywgLS1vdXRwdXQgRklMRSAgICA6IG91dHB1dCBmaWxlIChkZWZhdWx0OiBzdGRvdXQpXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtaCwgLS1oZWxwICAgICAgICAgICA6IHNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5FeGFtcGxlczpcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBoYW5kbGVcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrX2hhbmRsZVxcblwmIzM0OywgcHJvZyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgJXMgLW0gc3RhY2sgLW8gb3V0cHV0LnR4dFxcblwmIzM0OywgcHJvZyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgJXMgLW4gMCwxLDJcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrIC1uIDBcXG5cJiMzNDssIHByb2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdHJjbXAobW9kZSwgXCYjMzQ7c3RhY2tcJiMzNDspID09IDAgfHxcbiYjNDM7XHQgICAgc3RyY21wKG1vZGUsIFwmIzM0O2hhbmRsZVwmIzM0OykgPT0gMCB8fFxuJiM0MztcdCAgICBzdHJjbXAobW9kZSwgXCYjMzQ7c3RhY2tfaGFuZGxlXCYjMzQ7KSA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogSW52YWxpZCBtb2RlICYjMzk7JXMmIzM5O1xcblwmIzM0OywgbW9kZSk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1ZhbGlkIG1vZGVzOiBzdGFjaywgaGFuZGxlLCBzdGFja19oYW5kbGVcXG5cJiMzNDspO1xuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnA7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcdGludCBoYXNfZGlnaXQgPSAwO1xuJiM0MztcdGludCBpbl9yYW5nZSA9IDA7XG4mIzQzO1x0aW50IHByZXZfbnVtID0gMDtcbiYjNDM7XHRpbnQgY3Vycl9udW0gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoKnAgPT0gJiMzOTssJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGluX3JhbmdlIFx1MDAyNlx1MDAyNiBwcmV2X251bSBcdTAwM2UgY3Vycl9udW0pIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHByZXZfbnVtLCBjdXJyX251bSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGkgPSAwO1xuJiM0MztcdFx0XHRoYXNfZGlnaXQgPSAwO1xuJiM0MztcdFx0XHRpbl9yYW5nZSA9IDA7XG4mIzQzO1x0XHRcdHByZXZfbnVtID0gMDtcbiYjNDM7XHRcdFx0Y3Vycl9udW0gPSAwO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoKnAgPT0gJiMzOTstJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCBcJiMzNDspO1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7KGRhc2ggd2l0aG91dCBwcmVjZWRpbmcgbnVtYmVyKVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChpbl9yYW5nZSkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogTXVsdGlwbGUgZGFzaGVzIGluIG5pZF9saXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cHJldl9udW0gPSBjdXJyX251bTtcbiYjNDM7XHRcdFx0Y3Vycl9udW0gPSAwO1xuJiM0MztcdFx0XHRpID0gMDtcbiYjNDM7XHRcdFx0aGFzX2RpZ2l0ID0gMDtcbiYjNDM7XHRcdFx0aW5fcmFuZ2UgPSAxO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnApKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJiMzOTslYyYjMzk7IGluIG5pZF9saXN0XFxuXCYjMzQ7LCAqcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2UgNSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IE5JRCB0b28gbG9uZyAobWF4IDY1NTM2KVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGN1cnJfbnVtID0gY3Vycl9udW0gKiAxMCAmIzQzOyAoKnAgLSAmIzM5OzAmIzM5Oyk7XG4mIzQzO1x0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdGhhc19kaWdpdCA9IDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhhc19kaWdpdCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaW5fcmFuZ2UgXHUwMDI2XHUwMDI2IHByZXZfbnVtIFx1MDAzZSBjdXJyX251bSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFwmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJldl9udW0sIGN1cnJfbnVtKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMO1xuJiM0MztcdGNoYXIgZmlsdGVyX2NtZFtNQVhfQ01EX0xFTl07XG4mIzQzO1x0RklMRSAqb3V0cHV0ID0gTlVMTDtcbiYjNDM7XHRpbnQgZmQgPSAtMTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRjaGFyIGJ1Zls0MDk2XTtcbiYjNDM7XHRpbnQgb3B0O1xuJiM0MztcdHNpemVfdCBjbWRfbGVuID0gMDtcbiYjNDM7XG4mIzQzO1x0c2lnbmFsKFNJR1BJUEUsIFNJR19JR04pO1xuJiM0MztcbiYjNDM7XHRzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHtcbiYjNDM7XHRcdHtcJiMzNDttb2RlXCYjMzQ7LFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7bSYjMzk7fSxcbiYjNDM7XHRcdHtcJiMzNDtuaWRcJiMzNDssXHRcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O24mIzM5O30sXG4mIzQzO1x0XHR7XCYjMzQ7b3V0cHV0XCYjMzQ7LFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7byYjMzk7fSxcbiYjNDM7XHRcdHtcJiMzNDtoZWxwXCYjMzQ7LFx0bm9fYXJndW1lbnQsXHQgICAwLCAmIzM5O2gmIzM5O30sXG4mIzQzO1x0XHR7MCwgMCwgMCwgMH1cbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRmaWx0ZXJfY21kWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0aWYgKGFyZ2MgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoc3RyY21wKGFyZ3ZbaV0sIFwmIzM0Oy1oXCYjMzQ7KSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCBcJiMzNDstLWhlbHBcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdFx0XHR1c2FnZShhcmd2WzBdKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgaWYgcGFnZV9vd25lciBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovXG4mIzQzO1x0aWYgKGFjY2VzcyhcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7LCBGX09LKSAhPSAwKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgZG9lcyBub3QgZXhpc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7RXJyb3IgYWNjZXNzaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcJiMzNDspO1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O01ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcJiMzNDttOm46bzpoXCYjMzQ7LCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkge1xuJiM0MztcdFx0aW50IGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKG9wdCkge1xuJiM0MztcdFx0Y2FzZSAmIzM5O20mIzM5Ozoge1xuJiM0MztcdFx0XHRjb25zdCBjaGFyICptb2RlID0gb3B0YXJnO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHZhbGlkYXRlX21vZGUobW9kZSkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslc21vZGU9JXNcJiMzNDssIGNtZF9sZW4gXHUwMDNlIDAgPyBcJiMzNDsgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBtb2RlKTtcbiYjNDM7XHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiBcdTAwM2U9IE1BWF9DTURfTEVOKSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjbWRfbGVuICYjNDM7PSBsZW47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSAmIzM5O24mIzM5Ozoge1xuJiM0MztcdFx0XHRjb25zdCBjaGFyICpuaWRfbGlzdCA9IG9wdGFyZztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2YWxpZGF0ZV9uaWRfbGlzdChuaWRfbGlzdCkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslc25pZD0lc1wmIzM0OywgY21kX2xlbiBcdTAwM2UgMCA/IFwmIzM0OyBcJiMzNDsgOiBcJiMzNDtcJiMzNDssIG5pZF9saXN0KTtcbiYjNDM7XHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiBcdTAwM2U9IE1BWF9DTURfTEVOKSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjbWRfbGVuICYjNDM7PSBsZW47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSAmIzM5O28mIzM5OzpcbiYjNDM7XHRcdFx0b3V0cHV0X2ZpbGUgPSBvcHRhcmc7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0LyogQWxyZWFkeSBoYW5kbGVkIGFib3ZlICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0dXNhZ2UoYXJndlswXSk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXQgbGVhc3Qgb25lIGZpbHRlciBtdXN0IGJlIHNwZWNpZmllZCAqL1xuJiM0MztcdGlmIChjbWRfbGVuID09IDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXFxuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBPcGVuIHBhZ2Vfb3duZXIgZm9yIHJlYWQtd3JpdGUgLSB0aGlzIHdpbGwgZmFpbCBpZiBrZXJuZWwgZG9lc24mIzM5O3Qgc3VwcG9ydCB3cml0ZSAqL1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7LCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVBQ0NFUyB8fCBlcnJubyA9PSBFUEVSTSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2RvZXMgbm90IHN1cHBvcnQgd3JpdGUgYWNjZXNzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1RoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3Blci1mZCBmaWx0ZXJpbmcuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1BsZWFzZSBlbnN1cmUgeW91IGhhdmUgYSBrZXJuZWwgd2l0aCBcJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cGVyLWZkIGZpbHRlcmluZyBzdXBwb3J0LlxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7RXJyb3Igb3BlbmluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG91dHB1dF9maWxlKSB7XG4mIzQzO1x0XHRvdXRwdXQgPSBmb3BlbihvdXRwdXRfZmlsZSwgXCYjMzQ7d1wmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIW91dHB1dCkge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7b3BlbiBvdXRwdXQgZmlsZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG91dHB1dCA9IHN0ZG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHdyaXRlKGZkLCBmaWx0ZXJfY21kLCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRUlOVkFMKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogS2VybmVsIHJlamVjdGVkIHRoZSBmaWx0ZXIgY29tbWFuZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7UG9zc2libGUgY2F1c2VzOlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgIC0gS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyLWZkIGZpbHRlcmluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgIC0gTlVNQSBub2RlIGhhcyBubyBtZW1vcnlcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtIFVua25vd24gcmVhc29uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBlcnJvcihcJiMzNDt3cml0ZSBmaWx0ZXIgY29tbWFuZFwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICgoc2l6ZV90KXJldCAhPSBzdHJsZW4oZmlsdGVyX2NtZCkpXG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcXG5cJiMzNDssIHJldCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCBhbmQgZGlzcGxheSBmaWx0ZXJlZCBvdXRwdXQgKi9cbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcdHdoaWxlICgocmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzaXplX3Qgd3JpdHRlbiA9IGZ3cml0ZShidWYsIDEsIHJldCwgb3V0cHV0KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAod3JpdHRlbiAhPSAoc2l6ZV90KXJldCkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbiYjNDM7XHRcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuJiM0MztcdFx0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O3dyaXRlIG91dHB1dFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IC0xO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtyZWFkIHBhZ2Vfb3duZXJcJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmZsdXNoKG91dHB1dCkpIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFUElQRSkge1xuJiM0MztcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O2ZsdXNoIG91dHB1dFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG91dHB1dCAhPSBzdGRvdXQpXG4mIzQzO1x0XHRmY2xvc2Uob3V0cHV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gMSA6IDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9vd25lcl9vcGVuJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtwcmludF9wYWdlX293bmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1OGYwY2JmMjdjMWU0ODdhZDA4NTk3MWQ1ZGIxZTdjZmVjNDFiOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwNDo0Nzo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CkBAIC02NSw3ICYjNDM7NjUsMTQgQEAgdW4tdHJhY2tpbmcgc3RhdGUuCiBVc2FnZQogPT09PT0KIAotMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXI6OgomIzQzOzEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyczo6CiYjNDM7CiYjNDM7VG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0OgomIzQzOwomIzQzOwljZCB0b29scy9tbQomIzQzOwltYWtlIHBhZ2Vfb3duZXJfZmlsdGVyCiYjNDM7CiYjNDM7VG8gc29ydCBhbmQgYW5hbHl6ZSBwYWdlX293bmVyIG91dHB1dDoKIAogCWNkIHRvb2xzL21tCiAJbWFrZSBwYWdlX293bmVyX3NvcnQKQEAgLTc0LDcgJiM0Mzs4MSwxMSBAQCBVc2FnZQogCiAzKSBEbyB0aGUgam9iIHRoYXQgeW91IHdhbnQgdG8gZGVidWcuCiAKLTQpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjoKJiM0Mzs0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6CiYjNDM7CiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMSwyICZndDsgZmlsdGVyZWRfcGFnZV9vd25lci50eHQKJiM0MzsKJiM0Mzs1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6CiAKIAljYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgJmd0OyBzdGFja3MudHh0CiAJY2F0IHN0YWNrcy50eHQKQEAgLTI2MywzICYjNDM7Mjc0LDY1IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTCiAJZgkJZnJlZQkJd2hldGhlciB0aGUgcGFnZSBoYXMgYmVlbiByZWxlYXNlZCBvciBub3QKIAlzdAkJc3RhY2t0cmFjZQlzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uCiAJYXRvcgkJYWxsb2NhdG9yCW1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzCiYjNDM7CiYjNDM7RmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0CiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLAomIzQzO3doaWNoIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGluIHVzZXJzcGFjZS4KJiM0MzsKJiM0MztUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZwomIzQzO2NhcGFiaWxpdHkuIEl0IHN1cHBvcnRzIHR3byB0eXBlcyBvZiBmaWx0ZXJzOgomIzQzOwomIzQzOzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZQomIzQzOwktIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSkKJiM0MzsJLSBgYGhhbmRsZWBgOiBQcmludCBvbmx5IHN0YWNrIGhhbmRsZSBudW1iZXJzIChtdWNoIGZhc3Rlciwgc21hbGxlciBvdXRwdXQpCiYjNDM7CS0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzCiYjNDM7CiYjNDM7CVRoZSBgYGhhbmRsZWBgIG1vZGUgdXNlcyBudW1lcmljIGlkZW50aWZpZXJzIGluc3RlYWQgb2YgZnVsbCBzdGFjayB0cmFjZXMuCiYjNDM7CVRoZSBtYXBwaW5nIGZyb20gaGFuZGxlcyB0byBhY3R1YWwgc3RhY2sgdHJhY2VzIGNhbiBiZSBvYnRhaW5lZCB2aWEgdGhlCiYjNDM7CXNob3dfc3RhY2tzX2hhbmRsZXMgaW50ZXJmYWNlLgomIzQzOwomIzQzOzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElECiYjNDM7CS0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgCiYjNDM7CS0gTXVsdGlwbGUgbm9kZXM6IGBgLW4gMCwxLDJgYAomIzQzOwktIFJhbmdlczogYGAtbiAwLTNgYAomIzQzOwktIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGAKJiM0MzsKJiM0MztVc2FnZSBleGFtcGxlczo6CiYjNDM7CiYjNDM7CSMgRmlsdGVyIGJ5IHByaW50IG1vZGUKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGUKJiM0MzsKJiM0MzsJIyBGaWx0ZXIgYnkgTlVNQSBub2RlCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMAomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAtMwomIzQzOwomIzQzOwkjIENvbWJpbmVkIGZpbHRlcnMKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFjayAtbiAwLDEsMgomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDItMwomIzQzOwomIzQzOwkjIFNhdmUgdG8gZmlsZQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0CiYjNDM7CiYjNDM7VGhlIGhhbmRsZSBtb2RlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgYW5kIHBlcmZvcm1hbmNlLWNyaXRpY2FsCiYjNDM7c2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhbgomIzQzO3JlZHVjZSBvdXRwdXQgc2l6ZSBieSB+NjYlICg4NE1CIHZzIDI0NE1CKSBhbmQgaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlIGJ5IH40LjR4CiYjNDM7Y29tcGFyZWQgdG8gZnVsbCBzdGFjayBvdXRwdXQuCiYjNDM7CiYjNDM7VGhlIE5VTUEgbm9kZSBmaWx0ZXIgaXMgdXNlZnVsIGZvciBOVU1BLWF3YXJlIG1lbW9yeSBhbGxvY2F0aW9uIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuCiYjNDM7CiYjNDM7QmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kCiYjNDM7d3JpdGVzIGZpbHRlciBjb21tYW5kcyBiZWZvcmUgcmVhZGluZyB0aGUgZmlsdGVyZWQgb3V0cHV0LiBUaGUgZmlsdGVyaW5nIHVzZXMKJiM0MztwZXItZmlsZS1kZXNjcmlwdG9yIHN0YXRlLCBhbGxvd2luZyBlYWNoIG9wZW4oKSB0byBoYXZlIGluZGVwZW5kZW50IGZpbHRlciBzZXR0aW5ncy4KJiM0MzsKJiM0MztFYWNoIGZpbGUgZGVzY3JpcHRvciBtYWludGFpbnMgaXRzIG93biBmaWx0ZXIgc3RhdGUsIHNvIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZQomIzQzO2luZGVwZW5kZW50IGZpbHRlcmluZyBvcGVyYXRpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiBGb3IgZXhhbXBsZSwgaW4gZGlmZmVyZW50CiYjNDM7dGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjoKJiM0MzsKJiM0MzsJIyBUZXJtaW5hbCAxOiBGaWx0ZXIgbm9kZSAwCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCAmZ3Q7IG5vZGUwX291dHB1dC50eHQKJiM0MzsKJiM0MzsJIyBUZXJtaW5hbCAyOiBGaWx0ZXIgbm9kZSAxIChydW5zIGNvbmN1cnJlbnRseSkKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbiAxICZndDsgbm9kZTFfb3V0cHV0LnR4dApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5jYWU1YWJmMGFjOWFmYSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9vd25lci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuYwpAQCAtNTQsNiAmIzQzOzU0LDI1IEBAIHN0cnVjdCBzdGFja19wcmludF9jdHggewogCXU4IGZsYWdzOwogfTsKIAomIzQzO2VudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHsKJiM0MzsJUEFHRV9PV05FUl9QUklOVF9TVEFDSywKJiM0MzsJUEFHRV9PV05FUl9QUklOVF9IQU5ETEUsCiYjNDM7CVBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5nc1tdID0gewomIzQzOwlbUEFHRV9PV05FUl9QUklOVF9TVEFDS10JPSAmIzM0O3N0YWNrJiMzNDssCiYjNDM7CVtQQUdFX09XTkVSX1BSSU5UX0hBTkRMRV0JPSAmIzM0O2hhbmRsZSYjMzQ7LAomIzQzOwlbUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEVdCT0gJiMzNDtzdGFja19oYW5kbGUmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSB7CiYjNDM7CWVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHByaW50X21vZGU7CiYjNDM7CW5vZGVtYXNrX3QgbmlkX2ZpbHRlcjsKJiM0MzsJYm9vbCBuaWRfZmlsdGVyX2VuYWJsZWQ7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7CiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7CiAKQEAgLTU0NywxNiAmIzQzOzU2NiwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCwKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCXN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lciwKLQkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKQomIzQzOwkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLAomIzQzOwkJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgcmV0LCBwYWdlYmxvY2tfbXQsIHBhZ2VfbXQ7CiAJY2hhciAqa2J1ZjsKJiM0MzsJZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTsKIAlrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXByaW50X21vZGUgPSBzdGF0ZS0mZ3Q7cHJpbnRfbW9kZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiAJcmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LAogCQkJJiMzNDtQYWdlIGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSBuc1xuJiMzNDssCiAJCQlwYWdlX293bmVyLSZndDtvcmRlciwgcGFnZV9vd25lci0mZ3Q7Z2ZwX21hc2ssCkBAIC01NzUsOSAmIzQzOzYwMSwxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQltaWdyYXRldHlwZV9uYW1lc1twYWdlYmxvY2tfbXRdLAogCQkJJmFtcDtwYWdlLSZndDtmbGFncyk7CiAKLQlyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApOwotCWlmIChyZXQgJmd0Oz0gY291bnQpCi0JCWdvdG8gZXJyOwomIzQzOwlpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSkgewomIzQzOwkJcmV0ICYjNDM7PSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAwKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykgewomIzQzOwkJcmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAmIzM0O2hhbmRsZTogJXVcbiYjMzQ7LAomIzQzOwkJCQkgaGFuZGxlKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KIAogCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKQEAgLTY2NCw2ICYjNDM7Njk5LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0OwogCXN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyOwogCWRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTsKJiM0MzsJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3BhZ2Vfb3duZXJfaW5pdGVkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDAsMTUgJiM0Mzs3NzcsMzcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJaWYgKCFoYW5kbGUpCiAJCQlnb3RvIGV4dF9wdXRfY29udGludWU7CiAKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmIChzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkKSB7CiYjNDM7CQkJaW50IG5pZDsKJiM0MzsJCQltZW1kZXNjX2ZsYWdzX3QgcGFnZV9mbGFncyA9IFJFQURfT05DRShwYWdlLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkCiYjNDM7CQkJICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikgewomIzQzOwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCQkJZ290byBleHRfcHV0X2NvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQluaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTsKJiM0MzsJCQlpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcikpIHsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJCWdvdG8gZXh0X3B1dF9jb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKIAkJLyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqLwogCQkqcHBvcyA9IHBmbiAmIzQzOyAxOwogCiAJCXBhZ2Vfb3duZXJfdG1wID0gKnBhZ2Vfb3duZXI7CiAJCXBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7CiAJCXJldHVybiBwcmludF9wYWdlX293bmVyKGJ1ZiwgY291bnQsIHBmbiwgcGFnZSwKLQkJCQkmYW1wO3BhZ2Vfb3duZXJfdG1wLCBoYW5kbGUpOwomIzQzOwkJCQkmYW1wO3BhZ2Vfb3duZXJfdG1wLCBoYW5kbGUsIHN0YXRlKTsKIGV4dF9wdXRfY29udGludWU6CiAJCXBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTg0Nyw3ICYjNDM7OTA2LDEyMiBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKQogCQlpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBhZ2Vfb3duZXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7CiYjNDM7CiYjNDM7CXN0YXRlID0ga3phbGxvY19vYmooKnN0YXRlKTsKJiM0MzsJaWYgKCFzdGF0ZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3N0YXRlLSZndDtsb2NrKTsKJiM0MzsJc3RhdGUtJmd0O3ByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLOwomIzQzOwlub2Rlc19jbGVhcihzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcik7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gc3RhdGU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWtmcmVlKGZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCQkgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKJiM0MzsJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJY2hhciAqa2J1ZjsKJiM0MzsJY2hhciAqb3JpZzsKJiM0MzsJY2hhciAqdG9rZW47CiYjNDM7CWludCByZXQ7CiYjNDM7CXNpemVfdCBtYXhfaW5wdXRfbGVuOwomIzQzOwlzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwllbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBuZXdfcHJpbnRfbW9kZTsKJiM0MzsJbm9kZW1hc2tfdCBuZXdfbmlkX2ZpbHRlcjsKJiM0MzsJYm9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOgomIzQzOwkgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoJiMzNDttb2RlPXN0YWNrX2hhbmRsZSYjMzQ7KQomIzQzOwkgKiAgICAgICAgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlcgomIzQzOwkgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0CiYjNDM7CSAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogJiMzNDssTk5OTk4mIzM0OyAoY29tbWEgJiM0MzsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzCiYjNDM7CSAqLwomIzQzOwltYXhfaW5wdXRfbGVuID0gMzIgJiM0MzsgNiAqIE1BWF9OVU1OT0RFUzsKJiM0MzsKJiM0MzsJaWYgKGNvdW50ICZndDsgbWF4X2lucHV0X2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlrYnVmID0gbWVtZHVwX3VzZXJfbnVsKGJ1ZiwgY291bnQpOwomIzQzOwlpZiAoSVNfRVJSKGtidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoa2J1Zik7CiYjNDM7CiYjNDM7CW9yaWcgPSBrYnVmOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CW5ld19wcmludF9tb2RlID0gc3RhdGUtJmd0O3ByaW50X21vZGU7CiYjNDM7CW5ld19uaWRfZmlsdGVyID0gc3RhdGUtJmd0O25pZF9maWx0ZXI7CiYjNDM7CW5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmYW1wO2tidWYsICYjMzQ7IFx0XG4mIzM0OykpICE9IE5VTEwpIHsKJiM0MzsJCWlmICgqdG9rZW4gPT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFzdHJuY21wKHRva2VuLCAmIzM0O21vZGU9JiMzNDssIDUpKSB7CiYjNDM7CQkJcmV0ID0gc3lzZnNfbWF0Y2hfc3RyaW5nKHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzLAomIzQzOwkJCQkJCXRva2VuICYjNDM7IDUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJCW5ld19wcmludF9tb2RlID0gcmV0OwomIzQzOwkJfSBlbHNlIGlmICghc3RybmNtcCh0b2tlbiwgJiMzNDtuaWQ9JiMzNDssIDQpKSB7CiYjNDM7CQkJcmV0ID0gbm9kZWxpc3RfcGFyc2UodG9rZW4gJiM0MzsgNCwgbmV3X25pZF9maWx0ZXIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwomIzQzOwomIzQzOwkJCWlmIChub2Rlc19lbXB0eShuZXdfbmlkX2ZpbHRlcikpIHsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlCiYjNDM7CQkJICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7CiYjNDM7CQkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCW5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSB0cnVlOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29tbWl0IGFsbCBmaWx0ZXIgY2hhbmdlcyAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXN0YXRlLSZndDtwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3RhdGUtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0ID0gY291bnQ7CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWtmcmVlKG9yaWcpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkub3BlbgkJPSBwYWdlX293bmVyX29wZW4sCiYjNDM7CS5yZWxlYXNlCT0gcGFnZV9vd25lcl9yZWxlYXNlLAomIzQzOwkud3JpdGUJCT0gcGFnZV9vd25lcl93cml0ZSwKIAkucmVhZAkJPSByZWFkX3BhZ2Vfb3duZXIsCiAJLmxsc2VlawkJPSBsc2Vla19wYWdlX293bmVyLAogfTsKQEAgLTk4MCw3ICYjNDM7MTE1NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiAJCXJldHVybiAwOwogCX0KIAotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtwYWdlX293bmVyJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsICZhbXA7cGFnZV9vd25lcl9mb3BzKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDYwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpOwogCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigmIzM0O3BhZ2Vfb3duZXJfc3RhY2tzJiMzNDssIE5VTEwpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8CmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlCmluZGV4IGY1NzI1YjVjMjNhYTI2Li44NTgxODZhNmVlZmRiZCAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGUKQEAgLTMsNyAmIzQzOzMsNyBAQAogIwogaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUKIAotQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwcwogCiBMSUJfRElSID0gLi4vbGliL2FwaQpAQCAtMjMsNyAmIzQzOzIzLDcgQEAgJChMSUJTKToKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgJCZsdDsgJChMREZMQUdTKQogCiBjbGVhbjoKLQkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzOwkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAogCW1ha2UgLUMgJChMSUJfRElSKSBjbGVhbgogCiBzYmluZGlyID89IC91c3Ivc2JpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYwpAQCAtMCwwICYjNDM7MSwzMTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVXNlci1zcGFjZSBoZWxwZXIgdG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0IHBlci1mZAomIzQzOyAqCiYjNDM7ICogRXhhbXBsZSB1c2U6CiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZQomIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGUKJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCwxLDIKJiM0MzsgKgomIzQzOyAqIFNlZSBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2N0eXBlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1BWF9DTURfTEVOCTUxMgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpCiYjNDM7ewomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVc2FnZTogJXMgW09QVElPTlNdXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1xuT3B0aW9uczpcbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtbSwgLS1tb2RlIE1PREUgICAgICA6IHByaW50X21vZGUgKHN0YWNrLCBoYW5kbGUsIG9yIHN0YWNrX2hhbmRsZSlcbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtbiwgLS1uaWQgTklEX0xJU1QgICA6IE5VTUEgbm9kZSBJRHMgKGNvbW1hLXNlcGFyYXRlZCBvciByYW5nZXMpXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC1oLCAtLWhlbHAgICAgICAgICAgIDogc2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcbkV4YW1wbGVzOlxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgICVzIC1tIHN0YWNrXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gaGFuZGxlXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2tfaGFuZGxlXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2sgLW8gb3V0cHV0LnR4dFxuJiMzNDssIHByb2cpOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgICVzIC1uIDAsMSwyXG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2sgLW4gMFxuJiMzNDssIHByb2cpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSkKJiM0Mzt7CiYjNDM7CWlmIChzdHJjbXAobW9kZSwgJiMzNDtzdGFjayYjMzQ7KSA9PSAwIHx8CiYjNDM7CSAgICBzdHJjbXAobW9kZSwgJiMzNDtoYW5kbGUmIzM0OykgPT0gMCB8fAomIzQzOwkgICAgc3RyY21wKG1vZGUsICYjMzQ7c3RhY2tfaGFuZGxlJiMzNDspID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEludmFsaWQgbW9kZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBtb2RlKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7VmFsaWQgbW9kZXM6IHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZVxuJiMzNDspOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdmFsaWRhdGVfbmlkX2xpc3QoY29uc3QgY2hhciAqbmlkX2xpc3QpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpwOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CWludCBoYXNfZGlnaXQgPSAwOwomIzQzOwlpbnQgaW5fcmFuZ2UgPSAwOwomIzQzOwlpbnQgcHJldl9udW0gPSAwOwomIzQzOwlpbnQgY3Vycl9udW0gPSAwOwomIzQzOwomIzQzOwlpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHAmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoKnAgPT0gJiMzOTssJiMzOTspIHsKJiM0MzsJCQlpZiAoIWhhc19kaWdpdCkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoaW5fcmFuZ2UgJmFtcDsmYW1wOyBwcmV2X251bSAmZ3Q7IGN1cnJfbnVtKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSAmbHQ7PSBlbmQpXG4mIzM0OywKJiM0MzsJCQkJCXByZXZfbnVtLCBjdXJyX251bSk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CQkJaSA9IDA7CiYjNDM7CQkJaGFzX2RpZ2l0ID0gMDsKJiM0MzsJCQlpbl9yYW5nZSA9IDA7CiYjNDM7CQkJcHJldl9udW0gPSAwOwomIzQzOwkJCWN1cnJfbnVtID0gMDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICgqcCA9PSAmIzM5Oy0mIzM5OykgewomIzQzOwkJCWlmICghaGFzX2RpZ2l0KSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXQgJiMzNDspOwomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwKJiM0MzsJCQkJCSYjMzQ7KGRhc2ggd2l0aG91dCBwcmVjZWRpbmcgbnVtYmVyKVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLTE7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChpbl9yYW5nZSkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogTXVsdGlwbGUgZGFzaGVzIGluIG5pZF9saXN0XG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CQkJcHJldl9udW0gPSBjdXJyX251bTsKJiM0MzsJCQljdXJyX251bSA9IDA7CiYjNDM7CQkJaSA9IDA7CiYjNDM7CQkJaGFzX2RpZ2l0ID0gMDsKJiM0MzsJCQlpbl9yYW5nZSA9IDE7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnApKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEludmFsaWQgY2hhcmFjdGVyICYjMzk7JWMmIzM5OyBpbiBuaWRfbGlzdFxuJiMzNDssICpwKTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoaSAmZ3Q7IDUpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogTklEIHRvbyBsb25nIChtYXggNjU1MzYpXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJY3Vycl9udW0gPSBjdXJyX251bSAqIDEwICYjNDM7ICgqcCAtICYjMzk7MCYjMzk7KTsKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwkJaGFzX2RpZ2l0ID0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhc19kaWdpdCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGluX3JhbmdlICZhbXA7JmFtcDsgcHJldl9udW0gJmd0OyBjdXJyX251bSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSAmbHQ7PSBlbmQpXG4mIzM0OywKJiM0MzsJCQlwcmV2X251bSwgY3Vycl9udW0pOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMOwomIzQzOwljaGFyIGZpbHRlcl9jbWRbTUFYX0NNRF9MRU5dOwomIzQzOwlGSUxFICpvdXRwdXQgPSBOVUxMOwomIzQzOwlpbnQgZmQgPSAtMTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWNoYXIgYnVmWzQwOTZdOwomIzQzOwlpbnQgb3B0OwomIzQzOwlzaXplX3QgY21kX2xlbiA9IDA7CiYjNDM7CiYjNDM7CXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKJiM0MzsKJiM0MzsJc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CiYjNDM7CQl7JiMzNDttb2RlJiMzNDssCXJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O20mIzM5O30sCiYjNDM7CQl7JiMzNDtuaWQmIzM0OywJCXJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O24mIzM5O30sCiYjNDM7CQl7JiMzNDtvdXRwdXQmIzM0OywJcmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7byYjMzk7fSwKJiM0MzsJCXsmIzM0O2hlbHAmIzM0OywJbm9fYXJndW1lbnQsCSAgIDAsICYjMzk7aCYjMzk7fSwKJiM0MzsJCXswLCAwLCAwLCAwfQomIzQzOwl9OwomIzQzOwomIzQzOwlmaWx0ZXJfY21kWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwlpZiAoYXJnYyAmZ3Q7IDEpIHsKJiM0MzsJCWZvciAoaW50IGkgPSAxOyBpICZsdDsgYXJnYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICYjMzQ7LWgmIzM0OykgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgJiMzNDstLWhlbHAmIzM0OykgPT0gMCkgewomIzQzOwkJCQl1c2FnZShhcmd2WzBdKTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqLwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7LCBGX09LKSAhPSAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU5PRU5UKQomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XG4mIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGVycm9yKCYjMzQ7RXJyb3IgYWNjZXNzaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXImIzM0Oyk7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtNYWtlIHN1cmUgcGFnZV9vd25lciBpcyBlbmFibGVkIGluIGtlcm5lbFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O206bjpvOmgmIzM0OywgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKJiM0MzsJCWludCBsZW47CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKG9wdCkgewomIzQzOwkJY2FzZSAmIzM5O20mIzM5OzogewomIzQzOwkJCWNvbnN0IGNoYXIgKm1vZGUgPSBvcHRhcmc7CiYjNDM7CiYjNDM7CQkJaWYgKHZhbGlkYXRlX21vZGUobW9kZSkgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQlsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbiwKJiM0MzsJCQkJICAgICAgICYjMzQ7JXNtb2RlPSVzJiMzNDssIGNtZF9sZW4gJmd0OyAwID8gJiMzNDsgJiMzNDsgOiAmIzM0OyYjMzQ7LCBtb2RlKTsKJiM0MzsJCQlpZiAobGVuICZsdDsgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiAmZ3Q7PSBNQVhfQ01EX0xFTikgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQl9CiYjNDM7CQkJY21kX2xlbiAmIzQzOz0gbGVuOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzogewomIzQzOwkJCWNvbnN0IGNoYXIgKm5pZF9saXN0ID0gb3B0YXJnOwomIzQzOwomIzQzOwkJCWlmICh2YWxpZGF0ZV9uaWRfbGlzdChuaWRfbGlzdCkgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQlsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbiwKJiM0MzsJCQkJICAgICAgICYjMzQ7JXNuaWQ9JXMmIzM0OywgY21kX2xlbiAmZ3Q7IDAgPyAmIzM0OyAmIzM0OyA6ICYjMzQ7JiMzNDssIG5pZF9saXN0KTsKJiM0MzsJCQlpZiAobGVuICZsdDsgMCB8fCBjbWRfbGVuICYjNDM7IGxlbiAmZ3Q7PSBNQVhfQ01EX0xFTikgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMTsKJiM0MzsJCQl9CiYjNDM7CQkJY21kX2xlbiAmIzQzOz0gbGVuOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSAmIzM5O28mIzM5OzoKJiM0MzsJCQlvdXRwdXRfZmlsZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtoJiMzOTs6CiYjNDM7CQkJLyogQWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXVzYWdlKGFyZ3ZbMF0pOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEF0IGxlYXN0IG9uZSBmaWx0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgKi8KJiM0MzsJaWYgKGNtZF9sZW4gPT0gMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEF0IGxlYXN0IG9uZSBmaWx0ZXIgKC1tIG9yIC1uKSBtdXN0IGJlIHNwZWNpZmllZFxuXG4mIzM0Oyk7CiYjNDM7CQl1c2FnZShhcmd2WzBdKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE9wZW4gcGFnZV9vd25lciBmb3IgcmVhZC13cml0ZSAtIHRoaXMgd2lsbCBmYWlsIGlmIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IHdyaXRlICovCiYjNDM7CWZkID0gb3BlbigmIzM0Oy9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXImIzM0OywgT19SRFdSKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJaWYgKGVycm5vID09IEVBQ0NFUyB8fCBlcnJubyA9PSBFUEVSTSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyICYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1RoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3Blci1mZCBmaWx0ZXJpbmcuXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7UGxlYXNlIGVuc3VyZSB5b3UgaGF2ZSBhIGtlcm5lbCB3aXRoICYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwZXItZmQgZmlsdGVyaW5nIHN1cHBvcnQuXG4mIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBlcnJvcigmIzM0O0Vycm9yIG9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdXRwdXRfZmlsZSkgewomIzQzOwkJb3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsICYjMzQ7dyYjMzQ7KTsKJiM0MzsJCWlmICghb3V0cHV0KSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7b3BlbiBvdXRwdXQgZmlsZSYjMzQ7KTsKJiM0MzsJCQljbG9zZShmZCk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlvdXRwdXQgPSBzdGRvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGUoZmQsIGZpbHRlcl9jbWQsIHN0cmxlbihmaWx0ZXJfY21kKSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUlOVkFMKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7UG9zc2libGUgY2F1c2VzOlxuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0OyAgLSBLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBwZXItZmQgZmlsdGVyaW5nXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtIFVua25vd24gcmVhc29uXG4mIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBlcnJvcigmIzM0O3dyaXRlIGZpbHRlciBjb21tYW5kJiMzNDspOwomIzQzOwkJfQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChzaXplX3QpcmV0ICE9IHN0cmxlbihmaWx0ZXJfY21kKSkKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXG4mIzM0OywgcmV0LCBzdHJsZW4oZmlsdGVyX2NtZCkpOwomIzQzOwomIzQzOwkvKiBSZWFkIGFuZCBkaXNwbGF5IGZpbHRlcmVkIG91dHB1dCAqLwomIzQzOwlyZXQgPSAwOwomIzQzOwl3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSAmZ3Q7IDApIHsKJiM0MzsJCXNpemVfdCB3cml0dGVuID0gZndyaXRlKGJ1ZiwgMSwgcmV0LCBvdXRwdXQpOwomIzQzOwomIzQzOwkJaWYgKHdyaXR0ZW4gIT0gKHNpemVfdClyZXQpIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRVBJUEUpIHsKJiM0MzsJCQkJLyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi8KJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJCXBlcnJvcigmIzM0O3dyaXRlIG91dHB1dCYjMzQ7KTsKJiM0MzsJCQlyZXQgPSAtMTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJcGVycm9yKCYjMzQ7cmVhZCBwYWdlX293bmVyJiMzNDspOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZmbHVzaChvdXRwdXQpKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRVBJUEUpIHsKJiM0MzsJCQkvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqLwomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBlcnJvcigmIzM0O2ZsdXNoIG91dHB1dCYjMzQ7KTsKJiM0MzsJCQlyZXQgPSAtMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAob3V0cHV0ICE9IHN0ZG91dCkKJiM0MzsJCWZjbG9zZShvdXRwdXQpOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IDEgOiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBQYWdlIE93bmVyIEZpbHRlcmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIGJlZW4gc3VibWl0dGVkLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBpbnRlcmVzdGluZyBhZGRpdGlvbiB0byB0aGUgYHBhZ2Vfb3duZXJgIGRlYnVnZ2luZyBmZWF0dXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhZGRzIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgYmFzZWQgb24gcHJpbnQgbW9kZXMgKHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZSkgYW5kIE5VTUEgbm9kZSBJRHMuIFRoZSBjb3JlIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgY2VudGVycyBhcm91bmQgYSBuZXcgYHdyaXRlYCBvcGVyYXRpb24gb24gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgLiBUaGlzIHdyaXRlIG9wZXJhdGlvbiBpcyB3aGF0IHNldHMgdXAgYSBmaWx0ZXIgc3RhdGUsIHN0b3JlZCBpbiBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCwgd2hpY2ggYHJlYWRfcGFnZV9vd25lcmAgdGhlbiByZXNwZWN0cy4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBUaGUgYHBhZ2Vfb3duZXJgIGZlYXR1cmUgaXRzZWxmIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfUEFHRV9PV05FUmAsIHNvIHRoYXQmIzM5O3MgdGhlIGZpcnN0IGNvbmZpZyBJIHdhbnQgdG8gY2hlY2suIEdvb2QsIGl0JiMzOTtzIGEga2VybmVsIGNvbmZpZy4gTm93LCBsZXTigJlzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gYWRkZWQgYW5kIG1vZGlmaWVkIGluIGBtbS9wYWdlX293bmVyLmNgLiBJIHNlZSBuZXcgZnVuY3Rpb25zOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAuCgpUaGlzIGlzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBhIG5ldyB3cml0ZSBpbnRlcmZhY2UgdG8gYSBkZWJ1Z2ZzIGZpbGUuIEFuZCBpdCYjMzk7cyBwYXJzaW5nIHVzZXIgaW5wdXQuIEkgc2VlIGBzdHJzZXBgLCBgc3lzZnNfbWF0Y2hfc3RyaW5nYCwgYG5vZGVsaXN0X3BhcnNlYCwgYWxsIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIGNvdWxkIHVuY292ZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvci4gTWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGBtZW1kdXBfdXNlcl9udWxgLCBhbmQgdGhlcmUmIzM5O3MgYSBzcGlubG9jayB3aXRoIGBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N0YXRlLSZndDtsb2NrLCBmbGFncylgLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgYXNzdW1pbmcgZGVidWdmcyBpcyBtb3VudGVkLCBhbmQgZ2l2ZW4gU3l6a2FsbGVyIHJ1bnMgYXMgcm9vdCBvciBjYW4gYWNjZXNzIGRlYnVnZnMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGUga2V5IGlzIHJvb3QuIFdhaXQuLi4gSSBhbHNvIHNlZSB0aGUgZmlsZSBwZXJtaXNzaW9ucyBoYXZlIGJlZW4gY2hhbmdlZC4gVGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIDA2MDAgcGVybWlzc2lvbnMsIHNvIHJvb3QgY2FuIHdyaXRlLiBQZXJmZWN0LgoKU28sIHRoZSBmb2N1cyBwb2ludHMgYXJlOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHJlYWRfcGFnZV9vd25lcmAsIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAuIEdvb2QsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgYFBBR0VfT1dORVJgLiBBbmQsIGBERUJVR19GU2AgaXMgbmVlZGVkLCBidXQgdGhhdCBpcyB1c3VhbGx5IGVuYWJsZWQuIExldCYjMzk7cyBkbyBhIHF1aWNrIGdyZXAgZm9yIGBQQUdFX09XTkVSYCB0byBkb3VibGUgY2hlY2suIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGdvb2QgdG8gZ28uIFRpbWUgdG8gc3BpbiB1cCB0aGUgZnV6emVycyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfT1dORVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYFBBR0VfT1dORVJgIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYFBBR0VfT1dORVJgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaW1lIHRvIGRyaWxsIGRvd24gYW5kIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIExldCYjMzk7cyBqdW1wIGludG8gdGhlIGNvZGUgYW5kIGludmVzdGlnYXRlIHRoZSBgcGFnZV9vd25lcl93cml0ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcyEpIGFyZSBwcm9iYWJseSBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3cml0ZSBiZWhhdmlvciB3aXRoaW4gdGhhdCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTkyNT1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5tbS9wYWdlX293bmVyLmMtOTMwLVxubW0vcGFnZV9vd25lci5jOjkzMTpzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubW0vcGFnZV9vd25lci5jLTkzMi1cdFx0XHRcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0xMDIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbi0tXG5tbS9wYWdlX293bmVyLmMtMTAyMy1cdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDI0Olx0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbm1tL3BhZ2Vfb3duZXIuYy0xMDI1LVx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgcmVhZF9wYWdlX293bmVyYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmVhZF9wYWdlX293bmVyYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgcHJvYmFibHkgbWVhbnMgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBpdHMgbGlrZWx5IGNvZGUgcGF0aC4gSSB3YW50IHRvIHF1aWNrbHkgZW5zdXJlIHRoYXQ6CgoqICAgSXQmIzM5O3MgaGFuZGxpbmcgYWxsIGV4cGVjdGVkIGVkZ2UgY2FzZXMgcHJvcGVybHkuCiogICBUaGUgZGF0YSB2YWxpZGF0aW9uIGlzIHJvYnVzdCBlbm91Z2gsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhpbmdzIGxpa2Ugb3duZXJzaGlwLCBzZWN1cml0eSBjb250ZXh0IGFuZCBhbnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gYWNjZXNzIHRoZSB0YXJnZXQgaW5mb3JtYXRpb24uCiogICBUaGF0IHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBvcGVuaW5nIGFueSBzZWN1cml0eSBob2xlcywgbGlrZSBleHBvc2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gb3IgY3JlYXRpbmcgb3Bwb3J0dW5pdGllcyBmb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uCiogICBJdCYjMzk7cyB0aHJlYWQtc2FmZSBvciBwcm9wZXJseSBwcm90ZWN0ZWQgYnkgd2hhdGV2ZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgd2UmIzM5O3JlIHVzaW5nLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBkZXNpZ24sIG9mIGNvdXJzZS4KKiAgIFRoYXQgcGVyZm9ybWFuY2UgaXMgYWNjZXB0YWJsZS4gSSYjMzk7bSBub3QgZXhwZWN0aW5nIGFueXRoaW5nIGdyb3VuZGJyZWFraW5nIGhlcmUsIGJ1dCBJIGRvbiYjMzk7dCB3YW50IGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLgoKVGhpcyBpcyBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGF2b2lkIGEgcG90ZW50aWFsbHkgbmFzdHkgb3ZlcnNpZ2h0IGxhdGVyLiBBIGdvb2QgZnVuY3Rpb24gbmFtZSBpcyBvbmx5IGdvb2QgYXMgdGhlIGNvZGUgdGhhdCBleGVjdXRlcyBpdC4gSSYjMzk7bGwgZ2V0IHRoYXQgZnJlc2ggaW4gbXkgbWluZCBhbmQsIGp1c3QgZG91YmxlIGNoZWNrIGl0LCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTY5ND1zdGF0aWMgc3NpemVfdFxubW0vcGFnZV9vd25lci5jOjY5NTpyZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxubW0vcGFnZV9vd25lci5jLTY5Ni17XG4tLVxubW0vcGFnZV9vd25lci5jPTEwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xMDI0LVx0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDI1Olx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG5tbS9wYWdlX293bmVyLmMtMTAyNi1cdC5sbHNlZWtcdFx0PSBsc2Vla19wYWdlX293bmVyLFxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk9MzA9Y2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS01Mi0gICAgICAgIGlmIGxlbihhcmd2KSA9PSAwOlxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo1MzogICAgICAgICAgICAgIHNlbGYucmVhZF9wYWdlX293bmVyKClcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTQtICAgICAgICBlbGlmIGxlbihhcmd2KSA9PSAyOlxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTYtICAgICAgICAgICAgICAgIHBmbiA9IGludChhcmd2WzFdKVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo1NzogICAgICAgICAgICAgICAgc2VsZi5yZWFkX3BhZ2Vfb3duZXJfYnlfYWRkcihzZWxmLnBfb3BzLnBmbl90b19wYWdlKHBmbikpXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTU4LSAgICAgICAgICAgIGVsc2U6XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS05Ny1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk6OTg6ICAgIGRlZiByZWFkX3BhZ2Vfb3duZXJfYnlfYWRkcihzZWxmLCBzdHJ1Y3RfcGFnZV9hZGRyKTpcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktOTktICAgICAgICBwYWdlID0gZ2RiLlZhbHVlKHN0cnVjdF9wYWdlX2FkZHIpLmNhc3QodXRpbHMuZ2V0X3BhZ2VfdHlwZSgpLnBvaW50ZXIoKSlcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTE0My1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk6MTQ0OiAgICBkZWYgcmVhZF9wYWdlX293bmVyKHNlbGYpOlxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNDUtICAgICAgICBwZm4gPSBzZWxmLm1pbl9wZm5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgT3duZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCByZWZpbmluZyB0aGUgYHBhZ2Vfb3duZXJgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGxldmVyYWdpbmcgdGhlIGZpbHRlciBzdGF0ZSB3aXRoaW4gdGhlIGByZWFkX3BhZ2Vfb3duZXJgIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyBnb29kOyBhbnkgb3B0aW1pemF0aW9uIHRoYXQgc3RyZWFtbGluZXMgdGhpcyBpcyB3ZWxjb21lLiBJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIGBwcmludF9wYWdlX293bmVyYCwgd2hpY2ggSSBhc3N1bWUgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyB3ZSYjMzk7cmUgcHJlc2VudGluZyB0aGlzIGluZm9ybWF0aW9uIOKAkyBwb3RlbnRpYWxseSBpbXByb3ZlZCBjbGFyaXR5IG9yIGFkZGVkIGNvbnRleHQuCgpUaGUgbWVhdCBvZiB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIHRoZXNlIG5ldyBmdW5jdGlvbnM6IGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYW5kIGBwYWdlX293bmVyX3dyaXRlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24uIFRoZXNlIHNvdW5kIGxpa2UgdGhleSYjMzk7cmUgbWFuYWdpbmcgYWNjZXNzIHRvIG9yIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2Ugb3duZXIgZGF0YSwgcGVyaGFwcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgc3RhdGUuCgpTbywgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG9uIHRoZXNlIGZpdmUgZnVuY3Rpb24gY2FsbHM6CiogICBgcGFnZV9vd25lcl9vcGVuYAoqICAgYHBhZ2Vfb3duZXJfcmVsZWFzZWAKKiAgIGBwYWdlX293bmVyX3dyaXRlYAoqICAgYHJlYWRfcGFnZV9vd25lcmAKKiAgIGBwcmludF9wYWdlX293bmVyYAoKQnV0LCBiZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCB0aGUgYFBBR0VfT1dORVJgIGNvbmZpZyBpdHNlbGYgZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCBhbmQgYFNUQUNLVFJBQ0VfU1VQUE9SVGAuIEkgc2hvdWxkIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYG1tL0tjb25maWcuZGVidWdgIHRvIHZlcmlmeSBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2UgZGVwZW5kZW5jaWVzIGNvbWUgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvbmZpZ3Mgd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxuIDEwMTpcdFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwMjpcdFxuIDEwMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwNDpcdFxuIDEwNTpcdGNvbmZpZyBQQUdFX09XTkVSXG4gMTA2Olx0XHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiAxMDc6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxMDg6XHRcdHNlbGVjdCBERUJVR19GU1xuIDEwOTpcdFx0c2VsZWN0IFNUQUNLVFJBQ0VcbiAxMTA6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gMTExOlx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAxMTI6XHRcdGhlbHBcbiAxMTM6XHRcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XG4gMTE0Olx0XHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xuIDExNTpcdFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xuIDExNjpcdFx0ICBcJiMzNDtwYWdlX293bmVyPW9uXCYjMzQ7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xuIDExNzpcdFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbiAxMTg6XHRcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxMQoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiA5NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgUGFnZSBPd25lciBGZWF0dXJlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYmVzdCB0ZXN0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb25zIGFyb3VuZCB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGludGVyZmFjZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYFBBR0VfT1dORVJgIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCBlbmFibGluZyBpdCBuZWVkcyB0aGUgYHBhZ2Vfb3duZXI9b25gIGJvb3QgcGFyYW1ldGVyLiYjMzQ7IFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHN5emthbGxlciBoYW5kbGUgdGhhdCBib290IHBhcmFtZXRlcj8gVXN1YWxseSwgc3l6a2FsbGVyIHBhcmFtZXRlcnMgYXJlIGZpeGVkLCBidXQgaWYgYFBBR0VfT1dORVJgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgQU5EIGBwYWdlX293bmVyPW9uYCBpcyBwYXNzZWQsIHRoZW4gc3l6a2FsbGVyIGNvdWxkIHRlc3QgaXQuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIGZvciBrZXJuZWwgKmNvbmZpZyogZmxhZ3MuIFNvLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgSSBkZWZpbml0ZWx5IG5lZWQgdG8gbGlzdCBgUEFHRV9PV05FUmAuIFRoZW4sIEkgc3RhcnRlZCB0byB0aGluaywgJiMzNDtJZiB0aGUgZmVhdHVyZSBuZWVkcyBhIGJvb3QgcGFyYW1ldGVyIHRvIGJlIHRydWx5IGFjdGl2ZSwgd29uJiMzOTt0IHN5emthbGxlciBzdHJ1Z2dsZSB0byB0ZXN0IGl0IGlmIHdlIGRvbiYjMzk7dCBhbHNvIGFkZCB0aGUgcGFyYW1ldGVyPyYjMzQ7CgpJIHRoZW4gd2VudCBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNsYXJpZnkgdGhpcy4gSSBzZWUgYHBhZ2Vfb3duZXJfZW5hYmxlZGAgaXMgY2hlY2tlZCBpbiBgcmVhZF9wYWdlX293bmVyYC4gSWYgYHBhZ2Vfb3duZXI9b25gIGlzbiYjMzk7dCBwYXNzZWQsIHRoZW4gYHBhZ2Vfb3duZXJfaW5pdGVkYCB3aWxsIGJlIGZhbHNlLCBhbmQgYHJlYWRfcGFnZV9vd25lcmAgd2lsbCByZXR1cm4gYW4gZXJyb3IuIEkgdGhvdWdodCwgd2hhdCBhYm91dCBgcGFnZV9vd25lcl93cml0ZWA/IEludGVyZXN0aW5nbHksIGl0ICpkb2VzbiYjMzk7dCogY2hlY2sgYHBhZ2Vfb3duZXJfaW5pdGVkYC4gU28sIHRoZSBgcGFnZV9vd25lcl93cml0ZWAgZnVuY3Rpb24gKmNvdWxkKiBiZSBleGVjdXRlZCBldmVuIGlmIHRoZSBib290IHBhcmFtZXRlciB3YXNuJiMzOTt0IHBhc3NlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNhbWUgZ29lcyBmb3IgYHBhZ2Vfb3duZXJfb3BlbmAuCgpCdXQgdGhlbiBJIHNlZSB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGZpbGUgaXMgKm9ubHkqIGNyZWF0ZWQgaWYgYHBhZ2Vfb3duZXJfaW5pdGVkYCBpcyB0cnVlLiBTbywgdGhlIGZpbGUgaXNuJiMzOTt0IGV2ZW4gdGhlcmUgdW5sZXNzIGBwYWdlX293bmVyPW9uYCBpcyBwYXNzZWQuIFRoaXMgbWVhbnMgbm8gZGlyZWN0IGludGVyYWN0aW9uLiBUaGVuIEkgY29uc2lkZXJlZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgaW4gc3l6a2FsbGVyLCBtYXliZSBpdCBoYW5kbGVzIGJvb3QgcGFyYW1ldGVycywgb3IgcGVyaGFwcyBpdCBhbHJlYWR5IGhhcyBgcGFnZV9vd25lcj1vbmAgb24gc29tZSBpbnN0YW5jZXMuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIG1haW4gdGhpbmcgdG8gcHJvdmlkZSBpcyBgUEFHRV9PV05FUmAgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKSSB0aGVuIG1hZGUgYSBtZW50YWwgbGlzdCBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zOiBgcGFnZV9vd25lcl9vcGVuYCwgYHBhZ2Vfb3duZXJfcmVsZWFzZWAsIGBwYWdlX293bmVyX3dyaXRlYCwgYHJlYWRfcGFnZV9vd25lcmAsIGBwcmludF9wYWdlX293bmVyYC4gSSBlbGltaW5hdGVkIHRoZSB1c2Vyc3BhY2UgdG9vbC4KClNvLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBmaWx0ZXIgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBhZGRzIHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFuZCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MuCgpUaGVyZWZvcmU6CgoqICAgQ29uZmlnczogYFBBR0VfT1dORVJgCiogICBGb2N1c1N5bWJvbHM6IGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHBhZ2Vfb3duZXJfd3JpdGVgLCBgcmVhZF9wYWdlX293bmVyYCwgYHByaW50X3BhZ2Vfb3duZXJgCgpJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCBhbGwgdGhlIGZ1bmN0aW9ucyBJIGxpc3RlZCBhcmUgc3RhdGljLgoKTm93IEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfb3duZXJfb3BlbiYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl93cml0ZSYjMzQ7LAogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cHJpbnRfcGFnZV9vd25lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgdG8gYWxsb3cgZmlsdGVyaW5nIHBhZ2Ugb3duZXIgb3V0cHV0IGJ5IHByaW50IG1vZGUgYW5kIE5VTUEgbm9kZS4gSXQgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBsb2dpYywgc3RhdGUgbWFuYWdlbWVudCBwZXIgZmlsZSBkZXNjcmlwdG9yLCBhbmQgbW9kaWZpZXMgdGhlIHJlYWQgcGF0aCB0byByZXNwZWN0IHRoZSBmaWx0ZXIuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudCBhcmUgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9vd25lcl9vcGVuJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtwcmludF9wYWdlX293bmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODowMC40Njk1NTM4OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU1MzI2OTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInBhZ2Vfb3duZXJfd3JpdGVcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiLFxuICAgIFwicHJpbnRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA0OjQ4OjAwLjQ2OTU1ODg4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MzMwMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjU4ZjBjYmYyN2MxZTQ4N2FkMDg1OTcxZDVkYjFlN2NmZWM0MWI4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1biAyNSAwNDo0Nzo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbkBAIC02NSw3ICs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS5cXG4gVXNhZ2VcXG4gPT09PT1cXG4gXFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcXG4rMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcXG4rXFxuK1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcXG4rXFxuK1xcdGNkIHRvb2xzL21tXFxuK1xcdG1ha2UgcGFnZV9vd25lcl9maWx0ZXJcXG4rXFxuK1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XFxuIFxcbiBcXHRjZCB0b29scy9tbVxcbiBcXHRtYWtlIHBhZ2Vfb3duZXJfc29ydFxcbkBAIC03NCw3ICs4MSwxMSBAQCBVc2FnZVxcbiBcXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxcbiBcXG4tNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6Olxcbis0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XFxuK1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcXHUwMDNlIGZpbHRlcmVkX3BhZ2Vfb3duZXIudHh0XFxuK1xcbis1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XFxuIFxcbiBcXHRjYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgXFx1MDAzZSBzdGFja3MudHh0XFxuIFxcdGNhdCBzdGFja3MudHh0XFxuQEAgLTI2MywzICsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZlxcdFxcdGZyZWVcXHRcXHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxcbiBcXHRzdFxcdFxcdHN0YWNrdHJhY2VcXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXG4rRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxcbit3aGljaCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiB1c2Vyc3BhY2UuXFxuK1xcbitUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xcbitjYXBhYmlsaXR5LiBJdCBzdXBwb3J0cyB0d28gdHlwZXMgb2YgZmlsdGVyczpcXG4rXFxuKzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxcbitcXHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcXG4rXFx0LSBgYGhhbmRsZWBgOiBQcmludCBvbmx5IHN0YWNrIGhhbmRsZSBudW1iZXJzIChtdWNoIGZhc3Rlciwgc21hbGxlciBvdXRwdXQpXFxuK1xcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXFxuK1xcbitcXHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxcbitcXHRUaGUgbWFwcGluZyBmcm9tIGhhbmRsZXMgdG8gYWN0dWFsIHN0YWNrIHRyYWNlcyBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZVxcbitcXHRzaG93X3N0YWNrc19oYW5kbGVzIGludGVyZmFjZS5cXG4rXFxuKzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXFxuK1xcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXFxuK1xcdC0gTXVsdGlwbGUgbm9kZXM6IGBgLW4gMCwxLDJgYFxcbitcXHQtIFJhbmdlczogYGAtbiAwLTNgYFxcbitcXHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcXG4rXFxuK1VzYWdlIGV4YW1wbGVzOjpcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IHByaW50IG1vZGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IE5VTUEgbm9kZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDBcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcXG4rXFxuK1xcdCMgQ29tYmluZWQgZmlsdGVyc1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXFxuK1xcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zXFxuK1xcbitcXHQjIFNhdmUgdG8gZmlsZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XFxuK1xcbitUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcXG4rc2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxcbityZWR1Y2Ugb3V0cHV0IHNpemUgYnkgfjY2JSAoODRNQiB2cyAyNDRNQikgYW5kIGltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZSBieSB+NC40eFxcbitjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cXG4rXFxuK1RoZSBOVU1BIG5vZGUgZmlsdGVyIGlzIHVzZWZ1bCBmb3IgTlVNQS1hd2FyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxcbitcXG4rQmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXFxuK3dyaXRlcyBmaWx0ZXIgY29tbWFuZHMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbHRlcmVkIG91dHB1dC4gVGhlIGZpbHRlcmluZyB1c2VzXFxuK3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxcbitcXG4rRWFjaCBmaWxlIGRlc2NyaXB0b3IgbWFpbnRhaW5zIGl0cyBvd24gZmlsdGVyIHN0YXRlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGVcXG4raW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcXG4rdGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcXG4rXFxuK1xcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAgXFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XFxuK1xcbitcXHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgXFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xcbmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5jYWU1YWJmMGFjOWFmYSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX293bmVyLmNcXG4rKysgYi9tbS9wYWdlX293bmVyLmNcXG5AQCAtNTQsNiArNTQsMjUgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XFxuIFxcdHU4IGZsYWdzO1xcbiB9O1xcbiBcXG4rZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUge1xcbitcXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxcbitcXHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcXG4rXFx0UEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7XFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVxcdD0gXFxcInN0YWNrXFxcIixcXG4rXFx0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVxcdD0gXFxcImhhbmRsZVxcXCIsXFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cXHQ9IFxcXCJzdGFja19oYW5kbGVcXFwiLFxcbit9O1xcbitcXG4rc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlIHtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcXG4rXFx0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xcbitcXHRib29sIG5pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbit9O1xcbitcXG4gc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7XFxuIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHBhZ2Vfb3duZXJfaW5pdGVkKTtcXG4gXFxuQEAgLTU0NywxNiArNTY2LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxcbiBzdGF0aWMgc3NpemVfdFxcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcixcXG4tXFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKVxcbitcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuK1xcdFxcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xcbiBcXHRjaGFyICprYnVmO1xcbitcXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0Y291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBQQUdFX1NJWkUpO1xcbiBcXHRrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICgha2J1ZilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3RhdGUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0cHJpbnRfbW9kZSA9IHN0YXRlLVxcdTAwM2VwcmludF9tb2RlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0cmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LFxcbiBcXHRcXHRcXHRcXFwiUGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBwYWdlX293bmVyLVxcdTAwM2VnZnBfbWFzayxcXG5AQCAtNTc1LDkgKzYwMSwxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdG1pZ3JhdGV0eXBlX25hbWVzW3BhZ2VibG9ja19tdF0sXFxuIFxcdFxcdFxcdFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4tXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XFxuK1xcdFxcdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IGNvdW50KVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xcbitcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcXFwiaGFuZGxlOiAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGhhbmRsZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbiBcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbkBAIC02NjQsNiArNjk5LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gXFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4rXFx0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtNzQwLDE1ICs3NzcsMzcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0aWYgKCFoYW5kbGUpXFxuIFxcdFxcdFxcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcXG4gXFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCkge1xcbitcXHRcXHRcXHRpbnQgbmlkO1xcbitcXHRcXHRcXHRtZW1kZXNjX2ZsYWdzX3QgcGFnZV9mbGFncyA9IFJFQURfT05DRShwYWdlLVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkXFxuK1xcdFxcdFxcdCAqIFZNX0JVR19PTiB3aGVuIGFjY2Vzc2luZyBwb2lzb25lZCBwYWdlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikge1xcbitcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGV4dF9wdXRfY29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmlkID0gbWVtZGVzY19uaWQocGFnZV9mbGFncyk7XFxuK1xcdFxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyKSkge1xcbitcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGV4dF9wdXRfY29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0XFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xcbiBcXHRcXHQqcHBvcyA9IHBmbiArIDE7XFxuIFxcbiBcXHRcXHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xcbiBcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiBcXHRcXHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdG1wLCBoYW5kbGUsIHN0YXRlKTtcXG4gZXh0X3B1dF9jb250aW51ZTpcXG4gXFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC04NDcsNyArOTA2LDEyMiBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbiBcXHRcXHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XFxuK1xcbitcXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XFxuK1xcdGlmICghc3RhdGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN0YXRlLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xcbitcXHRub2Rlc19jbGVhcihzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcik7XFxuK1xcdHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gc3RhdGU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRrZnJlZShmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuK1xcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRjaGFyICprYnVmO1xcbitcXHRjaGFyICpvcmlnO1xcbitcXHRjaGFyICp0b2tlbjtcXG4rXFx0aW50IHJldDtcXG4rXFx0c2l6ZV90IG1heF9pbnB1dF9sZW47XFxuK1xcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xcbitcXHRub2RlbWFza190IG5ld19uaWRfZmlsdGVyO1xcbitcXHRib29sIG5ld19uaWRfZmlsdGVyX2VuYWJsZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOlxcbitcXHQgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoXFxcIm1vZGU9c3RhY2tfaGFuZGxlXFxcIilcXG4rXFx0ICogICAgICAgIHdpdGggc3VmZmljaWVudCBidWZmZXJcXG4rXFx0ICogLSA2ICogTUFYX05VTU5PREVTOiB3b3JzdCBjYXNlIGZvciBuaWQgbGlzdFxcbitcXHQgKiAgIFdvcnN0IGNhc2UgcGVyIG5vZGU6IFxcXCIsTk5OTk5cXFwiIChjb21tYSArIDUtZGlnaXQgbm9kZSBudW1iZXIpID0gNiBieXRlc1xcbitcXHQgKi9cXG4rXFx0bWF4X2lucHV0X2xlbiA9IDMyICsgNiAqIE1BWF9OVU1OT0RFUztcXG4rXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlIG1heF9pbnB1dF9sZW4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcXG4rXFx0aWYgKElTX0VSUihrYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XFxuK1xcbitcXHRvcmlnID0ga2J1ZjtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRuZXdfcHJpbnRfbW9kZSA9IHN0YXRlLVxcdTAwM2VwcmludF9tb2RlO1xcbitcXHRuZXdfbmlkX2ZpbHRlciA9IHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyO1xcbitcXHRuZXdfbmlkX2ZpbHRlcl9lbmFibGVkID0gc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3RhdGUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXFx1MDAyNmtidWYsIFxcXCIgXFxcXHRcXFxcblxcXCIpKSAhPSBOVUxMKSB7XFxuK1xcdFxcdGlmICgqdG9rZW4gPT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIXN0cm5jbXAodG9rZW4sIFxcXCJtb2RlPVxcXCIsIDUpKSB7XFxuK1xcdFxcdFxcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dG9rZW4gKyA1KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdFxcdG5ld19wcmludF9tb2RlID0gcmV0O1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcXFwibmlkPVxcXCIsIDQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IG5vZGVsaXN0X3BhcnNlKHRva2VuICsgNCwgbmV3X25pZF9maWx0ZXIpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFxuK1xcdFxcdFxcdGlmIChub2Rlc19lbXB0eShuZXdfbmlkX2ZpbHRlcikpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2Ugd2FudCB0byBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IG51bWEgbm9kZXMsIHNvIG1ha2Ugc3VyZVxcbitcXHRcXHRcXHQgKiB0aGF0IHRoZSBzcGVjaWZpZWQgbm9kZXMgaGF2ZSBtZW1vcnkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoIW5vZGVzX3N1YnNldChuZXdfbmlkX2ZpbHRlciwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRuZXdfbmlkX2ZpbHRlcl9lbmFibGVkID0gdHJ1ZTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdGF0ZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRzdGF0ZS1cXHUwMDNlcHJpbnRfbW9kZSA9IG5ld19wcmludF9tb2RlO1xcbitcXHRzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlciA9IG5ld19uaWRfZmlsdGVyO1xcbitcXHRzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3RhdGUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldCA9IGNvdW50O1xcbitcXG4rb3V0X2ZyZWU6XFxuK1xcdGtmcmVlKG9yaWcpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxuK1xcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuK1xcdC5vcGVuXFx0XFx0PSBwYWdlX293bmVyX29wZW4sXFxuK1xcdC5yZWxlYXNlXFx0PSBwYWdlX293bmVyX3JlbGVhc2UsXFxuK1xcdC53cml0ZVxcdFxcdD0gcGFnZV9vd25lcl93cml0ZSxcXG4gXFx0LnJlYWRcXHRcXHQ9IHJlYWRfcGFnZV9vd25lcixcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gbHNlZWtfcGFnZV9vd25lcixcXG4gfTtcXG5AQCAtOTgwLDcgKzExNTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicGFnZV9vd25lclxcXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwYWdlX293bmVyXFxcIiwgMDYwMCwgTlVMTCwgTlVMTCwgXFx1MDAyNnBhZ2Vfb3duZXJfZm9wcyk7XFxuIFxcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcXFwicGFnZV9vd25lcl9zdGFja3NcXFwiLCBOVUxMKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19zdGFja3NcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxcbmluZGV4IGY1NzI1YjVjMjNhYTI2Li44NTgxODZhNmVlZmRiZCAxMDA2NDRcXG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXFxuQEAgLTMsNyArMyw3IEBAXFxuICNcXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcXG4gXFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcXG4gXFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXFxuQEAgLTIzLDcgKzIzLDcgQEAgJChMSUJTKTpcXG4gXFx0JChDQykgJChDRkxBR1MpIC1vICRAICRcXHUwMDNjICQoTERGTEFHUylcXG4gXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbiBcXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cXG4gXFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuY1xcbkBAIC0wLDAgKzEsMzEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFVzZXItc3BhY2UgaGVscGVyIHRvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dCBwZXItZmRcXG4rICpcXG4rICogRXhhbXBsZSB1c2U6XFxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZVxcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCwxLDJcXG4rICpcXG4rICogU2VlIERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3R5cGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIE1BWF9DTURfTEVOXFx0NTEyXFxuK1xcbitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKVxcbit7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiVXNhZ2U6ICVzIFtPUFRJT05TXVxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5PcHRpb25zOlxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtbSwgLS1tb2RlIE1PREUgICAgICA6IHByaW50X21vZGUgKHN0YWNrLCBoYW5kbGUsIG9yIHN0YWNrX2hhbmRsZSlcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLW4sIC0tbmlkIE5JRF9MSVNUICAgOiBOVU1BIG5vZGUgSURzIChjb21tYS1zZXBhcmF0ZWQgb3IgcmFuZ2VzKVxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtbywgLS1vdXRwdXQgRklMRSAgICA6IG91dHB1dCBmaWxlIChkZWZhdWx0OiBzdGRvdXQpXFxcXG5cXFwiKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC1oLCAtLWhlbHAgICAgICAgICAgIDogc2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5FeGFtcGxlczpcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgJXMgLW0gc3RhY2tcXFxcblxcXCIsIHByb2cpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgJXMgLW0gaGFuZGxlXFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIHN0YWNrX2hhbmRsZVxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbSBzdGFjayAtbyBvdXRwdXQudHh0XFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1uIDAsMSwyXFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIHN0YWNrIC1uIDBcXFxcblxcXCIsIHByb2cpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSlcXG4re1xcbitcXHRpZiAoc3RyY21wKG1vZGUsIFxcXCJzdGFja1xcXCIpID09IDAgfHxcXG4rXFx0ICAgIHN0cmNtcChtb2RlLCBcXFwiaGFuZGxlXFxcIikgPT0gMCB8fFxcbitcXHQgICAgc3RyY21wKG1vZGUsIFxcXCJzdGFja19oYW5kbGVcXFwiKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEludmFsaWQgbW9kZSAnJXMnXFxcXG5cXFwiLCBtb2RlKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJWYWxpZCBtb2Rlczogc3RhY2ssIGhhbmRsZSwgc3RhY2tfaGFuZGxlXFxcXG5cXFwiKTtcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZhbGlkYXRlX25pZF9saXN0KGNvbnN0IGNoYXIgKm5pZF9saXN0KVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnA7XFxuK1xcdGludCBpID0gMDtcXG4rXFx0aW50IGhhc19kaWdpdCA9IDA7XFxuK1xcdGludCBpbl9yYW5nZSA9IDA7XFxuK1xcdGludCBwcmV2X251bSA9IDA7XFxuK1xcdGludCBjdXJyX251bSA9IDA7XFxuK1xcbitcXHRpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHArKykge1xcbitcXHRcXHRpZiAoKnAgPT0gJywnKSB7XFxuK1xcdFxcdFxcdGlmICghaGFzX2RpZ2l0KSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChpbl9yYW5nZSBcXHUwMDI2XFx1MDAyNiBwcmV2X251bSBcXHUwMDNlIGN1cnJfbnVtKSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiRXJyb3I6IEludmFsaWQgcmFuZ2UgJWQtJWQgKHN0YXJ0IG11c3QgYmUgXFx1MDAzYz0gZW5kKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cHJldl9udW0sIGN1cnJfbnVtKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGkgPSAwO1xcbitcXHRcXHRcXHRoYXNfZGlnaXQgPSAwO1xcbitcXHRcXHRcXHRpbl9yYW5nZSA9IDA7XFxuK1xcdFxcdFxcdHByZXZfbnVtID0gMDtcXG4rXFx0XFx0XFx0Y3Vycl9udW0gPSAwO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCpwID09ICctJykge1xcbitcXHRcXHRcXHRpZiAoIWhhc19kaWdpdCkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCBcXFwiKTtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCIoZGFzaCB3aXRob3V0IHByZWNlZGluZyBudW1iZXIpXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChpbl9yYW5nZSkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBNdWx0aXBsZSBkYXNoZXMgaW4gbmlkX2xpc3RcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cHJldl9udW0gPSBjdXJyX251bTtcXG4rXFx0XFx0XFx0Y3Vycl9udW0gPSAwO1xcbitcXHRcXHRcXHRpID0gMDtcXG4rXFx0XFx0XFx0aGFzX2RpZ2l0ID0gMDtcXG4rXFx0XFx0XFx0aW5fcmFuZ2UgPSAxO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpwKSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIGNoYXJhY3RlciAnJWMnIGluIG5pZF9saXN0XFxcXG5cXFwiLCAqcCk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZSA1KSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IE5JRCB0b28gbG9uZyAobWF4IDY1NTM2KVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRjdXJyX251bSA9IGN1cnJfbnVtICogMTAgKyAoKnAgLSAnMCcpO1xcbitcXHRcXHRpKys7XFxuK1xcdFxcdGhhc19kaWdpdCA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGFzX2RpZ2l0KSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW5fcmFuZ2UgXFx1MDAyNlxcdTAwMjYgcHJldl9udW0gXFx1MDAzZSBjdXJyX251bSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG4rXFx0XFx0XFx0XFxcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFxcdTAwM2M9IGVuZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByZXZfbnVtLCBjdXJyX251bSk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMO1xcbitcXHRjaGFyIGZpbHRlcl9jbWRbTUFYX0NNRF9MRU5dO1xcbitcXHRGSUxFICpvdXRwdXQgPSBOVUxMO1xcbitcXHRpbnQgZmQgPSAtMTtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdGNoYXIgYnVmWzQwOTZdO1xcbitcXHRpbnQgb3B0O1xcbitcXHRzaXplX3QgY21kX2xlbiA9IDA7XFxuK1xcbitcXHRzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7XFxuK1xcbitcXHRzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHtcXG4rXFx0XFx0e1xcXCJtb2RlXFxcIixcXHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJ20nfSxcXG4rXFx0XFx0e1xcXCJuaWRcXFwiLFxcdFxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbid9LFxcbitcXHRcXHR7XFxcIm91dHB1dFxcXCIsXFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICdvJ30sXFxuK1xcdFxcdHtcXFwiaGVscFxcXCIsXFx0bm9fYXJndW1lbnQsXFx0ICAgMCwgJ2gnfSxcXG4rXFx0XFx0ezAsIDAsIDAsIDB9XFxuK1xcdH07XFxuK1xcbitcXHRmaWx0ZXJfY21kWzBdID0gJ1xcXFwwJztcXG4rXFxuK1xcdGlmIChhcmdjIFxcdTAwM2UgMSkge1xcbitcXHRcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIGFyZ2M7IGkrKykge1xcbitcXHRcXHRcXHRpZiAoc3RyY21wKGFyZ3ZbaV0sIFxcXCItaFxcXCIpID09IDAgfHwgc3RyY21wKGFyZ3ZbaV0sIFxcXCItLWhlbHBcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqL1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXFxcIiwgRl9PSykgIT0gMCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKVxcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwZXJyb3IoXFxcIkVycm9yIGFjY2Vzc2luZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXFxcIik7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTWFrZSBzdXJlIHBhZ2Vfb3duZXIgaXMgZW5hYmxlZCBpbiBrZXJuZWxcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwibTpuOm86aFxcXCIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7XFxuK1xcdFxcdGludCBsZW47XFxuK1xcbitcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbitcXHRcXHRjYXNlICdtJzoge1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICptb2RlID0gb3B0YXJnO1xcbitcXG4rXFx0XFx0XFx0aWYgKHZhbGlkYXRlX21vZGUobW9kZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlc21vZGU9JXNcXFwiLCBjbWRfbGVuIFxcdTAwM2UgMCA/IFxcXCIgXFxcIiA6IFxcXCJcXFwiLCBtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgY21kX2xlbiArIGxlbiBcXHUwMDNlPSBNQVhfQ01EX0xFTikge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y21kX2xlbiArPSBsZW47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgJ24nOiB7XFxuK1xcdFxcdFxcdGNvbnN0IGNoYXIgKm5pZF9saXN0ID0gb3B0YXJnO1xcbitcXG4rXFx0XFx0XFx0aWYgKHZhbGlkYXRlX25pZF9saXN0KG5pZF9saXN0KSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHRsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzbmlkPSVzXFxcIiwgY21kX2xlbiBcXHUwMDNlIDAgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIiwgbmlkX2xpc3QpO1xcbitcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCBjbWRfbGVuICsgbGVuIFxcdTAwM2U9IE1BWF9DTURfTEVOKSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IENvbW1hbmQgdG9vIGxvbmdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjbWRfbGVuICs9IGxlbjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2FzZSAnbyc6XFxuK1xcdFxcdFxcdG91dHB1dF9maWxlID0gb3B0YXJnO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnaCc6XFxuK1xcdFxcdFxcdC8qIEFscmVhZHkgaGFuZGxlZCBhYm92ZSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0dXNhZ2UoYXJndlswXSk7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEF0IGxlYXN0IG9uZSBmaWx0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgKi9cXG4rXFx0aWYgKGNtZF9sZW4gPT0gMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBBdCBsZWFzdCBvbmUgZmlsdGVyICgtbSBvciAtbikgbXVzdCBiZSBzcGVjaWZpZWRcXFxcblxcXFxuXFxcIik7XFxuK1xcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0LyogT3BlbiBwYWdlX293bmVyIGZvciByZWFkLXdyaXRlIC0gdGhpcyB3aWxsIGZhaWwgaWYga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCB3cml0ZSAqL1xcbitcXHRmZCA9IG9wZW4oXFxcIi9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcXFwiLCBPX1JEV1IpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFQUNDRVMgfHwgZXJybm8gPT0gRVBFUk0pIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBcXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiVGhpcyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBcXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwZXItZmQgZmlsdGVyaW5nLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUGxlYXNlIGVuc3VyZSB5b3UgaGF2ZSBhIGtlcm5lbCB3aXRoIFxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInBlci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cXFxcblxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIkVycm9yIG9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3V0cHV0X2ZpbGUpIHtcXG4rXFx0XFx0b3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsIFxcXCJ3XFxcIik7XFxuK1xcdFxcdGlmICghb3V0cHV0KSB7XFxuK1xcdFxcdFxcdHBlcnJvcihcXFwib3BlbiBvdXRwdXQgZmlsZVxcXCIpO1xcbitcXHRcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG91dHB1dCA9IHN0ZG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gd3JpdGUoZmQsIGZpbHRlcl9jbWQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUlOVkFMKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJQb3NzaWJsZSBjYXVzZXM6XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC0gS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyLWZkIGZpbHRlcmluZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC0gVW5rbm93biByZWFzb25cXFxcblxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIndyaXRlIGZpbHRlciBjb21tYW5kXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgoc2l6ZV90KXJldCAhPSBzdHJsZW4oZmlsdGVyX2NtZCkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcXFxcblxcXCIsIHJldCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcXG4rXFxuK1xcdC8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovXFxuK1xcdHJldCA9IDA7XFxuK1xcdHdoaWxlICgocmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzaXplX3Qgd3JpdHRlbiA9IGZ3cml0ZShidWYsIDEsIHJldCwgb3V0cHV0KTtcXG4rXFxuK1xcdFxcdGlmICh3cml0dGVuICE9IChzaXplX3QpcmV0KSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFUElQRSkge1xcbitcXHRcXHRcXHRcXHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRwZXJyb3IoXFxcIndyaXRlIG91dHB1dFxcXCIpO1xcbitcXHRcXHRcXHRyZXQgPSAtMTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGVycm9yKFxcXCJyZWFkIHBhZ2Vfb3duZXJcXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmZmx1c2gob3V0cHV0KSkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcXG4rXFx0XFx0XFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJmbHVzaCBvdXRwdXRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0ID0gLTE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRjbG9zZShmZCk7XFxuK1xcdGlmIChvdXRwdXQgIT0gc3Rkb3V0KVxcbitcXHRcXHRmY2xvc2Uob3V0cHV0KTtcXG4rXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyAxIDogMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODowMS4wMjc4OTY4OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTk0OTE5NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX293bmVyX29wZW5cIixcbiAgICBcInBhZ2Vfb3duZXJfcmVsZWFzZVwiLFxuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicmVhZF9wYWdlX293bmVyXCIsXG4gICAgXCJwcmludF9wYWdlX293bmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3cml0ZSBpbnRlcmZhY2UgdG8gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIHRvIGFsbG93IGZpbHRlcmluZyBwYWdlIG93bmVyIG91dHB1dCBieSBwcmludCBtb2RlIGFuZCBOVU1BIG5vZGUuIEl0IGludHJvZHVjZXMgbmV3IHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGVidWdmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhcnNpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYXJlIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNThmMGNiZjI3YzFlNDg3YWQwODU5NzFkNWRiMWU3Y2ZlYzQxYjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMDQ6NDc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggNmIxMmYzYjAwN2VjOTEuLjM4M2U1OWM0Mjc0M2JkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuQEAgLTY1LDcgKzY1LDE0IEBAIHVuLXRyYWNraW5nIHN0YXRlLlxuIFVzYWdlXG4gPT09PT1cbiBcbi0xKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcjo6XG4rMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcbitcbitUbyBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6XG4rXG4rXHRjZCB0b29scy9tbVxuK1x0bWFrZSBwYWdlX293bmVyX2ZpbHRlclxuK1xuK1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XG4gXG4gXHRjZCB0b29scy9tbVxuIFx0bWFrZSBwYWdlX293bmVyX3NvcnRcbkBAIC03NCw3ICs4MSwxMSBAQCBVc2FnZVxuIFxuIDMpIERvIHRoZSBqb2IgdGhhdCB5b3Ugd2FudCB0byBkZWJ1Zy5cbiBcbi00KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XG4rNCkgKE9wdGlvbmFsKSBGaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6OlxuK1xuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwxLDIgXHUwMDNlIGZpbHRlcmVkX3BhZ2Vfb3duZXIudHh0XG4rXG4rNSkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OlxuIFxuIFx0Y2F0IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJfc3RhY2tzL3Nob3dfc3RhY2tzIFx1MDAzZSBzdGFja3MudHh0XG4gXHRjYXQgc3RhY2tzLnR4dFxuQEAgLTI2MywzICsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcbiBcdGZcdFx0ZnJlZVx0XHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxuIFx0c3RcdFx0c3RhY2t0cmFjZVx0c3RhY2sgdHJhY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdGlvblxuIFx0YXRvclx0XHRhbGxvY2F0b3JcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXG4rXG4rRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxuK3doaWNoIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGluIHVzZXJzcGFjZS5cbitcbitUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xuK2NhcGFiaWxpdHkuIEl0IHN1cHBvcnRzIHR3byB0eXBlcyBvZiBmaWx0ZXJzOlxuK1xuKzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxuK1x0LSBgYHN0YWNrYGA6IFByaW50IGZ1bGwgc3RhY2sgdHJhY2VzIChkZWZhdWx0LCBjb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgdXNhZ2UpXG4rXHQtIGBgaGFuZGxlYGA6IFByaW50IG9ubHkgc3RhY2sgaGFuZGxlIG51bWJlcnMgKG11Y2ggZmFzdGVyLCBzbWFsbGVyIG91dHB1dClcbitcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXG4rXG4rXHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxuK1x0VGhlIG1hcHBpbmcgZnJvbSBoYW5kbGVzIHRvIGFjdHVhbCBzdGFjayB0cmFjZXMgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGVcbitcdHNob3dfc3RhY2tzX2hhbmRsZXMgaW50ZXJmYWNlLlxuK1xuKzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXG4rXHQtIFN1cHBvcnRzIHNpbmdsZSBub2RlOiBgYC1uIDBgYFxuK1x0LSBNdWx0aXBsZSBub2RlczogYGAtbiAwLDEsMmBgXG4rXHQtIFJhbmdlczogYGAtbiAwLTNgYFxuK1x0LSBNaXhlZCBmb3JtYXQ6IGBgLW4gMCwyLTMsNWBgXG4rXG4rVXNhZ2UgZXhhbXBsZXM6OlxuK1xuK1x0IyBGaWx0ZXIgYnkgcHJpbnQgbW9kZVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcbitcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gc3RhY2tfaGFuZGxlXG4rXG4rXHQjIEZpbHRlciBieSBOVU1BIG5vZGVcbitcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMFxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcbitcbitcdCMgQ29tYmluZWQgZmlsdGVyc1xuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFjayAtbiAwLDEsMlxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwyLTNcbitcbitcdCMgU2F2ZSB0byBmaWxlXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XG4rXG4rVGhlIGhhbmRsZSBtb2RlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgYW5kIHBlcmZvcm1hbmNlLWNyaXRpY2FsXG4rc2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxuK3JlZHVjZSBvdXRwdXQgc2l6ZSBieSB+NjYlICg4NE1CIHZzIDI0NE1CKSBhbmQgaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlIGJ5IH40LjR4XG4rY29tcGFyZWQgdG8gZnVsbCBzdGFjayBvdXRwdXQuXG4rXG4rVGhlIE5VTUEgbm9kZSBmaWx0ZXIgaXMgdXNlZnVsIGZvciBOVU1BLWF3YXJlIG1lbW9yeSBhbGxvY2F0aW9uIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuXG4rXG4rQmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXG4rd3JpdGVzIGZpbHRlciBjb21tYW5kcyBiZWZvcmUgcmVhZGluZyB0aGUgZmlsdGVyZWQgb3V0cHV0LiBUaGUgZmlsdGVyaW5nIHVzZXNcbitwZXItZmlsZS1kZXNjcmlwdG9yIHN0YXRlLCBhbGxvd2luZyBlYWNoIG9wZW4oKSB0byBoYXZlIGluZGVwZW5kZW50IGZpbHRlciBzZXR0aW5ncy5cbitcbitFYWNoIGZpbGUgZGVzY3JpcHRvciBtYWludGFpbnMgaXRzIG93biBmaWx0ZXIgc3RhdGUsIHNvIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZVxuK2luZGVwZW5kZW50IGZpbHRlcmluZyBvcGVyYXRpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiBGb3IgZXhhbXBsZSwgaW4gZGlmZmVyZW50XG4rdGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcbitcbitcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwIFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XG4rXG4rXHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAxIFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCA4MTc4ZTBiZTU1N2Y4Ny4uY2FlNWFiZjBhYzlhZmEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTU0LDYgKzU0LDI1IEBAIHN0cnVjdCBzdGFja19wcmludF9jdHgge1xuIFx0dTggZmxhZ3M7XG4gfTtcbiBcbitlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSB7XG4rXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxuK1x0UEFHRV9PV05FUl9QUklOVF9IQU5ETEUsXG4rXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3NbXSA9IHtcbitcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVx0PSBcInN0YWNrXCIsXG4rXHRbUEFHRV9PV05FUl9QUklOVF9IQU5ETEVdXHQ9IFwiaGFuZGxlXCIsXG4rXHRbUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEVdXHQ9IFwic3RhY2tfaGFuZGxlXCIsXG4rfTtcbitcbitzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUge1xuK1x0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcbitcdG5vZGVtYXNrX3QgbmlkX2ZpbHRlcjtcbitcdGJvb2wgbmlkX2ZpbHRlcl9lbmFibGVkO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK307XG4rXG4gc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7XG4gREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UocGFnZV9vd25lcl9pbml0ZWQpO1xuIFxuQEAgLTU0NywxNiArNTY2LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXG4tXHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcbitcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxuK1x0XHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdGludCByZXQsIHBhZ2VibG9ja19tdCwgcGFnZV9tdDtcbiBcdGNoYXIgKmtidWY7XG4rXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTtcbiBcdGtidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTtcbiBcdGlmICgha2J1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRwcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuIFx0cmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LFxuIFx0XHRcdFwiUGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXG5cIixcbiBcdFx0XHRwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBwYWdlX293bmVyLVx1MDAzZWdmcF9tYXNrLFxuQEAgLTU3NSw5ICs2MDEsMTggQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdG1pZ3JhdGV0eXBlX25hbWVzW3BhZ2VibG9ja19tdF0sXG4gXHRcdFx0XHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXG4tXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbi1cdFx0Z290byBlcnI7XG4rXHRpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSkge1xuK1x0XHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xuK1x0XHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcImhhbmRsZTogJXVcXG5cIixcbitcdFx0XHRcdCBoYW5kbGUpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4gXHRcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsXG5AQCAtNjY0LDYgKzY5OSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4rXHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNzQwLDE1ICs3NzcsMzcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiBcdFx0aWYgKCFoYW5kbGUpXG4gXHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuIFxuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQpIHtcbitcdFx0XHRpbnQgbmlkO1xuK1x0XHRcdG1lbWRlc2NfZmxhZ3NfdCBwYWdlX2ZsYWdzID0gUkVBRF9PTkNFKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQnlwYXNzIFBGX1BPSVNPTkVEX0NIRUNLKCkgaW4gcGFnZV90b19uaWQoKSB0byBhdm9pZFxuK1x0XHRcdCAqIFZNX0JVR19PTiB3aGVuIGFjY2Vzc2luZyBwb2lzb25lZCBwYWdlcy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAocGFnZV9mbGFncy5mID09IFBBR0VfUE9JU09OX1BBVFRFUk4pIHtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuK1x0XHRcdH1cbitcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbitcdFx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKSkge1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRnb3RvIGV4dF9wdXRfY29udGludWU7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3RhdGUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuIFx0XHQvKiBSZWNvcmQgdGhlIG5leHQgUEZOIHRvIHJlYWQgaW4gdGhlIGZpbGUgb2Zmc2V0ICovXG4gXHRcdCpwcG9zID0gcGZuICsgMTtcbiBcbiBcdFx0cGFnZV9vd25lcl90bXAgPSAqcGFnZV9vd25lcjtcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiBcdFx0cmV0dXJuIHByaW50X3BhZ2Vfb3duZXIoYnVmLCBjb3VudCwgcGZuLCBwYWdlLFxuLVx0XHRcdFx0XHUwMDI2cGFnZV9vd25lcl90bXAsIGhhbmRsZSk7XG4rXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NDcsNyArOTA2LDEyMiBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuIFx0XHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XG4rXG4rXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XG4rXHRpZiAoIXN0YXRlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnN0YXRlLVx1MDAzZWxvY2spO1xuK1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0s7XG4rXHRub2Rlc19jbGVhcihzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKTtcbitcdHN0YXRlLVx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCA9IGZhbHNlO1xuK1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBzdGF0ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbitcdFx0XHRcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuK1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuK3tcbitcdGNoYXIgKmtidWY7XG4rXHRjaGFyICpvcmlnO1xuK1x0Y2hhciAqdG9rZW47XG4rXHRpbnQgcmV0O1xuK1x0c2l6ZV90IG1heF9pbnB1dF9sZW47XG4rXHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBuZXdfcHJpbnRfbW9kZTtcbitcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XG4rXHRib29sIG5ld19uaWRfZmlsdGVyX2VuYWJsZWQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LypcbitcdCAqIE1heGltdW0gaW5wdXQgbGVuZ3RoIGZvciBmaWx0ZXIgY29tbWFuZHM6XG4rXHQgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoXCJtb2RlPXN0YWNrX2hhbmRsZVwiKVxuK1x0ICogICAgICAgIHdpdGggc3VmZmljaWVudCBidWZmZXJcbitcdCAqIC0gNiAqIE1BWF9OVU1OT0RFUzogd29yc3QgY2FzZSBmb3IgbmlkIGxpc3RcbitcdCAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogXCIsTk5OTk5cIiAoY29tbWEgKyA1LWRpZ2l0IG5vZGUgbnVtYmVyKSA9IDYgYnl0ZXNcbitcdCAqL1xuK1x0bWF4X2lucHV0X2xlbiA9IDMyICsgNiAqIE1BWF9OVU1OT0RFUztcbitcbitcdGlmIChjb3VudCBcdTAwM2UgbWF4X2lucHV0X2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRrYnVmID0gbWVtZHVwX3VzZXJfbnVsKGJ1ZiwgY291bnQpO1xuK1x0aWYgKElTX0VSUihrYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XG4rXG4rXHRvcmlnID0ga2J1ZjtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdG5ld19wcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbitcdG5ld19uaWRfZmlsdGVyID0gc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcjtcbitcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQ7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXHUwMDI2a2J1ZiwgXCIgXFx0XFxuXCIpKSAhPSBOVUxMKSB7XG4rXHRcdGlmICgqdG9rZW4gPT0gJ1xcMCcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghc3RybmNtcCh0b2tlbiwgXCJtb2RlPVwiLCA1KSkge1xuK1x0XHRcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcbitcdFx0XHRcdFx0XHR0b2tlbiArIDUpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRcdG5ld19wcmludF9tb2RlID0gcmV0O1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcIm5pZD1cIiwgNCkpIHtcbitcdFx0XHRyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiArIDQsIG5ld19uaWRfZmlsdGVyKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcbitcdFx0XHRpZiAobm9kZXNfZW1wdHkobmV3X25pZF9maWx0ZXIpKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlXG4rXHRcdFx0ICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRzdGF0ZS1cdTAwM2VwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdGF0ZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRyZXQgPSBjb3VudDtcbitcbitvdXRfZnJlZTpcbitcdGtmcmVlKG9yaWcpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQub3Blblx0XHQ9IHBhZ2Vfb3duZXJfb3BlbixcbitcdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbitcdC53cml0ZVx0XHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXG4gXHQucmVhZFx0XHQ9IHJlYWRfcGFnZV9vd25lcixcbiBcdC5sbHNlZWtcdFx0PSBsc2Vla19wYWdlX293bmVyLFxuIH07XG5AQCAtOTgwLDcgKzExNTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJwYWdlX293bmVyXCIsIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnBhZ2Vfb3duZXJfZm9wcyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGFnZV9vd25lclwiLCAwNjAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xuIFx0ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKFwicGFnZV9vd25lcl9zdGFja3NcIiwgTlVMTCk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19zdGFja3NcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXG5pbmRleCBmNTcyNWI1YzIzYWEyNi4uODU4MTg2YTZlZWZkYmQgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDcgKzMsNyBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbkBAIC0yMyw3ICsyMyw3IEBAICQoTElCUyk6XG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcbkBAIC0wLDAgKzEsMzEwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFVzZXItc3BhY2UgaGVscGVyIHRvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dCBwZXItZmRcbisgKlxuKyAqIEV4YW1wbGUgdXNlOlxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gc3RhY2tfaGFuZGxlXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAsMSwyXG4rICpcbisgKiBTZWUgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2N0eXBlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rXG4rI2RlZmluZSBNQVhfQ01EX0xFTlx0NTEyXG4rXG4rc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbit7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJVc2FnZTogJXMgW09QVElPTlNdXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFxuT3B0aW9uczpcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1tLCAtLW1vZGUgTU9ERSAgICAgIDogcHJpbnRfbW9kZSAoc3RhY2ssIGhhbmRsZSwgb3Igc3RhY2tfaGFuZGxlKVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgLW4sIC0tbmlkIE5JRF9MSVNUICAgOiBOVU1BIG5vZGUgSURzIChjb21tYS1zZXBhcmF0ZWQgb3IgcmFuZ2VzKVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgLWgsIC0taGVscCAgICAgICAgICAgOiBzaG93IHRoaXMgaGVscCBtZXNzYWdlXFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFxuRXhhbXBsZXM6XFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFja1xcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gaGFuZGxlXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFja19oYW5kbGVcXG5cIiwgcHJvZyk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzIC1tIHN0YWNrIC1vIG91dHB1dC50eHRcXG5cIiwgcHJvZyk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzIC1uIDAsMSwyXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFjayAtbiAwXFxuXCIsIHByb2cpO1xuK31cbitcbitzdGF0aWMgaW50IHZhbGlkYXRlX21vZGUoY29uc3QgY2hhciAqbW9kZSlcbit7XG4rXHRpZiAoc3RyY21wKG1vZGUsIFwic3RhY2tcIikgPT0gMCB8fFxuK1x0ICAgIHN0cmNtcChtb2RlLCBcImhhbmRsZVwiKSA9PSAwIHx8XG4rXHQgICAgc3RyY21wKG1vZGUsIFwic3RhY2tfaGFuZGxlXCIpID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IEludmFsaWQgbW9kZSAnJXMnXFxuXCIsIG1vZGUpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiVmFsaWQgbW9kZXM6IHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZVxcblwiKTtcbitcdHJldHVybiAtMTtcbit9XG4rXG4rc3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdClcbit7XG4rXHRjb25zdCBjaGFyICpwO1xuK1x0aW50IGkgPSAwO1xuK1x0aW50IGhhc19kaWdpdCA9IDA7XG4rXHRpbnQgaW5fcmFuZ2UgPSAwO1xuK1x0aW50IHByZXZfbnVtID0gMDtcbitcdGludCBjdXJyX251bSA9IDA7XG4rXG4rXHRpZiAoIW5pZF9saXN0IHx8IHN0cmxlbihuaWRfbGlzdCkgPT0gMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHAgPSBuaWRfbGlzdDsgKnA7IHArKykge1xuK1x0XHRpZiAoKnAgPT0gJywnKSB7XG4rXHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcblwiKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKGluX3JhbmdlIFx1MDAyNlx1MDAyNiBwcmV2X251bSBcdTAwM2UgY3Vycl9udW0pIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFx0XHRcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwiLFxuK1x0XHRcdFx0XHRwcmV2X251bSwgY3Vycl9udW0pO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdH1cbitcdFx0XHRpID0gMDtcbitcdFx0XHRoYXNfZGlnaXQgPSAwO1xuK1x0XHRcdGluX3JhbmdlID0gMDtcbitcdFx0XHRwcmV2X251bSA9IDA7XG4rXHRcdFx0Y3Vycl9udW0gPSAwO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICgqcCA9PSAnLScpIHtcbitcdFx0XHRpZiAoIWhhc19kaWdpdCkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4rXHRcdFx0XHRcdFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0IFwiKTtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFx0XHRcIihkYXNoIHdpdGhvdXQgcHJlY2VkaW5nIG51bWJlcilcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChpbl9yYW5nZSkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IE11bHRpcGxlIGRhc2hlcyBpbiBuaWRfbGlzdFxcblwiKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXHRcdFx0cHJldl9udW0gPSBjdXJyX251bTtcbitcdFx0XHRjdXJyX251bSA9IDA7XG4rXHRcdFx0aSA9IDA7XG4rXHRcdFx0aGFzX2RpZ2l0ID0gMDtcbitcdFx0XHRpbl9yYW5nZSA9IDE7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpwKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBJbnZhbGlkIGNoYXJhY3RlciAnJWMnIGluIG5pZF9saXN0XFxuXCIsICpwKTtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcbitcdFx0aWYgKGkgXHUwMDNlIDUpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogTklEIHRvbyBsb25nIChtYXggNjU1MzYpXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0XHRjdXJyX251bSA9IGN1cnJfbnVtICogMTAgKyAoKnAgLSAnMCcpO1xuK1x0XHRpKys7XG4rXHRcdGhhc19kaWdpdCA9IDE7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19kaWdpdCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcXG5cIik7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdGlmIChpbl9yYW5nZSBcdTAwMjZcdTAwMjYgcHJldl9udW0gXHUwMDNlIGN1cnJfbnVtKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFwiRXJyb3I6IEludmFsaWQgcmFuZ2UgJWQtJWQgKHN0YXJ0IG11c3QgYmUgXHUwMDNjPSBlbmQpXFxuXCIsXG4rXHRcdFx0cHJldl9udW0sIGN1cnJfbnVtKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4re1xuK1x0Y29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgPSBOVUxMO1xuK1x0Y2hhciBmaWx0ZXJfY21kW01BWF9DTURfTEVOXTtcbitcdEZJTEUgKm91dHB1dCA9IE5VTEw7XG4rXHRpbnQgZmQgPSAtMTtcbitcdHNzaXplX3QgcmV0O1xuK1x0Y2hhciBidWZbNDA5Nl07XG4rXHRpbnQgb3B0O1xuK1x0c2l6ZV90IGNtZF9sZW4gPSAwO1xuK1xuK1x0c2lnbmFsKFNJR1BJUEUsIFNJR19JR04pO1xuK1xuK1x0c3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7XG4rXHRcdHtcIm1vZGVcIixcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbSd9LFxuK1x0XHR7XCJuaWRcIixcdFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICduJ30sXG4rXHRcdHtcIm91dHB1dFwiLFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICdvJ30sXG4rXHRcdHtcImhlbHBcIixcdG5vX2FyZ3VtZW50LFx0ICAgMCwgJ2gnfSxcbitcdFx0ezAsIDAsIDAsIDB9XG4rXHR9O1xuK1xuK1x0ZmlsdGVyX2NtZFswXSA9ICdcXDAnO1xuK1xuK1x0aWYgKGFyZ2MgXHUwMDNlIDEpIHtcbitcdFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGFyZ2M7IGkrKykge1xuK1x0XHRcdGlmIChzdHJjbXAoYXJndltpXSwgXCItaFwiKSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCBcIi0taGVscFwiKSA9PSAwKSB7XG4rXHRcdFx0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQ2hlY2sgaWYgcGFnZV9vd25lciBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovXG4rXHRpZiAoYWNjZXNzKFwiL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwiLCBGX09LKSAhPSAwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgZG9lcyBub3QgZXhpc3RcXG5cIik7XG4rXHRcdGVsc2VcbitcdFx0XHRwZXJyb3IoXCJFcnJvciBhY2Nlc3NpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwiKTtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiTWFrZSBzdXJlIHBhZ2Vfb3duZXIgaXMgZW5hYmxlZCBpbiBrZXJuZWxcXG5cIik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcIm06bjpvOmhcIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHtcbitcdFx0aW50IGxlbjtcbitcbitcdFx0c3dpdGNoIChvcHQpIHtcbitcdFx0Y2FzZSAnbSc6IHtcbitcdFx0XHRjb25zdCBjaGFyICptb2RlID0gb3B0YXJnO1xuK1xuK1x0XHRcdGlmICh2YWxpZGF0ZV9tb2RlKG1vZGUpIFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbitcdFx0XHRcdCAgICAgICBcIiVzbW9kZT0lc1wiLCBjbWRfbGVuIFx1MDAzZSAwID8gXCIgXCIgOiBcIlwiLCBtb2RlKTtcbitcdFx0XHRpZiAobGVuIFx1MDAzYyAwIHx8IGNtZF9sZW4gKyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IENvbW1hbmQgdG9vIGxvbmdcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHR9XG4rXHRcdFx0Y21kX2xlbiArPSBsZW47XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSAnbic6IHtcbitcdFx0XHRjb25zdCBjaGFyICpuaWRfbGlzdCA9IG9wdGFyZztcbitcbitcdFx0XHRpZiAodmFsaWRhdGVfbmlkX2xpc3QobmlkX2xpc3QpIFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbitcdFx0XHRcdCAgICAgICBcIiVzbmlkPSVzXCIsIGNtZF9sZW4gXHUwMDNlIDAgPyBcIiBcIiA6IFwiXCIsIG5pZF9saXN0KTtcbitcdFx0XHRpZiAobGVuIFx1MDAzYyAwIHx8IGNtZF9sZW4gKyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IENvbW1hbmQgdG9vIGxvbmdcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHR9XG4rXHRcdFx0Y21kX2xlbiArPSBsZW47XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSAnbyc6XG4rXHRcdFx0b3V0cHV0X2ZpbGUgPSBvcHRhcmc7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2gnOlxuK1x0XHRcdC8qIEFscmVhZHkgaGFuZGxlZCBhYm92ZSAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuK1x0XHRcdHJldHVybiAxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBBdCBsZWFzdCBvbmUgZmlsdGVyIG11c3QgYmUgc3BlY2lmaWVkICovXG4rXHRpZiAoY21kX2xlbiA9PSAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBBdCBsZWFzdCBvbmUgZmlsdGVyICgtbSBvciAtbikgbXVzdCBiZSBzcGVjaWZpZWRcXG5cXG5cIik7XG4rXHRcdHVzYWdlKGFyZ3ZbMF0pO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdC8qIE9wZW4gcGFnZV9vd25lciBmb3IgcmVhZC13cml0ZSAtIHRoaXMgd2lsbCBmYWlsIGlmIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgd3JpdGUgKi9cbitcdGZkID0gb3BlbihcIi9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIiwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVQRVJNKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcImRvZXMgbm90IHN1cHBvcnQgd3JpdGUgYWNjZXNzXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlRoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcInBlci1mZCBmaWx0ZXJpbmcuXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlBsZWFzZSBlbnN1cmUgeW91IGhhdmUgYSBrZXJuZWwgd2l0aCBcIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicGVyLWZkIGZpbHRlcmluZyBzdXBwb3J0LlxcblwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwZXJyb3IoXCJFcnJvciBvcGVuaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRpZiAob3V0cHV0X2ZpbGUpIHtcbitcdFx0b3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsIFwid1wiKTtcbitcdFx0aWYgKCFvdXRwdXQpIHtcbitcdFx0XHRwZXJyb3IoXCJvcGVuIG91dHB1dCBmaWxlXCIpO1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0b3V0cHV0ID0gc3Rkb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gd3JpdGUoZmQsIGZpbHRlcl9jbWQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFSU5WQUwpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogS2VybmVsIHJlamVjdGVkIHRoZSBmaWx0ZXIgY29tbWFuZC5cXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiUG9zc2libGUgY2F1c2VzOlxcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCIgIC0gS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyLWZkIGZpbHRlcmluZ1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCIgIC0gTlVNQSBub2RlIGhhcyBubyBtZW1vcnlcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiICAtIFVua25vd24gcmVhc29uXFxuXCIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBlcnJvcihcIndyaXRlIGZpbHRlciBjb21tYW5kXCIpO1xuK1x0XHR9XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKChzaXplX3QpcmV0ICE9IHN0cmxlbihmaWx0ZXJfY21kKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcXG5cIiwgcmV0LCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xuK1xuK1x0LyogUmVhZCBhbmQgZGlzcGxheSBmaWx0ZXJlZCBvdXRwdXQgKi9cbitcdHJldCA9IDA7XG4rXHR3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcdTAwM2UgMCkge1xuK1x0XHRzaXplX3Qgd3JpdHRlbiA9IGZ3cml0ZShidWYsIDEsIHJldCwgb3V0cHV0KTtcbitcbitcdFx0aWYgKHdyaXR0ZW4gIT0gKHNpemVfdClyZXQpIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbitcdFx0XHRcdC8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovXG4rXHRcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0fVxuK1x0XHRcdHBlcnJvcihcIndyaXRlIG91dHB1dFwiKTtcbitcdFx0XHRyZXQgPSAtMTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwZXJyb3IoXCJyZWFkIHBhZ2Vfb3duZXJcIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKGZmbHVzaChvdXRwdXQpKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFUElQRSkge1xuK1x0XHRcdC8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovXG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwZXJyb3IoXCJmbHVzaCBvdXRwdXRcIik7XG4rXHRcdFx0cmV0ID0gLTE7XG4rXHRcdH1cbitcdH1cbitcbitvdXQ6XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAob3V0cHV0ICE9IHN0ZG91dClcbitcdFx0ZmNsb3NlKG91dHB1dCk7XG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gMSA6IDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MDEuMDI3ODk4NjY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyMTcyNDU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQYWdlIE93bmVyIEZpbHRlcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyBiZWVuIHN1Ym1pdHRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgaW50ZXJlc3RpbmcgYWRkaXRpb24gdG8gdGhlIGBwYWdlX293bmVyYCBkZWJ1Z2dpbmcgZmVhdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgYWRkcyBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHByaW50IG1vZGVzIChzdGFjaywgaGFuZGxlLCBzdGFja19oYW5kbGUpIGFuZCBOVU1BIG5vZGUgSURzLiBUaGUgY29yZSBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGNlbnRlcnMgYXJvdW5kIGEgbmV3IGB3cml0ZWAgb3BlcmF0aW9uIG9uIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhpcyB3cml0ZSBvcGVyYXRpb24gaXMgd2hhdCBzZXRzIHVwIGEgZmlsdGVyIHN0YXRlLCBzdG9yZWQgaW4gYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCwgd2hpY2ggYHJlYWRfcGFnZV9vd25lcmAgdGhlbiByZXNwZWN0cy5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFRoZSBgcGFnZV9vd25lcmAgZmVhdHVyZSBpdHNlbGYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19QQUdFX09XTkVSYCwgc28gdGhhdCdzIHRoZSBmaXJzdCBjb25maWcgSSB3YW50IHRvIGNoZWNrLiBHb29kLCBpdCdzIGEga2VybmVsIGNvbmZpZy4gTm93LCBsZXTigJlzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVlbiBhZGRlZCBhbmQgbW9kaWZpZWQgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIEkgc2VlIG5ldyBmdW5jdGlvbnM6IGBwYWdlX293bmVyX3dyaXRlYCwgYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYHJlYWRfcGFnZV9vd25lcmAgYW5kIGBwcmludF9wYWdlX293bmVyYC5cblxuVGhpcyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGEgZGVidWdmcyBmaWxlLiBBbmQgaXQncyBwYXJzaW5nIHVzZXIgaW5wdXQuIEkgc2VlIGBzdHJzZXBgLCBgc3lzZnNfbWF0Y2hfc3RyaW5nYCwgYG5vZGVsaXN0X3BhcnNlYCwgYWxsIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIGNvdWxkIHVuY292ZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvci4gTWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIGBtZW1kdXBfdXNlcl9udWxgLCBhbmQgdGhlcmUncyBhIHNwaW5sb2NrIHdpdGggYHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN0YXRlLVx1MDAzZWxvY2ssIGZsYWdzKWAuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBhc3N1bWluZyBkZWJ1Z2ZzIGlzIG1vdW50ZWQsIGFuZCBnaXZlbiBTeXprYWxsZXIgcnVucyBhcyByb290IG9yIGNhbiBhY2Nlc3MgZGVidWdmcywgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGNvZGUuIFRoZSBrZXkgaXMgcm9vdC4gV2FpdC4uLiBJIGFsc28gc2VlIHRoZSBmaWxlIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBjaGFuZ2VkLiBUaGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggMDYwMCBwZXJtaXNzaW9ucywgc28gcm9vdCBjYW4gd3JpdGUuIFBlcmZlY3QuXG5cblNvLCB0aGUgZm9jdXMgcG9pbnRzIGFyZTogYHBhZ2Vfb3duZXJfd3JpdGVgLCBgcGFnZV9vd25lcl9vcGVuYCwgYHBhZ2Vfb3duZXJfcmVsZWFzZWAsIGByZWFkX3BhZ2Vfb3duZXJgLCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgLiBHb29kLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgYFBBR0VfT1dORVJgLiBBbmQsIGBERUJVR19GU2AgaXMgbmVlZGVkLCBidXQgdGhhdCBpcyB1c3VhbGx5IGVuYWJsZWQuIExldCdzIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYFBBR0VfT1dORVJgIHRvIGRvdWJsZSBjaGVjay4gTG9va3MgbGlrZSB3ZSdyZSBnb29kIHRvIGdvLiBUaW1lIHRvIHNwaW4gdXAgdGhlIGZ1enplcnMgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjA4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MTAuODQ5NjI0OTg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjU5ODAyODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTA0LVxcbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXFx0Ym9vbCBcXFwiVHJhY2sgcGFnZSBvd25lclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MTMuODc1NjEyOTU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NDE4MzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYFBBR0VfT1dORVJgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUEFHRV9PV05FUmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gVGltZSB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIExldCdzIGp1bXAgaW50byB0aGUgY29kZSBhbmQgaW52ZXN0aWdhdGUgdGhlIGBwYWdlX293bmVyX3dyaXRlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMhKSBhcmUgcHJvYmFibHkgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGUgYmVoYXZpb3Igd2l0aGluIHRoYXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODoxNi42MTk3OTg5MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NzYxNDkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX293bmVyX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz05MjU9c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtOTMwLVxcbm1tL3BhZ2Vfb3duZXIuYzo5MzE6c3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5tbS9wYWdlX293bmVyLmMtOTMyLVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTEwMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xcbi0tXFxubW0vcGFnZV9vd25lci5jLTEwMjMtXFx0LnJlbGVhc2VcXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcXG5tbS9wYWdlX293bmVyLmM6MTAyNDpcXHQud3JpdGVcXHRcXHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXFxubW0vcGFnZV9vd25lci5jLTEwMjUtXFx0LnJlYWRcXHRcXHQ9IHJlYWRfcGFnZV9vd25lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MTguNTg3NDE4NzkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NzMxMTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHJlYWRfcGFnZV9vd25lcmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgd2Ugc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmVhZF9wYWdlX293bmVyYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgcHJvYmFibHkgbWVhbnMgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBpdHMgbGlrZWx5IGNvZGUgcGF0aC4gSSB3YW50IHRvIHF1aWNrbHkgZW5zdXJlIHRoYXQ6XG5cbiogICBJdCdzIGhhbmRsaW5nIGFsbCBleHBlY3RlZCBlZGdlIGNhc2VzIHByb3Blcmx5LlxuKiAgIFRoZSBkYXRhIHZhbGlkYXRpb24gaXMgcm9idXN0IGVub3VnaCwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGluZ3MgbGlrZSBvd25lcnNoaXAsIHNlY3VyaXR5IGNvbnRleHQgYW5kIGFueSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBhY2Nlc3MgdGhlIHRhcmdldCBpbmZvcm1hdGlvbi5cbiogICBUaGF0IHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IG9wZW5pbmcgYW55IHNlY3VyaXR5IGhvbGVzLCBsaWtlIGV4cG9zaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBvciBjcmVhdGluZyBvcHBvcnR1bml0aWVzIGZvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi5cbiogICBJdCdzIHRocmVhZC1zYWZlIG9yIHByb3Blcmx5IHByb3RlY3RlZCBieSB3aGF0ZXZlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB3ZSdyZSB1c2luZywgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gZGVzaWduLCBvZiBjb3Vyc2UuXG4qICAgVGhhdCBwZXJmb3JtYW5jZSBpcyBhY2NlcHRhYmxlLiBJJ20gbm90IGV4cGVjdGluZyBhbnl0aGluZyBncm91bmRicmVha2luZyBoZXJlLCBidXQgSSBkb24ndCB3YW50IGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLlxuXG5UaGlzIGlzIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYXZvaWQgYSBwb3RlbnRpYWxseSBuYXN0eSBvdmVyc2lnaHQgbGF0ZXIuIEEgZ29vZCBmdW5jdGlvbiBuYW1lIGlzIG9ubHkgZ29vZCBhcyB0aGUgY29kZSB0aGF0IGV4ZWN1dGVzIGl0LiBJJ2xsIGdldCB0aGF0IGZyZXNoIGluIG15IG1pbmQgYW5kLCBqdXN0IGRvdWJsZSBjaGVjayBpdCwgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MjIuNDc0NzQwOTI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE5NDY0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9wYWdlX293bmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz02OTQ9c3RhdGljIHNzaXplX3RcXG5tbS9wYWdlX293bmVyLmM6Njk1OnJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxubW0vcGFnZV9vd25lci5jLTY5Ni17XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MTAyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMTAyNC1cXHQud3JpdGVcXHRcXHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXFxubW0vcGFnZV9vd25lci5jOjEwMjU6XFx0LnJlYWRcXHRcXHQ9IHJlYWRfcGFnZV9vd25lcixcXG5tbS9wYWdlX293bmVyLmMtMTAyNi1cXHQubGxzZWVrXFx0XFx0PSBsc2Vla19wYWdlX293bmVyLFxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weT0zMD1jbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTItICAgICAgICBpZiBsZW4oYXJndikgPT0gMDpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjUzOiAgICAgICAgICAgICAgc2VsZi5yZWFkX3BhZ2Vfb3duZXIoKVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNTQtICAgICAgICBlbGlmIGxlbihhcmd2KSA9PSAyOlxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS01Ni0gICAgICAgICAgICAgICAgcGZuID0gaW50KGFyZ3ZbMV0pXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo1NzogICAgICAgICAgICAgICAgc2VsZi5yZWFkX3BhZ2Vfb3duZXJfYnlfYWRkcihzZWxmLnBfb3BzLnBmbl90b19wYWdlKHBmbikpXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS01OC0gICAgICAgICAgICBlbHNlOlxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS05Ny1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5Ojk4OiAgICBkZWYgcmVhZF9wYWdlX293bmVyX2J5X2FkZHIoc2VsZiwgc3RydWN0X3BhZ2VfYWRkcik6XFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS05OS0gICAgICAgIHBhZ2UgPSBnZGIuVmFsdWUoc3RydWN0X3BhZ2VfYWRkcikuY2FzdCh1dGlscy5nZXRfcGFnZV90eXBlKCkucG9pbnRlcigpKVxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNDMtXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weToxNDQ6ICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNDUtICAgICAgICBwZm4gPSBzZWxmLm1pbl9wZm5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MjQuNTc2NjkyMzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxMDIwNjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgT3duZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHJlZmluaW5nIHRoZSBgcGFnZV9vd25lcmAgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgbGlrZSB3ZSdyZSBsZXZlcmFnaW5nIHRoZSBmaWx0ZXIgc3RhdGUgd2l0aGluIHRoZSBgcmVhZF9wYWdlX293bmVyYCBmdW5jdGlvbiwgYW5kIHRoYXQncyBnb29kOyBhbnkgb3B0aW1pemF0aW9uIHRoYXQgc3RyZWFtbGluZXMgdGhpcyBpcyB3ZWxjb21lLiBJdCdzIGFsc28gdG91Y2hpbmcgYHByaW50X3BhZ2Vfb3duZXJgLCB3aGljaCBJIGFzc3VtZSBpbmRpY2F0ZXMgYSBjaGFuZ2UgaW4gaG93IHdlJ3JlIHByZXNlbnRpbmcgdGhpcyBpbmZvcm1hdGlvbiDigJMgcG90ZW50aWFsbHkgaW1wcm92ZWQgY2xhcml0eSBvciBhZGRlZCBjb250ZXh0LlxuXG5UaGUgbWVhdCBvZiB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIHRoZXNlIG5ldyBmdW5jdGlvbnM6IGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYW5kIGBwYWdlX293bmVyX3dyaXRlYC4gVGhhdCdzIHdoZXJlIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uLiBUaGVzZSBzb3VuZCBsaWtlIHRoZXkncmUgbWFuYWdpbmcgYWNjZXNzIHRvIG9yIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2Ugb3duZXIgZGF0YSwgcGVyaGFwcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgc3RhdGUuXG5cblNvLCBsZXQncyBrZWVwIGFuIGV5ZSBvbiB0aGVzZSBmaXZlIGZ1bmN0aW9uIGNhbGxzOlxuKiAgIGBwYWdlX293bmVyX29wZW5gXG4qICAgYHBhZ2Vfb3duZXJfcmVsZWFzZWBcbiogICBgcGFnZV9vd25lcl93cml0ZWBcbiogICBgcmVhZF9wYWdlX293bmVyYFxuKiAgIGBwcmludF9wYWdlX293bmVyYFxuXG5CdXQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IHRoZSBgUEFHRV9PV05FUmAgY29uZmlnIGl0c2VsZiBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgIGFuZCBgU1RBQ0tUUkFDRV9TVVBQT1JUYC4gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBgbW0vS2NvbmZpZy5kZWJ1Z2AgdG8gdmVyaWZ5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgY29tZSBpbnRvIHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29uZmlncyB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODozMS41ODY5MDA2NjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0ICBUaGlzIGlzIGRlc2lnbmVkIGFzIGEgZGVidWdnaW5nIGZlYXR1cmUsIG5vdCBhIHNlY3VyaXR5IGZlYXR1cmUuXFxuIDEwMTpcXHRcXHQgIE9iamVjdHMgYXJlIHNvbWV0aW1lcyByZWN5Y2xlZCB3aXRob3V0IFJDVSBkZWxheSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTA0OlxcdFxcbiAxMDU6XFx0Y29uZmlnIFBBR0VfT1dORVJcXG4gMTA2OlxcdFxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMTA4OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAxMDk6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0VcXG4gMTEwOlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UXFxuIDExMTpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMTEyOlxcdFxcdGhlbHBcXG4gMTEzOlxcdFxcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XFxuIDExNDpcXHRcXHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xcbiAxMTU6XFx0XFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xcbiAxMTY6XFx0XFx0ICBcXFwicGFnZV9vd25lcj1vblxcXCIgdG8gYm9vdCBwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LiBFYXRzXFxuIDExNzpcXHRcXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbiAxMTg6XFx0XFx0ICBmb3IgdXNlci1zcGFjZSBoZWxwZXIuXFxuIDExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDQ6NDg6MzEuNTg2OTk3ODQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzYxODA2MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgUGFnZSBPd25lciBGZWF0dXJlIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgdGVzdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9ucyBhcm91bmQgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBpbnRlcmZhY2UuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBQQUdFX09XTkVSYCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgZW5hYmxpbmcgaXQgbmVlZHMgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlci5cIiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyBzeXprYWxsZXIgaGFuZGxlIHRoYXQgYm9vdCBwYXJhbWV0ZXI/IFVzdWFsbHksIHN5emthbGxlciBwYXJhbWV0ZXJzIGFyZSBmaXhlZCwgYnV0IGlmIGBQQUdFX09XTkVSYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnIEFORCBgcGFnZV9vd25lcj1vbmAgaXMgcGFzc2VkLCB0aGVuIHN5emthbGxlciBjb3VsZCB0ZXN0IGl0LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIGZvciBrZXJuZWwgKmNvbmZpZyogZmxhZ3MuIFNvLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgSSBkZWZpbml0ZWx5IG5lZWQgdG8gbGlzdCBgUEFHRV9PV05FUmAuIFRoZW4sIEkgc3RhcnRlZCB0byB0aGluaywgXCJJZiB0aGUgZmVhdHVyZSBuZWVkcyBhIGJvb3QgcGFyYW1ldGVyIHRvIGJlIHRydWx5IGFjdGl2ZSwgd29uJ3Qgc3l6a2FsbGVyIHN0cnVnZ2xlIHRvIHRlc3QgaXQgaWYgd2UgZG9uJ3QgYWxzbyBhZGQgdGhlIHBhcmFtZXRlcj9cIlxuXG5JIHRoZW4gd2VudCBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNsYXJpZnkgdGhpcy4gSSBzZWUgYHBhZ2Vfb3duZXJfZW5hYmxlZGAgaXMgY2hlY2tlZCBpbiBgcmVhZF9wYWdlX293bmVyYC4gSWYgYHBhZ2Vfb3duZXI9b25gIGlzbid0IHBhc3NlZCwgdGhlbiBgcGFnZV9vd25lcl9pbml0ZWRgIHdpbGwgYmUgZmFsc2UsIGFuZCBgcmVhZF9wYWdlX293bmVyYCB3aWxsIHJldHVybiBhbiBlcnJvci4gSSB0aG91Z2h0LCB3aGF0IGFib3V0IGBwYWdlX293bmVyX3dyaXRlYD8gSW50ZXJlc3RpbmdseSwgaXQgKmRvZXNuJ3QqIGNoZWNrIGBwYWdlX293bmVyX2luaXRlZGAuIFNvLCB0aGUgYHBhZ2Vfb3duZXJfd3JpdGVgIGZ1bmN0aW9uICpjb3VsZCogYmUgZXhlY3V0ZWQgZXZlbiBpZiB0aGUgYm9vdCBwYXJhbWV0ZXIgd2Fzbid0IHBhc3NlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNhbWUgZ29lcyBmb3IgYHBhZ2Vfb3duZXJfb3BlbmAuXG5cbkJ1dCB0aGVuIEkgc2VlIHRoZSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgZmlsZSBpcyAqb25seSogY3JlYXRlZCBpZiBgcGFnZV9vd25lcl9pbml0ZWRgIGlzIHRydWUuIFNvLCB0aGUgZmlsZSBpc24ndCBldmVuIHRoZXJlIHVubGVzcyBgcGFnZV9vd25lcj1vbmAgaXMgcGFzc2VkLiBUaGlzIG1lYW5zIG5vIGRpcmVjdCBpbnRlcmFjdGlvbi4gVGhlbiBJIGNvbnNpZGVyZWQgdGhlIGluZnJhc3RydWN0dXJlIGluIHN5emthbGxlciwgbWF5YmUgaXQgaGFuZGxlcyBib290IHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgaXQgYWxyZWFkeSBoYXMgYHBhZ2Vfb3duZXI9b25gIG9uIHNvbWUgaW5zdGFuY2VzLlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgbWFpbiB0aGluZyB0byBwcm92aWRlIGlzIGBQQUdFX09XTkVSYCBpbiBgRW5hYmxlQ29uZmlnc2AuXG5cbkkgdGhlbiBtYWRlIGEgbWVudGFsIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9uczogYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBgcGFnZV9vd25lcl93cml0ZWAsIGByZWFkX3BhZ2Vfb3duZXJgLCBgcHJpbnRfcGFnZV9vd25lcmAuIEkgZWxpbWluYXRlZCB0aGUgdXNlcnNwYWNlIHRvb2wuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBmaWx0ZXIgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBhZGRzIHBhcnNpbmcgbG9naWMsIHN0YXRlIG1hbmFnZW1lbnQgcGVyIGZpbGUgZGVzY3JpcHRvciwgYW5kIG1vZGlmaWVzIHRoZSByZWFkIHBhdGggdG8gcmVzcGVjdCB0aGUgZmlsdGVyLiBUaGlzIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFuZCBuZWVkcyB0byBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MuXG5cblRoZXJlZm9yZTpcblxuKiAgIENvbmZpZ3M6IGBQQUdFX09XTkVSYFxuKiAgIEZvY3VzU3ltYm9sczogYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBgcGFnZV9vd25lcl93cml0ZWAsIGByZWFkX3BhZ2Vfb3duZXJgLCBgcHJpbnRfcGFnZV9vd25lcmBcblxuSSBxdWlja2x5IHZlcmlmaWVkIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgSSBsaXN0ZWQgYXJlIHN0YXRpYy5cblxuTm93IEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYxMSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNDo0ODo0My45NDg4MDYwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDA3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInBhZ2Vfb3duZXJfd3JpdGVcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiLFxuICAgIFwicHJpbnRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgd3JpdGUgaW50ZXJmYWNlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0byBhbGxvdyBmaWx0ZXJpbmcgcGFnZSBvd25lciBvdXRwdXQgYnkgcHJpbnQgbW9kZSBhbmQgTlVNQSBub2RlLiBJdCBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGxvZ2ljLCBzdGF0ZSBtYW5hZ2VtZW50IHBlciBmaWxlIGRlc2NyaXB0b3IsIGFuZCBtb2RpZmllcyB0aGUgcmVhZCBwYXRoIHRvIHJlc3BlY3QgdGhlIGZpbHRlci4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGFyZSByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2Vfb3duZXJfb3BlblwiLFxuICAgIFwicGFnZV9vd25lcl9yZWxlYXNlXCIsXG4gICAgXCJwYWdlX293bmVyX3dyaXRlXCIsXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IHdyaXRlIGludGVyZmFjZSB0byBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgdG8gYWxsb3cgZmlsdGVyaW5nIHBhZ2Ugb3duZXIgb3V0cHV0IGJ5IHByaW50IG1vZGUgYW5kIE5VTUEgbm9kZS4gSXQgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBsb2dpYywgc3RhdGUgbWFuYWdlbWVudCBwZXIgZmlsZSBkZXNjcmlwdG9yLCBhbmQgbW9kaWZpZXMgdGhlIHJlYWQgcGF0aCB0byByZXNwZWN0IHRoZSBmaWx0ZXIuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFyc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudCBhcmUgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[1] Phase: Succeeded StartedAt: 2026-06-25 04:48:54 +0000 UTC FinishedAt: 2026-06-25 04:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 04:48:54 +0000 UTC FinishedAt: 2026-06-25 04:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2] Phase: Succeeded StartedAt: 2026-06-25 04:48:54 +0000 UTC FinishedAt: 2026-06-25 08:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 04:48:54 +0000 UTC FinishedAt: 2026-06-25 08:55:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","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-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 04:48:54 +0000 UTC FinishedAt: 2026-06-25 04:49:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 04:48:54 +0000 UTC FinishedAt: 2026-06-25 04:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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-workflowjfqtg/series-workflowjfqtg-convert-artifact-3948238793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 04:49:33 +0000 UTC FinishedAt: 2026-06-25 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 04:49:33 +0000 UTC FinishedAt: 2026-06-25 05:16:21 +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:*c2ccd1aa-8912-42ed-818f-cd7c8d93e9c3,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-workflowjfqtg/series-workflowjfqtg-convert-artifact-3948238793/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": "fe848ac8-9620-489e-b9bb-14e1c93e8f46", "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-workflowjfqtg/series-workflowjfqtg-build-action-1247205031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 04:49:33 +0000 UTC FinishedAt: 2026-06-25 05:16:11 +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:*c2ccd1aa-8912-42ed-818f-cd7c8d93e9c3,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-workflowjfqtg/series-workflowjfqtg-convert-artifact-3948238793/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": "fe848ac8-9620-489e-b9bb-14e1c93e8f46", "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-workflowjfqtg/series-workflowjfqtg-build-action-1247205031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 05:16:21 +0000 UTC FinishedAt: 2026-06-25 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 05:16:21 +0000 UTC FinishedAt: 2026-06-25 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 05:16:21 +0000 UTC FinishedAt: 2026-06-25 05:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 05:16:21 +0000 UTC FinishedAt: 2026-06-25 05:16:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","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-workflowjfqtg/series-workflowjfqtg-convert-artifact-2201435868/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 05:16:41 +0000 UTC FinishedAt: 2026-06-25 05:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 05:16:41 +0000 UTC FinishedAt: 2026-06-25 05:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fe848ac8-9620-489e-b9bb-14e1c93e8f46,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-workflowjfqtg/series-workflowjfqtg-build-action-1247205031/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-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 05:18:52 +0000 UTC FinishedAt: 2026-06-25 05:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 05:18:52 +0000 UTC FinishedAt: 2026-06-25 05:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 05:18:52 +0000 UTC FinishedAt: 2026-06-25 05:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 05:18:52 +0000 UTC FinishedAt: 2026-06-25 05:47:12 +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:*c2ccd1aa-8912-42ed-818f-cd7c8d93e9c3,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-workflowjfqtg/series-workflowjfqtg-convert-artifact-2201435868/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": "d98cf9d1-959f-410f-9bf9-7a4f35a532d2", "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-workflowjfqtg/series-workflowjfqtg-build-action-2514355000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 05:18:52 +0000 UTC FinishedAt: 2026-06-25 05:46:32 +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:*c2ccd1aa-8912-42ed-818f-cd7c8d93e9c3,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-workflowjfqtg/series-workflowjfqtg-convert-artifact-2201435868/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": "d98cf9d1-959f-410f-9bf9-7a4f35a532d2", "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-workflowjfqtg/series-workflowjfqtg-build-action-2514355000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 05:47:12 +0000 UTC FinishedAt: 2026-06-25 05:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 05:47:12 +0000 UTC FinishedAt: 2026-06-25 05:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 05:47:12 +0000 UTC FinishedAt: 2026-06-25 05:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 05:47:12 +0000 UTC FinishedAt: 2026-06-25 05:49:08 +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:*d98cf9d1-959f-410f-9bf9-7a4f35a532d2,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-workflowjfqtg/series-workflowjfqtg-build-action-2514355000/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-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 05:49:19 +0000 UTC FinishedAt: 2026-06-25 08:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 05:49:19 +0000 UTC FinishedAt: 2026-06-25 08:55:36 +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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"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:*fe848ac8-9620-489e-b9bb-14e1c93e8f46,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d98cf9d1-959f-410f-9bf9-7a4f35a532d2,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-workflowjfqtg/series-workflowjfqtg-build-action-1247205031/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-workflowjfqtg/series-workflowjfqtg-build-action-2514355000/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 05:49:19 +0000 UTC FinishedAt: 2026-06-25 05:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 05:49:19 +0000 UTC FinishedAt: 2026-06-25 05:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 05:49:20 +0000 UTC FinishedAt: 2026-06-25 05:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 05:49:20 +0000 UTC FinishedAt: 2026-06-25 05:49:25 +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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"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-workflowjfqtg/series-workflowjfqtg-convert-artifact-624172709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 05:49:20 +0000 UTC FinishedAt: 2026-06-25 05:49:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 05:49:31 +0000 UTC FinishedAt: 2026-06-25 08:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfqtg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"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":["page_owner_open","page_owner_release","page_owner_write","read_page_owner","print_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dcfbdd5886ab8ecd3887d6a81216e82b8614ba78","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"d333f38a-0915-4ae6-8e51-e62a4c651ec1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 05:49:31 +0000 UTC FinishedAt: 2026-06-25 08:55:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fe848ac8-9620-489e-b9bb-14e1c93e8f46,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d98cf9d1-959f-410f-9bf9-7a4f35a532d2,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-workflowjfqtg/series-workflowjfqtg-build-action-1247205031/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-workflowjfqtg/series-workflowjfqtg-build-action-2514355000/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-workflowjfqtg/series-workflowjfqtg-convert-artifact-624172709/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,}