Name: series-workflowtrktf Phase: Succeeded StartedAt: 2026-07-25 18:29:13 +0000 UTC FinishedAt: 2026-07-25 23:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[0] Phase: Succeeded StartedAt: 2026-07-25 18:29:13 +0000 UTC FinishedAt: 2026-07-25 19:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 18:29:13 +0000 UTC FinishedAt: 2026-07-25 19:06:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "series_id": "35b8a334-fa49-46c4-bea7-b24519cabfa7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "sys_fchroot", "sys_fchdir", "failfs_current_chdir", "failfs_get_root", "failfs_mnt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX2ZjaHJvb3QmIzM0OywKICAgICYjMzQ7c3lzX2ZjaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfY3VycmVudF9jaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7ZmFpbGZzX21udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxY2E0YTMwM2IwOTRiNmM4YjQyYzM3NzAyNzhiOTNhODRiMTdjZDA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTk6MDU6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIxZmYyZGI3OTQxZGYyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZhaWxmcy5yc3RcbkBAIC0wLDAgJiM0MzsxLDczIEBAXG4mIzQzOy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mzs9PT09PT1cbiYjNDM7ZmFpbGZzXG4mIzQzOz09PT09PVxuJiM0MztcbiYjNDM7ZmFpbGZzIGlzIGEga2VybmVsLWludGVybmFsIGZpbGVzeXN0ZW0gdGhhdCBmYWlscyBldmVyeSBvcGVyYXRpb25cbiYjNDM7cmVhY2hpbmcgaXQgd2l0aCBgYEVPUE5PVFNVUFBgYC4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIG51bGxmcy4gV2hlcmVcbiYjNDM7bnVsbGZzIGlzIHBlcm1hbmVudGx5IGVtcHR5LCBmYWlsZnMgbWVhbnMgXCYjMzQ7bm90aGluZyBpcyBzdXBwb3J0ZWQgaGVyZVwmIzM0Oy5cbiYjNDM7SXQgY2Fubm90IGJlIG1vdW50ZWQgZnJvbSB1c2Vyc3BhY2UsIG5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mXG4mIzQzO2l0LiBJdCBjYW5ub3QgYmUgY2xvbmVkLlxuJiM0MztcbiYjNDM7VGhlIG9ubHkgd2F5IGludG8gaXQgaXMgdGhlIGBgRkRfRkFJTEZTX1JPT1RgYCBmaWxlIGRlc2NyaXB0b3Igc2VudGluZWwgd2hpY2hcbiYjNDM7aXMgdW5kZXJzdG9vZCBieSBgYGZjaGRpcigyKWBgIGFuZCBgYGZjaHJvb3QoMilgYC5cbiYjNDM7XG4mIzQzO1NlbWFudGljc1xuJiM0Mzs9PT09PT09PT1cbiYjNDM7XG4mIzQzO0V2ZXJ5IHBhdGggd2FsayBvZiBhIGNvbXBvbmVudCB0aHJvdWdoIGZhaWxmcyBmYWlscyB3aXRoXG4mIzQzO2BgRU9QTk9UU1VQUGBgIGJlZm9yZSB0aGF0IGNvbXBvbmVudCBpcyBwYXJzZWQsIGluY2x1ZGluZyBgYC5gYC5cbiYjNDM7XG4mIzQzO05vIHBhdGggbG9va3VwIGNhbiBvcGVuIHRoZSByb290LCBub3QgZXZlbiB3aXRoIGBgT19QQVRIYGAuXG4mIzQzO1xuJiM0MztBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5XG4mIzQzO2BgQVRfRkRDV0RgYC1yZWxhdGl2ZSBsb29rdXAuIEFzIHdpdGggYW55IHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgaXNcbiYjNDM7dW5yZWFjaGFibGUgZnJvbSB0aGUgcHJvY2VzcyByb290LCB0aGUgYGBnZXRjd2QoMilgYCBzeXN0ZW0gY2FsbCByZXR1cm5zXG4mIzQzO2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLlxuJiM0MztcbiYjNDM7QSBwcm9jZXNzIHdpdGggaXRzIHJvb3QgZGlyZWN0b3J5IGluIGZhaWxmcyBmYWlscyBldmVyeSBhYnNvbHV0ZSBwYXRoXG4mIzQzO2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseVxuJiM0MztsaW5rZWQgYmluYXJpZXMuIEluIG90aGVyIHdvcmRzLCB0aGlzIGZhaWxzIGV4ZWMuXG4mIzQzO1xuJiM0MztMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXRcbiYjNDM7aXMgdGhlIGBgZnNfc3RydWN0YGAgZXF1aXZhbGVudCBvZiBgYFJFU09MVkVfQkVORUFUSGBgLiBUaGUgcHJvY2VzcyBtdXN0XG4mIzQzO2FuY2hvciBldmVyeSBsb29rdXAgYXQgYSBmaWxlIGRlc2NyaXB0b3IgaXQgZXhwbGljaXRseSBob2xkcy5cbiYjNDM7XG4mIzQzO0VudGVyaW5nXG4mIzQzOz09PT09PT09XG4mIzQzO1xuJiM0MztgYGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApYGAgcmVxdWlyZXMgYGBDQVBfU1lTX0NIUk9PVGBgIGluIHRoZVxuJiM0MztjYWxsZXImIzM5O3MgdXNlciBuYW1lc3BhY2UsIG1pcnJvcmluZyBgYGNocm9vdCgyKWBgLiBVbnByaXZpbGVnZWQgY2FsbGVyc1xuJiM0MzttYXkgZW50ZXIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgaG9sZDpcbiYjNDM7XG4mIzQzOyogYGBub19uZXdfcHJpdnNgYCBpcyBzZXQ6IHNldHVpZCBiaW5hcmllcyBvbiByZWd1bGFyIG1vdW50cyByZW1haW5cbiYjNDM7ICByZWFjaGFibGUgdmlhIGluaGVyaXRlZCBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9ycyBhbmQgZXhlY3V0aW5nIHRoZW1cbiYjNDM7ICB3aXRoIGFuIHVudXNhYmxlIHJvb3QgZGlyZWN0b3J5IGlzIHRoZSBjbGFzc2ljIGNvbmZ1c2VkIGRlcHV0eS5cbiYjNDM7XG4mIzQzOyogVGhlIGNhbGxlciBpcyBub3QgYWxyZWFkeSBjaHJvb3RlZDogdGhlIHJvb3QgZGlyZWN0b3J5IGlzIHdoYXRcbiYjNDM7ICBjb25maW5lcyBgYC4uYGAgcmVzb2x1dGlvbiBhbmQgdGhlIGZhaWxmcyByb290IGNhbiBuZXZlciBiZSByZWFjaGVkIGJ5XG4mIzQzOyAgd2Fsa2luZyB1cCBhIHJlYWwgbW91bnQgdHJlZSwgc28gbW92aW5nIHRoZSByb290IG9mIGEgY2hyb290ZWQgdGFzayB0b1xuJiM0MzsgIGZhaWxmcyB3b3VsZCBhbGxvdyBpdCB0byBlc2NhcGUgaXRzIGNocm9vdCB2aWEgYGBvcGVuYXQoZmQsIFwmIzM0Oy4uXCYjMzQ7KWBgLlxuJiM0MztcbiYjNDM7KiBUaGUgY2FsbGVyIGRvZXMgbm90IHNoYXJlIGl0cyBgYGZzX3N0cnVjdGBgOiBgYG5vX25ld19wcml2c2BgIGlzXG4mIzQzOyAgY2hlY2tlZCBvbiB0aGUgY2FsbGluZyB0aHJlYWQsIGJ1dCB0aGUgcm9vdCBsaXZlcyBpbiB0aGUgYGBmc19zdHJ1Y3RgYC5cbiYjNDM7ICBBIGBgQ0xPTkVfRlNgYCBzaWJsaW5nIHdpdGhvdXQgYGBub19uZXdfcHJpdnNgYCBjb3VsZCBvdGhlcndpc2UgZXhlY3V0ZVxuJiM0MzsgIGEgc2V0dWlkIGJpbmFyeSB3aXRoIHRoZSBmYWlsZnMgcm9vdCwgc28gZW50cnkgcmVxdWlyZXMgYGBmcy1cdTAwM2V1c2VycyA9PVxuJiM0MzsgIDFgYCwgdGhlIHNhbWUgcmVzdHJpY3Rpb24gYGBzZXRucygyKWBgIGFwcGxpZXMgZm9yIHRoZSBtb3VudCBhbmQgdXNlclxuJiM0MzsgIG5hbWVzcGFjZXMuXG4mIzQzO1xuJiM0MztMZWF2aW5nXG4mIzQzOz09PT09PT1cbiYjNDM7XG4mIzQzO0JhY2tpbmcgb3V0IGlzIGN1cnJlbnRseSBoYXJkLCBidXQgdGhpcyBpcyBhIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50XG4mIzQzO2ltcGxlbWVudGF0aW9uLCBub3QgYSBndWFyYW50ZWVkIGludGVyZmFjZSwgYW5kIG1heSBiZSBsb29zZW5lZCBsYXRlci5cbiYjNDM7Rm9yIG5vdyBhIHByb2Nlc3MgdGhhdCBlbnRlcmVkIGZhaWxmcyBjb3VudHMgYXMgY2hyb290ZWQsIHNvIGl0IGNhbm5vdFxuJiM0MztjcmVhdGUgdXNlciBuYW1lc3BhY2VzIHRvIHJlZ2FpbiBgYENBUF9TWVNfQ0hST09UYGAsIGFuZCBgYGNocm9vdCgyKWBgXG4mIzQzO29yIGBgZmNocm9vdCgyKWBgIGJhY2sgb3V0IHJlcXVpcmUgYGBDQVBfU1lTX0NIUk9PVGBgLiBUaGUgcmVtYWluaW5nIHdheVxuJiM0MztvdXQgdG9kYXkgaXMgYGBzZXRucygyKWBgIHdpdGggYSBtb3VudCBuYW1lc3BhY2UgZmlsZSBkZXNjcmlwdG9yLCB3aGljaFxuJiM0MztyZXF1aXJlcyBgYENBUF9TWVNfQURNSU5gYCBvdmVyIHRoZSB0YXJnZXQgbW91bnQgbmFtZXNwYWNlIGFzIHdlbGwgYXNcbiYjNDM7YGBDQVBfU1lTX0NIUk9PVGBgIGFuZCBgYENBUF9TWVNfQURNSU5gYCBpbiB0aGUgY2FsbGVyJiMzOTtzIHVzZXIgbmFtZXNwYWNlXG4mIzQzO2FuZCByZXNldHMgYm90aCByb290IGFuZCB3b3JraW5nIGRpcmVjdG9yeS4gQSBwcm9jZXNzIHRoYXQgaG9sZHMgbm8gc3VjaFxuJiM0MztmaWxlIGRlc2NyaXB0b3IgYW5kIHJlc3RyaWN0cyBgYCpjaGRpcigpYGAvYGAqY2hyb290KClgYC9gYHNldG5zKClgYCB2aWFcbiYjNDM7c2VjY29tcCBjYW5ub3QgY3VycmVudGx5IGdldCBiYWNrIG91dC5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5pbmRleCAxZjcxY2YxNTk1NDc2Yy4uNzM0YTQ1ZTUxNjY3NWMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBEb2N1bWVudGF0aW9uIGZvciBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy5cbiAgICBleHQzXG4gICAgZXh0NC9pbmRleFxuICAgIGYyZnNcbiYjNDM7ICAgZmFpbGZzXG4gICAgZ2ZzMi9pbmRleFxuICAgIGhmc1xuICAgIGhmc3BsdXNcbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCBmMzFiN2FmZmZjMzQ1OS4uNTJlMzUzOGNjN2RmNDEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC01MTEsMyAmIzQzOzUxMSw0IEBAXG4gNTc5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA1ODBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNTgxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NTgyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibFxuaW5kZXggOTQzNTFlMjJiZmNmNzYuLjU1NzE3ZWQzMmMyN2U2IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsXG5AQCAtNDg2LDMgJiM0Mzs0ODYsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmwgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsXG5pbmRleCA2MmQ5M2Q4OGUwZmVmOC4uZGYyZDFkODJmYjNjY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsXG5AQCAtNDgzLDMgJiM0Mzs0ODMsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCAyNDg5MzQyNTcxMDE0Yy4uYmE3YTRkODkwM2QwNDQgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDcxLDMgJiM0Mzs0NzEsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCAyMjNkMjYzMDM2MjcyNC4uYzU1YTVjOTZmNDliODIgMTAwNjQ0XG4tLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDc3LDMgJiM0Mzs0NzcsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmxcbmluZGV4IDc0MzA3MTRlMmI4Zjg2Li45YWU4OGU0ZWFjNjFlZSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxuQEAgLTQxMCwzICYjNDM7NDEwLDQgQEBcbiA0NjlcdG4zMlx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0bjMyXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdG4zMlx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdG4zMlx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXG5pbmRleCA2MzBhYWI5ZTU0MjU5Mi4uODNkYzkzYTA3MTJmMTIgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmxcbkBAIC0zODYsMyAmIzQzOzM4Niw0IEBAXG4gNDY5XHRuNjRcdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdG42NFx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRuNjRcdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRuNjRcdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibFxuaW5kZXggMTI4NjUzMTEyMjg0YjIuLjljNjI0MjljOWI3YjRlIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsXG5AQCAtNDU5LDMgJiM0Mzs0NTksNCBAQFxuIDQ2OVx0bzMyXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRvMzJcdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0bzMyXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0bzMyXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggYzYzMzFkYWQ5NDYxM2IuLjg4YWRjNDAxNmNjZTAxIDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC00NzAsMyAmIzQzOzQ3MCw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IDRmY2M3YzU4YTEwNWRjLi5jZmJiNzAwMzlmZjAwNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC01NjIsMyAmIzQzOzU2Miw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRub3NwdVx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggMDlhN2VmMDRkOTc5MWEuLjFiNDVlNjhhMjE3YmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTM5OCwzICYjNDM7Mzk4LDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCA3MGIzMTVjYmU3MTBjMi4uYWNlMDY4ZGZmMGRlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC00NzUsMyAmIzQzOzQ3NSw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggN2U3MWJmN2ZjZDE0ZjcuLjViOWZlMGU4MTQwZjI2IDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNTE3LDMgJiM0Mzs1MTcsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmxcbmluZGV4IGY4MzJlYmQyZDc5YjAwLi4yYzE3MmVmNDhkZmQzMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibFxuQEAgLTQ3NywzICYjNDM7NDc3LDQgQEBcbiA0NjlcdGkzODZcdGZpbGVfc2V0YXR0clx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRpMzg2XHRsaXN0bnNcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRpMzg2XHRyc2VxX3NsaWNlX3lpZWxkXHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGkzODZcdGZjaHJvb3RcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbmluZGV4IDUyNDE1NWQ2NTVkYTE1Li5kNWI2MDQ1YjAwOTBjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibFxuQEAgLTM5Niw2ICYjNDM7Mzk2LDcgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdHN5c19mY2hyb290XG4gXG4gI1xuICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5XG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCBhOWJjYTRlNDg0ZGVjZi4uZDM1NGJiMjMxNzk2YzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTQ0MiwzICYjNDM7NDQyLDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNzNiNmNhYjc3MzhlYTQgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvTWFrZWZpbGVcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBvYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuIFx0XHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxuIFx0XHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXG4gXHRcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXG4tXHRcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMub1xuJiM0MztcdFx0ZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vIGZhaWxmcy5vXG4gXG4gb2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKVx0JiM0Mzs9IGJ1ZmZlci5vIG1wYWdlLm9cbiBvYmotJChDT05GSUdfUFJPQ19GUylcdFx0JiM0Mzs9IHByb2NfbmFtZXNwYWNlLm9cbmRpZmYgLS1naXQgYS9mcy9kX3BhdGguYyBiL2ZzL2RfcGF0aC5jXG5pbmRleCBhNDg5NTdjMDk3MWVmNi4uYzI1MzA5MDA2ZDVkNmQgMTAwNjQ0XG4tLS0gYS9mcy9kX3BhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZF9wYXRoLmNcbkBAIC0yNzksNyAmIzQzOzI3OSw4IEBAIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKVxuIFx0ICogYW5kIGluc3RlYWQgaGF2ZSBkX3BhdGggcmV0dXJuIHRoZSBtb3VudGVkIHBhdGguXG4gXHQgKi9cbiBcdGlmIChwYXRoLVx1MDAzZWRlbnRyeS1cdTAwM2VkX29wIFx1MDAyNlx1MDAyNiBwYXRoLVx1MDAzZWRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfZG5hbWUgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFJU19ST09UKHBhdGgtXHUwMDNlZGVudHJ5KSB8fCBwYXRoLVx1MDAzZWRlbnRyeSAhPSBwYXRoLVx1MDAzZW1udC1cdTAwM2VtbnRfcm9vdCkpXG4mIzQzO1x0ICAgICghSVNfUk9PVChwYXRoLVx1MDAzZWRlbnRyeSkgfHwgcGF0aC1cdTAwM2VkZW50cnkgIT0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3QgfHxcbiYjNDM7XHQgICAgIGZhaWxmc19tbnQocGF0aC1cdTAwM2VtbnQpKSlcbiBcdFx0cmV0dXJuIHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9kbmFtZShwYXRoLVx1MDAzZWRlbnRyeSwgYnVmLCBidWZsZW4pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZhaWxmcy5jIGIvZnMvZmFpbGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjZhMzZkYTNkMjM2ZDZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhaWxmcy5jXG5AQCAtMCwwICYjNDM7MSwxNjYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2hyaXN0aWFuIEJyYXVuZXIgXHUwMDNjYnJhdW5lckBrZXJuZWwub3JnXHUwMDNlICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMvc3VwZXJfdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBhdGggZmFpbGZzX3Jvb3RfcGF0aCA9IHt9O1xuJiM0MztcbiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHQqcGF0aCA9IGZhaWxmc19yb290X3BhdGg7XG4mIzQzO1x0cGF0aF9nZXQocGF0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgZmFpbGZzX21udChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtbnQtXHUwMDNlbW50X3NiID09IGZhaWxmc19yb290X3BhdGgubW50LVx1MDAzZW1udF9zYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYWlsZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0ICAgICBpbnQgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhaWxmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0LyogVW5yZWFjaGFibGU6IC1cdTAwM2VwZXJtaXNzaW9uKCkgYWxyZWFkeSBmYWlsZWQgdGhlIHdhbGsuICovXG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmFpbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuJiM0MztcdC5wZXJtaXNzaW9uXHQ9IGZhaWxmc19wZXJtaXNzaW9uLFxuJiM0MztcdC5sb29rdXBcdFx0PSBmYWlsZnNfbG9va3VwLFxuJiM0MztcdC5nZXRhdHRyXHQ9IGZhaWxmc19nZXRhdHRyLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFpbGZzX2Rpcl9vcGVyYXRpb25zID0ge307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJvb3QgaXMgb25seSBldmVyIHJlYWNoZWQgYXMgYSBwYXRoLXdhbGsgdGVybWluYWwgYnkganVtcGluZ1xuJiM0MztcdCAqIHRvIGl0OiBhcyBcJiMzNDsvXCYjMzQ7IHdoZW4gaXQgaXMgdGhlIGNhbGxlciYjMzk7cyByb290LCBvciB0aHJvdWdoIGFcbiYjNDM7XHQgKiAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uve3Jvb3QsY3dkfSBtYWdpYyBsaW5rLiAtXHUwMDNlcGVybWlzc2lvbigpIGFscmVhZHkgZmFpbHNcbiYjNDM7XHQgKiBldmVyeSB3YWxrIG9mIGEgY29tcG9uZW50LCBidXQgYSBqdW1wIGxhbmRzIG9uIHRoZSByb290IHdpdGhvdXRcbiYjNDM7XHQgKiBvbmUuIFJlZnVzZSBoZXJlIHRvbyBzbyB0aGUgcm9vdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGFuIE9fUEFUSFxuJiM0MztcdCAqIG9wZW4gb3IgZW5jb2RlZCBpbnRvIGEgZmlsZSBoYW5kbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY2hhciAqZmFpbGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sIFwmIzM0O2ZhaWxmczovXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmYWlsZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4mIzQzO1x0LmRfZG5hbWVcdFx0PSBmYWlsZnNfZG5hbWUsXG4mIzQzO1x0LmRfd2Vha19yZXZhbGlkYXRlXHQ9IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbiYjNDM7XHQuc3RhdGZzXHQ9IGZhaWxmc19zdGF0ZnMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XG4mIzQzO1x0cy1cdTAwM2VzX21heGJ5dGVzXHRcdD0gTUFYX0xGU19GSUxFU0laRTtcbiYjNDM7XHRzLVx1MDAzZXNfYmxvY2tzaXplXHRcdD0gUEFHRV9TSVpFO1xuJiM0MztcdHMtXHUwMDNlc19ibG9ja3NpemVfYml0c1x0PSBQQUdFX1NISUZUO1xuJiM0MztcdHMtXHUwMDNlc19tYWdpY1x0XHQ9IEZBSUxfRlNfTUFHSUM7XG4mIzQzO1x0cy1cdTAwM2VzX29wXHRcdFx0PSBcdTAwMjZmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucztcbiYjNDM7XHRzLVx1MDAzZXNfZXhwb3J0X29wXHRcdD0gTlVMTDtcbiYjNDM7XHRzLVx1MDAzZXNfeGF0dHJcdFx0PSBOVUxMO1xuJiM0MztcdHMtXHUwMDNlc190aW1lX2dyYW5cdFx0PSAxO1xuJiM0MztcdHMtXHUwMDNlc19kX2ZsYWdzXHRcdD0gMDtcbiYjNDM7XG4mIzQzO1x0aW5vZGUgPSBuZXdfaW5vZGUocyk7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHQvKiBmYWlsZnMgc3VwcG9ydHMgbm8gb3BlcmF0aW9ucy4uLiAqL1xuJiM0MztcdGlub2RlLVx1MDAzZWlfbW9kZVx0PSBTX0lGRElSO1xuJiM0MztcdHNldF9ubGluayhpbm9kZSwgMik7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9vcFx0PSBcdTAwMjZmYWlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9mb3BcdD0gXHUwMDI2ZmFpbGZzX2Rpcl9vcGVyYXRpb25zO1xuJiM0MztcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2lub1x0PSAxO1xuJiM0MztcdC8qIC4uLiBhbmQgaXMgaW1tdXRhYmxlLiAqL1xuJiM0MztcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7XG4mIzQzO1xuJiM0MztcdHNldF9kZWZhdWx0X2Rfb3AocywgXHUwMDI2ZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zKTtcbiYjNDM7XHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbiYjNDM7XHRpZiAoIXMtXHUwMDNlc19yb290KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBmYWlsZnNfZmlsbF9zdXBlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGZhaWxmc19jb250ZXh0X29wcyA9IHtcbiYjNDM7XHQuZ2V0X3RyZWVcdD0gZmFpbGZzX2dldF90cmVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYWlsZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiYjNDM7e1xuJiM0MztcdGZjLVx1MDAzZW9wc1x0XHQ9IFx1MDAyNmZhaWxmc19jb250ZXh0X29wcztcbiYjNDM7XHRmYy1cdTAwM2VnbG9iYWxcdD0gdHJ1ZTtcbiYjNDM7XHRmYy1cdTAwM2VzYl9mbGFnc1x0fD0gU0JfTk9VU0VSO1xuJiM0MztcdGZjLVx1MDAzZXNfaWZsYWdzXHR8PSBTQl9JX05PRVhFQyB8IFNCX0lfTk9ERVY7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBmYWlsZnNfY3VycmVudF9jaGRpcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhdGggcGF0aDtcbiYjNDM7XG4mIzQzO1x0ZmFpbGZzX2dldF9yb290KFx1MDAyNnBhdGgpO1xuJiM0MztcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cGF0aCk7XG4mIzQzO1x0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBmYWlsZnNfZnNfdHlwZSA9IHtcbiYjNDM7XHQubmFtZVx0XHRcdD0gXCYjMzQ7ZmFpbGZzXCYjMzQ7LFxuJiM0MztcdC5pbml0X2ZzX2NvbnRleHRcdD0gZmFpbGZzX2luaXRfZnNfY29udGV4dCxcbiYjNDM7XHQua2lsbF9zYlx0XHQ9IGtpbGxfYW5vbl9zdXBlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcbiYjNDM7XG4mIzQzO1x0LyogQSBzaW5nbGUgaW5zdGFuY2UgdGhhdCBpcyBtZW1iZXIgb2Ygbm8gbW91bnQgbmFtZXNwYWNlLiAqL1xuJiM0MztcdG1udCA9IGtlcm5fbW91bnQoXHUwMDI2ZmFpbGZzX2ZzX3R5cGUpO1xuJiM0MztcdGlmIChJU19FUlIobW50KSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogRmFpbGVkIHRvIGNyZWF0ZSBmYWlsZnNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmYWlsZnNfcm9vdF9wYXRoLm1udFx0PSBtbnQ7XG4mIzQzO1x0ZmFpbGZzX3Jvb3RfcGF0aC5kZW50cnlcdD0gbW50LVx1MDAzZW1udF9yb290O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcbmluZGV4IDM1NWQ5M2Y5MjIwODYxLi42N2FhMDQ0NDM1MWIxYSAxMDA2NDRcbi0tLSBhL2ZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ludGVybmFsLmhcbkBAIC0zNjIsMyAmIzQzOzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBwaWRmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gdm9pZCBuc2ZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKTtcbiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpO1xuJiM0Mzt2b2lkIF9faW5pdCBmYWlsZnNfaW5pdCh2b2lkKTtcbiYjNDM7Ym9vbCBmYWlsZnNfbW50KGNvbnN0IHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiYjNDM7aW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li44N2MzNjVmMmY4MmJhMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTYyNzQsNiAmIzQzOzYyNzQsNyBAQCB2b2lkIF9faW5pdCBtbnRfaW5pdCh2b2lkKVxuIFx0c2htZW1faW5pdCgpO1xuIFx0aW5pdF9yb290ZnMoKTtcbiBcdGluaXRfbW91bnRfdHJlZSgpO1xuJiM0MztcdGZhaWxmc19pbml0KCk7XG4gfVxuIFxuIHZvaWQgcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uY1xuQEAgLTU3MCw5ICYjNDM7NTcwLDEyIEBAIFNZU0NBTExfREVGSU5FMShjaGRpciwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpXG4gXG4gU1lTQ0FMTF9ERUZJTkUxKGZjaGRpciwgdW5zaWduZWQgaW50LCBmZClcbiB7XG4tXHRDTEFTUyhmZF9yYXcsIGYpKGZkKTtcbiBcdGludCBlcnJvcjtcbiBcbiYjNDM7XHRpZiAoKGludClmZCA9PSBGRF9GQUlMRlNfUk9PVClcbiYjNDM7XHRcdHJldHVybiBmYWlsZnNfY3VycmVudF9jaGRpcigpO1xuJiM0MztcbiYjNDM7XHRDTEFTUyhmZF9yYXcsIGYpKGZkKTtcbiBcdGlmIChmZF9lbXB0eShmKSlcbiBcdFx0cmV0dXJuIC1FQkFERjtcbiBcbkBAIC02MTUsNiAmIzQzOzYxOCw1MiBAQCBTWVNDQUxMX0RFRklORTEoY2hyb290LCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4mIzQzO1NZU0NBTExfREVGSU5FMihmY2hyb290LCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhdGggcGF0aDtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHtcbiYjNDM7XHRcdGlmICghbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgQ0FQX1NZU19DSFJPT1QpKSB7XG4mIzQzO1x0XHRcdGlmICghdGFza19ub19uZXdfcHJpdnMoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdFx0LyogQSBzaGFyZWQgZnNfc3RydWN0IGxldHMgYSBzaWJsaW5nIGV4ZWMgc2V0dWlkIHBhc3QgdGhlIGNoZWNrIGFib3ZlLiAqL1xuJiM0MztcdFx0XHRpZiAoY3VycmVudC1cdTAwM2Vmcy1cdTAwM2V1c2VycyAhPSAxKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHQvKiBNb3ZpbmcgdGhlIHJvb3QgdG8gZmFpbGZzIGxpZnRzIHRoZSBvbGQgcm9vdCYjMzk7cyBcJiMzNDsuLlwmIzM0OyBiYXJyaWVyLiAqL1xuJiM0MztcdFx0XHRpZiAoY3VycmVudF9jaHJvb3RlZCgpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRmYWlsZnNfZ2V0X3Jvb3QoXHUwMDI2cGF0aCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdENMQVNTKGZkX3JhdywgZikoZmQpO1xuJiM0MztcdFx0aWYgKGZkX2VtcHR5KGYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZF9jYW5fbG9va3VwKGZkX2ZpbGUoZiktXHUwMDNlZl9wYXRoLmRlbnRyeSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PVERJUjtcbiYjNDM7XG4mIzQzO1x0XHRlcnJvciA9IGZpbGVfcGVybWlzc2lvbihmZF9maWxlKGYpLCBNQVlfRVhFQyB8IE1BWV9DSERJUik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIENBUF9TWVNfQ0hST09UKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0XHRwYXRoID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGg7XG4mIzQzO1x0XHRwYXRoX2dldChcdTAwMjZwYXRoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9jaHJvb3QoXHUwMDI2cGF0aCk7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuJiM0MztcdHBhdGhfcHV0KFx1MDAyNnBhdGgpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oXG5pbmRleCA4NzRkOTA2N2E0M2I1MC4uODQxM2I2MjRhZDQ3ODIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxuQEAgLTQ1Nyw2ICYjNDM7NDU3LDcgQEAgYXNtbGlua2FnZSBsb25nIHN5c19mYWNjZXNzYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IG1vZGUsXG4gYXNtbGlua2FnZSBsb25nIHN5c19jaGRpcihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUpO1xuIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmNoZGlyKHVuc2lnbmVkIGludCBmZCk7XG4gYXNtbGlua2FnZSBsb25nIHN5c19jaHJvb3QoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcbiYjNDM7YXNtbGlua2FnZSBsb25nIHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZCh1bnNpZ25lZCBpbnQgZmQsIHVtb2RlX3QgbW9kZSk7XG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2RhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXG4gXHRcdFx0ICAgICB1bW9kZV90IG1vZGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuaW5kZXggYTYyN2FjYzhmYjVmZWEuLjViN2U3N2E3YzczNmVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbkBAIC04NjMsOCAmIzQzOzg2MywxMiBAQCBfX1NZU0NBTEwoX19OUl9saXN0bnMsIHN5c19saXN0bnMpXG4gI2RlZmluZSBfX05SX3JzZXFfc2xpY2VfeWllbGQgNDcxXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXG4gXG4mIzQzOy8qIGZzL29wZW4uYyAqL1xuJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcbiYjNDM7X19TWVNDQUxMKF9fTlJfZmNocm9vdCwgc3lzX2ZjaHJvb3QpXG4mIzQzO1xuICN1bmRlZiBfX05SX3N5c2NhbGxzXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxuJiM0MzsjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXG4gXG4gLypcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaFxuaW5kZXggYWFkZmJmNmUwY2IzYTAuLmU0M2UzZGUzZTllZTQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oXG5AQCAtMTI0LDYgJiM0MzsxMjQsNyBAQCBzdHJ1Y3QgZGVsZWdhdGlvbiB7XG4gXG4gI2RlZmluZSBGRF9QSURGU19ST09UXHRcdFx0LTEwMDAyIC8qIFJvb3Qgb2YgdGhlIHBpZGZzIGZpbGVzeXN0ZW0gKi9cbiAjZGVmaW5lIEZEX05TRlNfUk9PVFx0XHRcdC0xMDAwMyAvKiBSb290IG9mIHRoZSBuc2ZzIGZpbGVzeXN0ZW0gKi9cbiYjNDM7I2RlZmluZSBGRF9GQUlMRlNfUk9PVFx0XHRcdC0xMDAwNCAvKiBSb290IG9mIHRoZSBmYWlsZnMgZmlsZXN5c3RlbSAqL1xuICNkZWZpbmUgRkRfSU5WQUxJRFx0XHRcdC0xMDAwOSAvKiBJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjogLTEwMDAwIC0gRUJBREYgPSAtMTAwMDkgKi9cbiBcbiAvKiBHZW5lcmljIGZsYWdzIGZvciB0aGUgKmF0KDIpIGZhbWlseSBvZiBzeXNjYWxscy4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oXG5pbmRleCA0ZjJkYTkzNWE3NmNjYS4uZmQ1ZjBlOTU2NDhlZTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcbkBAIC0xMDUsNSAmIzQzOzEwNSw2IEBAXG4gI2RlZmluZSBQSURfRlNfTUFHSUNcdFx0MHg1MDQ5NDQ0Nlx0LyogXCYjMzQ7UElERlwmIzM0OyAqL1xuICNkZWZpbmUgR1VFU1RfTUVNRkRfTUFHSUNcdDB4NDc0ZDQ1NGRcdC8qIFwmIzM0O0dNRU1cJiMzNDsgKi9cbiAjZGVmaW5lIE5VTExfRlNfTUFHSUNcdFx0MHg0RTU1NEM0Q1x0LyogXCYjMzQ7TlVMTFwmIzM0OyAqL1xuJiM0MzsjZGVmaW5lIEZBSUxfRlNfTUFHSUNcdFx0MHg0NjQxNDk0Q1x0LyogXCYjMzQ7RkFJTFwmIzM0OyAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01BR0lDX0hfXyAqL1xuZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5pbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0XG4tLS0gYS9zY3JpcHRzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5AQCAtNDEyLDMgJiM0Mzs0MTIsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuaW5kZXggYTYyN2FjYzhmYjVmZWEuLjViN2U3N2E3YzczNmVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbkBAIC04NjMsOCAmIzQzOzg2MywxMiBAQCBfX1NZU0NBTEwoX19OUl9saXN0bnMsIHN5c19saXN0bnMpXG4gI2RlZmluZSBfX05SX3JzZXFfc2xpY2VfeWllbGQgNDcxXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXG4gXG4mIzQzOy8qIGZzL29wZW4uYyAqL1xuJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcbiYjNDM7X19TWVNDQUxMKF9fTlJfZmNocm9vdCwgc3lzX2ZjaHJvb3QpXG4mIzQzO1xuICN1bmRlZiBfX05SX3N5c2NhbGxzXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxuJiM0MzsjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXG4gXG4gLypcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbmluZGV4IDUyNDE1NWQ2NTVkYTE1Li5kNWI2MDQ1YjAwOTBjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbkBAIC0zOTYsNiAmIzQzOzM5Niw3IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRzeXNfZmNocm9vdFxuIFxuICNcbiAjIER1ZSB0byBhIGhpc3RvcmljYWwgZGVzaWduIGVycm9yLCBjZXJ0YWluIHN5c2NhbGxzIGFyZSBudW1iZXJlZCBkaWZmZXJlbnRseVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwgYi90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXG5pbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0XG4tLS0gYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXG5AQCAtNDEyLDMgJiM0Mzs0MTIsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuQEAgLTMzLDYgJiM0MzszMyw3IEBAIFRBUkdFVFMgJiM0Mzs9IGZjaG1vZGF0MlxuIFRBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zXG4gVEFSR0VUUyAmIzQzOz0gZmlsZXN5c3RlbXMvYmluZGVyZnNcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9lcG9sbFxuJiM0MztUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9mYWlsZnNcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9mYXRcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9vdmVybGF5ZnNcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9zdGF0bW91bnRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNkM2I1ZDg4NGQ3ZWE5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZVxuQEAgLTAsMCAmIzQzOzEsMiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7ZmFpbGZzX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2M1ZDk4YjRmZTcyNWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3RcbiYjNDM7XG4mIzQzO2luY2x1ZGUgLi4vLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYzQ2MWRjNDgzYTk5N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDU4MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9wcmN0bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdmZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4va3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX05SX2ZjaHJvb3RcbiYjNDM7I2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBGRF9QSURGU19ST09UXG4mIzQzOyNkZWZpbmUgRkRfUElERlNfUk9PVCAtMTAwMDJcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEZEX05TRlNfUk9PVFxuJiM0MzsjZGVmaW5lIEZEX05TRlNfUk9PVCAtMTAwMDNcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEZEX0ZBSUxGU19ST09UXG4mIzQzOyNkZWZpbmUgRkRfRkFJTEZTX1JPT1QgLTEwMDA0XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBOT0JPRFlfVUlEIDY1NTM0XG4mIzQzO1xuJiM0MzsvKiBDaGlsZCBzZW50aW5lbCBleGl0IGNvZGU6IHRoZSBleGVjIHdhcyBibG9ja2VkIGFzIGV4cGVjdGVkLiAqL1xuJiM0MzsjZGVmaW5lIEZBSUxGU19FWEVDX0JMT0NLRUQgOTlcbiYjNDM7XG4mIzQzOy8qIFN0YWNrIGZvciB0aGUgQ0xPTkVfRlMgaGVscGVyIGluIGZjaHJvb3Rfc2VudGluZWxfc2hhcmVkX2ZzX3N0cnVjdC4gKi9cbiYjNDM7I2RlZmluZSBGQUlMRlNfQ0xPTkVfU1RBQ0sgKDY0ICogMTAyNClcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3lzX2ZjaHJvb3QoaW50IGZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3lzY2FsbChfX05SX2ZjaHJvb3QsIGZkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJhdyBzeXNjYWxsOiBnbGliYyYjMzk7cyBnZXRjd2QoKSByZWplY3RzIHRoZSBrZXJuZWwmIzM5O3MgXCYjMzQ7KHVucmVhY2hhYmxlKVwmIzM0O1xuJiM0MzsgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGxvbmcgc3lzX2dldGN3ZChjaGFyICpidWYsIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9nZXRjd2QsIGJ1Ziwgc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZHJvcF90b19ub2JvZHkodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzZXRyZXN1aWQoTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBhcmtlZCBDTE9ORV9GUyBjaGlsZDsgZGllcyB3aXRoIGl0cyBwYXJlbnQgc28gaXQgbmV2ZXIgbGVha3MuICovXG4mIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3Bhcmsodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0KHZvaWQpYXJnO1xuJiM0MztcdHByY3RsKFBSX1NFVF9QREVBVEhTSUcsIFNJR0tJTEwpO1xuJiM0MztcdHBhdXNlKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi9cbiYjNDM7c3RhdGljIGludCBlbGZfaGFzX2Fic29sdXRlX2ludGVycChpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRFbGZXKEVoZHIpIGVoZHI7XG4mIzQzO1x0RWxmVyhQaGRyKSBwaGRyO1xuJiM0MztcdGNoYXIgaW50ZXJwO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJlYWQoZmQsIFx1MDAyNmVoZHIsIHNpemVvZihlaGRyKSwgMCkgIT0gc2l6ZW9mKGVoZHIpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKG1lbWNtcChlaGRyLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRykgIT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlaGRyLmVfcGhudW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocHJlYWQoZmQsIFx1MDAyNnBoZHIsIHNpemVvZihwaGRyKSxcbiYjNDM7XHRcdFx0ICBlaGRyLmVfcGhvZmYgJiM0MzsgaSAqIHNpemVvZihwaGRyKSkgIT0gc2l6ZW9mKHBoZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9JTlRFUlApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHByZWFkKGZkLCBcdTAwMjZpbnRlcnAsIDEsIHBoZHIucF9vZmZzZXQpICE9IDEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIGludGVycCA9PSAmIzM5Oy8mIzM5OztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaGRpcl9zZW50aW5lbClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmY2hkaXIoRkRfRkFJTEZTX1JPT1QpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdC4gKi9cbiYjNDM7XHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cm5jbXAoYnVmLCBcJiMzNDsodW5yZWFjaGFibGUpXCYjMzQ7LCAxMyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBFdmVyeSBBVF9GRENXRC1yZWxhdGl2ZSBsb29rdXAgZmFpbHMuICovXG4mIzQzO1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Zm9vXCYjMzQ7LCBPX1JET05MWSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcdEFTU0VSVF9FUShvcGVuYXQoQVRfRkRDV0QsIFwmIzM0Oy5cJiMzNDssIE9fUkRPTkxZKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Li5cJiMzNDssIE9fUkRPTkxZKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Zm9vXCYjMzQ7LCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGN3ZCBjYW5ub3QgYmUgcGlubmVkIGJ5IGZvbGxvd2luZyAvcHJvYy9zZWxmL2N3ZCBpbnRvIGl0LiAqL1xuJiM0MztcdEFTU0VSVF9FUShvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvY3dkXCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkIHNvIGFic29sdXRlIGxvb2t1cHMga2VlcCB3b3JraW5nLi4uICovXG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9cJiMzNDssIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIC4uLiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSByZWNvdmVyZWQuICovXG4mIzQzO1x0QVNTRVJUX0VRKGNoZGlyKFwmIzM0Oy9cJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwmIzM0Oy9cJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChmY2hkaXJfcmVqZWN0c19vdGhlcl9zZW50aW5lbHMpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEoZmNoZGlyKEZEX1BJREZTX1JPT1QpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO1x0QVNTRVJUX0VRKGZjaGRpcihGRF9OU0ZTX1JPT1QpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO1x0QVNTRVJUX0VRKGZjaGRpcigtMTAwMDkpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9mbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAxKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9cJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9iYWRfZmQpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoLTEsIDApLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgRkRfRkFJTEZTX1JPT1QgaXMgYSB2YWxpZCBzZW50aW5lbC4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfUElERlNfUk9PVCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfTlNGU19ST09ULCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfbm90ZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc2VsZi9zdGF0dXNcJiMzNDssIE9fUkRPTkxZKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3RfcmVhbGZkX3JlcXVpcmVzX2NhcClcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSA9PSAwKVxuJiM0MztcdFx0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L1wmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KGZkLCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3RfcmVhbGZkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciB0ZW1wbGF0ZVtdID0gXCYjMzQ7L3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcJiMzNDs7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRzdHJ1Y3Qgc3RhdCBzdDtcbiYjNDM7XHRpbnQgdG1wZmQsIGRmZCwgZmQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmY2hyb290KCkgd2l0aCBhIHJlZ3VsYXIgZmQgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR0bXBmZCA9IG9wZW4oXCYjMzQ7L3RtcFwmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9jYW5hcnlcJiMzNDssIHRlbXBsYXRlKTtcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGRmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KGRmZCwgMCksIDApO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShkZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQoXCYjMzQ7L2NhbmFyeVwmIzM0OywgXHUwMDI2c3QpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cDogZGlyZmQtYW5jaG9yZWQgSS9PIHdvcmtzIHdpdGggdGhlIG5ldyByb290LiAqL1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2FuYXJ5XCYjMzQ7LCB0ZW1wbGF0ZSAmIzQzOyBzdHJsZW4oXCYjMzQ7L3RtcC9cJiMzNDspKTtcbiYjNDM7XHR1bmxpbmthdCh0bXBmZCwgcGF0aCwgMCk7XG4mIzQzO1x0dW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbihcJiMzNDsvdG1wL1wmIzM0OyksIEFUX1JFTU9WRURJUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbClcbiYjNDM7e1xuJiM0MztcdGNoYXIgdGVtcGxhdGVbXSA9IFwmIzM0Oy90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdHN0cnVjdCBzdGF0IHJlYWxyb290LCBzdDtcbiYjNDM7XHRzdHJ1Y3Qgc3RhdGZzIHNmcztcbiYjNDM7XHRjaGFyIGJ1ZltQQVRIX01BWF07XG4mIzQzO1x0aW50IHByb2NmZCwgdG1wZmQsIGRmZCwgZmQ7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBmaWxlX2hhbmRsZSBoYW5kbGU7XG4mIzQzO1x0XHR1bnNpZ25lZCBjaGFyIGZfaGFuZGxlW01BWF9IQU5ETEVfU1pdO1xuJiM0MztcdH0gZmg7XG4mIzQzO1x0aW50IG1udGlkO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzdGF0KFwmIzM0Oy9cJiMzNDssIFx1MDAyNnJlYWxyb290KSwgMCk7XG4mIzQzO1x0cHJvY2ZkID0gb3BlbihcJiMzNDsvcHJvY1wmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShwcm9jZmQsIDApO1xuJiM0MztcdHRtcGZkID0gb3BlbihcJiMzNDsvdG1wXCYjMzQ7LCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHRtcGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuJiM0MztcdGRmZCA9IG9wZW4odGVtcGxhdGUsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShkZmQsIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQWJzb2x1dGUgbG9va3VwcyBmYWlsLiAqL1xuJiM0MztcdEFTU0VSVF9FUShvcGVuKFwmIzM0Oy9ldGMvcGFzc3dkXCYjMzQ7LCBPX1JET05MWSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcdEFTU0VSVF9FUShta2RpcihcJiMzNDsvZm9vXCYjMzQ7LCAwNzAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJvb3QgY2Fubm90IGJlIHJlZmVyZW5jZWQgYXQgYWxsIC0gbm90IGV2ZW4gYW4gT19QQVRIIG9wZW4sXG4mIzQzO1x0ICogd2hpY2ggc2tpcHMgLVx1MDAzZXBlcm1pc3Npb24oKSwgYmVjYXVzZSBpdCBsYW5kcyBvbiB0aGUgcm9vdCBhcyBhXG4mIzQzO1x0ICoganVtcGVkIHdhbGsgdGVybWluYWwgdGhhdCAtXHUwMDNlZF93ZWFrX3JldmFsaWRhdGUoKSByZWZ1c2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShvcGVuKFwmIzM0Oy9cJiMzNDssIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XHRBU1NFUlRfRVEob3BlbihcJiMzNDsvXCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3RhdGZzKFwmIzM0Oy9cJiMzNDssIFx1MDAyNnNmcyksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IGNhbm5vdCBiZSBwaW5uZWQgYnkgZm9sbG93aW5nIC9wcm9jL3NlbGYvcm9vdCBpbnRvIGl0IGVpdGhlclxuJiM0MztcdCAqIChvbmx5IHRoZSByb290IGlzIGluIGZhaWxmcyBoZXJlLCBzbyBzZWxmL2N3ZCBpcyBzdGlsbCByZWFsKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEob3BlbmF0KHByb2NmZCwgXCYjMzQ7c2VsZi9yb290XCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogTm9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLiAqL1xuJiM0MztcdGZoLmhhbmRsZS5oYW5kbGVfYnl0ZXMgPSBNQVhfSEFORExFX1NaO1xuJiM0MztcdEFTU0VSVF9FUShuYW1lX3RvX2hhbmRsZV9hdChBVF9GRENXRCwgXCYjMzQ7L1wmIzM0OywgXHUwMDI2ZmguaGFuZGxlLCBcdTAwMjZtbnRpZCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgbm93IHVucmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuICovXG4mIzQzO1x0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xuJiM0MztcdEFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgXCYjMzQ7KHVucmVhY2hhYmxlKVwmIzM0OywgMTMpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi9cbiYjNDM7XHRmZCA9IG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7LlwmIzM0OywgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7XHRmZCA9IG9wZW5hdChkZmQsIFwmIzM0O2NhbmFyeVwmIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUSh3cml0ZShmZCwgXCYjMzQ7eFwmIzM0OywgMSksIDEpO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdGZkID0gb3BlbmF0KGRmZCwgXCYjMzQ7Y2FuYXJ5XCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogXCYjMzQ7Li5cJiMzNDsgd2Fsa3MgY2xhbXAgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZSwgbm90IGF0IGZhaWxmcy4gKi9cbiYjNDM7XHRmZCA9IG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi5cJiMzNDssIE9fUEFUSCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoZnN0YXQoZmQsIFx1MDAyNnN0KSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0LnN0X2RldiwgcmVhbHJvb3Quc3RfZGV2KTtcbiYjNDM7XHRBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiByZWFkbGluayBvZiB0aGUgbWFnaWMgbGluayBzdGlsbCB3b3JrczogaXQgZG9lcyBub3QgZm9sbG93LiAqL1xuJiM0MztcdHJldCA9IHJlYWRsaW5rYXQocHJvY2ZkLCBcJiMzNDtzZWxmL3Jvb3RcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbiYjNDM7XHRBU1NFUlRfR1QocmV0LCAwKTtcbiYjNDM7XHRidWZbcmV0XSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0VEhfTE9HKFwmIzM0Oy9wcm9jL3NlbGYvcm9vdCBwb2ludHMgdG8gJiMzOTslcyYjMzk7XCYjMzQ7LCBidWYpO1xuJiM0MztcdC8qIGRfcGF0aCgpIG5hbWVzIHRoZSBmYWlsZnMgcm9vdCBzeW50aGV0aWNhbGx5LCBuZXZlciBhcyBhIHJlYWwgcGF0aC4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXCYjMzQ7ZmFpbGZzOi9cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQnV0IGZvbGxvd2luZyBpdCBpbnRvIGZhaWxmcyBpcyByZWZ1c2VkLiAqL1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdGF0KHByb2NmZCwgXCYjMzQ7c2VsZi9yb290XCYjMzQ7LCBcdTAwMjZzdCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXG4mIzQzO1x0dW5saW5rYXQoZGZkLCBcJiMzNDtjYW5hcnlcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSAmIzQzOyBzdHJsZW4oXCYjMzQ7L3RtcC9cJiMzNDspLCBBVF9SRU1PVkVESVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfYWJzb2x1dGVfc3ltbGluaylcbiYjNDM7e1xuJiM0MztcdGNoYXIgdGVtcGxhdGVbXSA9IFwmIzM0Oy90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdGludCB0bXBmZCwgZGZkLCBmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR0bXBmZCA9IG9wZW4oXCYjMzQ7L3RtcFwmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTtcbiYjNDM7XHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcbiYjNDM7XHRBU1NFUlRfR0UoZGZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuYXQoZGZkLCBcJiMzNDt0YXJnZXRcJiMzNDssIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3ltbGlua2F0KFwmIzM0O3RhcmdldFwmIzM0OywgZGZkLCBcJiMzNDtyZWxcJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3ltbGlua2F0KFwmIzM0Oy9ldGNcJiMzNDssIGRmZCwgXCYjMzQ7YWJzXCYjMzQ7KSwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBSZWxhdGl2ZSBzeW1saW5rcyBrZWVwIHJlc29sdmluZyB3aXRoaW4gdGhlIGRpcmZkLWFuY2hvcmVkIHdhbGsuLi4gKi9cbiYjNDM7XHRmZCA9IG9wZW5hdChkZmQsIFwmIzM0O3JlbFwmIzM0OywgT19SRE9OTFkpO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIC4uLiBhYnNvbHV0ZSBzeW1saW5rcyByZXN0YXJ0IHRoZSB3YWxrIGF0IHRoZSBmYWlsZnMgcm9vdC4gKi9cbiYjNDM7XHRBU1NFUlRfRVEob3BlbmF0KGRmZCwgXCYjMzQ7YWJzXCYjMzQ7LCBPX1JET05MWSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXG4mIzQzO1x0dW5saW5rYXQoZGZkLCBcJiMzNDthYnNcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRmZCwgXCYjMzQ7cmVsXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkZmQsIFwmIzM0O3RhcmdldFwmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbihcJiMzNDsvdG1wL1wmIzM0OyksIEFUX1JFTU9WRURJUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF91bnByaXZpbGVnZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZltQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgPT0gMClcbiYjNDM7XHRcdEFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogV2l0aG91dCBub19uZXdfcHJpdnMgZW50ZXJpbmcgZmFpbGZzIGlzIG5vdCBhbGxvd2VkLi4uICovXG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xuJiM0MztcbiYjNDM7XHQvKiAuLi4gd2l0aCBub19uZXdfcHJpdnMgc2V0IGl0IGlzIGFsbG93ZWQuICovXG4mIzQzO1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG9wZW4oXCYjMzQ7L2V0Yy9wYXNzd2RcJiMzNDssIE9fUkRPTkxZKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB0YXNrIGNvdW50cyBhcyBjaHJvb3RlZDogbm8gdXNlciBuYW1lc3BhY2VzIGFueW1vcmUuICovXG4mIzQzO1x0QVNTRVJUX0VRKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUiksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTtcbiYjNDM7XG4mIzQzO1x0LyogV2l0aCBib3RoIHJvb3QgYW5kIGN3ZCBpbiBmYWlsZnMgZ2V0Y3dkKCkgcmVwb3J0cyBcJiMzNDsvXCYjMzQ7LiAqL1xuJiM0MztcdEFTU0VSVF9FUShmY2hkaXIoRkRfRkFJTEZTX1JPT1QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwmIzM0Oy9cJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChmY2hyb290X3NlbnRpbmVsX3JlamVjdGVkX3doZW5fY2hyb290ZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHRlbXBsYXRlW10gPSBcJiMzNDsvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFwmIzM0OztcbiYjNDM7XHRpbnQgdG1wZmQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtjaHJvb3QoKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRtcGZkID0gb3BlbihcJiMzNDsvdG1wXCYjMzQ7LCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHRtcGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShjaHJvb3QodGVtcGxhdGUpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2hkaXIoXCYjMzQ7L1wmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBSZW1vdmUgdGhlIGphaWwgd2hpbGUgc3RpbGwgcHJpdmlsZWdlZDsgc3RpY2t5IC90bXAgYmxvY2tzIG5vYm9keS4gKi9cbiYjNDM7XHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgJiM0Mzsgc3RybGVuKFwmIzM0Oy90bXAvXCYjMzQ7KSwgQVRfUkVNT1ZFRElSKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuJiM0MztcdEFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEFuIHVucHJpdmlsZWdlZCBjaHJvb3RlZCB0YXNrIG11c3Qgbm90IGxpZnQgaXRzIFwmIzM0Oy4uXCYjMzQ7IGJhcnJpZXIuICovXG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfc2hhcmVkX2ZzX3N0cnVjdClcbiYjNDM7e1xuJiM0MztcdGNoYXIgc3RhY2tbRkFJTEZTX0NMT05FX1NUQUNLXTtcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgPT0gMClcbiYjNDM7XHRcdEFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBDTE9ORV9GUyBzaWJsaW5nIHNoYXJlcyB0aGUgZnNfc3RydWN0OiBidW1wIGZzLVx1MDAzZXVzZXJzIHRvIDIuICovXG4mIzQzO1x0cGlkID0gY2xvbmUoZmFpbGZzX3BhcmssIHN0YWNrICYjNDM7IHNpemVvZihzdGFjayksIENMT05FX0ZTIHwgU0lHQ0hMRCxcbiYjNDM7XHRcdCAgICBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfR0UocGlkLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHNpYmxpbmcgd2l0aG91dCBub19uZXdfcHJpdnMgY291bGQgZXhlYyBhIHNldHVpZCBiaW5hcnkgd2l0aFxuJiM0MztcdCAqIHRoZSBmYWlsZnMgcm9vdCwgc28gYSBzaGFyZWQgZnNfc3RydWN0IGlzIHJlZnVzZWQgZXZlbiB3aXRoXG4mIzQzO1x0ICogbm9fbmV3X3ByaXZzIHNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoa2lsbChwaWQsIFNJR0tJTEwpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIE5VTEwsIDApLCBwaWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfbm9fb3Zlcm1vdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O21vdW50aW5nIHJlcXVpcmVzIHByaXZpbGVnZXNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbnRhaW4gdGhlIGJsYXN0IHJhZGl1czogaWYgZmFpbGZzIGV2ZXIgcmVncmVzc2VkIGFuZCBcJiMzNDsvXCYjMzQ7XG4mIzQzO1x0ICogcmVzb2x2ZWQgdG8gdGhlIHJlYWwgcm9vdCwgdGhlIHRtcGZzIG1vdW50IGJlbG93IG11c3Qgbm90IHRvdWNoXG4mIzQzO1x0ICogdGhlIGhvc3QuIEEgcHJpdmF0ZSBtb3VudCBuYW1lc3BhY2Uga2VlcHMgaXQgbG9jYWwgdG8gdGhpcyBjaGlsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEodW5zaGFyZShDTE9ORV9ORVdOUyksIDApO1xuJiM0MztcdEFTU0VSVF9FUShtb3VudChOVUxMLCBcJiMzNDsvXCYjMzQ7LCBOVUxMLCBNU19SRUMgfCBNU19QUklWQVRFLCBOVUxMKSwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mIHRoZSBmYWlsZnMgcm9vdC4gSXQgY2Fubm90IGV2ZW5cbiYjNDM7XHQgKiBiZSBuYW1lZCBhcyBhIG1vdW50IHRhcmdldDogcmVzb2x2aW5nIFwmIzM0Oy9cJiMzNDsgaXMgcmVmdXNlZCBiZWZvcmUgdGhlXG4mIzQzO1x0ICogbW91bnQgbWFjaGluZXJ5ICh3aGljaCwgZmFpbGZzIGJlaW5nIGluIG5vIG1vdW50IG5hbWVzcGFjZSwgd291bGRcbiYjNDM7XHQgKiByZWplY3QgaXQgYW55d2F5KSBpcyBldmVyIHJlYWNoZWQuIG9wZW5fdHJlZShPUEVOX1RSRUVfQ0xPTkUpIGlzXG4mIzQzO1x0ICogbGlrZXdpc2UgbW9vdCBzaW5jZSBubyBmZCB0byB0aGUgcm9vdCBjYW4gYmUgb2J0YWluZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX0VRKG1vdW50KFwmIzM0O25vbmVcJiMzNDssIFwmIzM0Oy9cJiMzNDssIFwmIzM0O3RtcGZzXCYjMzQ7LCAwLCBOVUxMKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9zZXRuc19lc2NhcGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RhdCByZWFscm9vdCwgc3Q7XG4mIzQzO1x0aW50IG5zZmQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtzZXRucygpIHRvIGEgbW91bnQgbmFtZXNwYWNlIHJlcXVpcmVzIHByaXZpbGVnZXNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3RhdChcJiMzNDsvXCYjMzQ7LCBcdTAwMjZyZWFscm9vdCksIDApO1xuJiM0MztcdG5zZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvbnMvbW50XCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKG5zZmQsIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEob3BlbihcJiMzNDsvZXRjXCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBtb3VudCBuYW1lc3BhY2UgZmQgaXMgdGhlIGtleSBvdXQ6IGl0IHJlc2V0cyByb290IGFuZCBjd2QuICovXG4mIzQzO1x0QVNTRVJUX0VRKHNldG5zKG5zZmQsIENMT05FX05FV05TKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKG5zZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQoXCYjMzQ7L1wmIzM0OywgXHUwMDI2c3QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpO1xuJiM0MztcdEFTU0VSVF9FUShzdC5zdF9pbm8sIHJlYWxyb290LnN0X2lubyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9leGVjKVxuJiM0Mzt7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhlYyBpbiBhIGNoaWxkOiBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIHdvdWxkIHJlcGxhY2UgdGhlIHRlc3RcbiYjNDM7XHQgKiBpbWFnZSBhbmQgaXRzIGV4aXQgY29kZSB3b3VsZCBub3QgbWF0Y2ggdGhlIHNlbnRpbmVsIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdHBpZCA9IGZvcmsoKTtcbiYjNDM7XHRBU1NFUlRfR0UocGlkLCAwKTtcbiYjNDM7XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdGV4ZWNsKFwmIzM0Oy9iaW4vdHJ1ZVwmIzM0OywgXCYjMzQ7dHJ1ZVwmIzM0OywgTlVMTCk7XG4mIzQzO1x0XHRfZXhpdChlcnJubyA9PSBFT1BOT1RTVVBQID8gRkFJTEZTX0VYRUNfQkxPQ0tFRCA6IDEpO1xuJiM0MztcdH1cbiYjNDM7XHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpO1xuJiM0MztcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBGQUlMRlNfRVhFQ19CTE9DS0VEKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChmY2hyb290X3NlbnRpbmVsX2V4ZWNfaW50ZXJwcmV0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyZ3ZbXSA9IHsgXCYjMzQ7ZmFpbGZzX3Rlc3RcJiMzNDssIE5VTEwgfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVudnBbXSA9IHsgTlVMTCB9O1xuJiM0MztcdHBpZF90IHBpZDtcbiYjNDM7XHRpbnQgc3RhdHVzLCBleGVmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBFeGVjIG91cnNlbHZlczogdGhlIG9uZSBiaW5hcnkgZ3VhcmFudGVlZCB0byBiZSBhcm91bmQuICovXG4mIzQzO1x0ZXhlZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvZXhlXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGV4ZWZkLCAwKTtcbiYjNDM7XHRpZiAoIWVsZl9oYXNfYWJzb2x1dGVfaW50ZXJwKGV4ZWZkKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDt0ZXN0IGJpbmFyeSBoYXMgbm8gYWJzb2x1dGUgUFRfSU5URVJQIGludGVycHJldGVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGJpbmFyeSBpdHNlbGYgbmVlZHMgbm8gcGF0aCBsb29rdXAgLSBpdCBpcyBleGVjdXRlZCBieSBmZCAtXG4mIzQzO1x0ICogYnV0IGxvYWRpbmcgaXQgZmFpbHMgb24gb3BlbmluZyB0aGUgYWJzb2x1dGUgUFRfSU5URVJQXG4mIzQzO1x0ICogaW50ZXJwcmV0ZXIuIFJ1biBpdCBpbiBhIGNoaWxkIHNvIGEgd3JvbmdseSBzdWNjZXNzZnVsIGV4ZWMgZG9lc1xuJiM0MztcdCAqIG5vdCByZXBsYWNlIHRoZSB0ZXN0IGltYWdlIGFuZCBtYXNxdWVyYWRlIGFzIGEgcGFzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0QVNTRVJUX0dFKHBpZCwgMCk7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRzeXNjYWxsKF9fTlJfZXhlY3ZlYXQsIGV4ZWZkLCBcJiMzNDtcJiMzNDssIGFyZ3YsIGVudnAsIEFUX0VNUFRZX1BBVEgpO1xuJiM0MztcdFx0X2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQpO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTtcbiYjNDM7XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRkFJTEZTX0VYRUNfQkxPQ0tFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9pbmhlcml0ZWQpXG4mIzQzO3tcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0cGlkID0gZm9yaygpO1xuJiM0MztcdEFTU0VSVF9HRShwaWQsIDApO1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0aWYgKG9wZW4oXCYjMzQ7L2V0Y1wmIzM0OywgT19QQVRIKSAhPSAtMSB8fCBlcnJubyAhPSBFT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRfZXhpdCgxKTtcbiYjNDM7XHRcdF9leGl0KDApO1xuJiM0MztcdH1cbiYjNDM7XHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpO1xuJiM0MztcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfZmNocm9vdCYjMzQ7LAogICAgJiMzNDtzeXNfZmNoZGlyJiMzNDssCiAgICAmIzM0O2ZhaWxmc19jdXJyZW50X2NoZGlyJiMzNDssCiAgICAmIzM0O2ZhaWxmc19nZXRfcm9vdCYjMzQ7LAogICAgJiMzNDtmYWlsZnNfbW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2VybmVsLWludGVybmFsIGZpbGVzeXN0ZW0gYGZhaWxmc2AgYW5kIGEgbmV3IHN5c3RlbSBjYWxsIGBmY2hyb290YC4gSXQgYWxzbyBtb2RpZmllcyBgZmNoZGlyYCB0byBhY2NlcHQgYSBuZXcgbWFnaWMgZmlsZSBkZXNjcmlwdG9yIGBGRF9GQUlMRlNfUk9PVGAuIFRoZXNlIGFyZSBjb3JlIFZGUyBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgZXNjYXBpbmcgY2hyb290LCByZWZlcmVuY2UgbGVha3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjYTRhMzAzYjA5NGI2YzhiNDJjMzc3MDI3OGI5M2E4NGIxN2NkMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxOTowNTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmFpbGZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmFpbGZzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjFmZjJkYjc5NDFkZjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZhaWxmcy5yc3QKQEAgLTAsMCAmIzQzOzEsNzMgQEAKJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOz09PT09PQomIzQzO2ZhaWxmcwomIzQzOz09PT09PQomIzQzOwomIzQzO2ZhaWxmcyBpcyBhIGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIHRoYXQgZmFpbHMgZXZlcnkgb3BlcmF0aW9uCiYjNDM7cmVhY2hpbmcgaXQgd2l0aCBgYEVPUE5PVFNVUFBgYC4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIG51bGxmcy4gV2hlcmUKJiM0MztudWxsZnMgaXMgcGVybWFuZW50bHkgZW1wdHksIGZhaWxmcyBtZWFucyAmIzM0O25vdGhpbmcgaXMgc3VwcG9ydGVkIGhlcmUmIzM0Oy4KJiM0MztJdCBjYW5ub3QgYmUgbW91bnRlZCBmcm9tIHVzZXJzcGFjZSwgbm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2YKJiM0MztpdC4gSXQgY2Fubm90IGJlIGNsb25lZC4KJiM0MzsKJiM0MztUaGUgb25seSB3YXkgaW50byBpdCBpcyB0aGUgYGBGRF9GQUlMRlNfUk9PVGBgIGZpbGUgZGVzY3JpcHRvciBzZW50aW5lbCB3aGljaAomIzQzO2lzIHVuZGVyc3Rvb2QgYnkgYGBmY2hkaXIoMilgYCBhbmQgYGBmY2hyb290KDIpYGAuCiYjNDM7CiYjNDM7U2VtYW50aWNzCiYjNDM7PT09PT09PT09CiYjNDM7CiYjNDM7RXZlcnkgcGF0aCB3YWxrIG9mIGEgY29tcG9uZW50IHRocm91Z2ggZmFpbGZzIGZhaWxzIHdpdGgKJiM0MztgYEVPUE5PVFNVUFBgYCBiZWZvcmUgdGhhdCBjb21wb25lbnQgaXMgcGFyc2VkLCBpbmNsdWRpbmcgYGAuYGAuCiYjNDM7CiYjNDM7Tm8gcGF0aCBsb29rdXAgY2FuIG9wZW4gdGhlIHJvb3QsIG5vdCBldmVuIHdpdGggYGBPX1BBVEhgYC4KJiM0MzsKJiM0MztBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5CiYjNDM7YGBBVF9GRENXRGBgLXJlbGF0aXZlIGxvb2t1cC4gQXMgd2l0aCBhbnkgd29ya2luZyBkaXJlY3RvcnkgdGhhdCBpcwomIzQzO3VucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdCwgdGhlIGBgZ2V0Y3dkKDIpYGAgc3lzdGVtIGNhbGwgcmV0dXJucwomIzQzO2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLgomIzQzOwomIzQzO0EgcHJvY2VzcyB3aXRoIGl0cyByb290IGRpcmVjdG9yeSBpbiBmYWlsZnMgZmFpbHMgZXZlcnkgYWJzb2x1dGUgcGF0aAomIzQzO2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseQomIzQzO2xpbmtlZCBiaW5hcmllcy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZmFpbHMgZXhlYy4KJiM0MzsKJiM0MztMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXQKJiM0MztpcyB0aGUgYGBmc19zdHJ1Y3RgYCBlcXVpdmFsZW50IG9mIGBgUkVTT0xWRV9CRU5FQVRIYGAuIFRoZSBwcm9jZXNzIG11c3QKJiM0MzthbmNob3IgZXZlcnkgbG9va3VwIGF0IGEgZmlsZSBkZXNjcmlwdG9yIGl0IGV4cGxpY2l0bHkgaG9sZHMuCiYjNDM7CiYjNDM7RW50ZXJpbmcKJiM0Mzs9PT09PT09PQomIzQzOwomIzQzO2BgZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMClgYCByZXF1aXJlcyBgYENBUF9TWVNfQ0hST09UYGAgaW4gdGhlCiYjNDM7Y2FsbGVyJiMzOTtzIHVzZXIgbmFtZXNwYWNlLCBtaXJyb3JpbmcgYGBjaHJvb3QoMilgYC4gVW5wcml2aWxlZ2VkIGNhbGxlcnMKJiM0MzttYXkgZW50ZXIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgaG9sZDoKJiM0MzsKJiM0MzsqIGBgbm9fbmV3X3ByaXZzYGAgaXMgc2V0OiBzZXR1aWQgYmluYXJpZXMgb24gcmVndWxhciBtb3VudHMgcmVtYWluCiYjNDM7ICByZWFjaGFibGUgdmlhIGluaGVyaXRlZCBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9ycyBhbmQgZXhlY3V0aW5nIHRoZW0KJiM0MzsgIHdpdGggYW4gdW51c2FibGUgcm9vdCBkaXJlY3RvcnkgaXMgdGhlIGNsYXNzaWMgY29uZnVzZWQgZGVwdXR5LgomIzQzOwomIzQzOyogVGhlIGNhbGxlciBpcyBub3QgYWxyZWFkeSBjaHJvb3RlZDogdGhlIHJvb3QgZGlyZWN0b3J5IGlzIHdoYXQKJiM0MzsgIGNvbmZpbmVzIGBgLi5gYCByZXNvbHV0aW9uIGFuZCB0aGUgZmFpbGZzIHJvb3QgY2FuIG5ldmVyIGJlIHJlYWNoZWQgYnkKJiM0MzsgIHdhbGtpbmcgdXAgYSByZWFsIG1vdW50IHRyZWUsIHNvIG1vdmluZyB0aGUgcm9vdCBvZiBhIGNocm9vdGVkIHRhc2sgdG8KJiM0MzsgIGZhaWxmcyB3b3VsZCBhbGxvdyBpdCB0byBlc2NhcGUgaXRzIGNocm9vdCB2aWEgYGBvcGVuYXQoZmQsICYjMzQ7Li4mIzM0OylgYC4KJiM0MzsKJiM0MzsqIFRoZSBjYWxsZXIgZG9lcyBub3Qgc2hhcmUgaXRzIGBgZnNfc3RydWN0YGA6IGBgbm9fbmV3X3ByaXZzYGAgaXMKJiM0MzsgIGNoZWNrZWQgb24gdGhlIGNhbGxpbmcgdGhyZWFkLCBidXQgdGhlIHJvb3QgbGl2ZXMgaW4gdGhlIGBgZnNfc3RydWN0YGAuCiYjNDM7ICBBIGBgQ0xPTkVfRlNgYCBzaWJsaW5nIHdpdGhvdXQgYGBub19uZXdfcHJpdnNgYCBjb3VsZCBvdGhlcndpc2UgZXhlY3V0ZQomIzQzOyAgYSBzZXR1aWQgYmluYXJ5IHdpdGggdGhlIGZhaWxmcyByb290LCBzbyBlbnRyeSByZXF1aXJlcyBgYGZzLSZndDt1c2VycyA9PQomIzQzOyAgMWBgLCB0aGUgc2FtZSByZXN0cmljdGlvbiBgYHNldG5zKDIpYGAgYXBwbGllcyBmb3IgdGhlIG1vdW50IGFuZCB1c2VyCiYjNDM7ICBuYW1lc3BhY2VzLgomIzQzOwomIzQzO0xlYXZpbmcKJiM0Mzs9PT09PT09CiYjNDM7CiYjNDM7QmFja2luZyBvdXQgaXMgY3VycmVudGx5IGhhcmQsIGJ1dCB0aGlzIGlzIGEgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQKJiM0MztpbXBsZW1lbnRhdGlvbiwgbm90IGEgZ3VhcmFudGVlZCBpbnRlcmZhY2UsIGFuZCBtYXkgYmUgbG9vc2VuZWQgbGF0ZXIuCiYjNDM7Rm9yIG5vdyBhIHByb2Nlc3MgdGhhdCBlbnRlcmVkIGZhaWxmcyBjb3VudHMgYXMgY2hyb290ZWQsIHNvIGl0IGNhbm5vdAomIzQzO2NyZWF0ZSB1c2VyIG5hbWVzcGFjZXMgdG8gcmVnYWluIGBgQ0FQX1NZU19DSFJPT1RgYCwgYW5kIGBgY2hyb290KDIpYGAKJiM0MztvciBgYGZjaHJvb3QoMilgYCBiYWNrIG91dCByZXF1aXJlIGBgQ0FQX1NZU19DSFJPT1RgYC4gVGhlIHJlbWFpbmluZyB3YXkKJiM0MztvdXQgdG9kYXkgaXMgYGBzZXRucygyKWBgIHdpdGggYSBtb3VudCBuYW1lc3BhY2UgZmlsZSBkZXNjcmlwdG9yLCB3aGljaAomIzQzO3JlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgIG92ZXIgdGhlIHRhcmdldCBtb3VudCBuYW1lc3BhY2UgYXMgd2VsbCBhcwomIzQzO2BgQ0FQX1NZU19DSFJPT1RgYCBhbmQgYGBDQVBfU1lTX0FETUlOYGAgaW4gdGhlIGNhbGxlciYjMzk7cyB1c2VyIG5hbWVzcGFjZQomIzQzO2FuZCByZXNldHMgYm90aCByb290IGFuZCB3b3JraW5nIGRpcmVjdG9yeS4gQSBwcm9jZXNzIHRoYXQgaG9sZHMgbm8gc3VjaAomIzQzO2ZpbGUgZGVzY3JpcHRvciBhbmQgcmVzdHJpY3RzIGBgKmNoZGlyKClgYC9gYCpjaHJvb3QoKWBgL2Bgc2V0bnMoKWBgIHZpYQomIzQzO3NlY2NvbXAgY2Fubm90IGN1cnJlbnRseSBnZXQgYmFjayBvdXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0CmluZGV4IDFmNzFjZjE1OTU0NzZjLi43MzRhNDVlNTE2Njc1YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLgogICAgZXh0MwogICAgZXh0NC9pbmRleAogICAgZjJmcwomIzQzOyAgIGZhaWxmcwogICAgZ2ZzMi9pbmRleAogICAgaGZzCiAgICBoZnNwbHVzCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IGYzMWI3YWZmZmMzNDU5Li41MmUzNTM4Y2M3ZGY0MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTUxMSwzICYjNDM7NTExLDQgQEAKIDU3OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNTgwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNTgxCWNvbW1vbglyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzU4Mgljb21tb24JZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibAppbmRleCA5NDM1MWUyMmJmY2Y3Ni4uNTU3MTdlZDMyYzI3ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsCkBAIC00ODYsMyAmIzQzOzQ4Niw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmwgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsCmluZGV4IDYyZDkzZDg4ZTBmZWY4Li5kZjJkMWQ4MmZiM2NjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsCkBAIC00ODMsMyAmIzQzOzQ4Myw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IDI0ODkzNDI1NzEwMTRjLi5iYTdhNGQ4OTAzZDA0NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC00NzEsMyAmIzQzOzQ3MSw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IDIyM2QyNjMwMzYyNzI0Li5jNTVhNWM5NmY0OWI4MiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC00NzcsMyAmIzQzOzQ3Nyw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwKaW5kZXggNzQzMDcxNGUyYjhmODYuLjlhZTg4ZTRlYWM2MWVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibApAQCAtNDEwLDMgJiM0Mzs0MTAsNCBAQAogNDY5CW4zMglmaWxlX3NldGF0dHIJCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJbjMyCWxpc3RucwkJCQlzeXNfbGlzdG5zCiA0NzEJbjMyCXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCW4zMglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsCmluZGV4IDYzMGFhYjllNTQyNTkyLi44M2RjOTNhMDcxMmYxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmwKQEAgLTM4NiwzICYjNDM7Mzg2LDQgQEAKIDQ2OQluNjQJZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCW42NAlsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCW42NAlyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3MgluNjQJZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibAppbmRleCAxMjg2NTMxMTIyODRiMi4uOWM2MjQyOWM5YjdiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsCkBAIC00NTksMyAmIzQzOzQ1OSw0IEBACiA0NjkJbzMyCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAlvMzIJbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQlvMzIJcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJbzMyCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAppbmRleCBjNjMzMWRhZDk0NjEzYi4uODhhZGM0MDE2Y2NlMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTQ3MCwzICYjNDM7NDcwLDQgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCWNvbW1vbglyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKaW5kZXggNGZjYzdjNThhMTA1ZGMuLmNmYmI3MDAzOWZmMDA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTU2MiwzICYjNDM7NTYyLDQgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCW5vc3B1CXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWNvbW1vbglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAppbmRleCAwOWE3ZWYwNGQ5NzkxYS4uMWI0NWU2OGEyMTdiYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibApAQCAtMzk4LDMgJiM0MzszOTgsNCBAQAogNDY5CWNvbW1vbglmaWxlX3NldGF0dHIJCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCQlzeXNfbGlzdG5zCiA0NzEJY29tbW9uCXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWNvbW1vbglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IDcwYjMxNWNiZTcxMGMyLi5hY2UwNjhkZmYwZGUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTQ3NSwzICYjNDM7NDc1LDQgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCWNvbW1vbglyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAppbmRleCA3ZTcxYmY3ZmNkMTRmNy4uNWI5ZmUwZTgxNDBmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC01MTcsMyAmIzQzOzUxNyw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmwKaW5kZXggZjgzMmViZDJkNzliMDAuLjJjMTcyZWY0OGRmZDMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibApAQCAtNDc3LDMgJiM0Mzs0NzcsNCBAQAogNDY5CWkzODYJZmlsZV9zZXRhdHRyCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJaTM4NglsaXN0bnMJCQlzeXNfbGlzdG5zCiA0NzEJaTM4Nglyc2VxX3NsaWNlX3lpZWxkCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWkzODYJZmNocm9vdAkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsCmluZGV4IDUyNDE1NWQ2NTVkYTE1Li5kNWI2MDQ1YjAwOTBjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKQEAgLTM5Niw2ICYjNDM7Mzk2LDcgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCXN5c19mY2hyb290CiAKICMKICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKaW5kZXggYTliY2E0ZTQ4NGRlY2YuLmQzNTRiYjIzMTc5NmMyIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC00NDIsMyAmIzQzOzQ0Miw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggODlhOGE5ZDIwN2QxYzUuLjczYjZjYWI3NzM4ZWE0IDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9mcy9NYWtlZmlsZQpAQCAtMTYsNyAmIzQzOzE2LDcgQEAgb2JqLXkgOj0Jb3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcCiAJCXN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFwKIAkJZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcCiAJCWtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFwKLQkJZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vCiYjNDM7CQlmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm8KIAogb2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKQkmIzQzOz0gYnVmZmVyLm8gbXBhZ2Uubwogb2JqLSQoQ09ORklHX1BST0NfRlMpCQkmIzQzOz0gcHJvY19uYW1lc3BhY2UubwpkaWZmIC0tZ2l0IGEvZnMvZF9wYXRoLmMgYi9mcy9kX3BhdGguYwppbmRleCBhNDg5NTdjMDk3MWVmNi4uYzI1MzA5MDA2ZDVkNmQgMTAwNjQ0Ci0tLSBhL2ZzL2RfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RfcGF0aC5jCkBAIC0yNzksNyAmIzQzOzI3OSw4IEBAIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogCSAqIGFuZCBpbnN0ZWFkIGhhdmUgZF9wYXRoIHJldHVybiB0aGUgbW91bnRlZCBwYXRoLgogCSAqLwogCWlmIChwYXRoLSZndDtkZW50cnktJmd0O2Rfb3AgJmFtcDsmYW1wOyBwYXRoLSZndDtkZW50cnktJmd0O2Rfb3AtJmd0O2RfZG5hbWUgJmFtcDsmYW1wOwotCSAgICAoIUlTX1JPT1QocGF0aC0mZ3Q7ZGVudHJ5KSB8fCBwYXRoLSZndDtkZW50cnkgIT0gcGF0aC0mZ3Q7bW50LSZndDttbnRfcm9vdCkpCiYjNDM7CSAgICAoIUlTX1JPT1QocGF0aC0mZ3Q7ZGVudHJ5KSB8fCBwYXRoLSZndDtkZW50cnkgIT0gcGF0aC0mZ3Q7bW50LSZndDttbnRfcm9vdCB8fAomIzQzOwkgICAgIGZhaWxmc19tbnQocGF0aC0mZ3Q7bW50KSkpCiAJCXJldHVybiBwYXRoLSZndDtkZW50cnktJmd0O2Rfb3AtJmd0O2RfZG5hbWUocGF0aC0mZ3Q7ZGVudHJ5LCBidWYsIGJ1Zmxlbik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CmRpZmYgLS1naXQgYS9mcy9mYWlsZnMuYyBiL2ZzL2ZhaWxmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NmEzNmRhM2QyMzZkNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhaWxmcy5jCkBAIC0wLDAgJiM0MzsxLDE2NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2hyaXN0aWFuIEJyYXVuZXIgJmx0O2JyYXVuZXJAa2VybmVsLm9yZyZndDsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMvc3VwZXJfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnNfY29udGV4dC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc19zdHJ1Y3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGF0aCBmYWlsZnNfcm9vdF9wYXRoID0ge307CiYjNDM7CiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpCiYjNDM7ewomIzQzOwkqcGF0aCA9IGZhaWxmc19yb290X3BhdGg7CiYjNDM7CXBhdGhfZ2V0KHBhdGgpOwomIzQzO30KJiM0MzsKJiM0Mztib29sIGZhaWxmc19tbnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbW50LSZndDttbnRfc2IgPT0gZmFpbGZzX3Jvb3RfcGF0aC5tbnQtJmd0O21udF9zYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYWlsZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgIGludCBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmFpbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJLyogVW5yZWFjaGFibGU6IC0mZ3Q7cGVybWlzc2lvbigpIGFscmVhZHkgZmFpbGVkIHRoZSB3YWxrLiAqLwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmFpbGZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAomIzQzOwkJCSAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLAomIzQzOwkJCSAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmFpbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewomIzQzOwkucGVybWlzc2lvbgk9IGZhaWxmc19wZXJtaXNzaW9uLAomIzQzOwkubG9va3VwCQk9IGZhaWxmc19sb29rdXAsCiYjNDM7CS5nZXRhdHRyCT0gZmFpbGZzX2dldGF0dHIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX29wZXJhdGlvbnMgPSB7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByb290IGlzIG9ubHkgZXZlciByZWFjaGVkIGFzIGEgcGF0aC13YWxrIHRlcm1pbmFsIGJ5IGp1bXBpbmcKJiM0MzsJICogdG8gaXQ6IGFzICYjMzQ7LyYjMzQ7IHdoZW4gaXQgaXMgdGhlIGNhbGxlciYjMzk7cyByb290LCBvciB0aHJvdWdoIGEKJiM0MzsJICogL3Byb2MvJmx0O3BpZCZndDsve3Jvb3QsY3dkfSBtYWdpYyBsaW5rLiAtJmd0O3Blcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxzCiYjNDM7CSAqIGV2ZXJ5IHdhbGsgb2YgYSBjb21wb25lbnQsIGJ1dCBhIGp1bXAgbGFuZHMgb24gdGhlIHJvb3Qgd2l0aG91dAomIzQzOwkgKiBvbmUuIFJlZnVzZSBoZXJlIHRvbyBzbyB0aGUgcm9vdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGFuIE9fUEFUSAomIzQzOwkgKiBvcGVuIG9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqZmFpbGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sICYjMzQ7ZmFpbGZzOi8mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zID0gewomIzQzOwkuZF9kbmFtZQkJPSBmYWlsZnNfZG5hbWUsCiYjNDM7CS5kX3dlYWtfcmV2YWxpZGF0ZQk9IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHsKJiM0MzsJLnN0YXRmcwk9IGZhaWxmc19zdGF0ZnMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhaWxmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsKJiM0MzsJcy0mZ3Q7c19tYXhieXRlcwkJPSBNQVhfTEZTX0ZJTEVTSVpFOwomIzQzOwlzLSZndDtzX2Jsb2Nrc2l6ZQkJPSBQQUdFX1NJWkU7CiYjNDM7CXMtJmd0O3NfYmxvY2tzaXplX2JpdHMJPSBQQUdFX1NISUZUOwomIzQzOwlzLSZndDtzX21hZ2ljCQk9IEZBSUxfRlNfTUFHSUM7CiYjNDM7CXMtJmd0O3Nfb3AJCQk9ICZhbXA7ZmFpbGZzX3N1cGVyX29wZXJhdGlvbnM7CiYjNDM7CXMtJmd0O3NfZXhwb3J0X29wCQk9IE5VTEw7CiYjNDM7CXMtJmd0O3NfeGF0dHIJCT0gTlVMTDsKJiM0MzsJcy0mZ3Q7c190aW1lX2dyYW4JCT0gMTsKJiM0MzsJcy0mZ3Q7c19kX2ZsYWdzCQk9IDA7CiYjNDM7CiYjNDM7CWlub2RlID0gbmV3X2lub2RlKHMpOwomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIGZhaWxmcyBzdXBwb3J0cyBubyBvcGVyYXRpb25zLi4uICovCiYjNDM7CWlub2RlLSZndDtpX21vZGUJPSBTX0lGRElSOwomIzQzOwlzZXRfbmxpbmsoaW5vZGUsIDIpOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcAk9ICZhbXA7ZmFpbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AJPSAmYW1wO2ZhaWxmc19kaXJfb3BlcmF0aW9uczsKJiM0MzsJc2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpOwomIzQzOwlpbm9kZS0mZ3Q7aV9pbm8JPSAxOwomIzQzOwkvKiAuLi4gYW5kIGlzIGltbXV0YWJsZS4gKi8KJiM0MzsJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiYjNDM7CiYjNDM7CXNldF9kZWZhdWx0X2Rfb3AocywgJmFtcDtmYWlsZnNfZGVudHJ5X29wZXJhdGlvbnMpOwomIzQzOwlzLSZndDtzX3Jvb3QgPSBkX21ha2Vfcm9vdChpbm9kZSk7CiYjNDM7CWlmICghcy0mZ3Q7c19yb290KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhaWxmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBmYWlsZnNfZmlsbF9zdXBlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGZhaWxmc19jb250ZXh0X29wcyA9IHsKJiM0MzsJLmdldF90cmVlCT0gZmFpbGZzX2dldF90cmVlLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYWlsZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CWZjLSZndDtvcHMJCT0gJmFtcDtmYWlsZnNfY29udGV4dF9vcHM7CiYjNDM7CWZjLSZndDtnbG9iYWwJPSB0cnVlOwomIzQzOwlmYy0mZ3Q7c2JfZmxhZ3MJfD0gU0JfTk9VU0VSOwomIzQzOwlmYy0mZ3Q7c19pZmxhZ3MJfD0gU0JfSV9OT0VYRUMgfCBTQl9JX05PREVWOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOwomIzQzOwomIzQzOwlmYWlsZnNfZ2V0X3Jvb3QoJmFtcDtwYXRoKTsKJiM0MzsJc2V0X2ZzX3B3ZChjdXJyZW50LSZndDtmcywgJmFtcDtwYXRoKTsKJiM0MzsJcGF0aF9wdXQoJmFtcDtwYXRoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBmYWlsZnNfZnNfdHlwZSA9IHsKJiM0MzsJLm5hbWUJCQk9ICYjMzQ7ZmFpbGZzJiMzNDssCiYjNDM7CS5pbml0X2ZzX2NvbnRleHQJPSBmYWlsZnNfaW5pdF9mc19jb250ZXh0LAomIzQzOwkua2lsbF9zYgkJPSBraWxsX2Fub25fc3VwZXIsCiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBmYWlsZnNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmc21vdW50ICptbnQ7CiYjNDM7CiYjNDM7CS8qIEEgc2luZ2xlIGluc3RhbmNlIHRoYXQgaXMgbWVtYmVyIG9mIG5vIG1vdW50IG5hbWVzcGFjZS4gKi8KJiM0MzsJbW50ID0ga2Vybl9tb3VudCgmYW1wO2ZhaWxmc19mc190eXBlKTsKJiM0MzsJaWYgKElTX0VSUihtbnQpKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IEZhaWxlZCB0byBjcmVhdGUgZmFpbGZzJiMzNDspOwomIzQzOwomIzQzOwlmYWlsZnNfcm9vdF9wYXRoLm1udAk9IG1udDsKJiM0MzsJZmFpbGZzX3Jvb3RfcGF0aC5kZW50cnkJPSBtbnQtJmd0O21udF9yb290OwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYxLi42N2FhMDQ0NDM1MWIxYSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oCkBAIC0zNjIsMyAmIzQzOzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHBpZGZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKTsKIHZvaWQgbnNmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7CiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpOwomIzQzO3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpOwomIzQzO2Jvb2wgZmFpbGZzX21udChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiYjNDM7aW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCAzZDVjZDViZjNiMDUzNy4uODdjMzY1ZjJmODJiYTMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVzcGFjZS5jCkBAIC02Mjc0LDYgJiM0Mzs2Mjc0LDcgQEAgdm9pZCBfX2luaXQgbW50X2luaXQodm9pZCkKIAlzaG1lbV9pbml0KCk7CiAJaW5pdF9yb290ZnMoKTsKIAlpbml0X21vdW50X3RyZWUoKTsKJiM0MzsJZmFpbGZzX2luaXQoKTsKIH0KIAogdm9pZCBwdXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucykKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmMKQEAgLTU3MCw5ICYjNDM7NTcwLDEyIEBAIFNZU0NBTExfREVGSU5FMShjaGRpciwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpCiAKIFNZU0NBTExfREVGSU5FMShmY2hkaXIsIHVuc2lnbmVkIGludCwgZmQpCiB7Ci0JQ0xBU1MoZmRfcmF3LCBmKShmZCk7CiAJaW50IGVycm9yOwogCiYjNDM7CWlmICgoaW50KWZkID09IEZEX0ZBSUxGU19ST09UKQomIzQzOwkJcmV0dXJuIGZhaWxmc19jdXJyZW50X2NoZGlyKCk7CiYjNDM7CiYjNDM7CUNMQVNTKGZkX3JhdywgZikoZmQpOwogCWlmIChmZF9lbXB0eShmKSkKIAkJcmV0dXJuIC1FQkFERjsKIApAQCAtNjE1LDYgJiM0Mzs2MTgsNTIgQEAgU1lTQ0FMTF9ERUZJTkUxKGNocm9vdCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpCiAJcmV0dXJuIGVycm9yOwogfQogCiYjNDM7U1lTQ0FMTF9ERUZJTkUyKGZjaHJvb3QsIGludCwgZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChmbGFncykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHsKJiM0MzsJCWlmICghbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgQ0FQX1NZU19DSFJPT1QpKSB7CiYjNDM7CQkJaWYgKCF0YXNrX25vX25ld19wcml2cyhjdXJyZW50KSkKJiM0MzsJCQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCQkvKiBBIHNoYXJlZCBmc19zdHJ1Y3QgbGV0cyBhIHNpYmxpbmcgZXhlYyBzZXR1aWQgcGFzdCB0aGUgY2hlY2sgYWJvdmUuICovCiYjNDM7CQkJaWYgKGN1cnJlbnQtJmd0O2ZzLSZndDt1c2VycyAhPSAxKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkvKiBNb3ZpbmcgdGhlIHJvb3QgdG8gZmFpbGZzIGxpZnRzIHRoZSBvbGQgcm9vdCYjMzk7cyAmIzM0Oy4uJiMzNDsgYmFycmllci4gKi8KJiM0MzsJCQlpZiAoY3VycmVudF9jaHJvb3RlZCgpKQomIzQzOwkJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwkJfQomIzQzOwkJZmFpbGZzX2dldF9yb290KCZhbXA7cGF0aCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlDTEFTUyhmZF9yYXcsIGYpKGZkKTsKJiM0MzsJCWlmIChmZF9lbXB0eShmKSkKJiM0MzsJCQlyZXR1cm4gLUVCQURGOwomIzQzOwomIzQzOwkJaWYgKCFkX2Nhbl9sb29rdXAoZmRfZmlsZShmKS0mZ3Q7Zl9wYXRoLmRlbnRyeSkpCiYjNDM7CQkJcmV0dXJuIC1FTk9URElSOwomIzQzOwomIzQzOwkJZXJyb3IgPSBmaWxlX3Blcm1pc3Npb24oZmRfZmlsZShmKSwgTUFZX0VYRUMgfCBNQVlfQ0hESVIpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJCWlmICghbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgQ0FQX1NZU19DSFJPT1QpKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CQlwYXRoID0gZmRfZmlsZShmKS0mZ3Q7Zl9wYXRoOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtwYXRoKTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X3BhdGhfY2hyb290KCZhbXA7cGF0aCk7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlzZXRfZnNfcm9vdChjdXJyZW50LSZndDtmcywgJmFtcDtwYXRoKTsKJiM0MzsJcGF0aF9wdXQoJmFtcDtwYXRoKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKIGludCBjaG1vZF9jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDg3NGQ5MDY3YTQzYjUwLi44NDEzYjYyNGFkNDc4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNDU3LDYgJiM0Mzs0NTcsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzX2ZhY2Nlc3NhdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwKIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmNoZGlyKHVuc2lnbmVkIGludCBmZCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2Nocm9vdChjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUpOwomIzQzO2FzbWxpbmthZ2UgbG9uZyBzeXNfZmNocm9vdChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZCh1bnNpZ25lZCBpbnQgZmQsIHVtb2RlX3QgbW9kZSk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZGF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCSAgICAgdW1vZGVfdCBtb2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTg2Myw4ICYjNDM7ODYzLDEyIEBAIF9fU1lTQ0FMTChfX05SX2xpc3Rucywgc3lzX2xpc3RucykKICNkZWZpbmUgX19OUl9yc2VxX3NsaWNlX3lpZWxkIDQ3MQogX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpCiAKJiM0MzsvKiBmcy9vcGVuLmMgKi8KJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzIKJiM0MztfX1NZU0NBTEwoX19OUl9mY2hyb290LCBzeXNfZmNocm9vdCkKJiM0MzsKICN1bmRlZiBfX05SX3N5c2NhbGxzCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDcyCiYjNDM7I2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MwogCiAvKgogICogMzIgYml0IHN5c3RlbXMgdHJhZGl0aW9uYWxseSB1c2VkIGRpZmZlcmVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaAppbmRleCBhYWRmYmY2ZTBjYjNhMC4uZTQzZTNkZTNlOWVlNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oCkBAIC0xMjQsNiAmIzQzOzEyNCw3IEBAIHN0cnVjdCBkZWxlZ2F0aW9uIHsKIAogI2RlZmluZSBGRF9QSURGU19ST09UCQkJLTEwMDAyIC8qIFJvb3Qgb2YgdGhlIHBpZGZzIGZpbGVzeXN0ZW0gKi8KICNkZWZpbmUgRkRfTlNGU19ST09UCQkJLTEwMDAzIC8qIFJvb3Qgb2YgdGhlIG5zZnMgZmlsZXN5c3RlbSAqLwomIzQzOyNkZWZpbmUgRkRfRkFJTEZTX1JPT1QJCQktMTAwMDQgLyogUm9vdCBvZiB0aGUgZmFpbGZzIGZpbGVzeXN0ZW0gKi8KICNkZWZpbmUgRkRfSU5WQUxJRAkJCS0xMDAwOSAvKiBJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjogLTEwMDAwIC0gRUJBREYgPSAtMTAwMDkgKi8KIAogLyogR2VuZXJpYyBmbGFncyBmb3IgdGhlICphdCgyKSBmYW1pbHkgb2Ygc3lzY2FsbHMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oCmluZGV4IDRmMmRhOTM1YTc2Y2NhLi5mZDVmMGU5NTY0OGVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKQEAgLTEwNSw1ICYjNDM7MTA1LDYgQEAKICNkZWZpbmUgUElEX0ZTX01BR0lDCQkweDUwNDk0NDQ2CS8qICYjMzQ7UElERiYjMzQ7ICovCiAjZGVmaW5lIEdVRVNUX01FTUZEX01BR0lDCTB4NDc0ZDQ1NGQJLyogJiMzNDtHTUVNJiMzNDsgKi8KICNkZWZpbmUgTlVMTF9GU19NQUdJQwkJMHg0RTU1NEM0QwkvKiAmIzM0O05VTEwmIzM0OyAqLwomIzQzOyNkZWZpbmUgRkFJTF9GU19NQUdJQwkJMHg0NjQxNDk0QwkvKiAmIzM0O0ZBSUwmIzM0OyAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9NQUdJQ19IX18gKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsCmluZGV4IDdhNDJiMzJiNjU3NzY3Li4wYWI1MzE2MDUxMjAyZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9zY3JpcHRzL3N5c2NhbGwudGJsCkBAIC00MTIsMyAmIzQzOzQxMiw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTg2Myw4ICYjNDM7ODYzLDEyIEBAIF9fU1lTQ0FMTChfX05SX2xpc3Rucywgc3lzX2xpc3RucykKICNkZWZpbmUgX19OUl9yc2VxX3NsaWNlX3lpZWxkIDQ3MQogX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpCiAKJiM0MzsvKiBmcy9vcGVuLmMgKi8KJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzIKJiM0MztfX1NZU0NBTEwoX19OUl9mY2hyb290LCBzeXNfZmNocm9vdCkKJiM0MzsKICN1bmRlZiBfX05SX3N5c2NhbGxzCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDcyCiYjNDM7I2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MwogCiAvKgogICogMzIgYml0IHN5c3RlbXMgdHJhZGl0aW9uYWxseSB1c2VkIGRpZmZlcmVudApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKaW5kZXggNTI0MTU1ZDY1NWRhMTUuLmQ1YjYwNDViMDA5MGNjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKQEAgLTM5Niw2ICYjNDM7Mzk2LDcgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCXN5c19mY2hyb290CiAKICMKICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5CmRpZmYgLS1naXQgYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsIGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibAppbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibApAQCAtNDEyLDMgJiM0Mzs0MTIsNCBAQAogNDY5CWNvbW1vbglmaWxlX3NldGF0dHIJCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCQlzeXNfbGlzdG5zCiA0NzEJY29tbW9uCXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWNvbW1vbglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlCmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKQEAgLTMzLDYgJiM0MzszMyw3IEBAIFRBUkdFVFMgJiM0Mzs9IGZjaG1vZGF0MgogVEFSR0VUUyAmIzQzOz0gZmlsZXN5c3RlbXMKIFRBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zL2JpbmRlcmZzCiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9lcG9sbAomIzQzO1RBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zL2ZhaWxmcwogVEFSR0VUUyAmIzQzOz0gZmlsZXN5c3RlbXMvZmF0CiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9vdmVybGF5ZnMKIFRBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zL3N0YXRtb3VudApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2QzYjVkODg0ZDdlYTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZQpAQCAtMCwwICYjNDM7MSwyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7ZmFpbGZzX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uM2M1ZDk4YjRmZTcyNWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpCiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3QKJiM0MzsKJiM0MztpbmNsdWRlIC4uLy4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2M0NjFkYzQ4M2E5OTcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSw1ODEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21vdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9wcmN0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3Zmcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uL2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNpZm5kZWYgX19OUl9mY2hyb290CiYjNDM7I2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBGRF9QSURGU19ST09UCiYjNDM7I2RlZmluZSBGRF9QSURGU19ST09UIC0xMDAwMgomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgRkRfTlNGU19ST09UCiYjNDM7I2RlZmluZSBGRF9OU0ZTX1JPT1QgLTEwMDAzCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBGRF9GQUlMRlNfUk9PVAomIzQzOyNkZWZpbmUgRkRfRkFJTEZTX1JPT1QgLTEwMDA0CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBOT0JPRFlfVUlEIDY1NTM0CiYjNDM7CiYjNDM7LyogQ2hpbGQgc2VudGluZWwgZXhpdCBjb2RlOiB0aGUgZXhlYyB3YXMgYmxvY2tlZCBhcyBleHBlY3RlZC4gKi8KJiM0MzsjZGVmaW5lIEZBSUxGU19FWEVDX0JMT0NLRUQgOTkKJiM0MzsKJiM0MzsvKiBTdGFjayBmb3IgdGhlIENMT05FX0ZTIGhlbHBlciBpbiBmY2hyb290X3NlbnRpbmVsX3NoYXJlZF9mc19zdHJ1Y3QuICovCiYjNDM7I2RlZmluZSBGQUlMRlNfQ0xPTkVfU1RBQ0sgKDY0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9mY2hyb290LCBmZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJhdyBzeXNjYWxsOiBnbGliYyYjMzk7cyBnZXRjd2QoKSByZWplY3RzIHRoZSBrZXJuZWwmIzM5O3MgJiMzNDsodW5yZWFjaGFibGUpJiMzNDsKJiM0MzsgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nIHN5c19nZXRjd2QoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNjYWxsKF9fTlJfZ2V0Y3dkLCBidWYsIHNpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRyb3BfdG9fbm9ib2R5KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gc2V0cmVzdWlkKE5PQk9EWV9VSUQsIE5PQk9EWV9VSUQsIE5PQk9EWV9VSUQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQYXJrZWQgQ0xPTkVfRlMgY2hpbGQ7IGRpZXMgd2l0aCBpdHMgcGFyZW50IHNvIGl0IG5ldmVyIGxlYWtzLiAqLwomIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3Bhcmsodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJKHZvaWQpYXJnOwomIzQzOwlwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdLSUxMKTsKJiM0MzsJcGF1c2UoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi8KJiM0MztzdGF0aWMgaW50IGVsZl9oYXNfYWJzb2x1dGVfaW50ZXJwKGludCBmZCkKJiM0Mzt7CiYjNDM7CUVsZlcoRWhkcikgZWhkcjsKJiM0MzsJRWxmVyhQaGRyKSBwaGRyOwomIzQzOwljaGFyIGludGVycDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChwcmVhZChmZCwgJmFtcDtlaGRyLCBzaXplb2YoZWhkciksIDApICE9IHNpemVvZihlaGRyKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAobWVtY21wKGVoZHIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLmVfcGhudW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocHJlYWQoZmQsICZhbXA7cGhkciwgc2l6ZW9mKHBoZHIpLAomIzQzOwkJCSAgZWhkci5lX3Bob2ZmICYjNDM7IGkgKiBzaXplb2YocGhkcikpICE9IHNpemVvZihwaGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChwaGRyLnBfdHlwZSAhPSBQVF9JTlRFUlApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAocHJlYWQoZmQsICZhbXA7aW50ZXJwLCAxLCBwaGRyLnBfb2Zmc2V0KSAhPSAxKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGludGVycCA9PSAmIzM5Oy8mIzM5OzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChmY2hkaXJfc2VudGluZWwpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZltQQVRIX01BWF07CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApOwomIzQzOwomIzQzOwkvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgdW5yZWFjaGFibGUgZnJvbSB0aGUgcHJvY2VzcyByb290LiAqLwomIzQzOwlBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgJiMzNDsodW5yZWFjaGFibGUpJiMzNDssIDEzKSwgMCk7CiYjNDM7CiYjNDM7CS8qIEV2ZXJ5IEFUX0ZEQ1dELXJlbGF0aXZlIGxvb2t1cCBmYWlscy4gKi8KJiM0MzsJQVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgJiMzNDtmb28mIzM0OywgT19SRE9OTFkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CUFTU0VSVF9FUShvcGVuYXQoQVRfRkRDV0QsICYjMzQ7LiYjMzQ7LCBPX1JET05MWSksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsJQVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgJiMzNDsuLiYjMzQ7LCBPX1JET05MWSksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsJQVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgJiMzNDtmb28mIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgY3dkIGNhbm5vdCBiZSBwaW5uZWQgYnkgZm9sbG93aW5nIC9wcm9jL3NlbGYvY3dkIGludG8gaXQuICovCiYjNDM7CUFTU0VSVF9FUShvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9jd2QmIzM0OywgT19QQVRIKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgcm9vdCBpcyB1bnRvdWNoZWQgc28gYWJzb2x1dGUgbG9va3VwcyBrZWVwIHdvcmtpbmcuLi4gKi8KJiM0MzsJZmQgPSBvcGVuKCYjMzQ7LyYjMzQ7LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CiYjNDM7CS8qIC4uLiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSByZWNvdmVyZWQuICovCiYjNDM7CUFTU0VSVF9FUShjaGRpcigmIzM0Oy8mIzM0OyksIDApOwomIzQzOwlBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdHJjbXAoYnVmLCAmIzM0Oy8mIzM0OyksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaGRpcl9yZWplY3RzX290aGVyX3NlbnRpbmVscykKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShmY2hkaXIoRkRfUElERlNfUk9PVCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFQkFERik7CiYjNDM7CUFTU0VSVF9FUShmY2hkaXIoRkRfTlNGU19ST09UKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVCQURGKTsKJiM0MzsJQVNTRVJUX0VRKGZjaGRpcigtMTAwMDkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3RfZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMSksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KGZkLCAxKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3RfYmFkX2ZkKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KC0xLCAwKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVCQURGKTsKJiM0MzsKJiM0MzsJLyogT25seSBGRF9GQUlMRlNfUk9PVCBpcyBhIHZhbGlkIHNlbnRpbmVsLiAqLwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfUElERlNfUk9PVCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFQkFERik7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9OU0ZTX1JPT1QsIDApLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfbm90ZGlyKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zZWxmL3N0YXR1cyYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9yZWFsZmRfcmVxdWlyZXNfY2FwKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpID09IDApCiYjNDM7CQlBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy8mIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDApLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRVBFUk0pOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChmY2hyb290X3JlYWxmZCkKJiM0Mzt7CiYjNDM7CWNoYXIgdGVtcGxhdGVbXSA9ICYjMzQ7L3RtcC9mYWlsZnNfdGVzdC5YWFhYWFgmIzM0OzsKJiM0MzsJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJc3RydWN0IHN0YXQgc3Q7CiYjNDM7CWludCB0bXBmZCwgZGZkLCBmZDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZmNocm9vdCgpIHdpdGggYSByZWd1bGFyIGZkIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UJiMzNDspOwomIzQzOwomIzQzOwl0bXBmZCA9IG9wZW4oJiMzNDsvdG1wJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKHRtcGZkLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2NhbmFyeSYjMzQ7LCB0ZW1wbGF0ZSk7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsKJiM0MzsJZGZkID0gb3Blbih0ZW1wbGF0ZSwgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UoZGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KGRmZCwgMCksIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZGZkKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzdGF0KCYjMzQ7L2NhbmFyeSYjMzQ7LCAmYW1wO3N0KSwgMCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXA6IGRpcmZkLWFuY2hvcmVkIEkvTyB3b3JrcyB3aXRoIHRoZSBuZXcgcm9vdC4gKi8KJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2NhbmFyeSYjMzQ7LCB0ZW1wbGF0ZSAmIzQzOyBzdHJsZW4oJiMzNDsvdG1wLyYjMzQ7KSk7CiYjNDM7CXVubGlua2F0KHRtcGZkLCBwYXRoLCAwKTsKJiM0MzsJdW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbigmIzM0Oy90bXAvJiMzNDspLCBBVF9SRU1PVkVESVIpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWwpCiYjNDM7ewomIzQzOwljaGFyIHRlbXBsYXRlW10gPSAmIzM0Oy90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYJiMzNDs7CiYjNDM7CXN0cnVjdCBzdGF0IHJlYWxyb290LCBzdDsKJiM0MzsJc3RydWN0IHN0YXRmcyBzZnM7CiYjNDM7CWNoYXIgYnVmW1BBVEhfTUFYXTsKJiM0MzsJaW50IHByb2NmZCwgdG1wZmQsIGRmZCwgZmQ7CiYjNDM7CXN0cnVjdCB7CiYjNDM7CQlzdHJ1Y3QgZmlsZV9oYW5kbGUgaGFuZGxlOwomIzQzOwkJdW5zaWduZWQgY2hhciBmX2hhbmRsZVtNQVhfSEFORExFX1NaXTsKJiM0MzsJfSBmaDsKJiM0MzsJaW50IG1udGlkOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHN0YXQoJiMzNDsvJiMzNDssICZhbXA7cmVhbHJvb3QpLCAwKTsKJiM0MzsJcHJvY2ZkID0gb3BlbigmIzM0Oy9wcm9jJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKHByb2NmZCwgMCk7CiYjNDM7CXRtcGZkID0gb3BlbigmIzM0Oy90bXAmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UodG1wZmQsIDApOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpOwomIzQzOwlkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGRmZCwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApOwomIzQzOwomIzQzOwkvKiBBYnNvbHV0ZSBsb29rdXBzIGZhaWwuICovCiYjNDM7CUFTU0VSVF9FUShvcGVuKCYjMzQ7L2V0Yy9wYXNzd2QmIzM0OywgT19SRE9OTFkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CUFTU0VSVF9FUShta2RpcigmIzM0Oy9mb28mIzM0OywgMDcwMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHJvb3QgY2Fubm90IGJlIHJlZmVyZW5jZWQgYXQgYWxsIC0gbm90IGV2ZW4gYW4gT19QQVRIIG9wZW4sCiYjNDM7CSAqIHdoaWNoIHNraXBzIC0mZ3Q7cGVybWlzc2lvbigpLCBiZWNhdXNlIGl0IGxhbmRzIG9uIHRoZSByb290IGFzIGEKJiM0MzsJICoganVtcGVkIHdhbGsgdGVybWluYWwgdGhhdCAtJmd0O2Rfd2Vha19yZXZhbGlkYXRlKCkgcmVmdXNlcy4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShvcGVuKCYjMzQ7LyYjMzQ7LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwlBU1NFUlRfRVEob3BlbigmIzM0Oy8mIzM0OywgT19QQVRIKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwlBU1NFUlRfRVEoc3RhdGZzKCYjMzQ7LyYjMzQ7LCAmYW1wO3NmcyksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSXQgY2Fubm90IGJlIHBpbm5lZCBieSBmb2xsb3dpbmcgL3Byb2Mvc2VsZi9yb290IGludG8gaXQgZWl0aGVyCiYjNDM7CSAqIChvbmx5IHRoZSByb290IGlzIGluIGZhaWxmcyBoZXJlLCBzbyBzZWxmL2N3ZCBpcyBzdGlsbCByZWFsKS4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShvcGVuYXQocHJvY2ZkLCAmIzM0O3NlbGYvcm9vdCYjMzQ7LCBPX1BBVEgpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CiYjNDM7CS8qIE5vciBlbmNvZGVkIGludG8gYSBmaWxlIGhhbmRsZS4gKi8KJiM0MzsJZmguaGFuZGxlLmhhbmRsZV9ieXRlcyA9IE1BWF9IQU5ETEVfU1o7CiYjNDM7CUFTU0VSVF9FUShuYW1lX3RvX2hhbmRsZV9hdChBVF9GRENXRCwgJiMzNDsvJiMzNDssICZhbXA7ZmguaGFuZGxlLCAmYW1wO21udGlkLCAwKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgbm93IHVucmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuICovCiYjNDM7CUFTU0VSVF9HVChzeXNfZ2V0Y3dkKGJ1Ziwgc2l6ZW9mKGJ1ZikpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHN0cm5jbXAoYnVmLCAmIzM0Oyh1bnJlYWNoYWJsZSkmIzM0OywgMTMpLCAwKTsKJiM0MzsKJiM0MzsJLyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi8KJiM0MzsJZmQgPSBvcGVuYXQoQVRfRkRDV0QsICYjMzQ7LiYjMzQ7LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CWZkID0gb3BlbmF0KGRmZCwgJiMzNDtjYW5hcnkmIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHdyaXRlKGZkLCAmIzM0O3gmIzM0OywgMSksIDEpOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJZmQgPSBvcGVuYXQoZGZkLCAmIzM0O2NhbmFyeSYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCk7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzOwomIzQzOwkvKiAmIzM0Oy4uJiMzNDsgd2Fsa3MgY2xhbXAgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZSwgbm90IGF0IGZhaWxmcy4gKi8KJiM0MzsJZmQgPSBvcGVuYXQoQVRfRkRDV0QsICYjMzQ7Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4mIzM0OywgT19QQVRIKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGZzdGF0KGZkLCAmYW1wO3N0KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdC5zdF9kZXYsIHJlYWxyb290LnN0X2Rldik7CiYjNDM7CUFTU0VSVF9FUShzdC5zdF9pbm8sIHJlYWxyb290LnN0X2lubyk7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzOwomIzQzOwkvKiByZWFkbGluayBvZiB0aGUgbWFnaWMgbGluayBzdGlsbCB3b3JrczogaXQgZG9lcyBub3QgZm9sbG93LiAqLwomIzQzOwlyZXQgPSByZWFkbGlua2F0KHByb2NmZCwgJiMzNDtzZWxmL3Jvb3QmIzM0OywgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwomIzQzOwlBU1NFUlRfR1QocmV0LCAwKTsKJiM0MzsJYnVmW3JldF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CVRIX0xPRygmIzM0Oy9wcm9jL3NlbGYvcm9vdCBwb2ludHMgdG8gJiMzOTslcyYjMzk7JiMzNDssIGJ1Zik7CiYjNDM7CS8qIGRfcGF0aCgpIG5hbWVzIHRoZSBmYWlsZnMgcm9vdCBzeW50aGV0aWNhbGx5LCBuZXZlciBhcyBhIHJlYWwgcGF0aC4gKi8KJiM0MzsJQVNTRVJUX0VRKHN0cmNtcChidWYsICYjMzQ7ZmFpbGZzOi8mIzM0OyksIDApOwomIzQzOwomIzQzOwkvKiBCdXQgZm9sbG93aW5nIGl0IGludG8gZmFpbGZzIGlzIHJlZnVzZWQuICovCiYjNDM7CUFTU0VSVF9FUShmc3RhdGF0KHByb2NmZCwgJiMzNDtzZWxmL3Jvb3QmIzM0OywgJmFtcDtzdCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyogQmVzdC1lZmZvcnQgY2xlYW51cCB2aWEgdGhlIHByZS1vcGVuZWQgZGlyZmRzLiAqLwomIzQzOwl1bmxpbmthdChkZmQsICYjMzQ7Y2FuYXJ5JiMzNDssIDApOwomIzQzOwl1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgJiM0Mzsgc3RybGVuKCYjMzQ7L3RtcC8mIzM0OyksIEFUX1JFTU9WRURJUik7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9hYnNvbHV0ZV9zeW1saW5rKQomIzQzO3sKJiM0MzsJY2hhciB0ZW1wbGF0ZVtdID0gJiMzNDsvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWCYjMzQ7OwomIzQzOwlpbnQgdG1wZmQsIGRmZCwgZmQ7CiYjNDM7CiYjNDM7CWlmIChnZXRldWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1QmIzM0Oyk7CiYjNDM7CiYjNDM7CXRtcGZkID0gb3BlbigmIzM0Oy90bXAmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UodG1wZmQsIDApOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpOwomIzQzOwlkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGRmZCwgMCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KGRmZCwgJiMzNDt0YXJnZXQmIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeW1saW5rYXQoJiMzNDt0YXJnZXQmIzM0OywgZGZkLCAmIzM0O3JlbCYjMzQ7KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeW1saW5rYXQoJiMzNDsvZXRjJiMzNDssIGRmZCwgJiMzNDthYnMmIzM0OyksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyogUmVsYXRpdmUgc3ltbGlua3Mga2VlcCByZXNvbHZpbmcgd2l0aGluIHRoZSBkaXJmZC1hbmNob3JlZCB3YWxrLi4uICovCiYjNDM7CWZkID0gb3BlbmF0KGRmZCwgJiMzNDtyZWwmIzM0OywgT19SRE9OTFkpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsKJiM0MzsJLyogLi4uIGFic29sdXRlIHN5bWxpbmtzIHJlc3RhcnQgdGhlIHdhbGsgYXQgdGhlIGZhaWxmcyByb290LiAqLwomIzQzOwlBU1NFUlRfRVEob3BlbmF0KGRmZCwgJiMzNDthYnMmIzM0OywgT19SRE9OTFkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgdmlhIHRoZSBwcmUtb3BlbmVkIGRpcmZkcy4gKi8KJiM0MzsJdW5saW5rYXQoZGZkLCAmIzM0O2FicyYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGZkLCAmIzM0O3JlbCYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGZkLCAmIzM0O3RhcmdldCYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbigmIzM0Oy90bXAvJiMzNDspLCBBVF9SRU1PVkVESVIpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfdW5wcml2aWxlZ2VkKQomIzQzO3sKJiM0MzsJY2hhciBidWZbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpID09IDApCiYjNDM7CQlBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFdpdGhvdXQgbm9fbmV3X3ByaXZzIGVudGVyaW5nIGZhaWxmcyBpcyBub3QgYWxsb3dlZC4uLiAqLwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRVBFUk0pOwomIzQzOwomIzQzOwkvKiAuLi4gd2l0aCBub19uZXdfcHJpdnMgc2V0IGl0IGlzIGFsbG93ZWQuICovCiYjNDM7CUFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEob3BlbigmIzM0Oy9ldGMvcGFzc3dkJiMzNDssIE9fUkRPTkxZKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgdGFzayBjb3VudHMgYXMgY2hyb290ZWQ6IG5vIHVzZXIgbmFtZXNwYWNlcyBhbnltb3JlLiAqLwomIzQzOwlBU1NFUlRfRVEodW5zaGFyZShDTE9ORV9ORVdVU0VSKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTsKJiM0MzsKJiM0MzsJLyogV2l0aCBib3RoIHJvb3QgYW5kIGN3ZCBpbiBmYWlsZnMgZ2V0Y3dkKCkgcmVwb3J0cyAmIzM0Oy8mIzM0Oy4gKi8KJiM0MzsJQVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApOwomIzQzOwlBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdHJjbXAoYnVmLCAmIzM0Oy8mIzM0OyksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfcmVqZWN0ZWRfd2hlbl9jaHJvb3RlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgdGVtcGxhdGVbXSA9ICYjMzQ7L3RtcC9mYWlsZnNfdGVzdC5YWFhYWFgmIzM0OzsKJiM0MzsJaW50IHRtcGZkOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtjaHJvb3QoKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJdG1wZmQgPSBvcGVuKCYjMzQ7L3RtcCYjMzQ7LCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7CiYjNDM7CUFTU0VSVF9HRSh0bXBmZCwgMCk7CiYjNDM7CUFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShjaHJvb3QodGVtcGxhdGUpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNoZGlyKCYjMzQ7LyYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CS8qIFJlbW92ZSB0aGUgamFpbCB3aGlsZSBzdGlsbCBwcml2aWxlZ2VkOyBzdGlja3kgL3RtcCBibG9ja3Mgbm9ib2R5LiAqLwomIzQzOwl1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgJiM0Mzsgc3RybGVuKCYjMzQ7L3RtcC8mIzM0OyksIEFUX1JFTU9WRURJUik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyogQW4gdW5wcml2aWxlZ2VkIGNocm9vdGVkIHRhc2sgbXVzdCBub3QgbGlmdCBpdHMgJiMzNDsuLiYjMzQ7IGJhcnJpZXIuICovCiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0KQomIzQzO3sKJiM0MzsJY2hhciBzdGFja1tGQUlMRlNfQ0xPTkVfU1RBQ0tdOwomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CiYjNDM7CWlmIChnZXRldWlkKCkgPT0gMCkKJiM0MzsJCUFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTsKJiM0MzsKJiM0MzsJLyogQSBDTE9ORV9GUyBzaWJsaW5nIHNoYXJlcyB0aGUgZnNfc3RydWN0OiBidW1wIGZzLSZndDt1c2VycyB0byAyLiAqLwomIzQzOwlwaWQgPSBjbG9uZShmYWlsZnNfcGFyaywgc3RhY2sgJiM0Mzsgc2l6ZW9mKHN0YWNrKSwgQ0xPTkVfRlMgfCBTSUdDSExELAomIzQzOwkJICAgIE5VTEwpOwomIzQzOwlBU1NFUlRfR0UocGlkLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSBzaWJsaW5nIHdpdGhvdXQgbm9fbmV3X3ByaXZzIGNvdWxkIGV4ZWMgYSBzZXR1aWQgYmluYXJ5IHdpdGgKJiM0MzsJICogdGhlIGZhaWxmcyByb290LCBzbyBhIHNoYXJlZCBmc19zdHJ1Y3QgaXMgcmVmdXNlZCBldmVuIHdpdGgKJiM0MzsJICogbm9fbmV3X3ByaXZzIHNldC4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoa2lsbChwaWQsIFNJR0tJTEwpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBOVUxMLCAwKSwgcGlkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChmY2hyb290X3NlbnRpbmVsX25vX292ZXJtb3VudCkKJiM0Mzt7CiYjNDM7CWlmIChnZXRldWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21vdW50aW5nIHJlcXVpcmVzIHByaXZpbGVnZXMmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENvbnRhaW4gdGhlIGJsYXN0IHJhZGl1czogaWYgZmFpbGZzIGV2ZXIgcmVncmVzc2VkIGFuZCAmIzM0Oy8mIzM0OwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGUgcmVhbCByb290LCB0aGUgdG1wZnMgbW91bnQgYmVsb3cgbXVzdCBub3QgdG91Y2gKJiM0MzsJICogdGhlIGhvc3QuIEEgcHJpdmF0ZSBtb3VudCBuYW1lc3BhY2Uga2VlcHMgaXQgbG9jYWwgdG8gdGhpcyBjaGlsZC4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV05TKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShtb3VudChOVUxMLCAmIzM0Oy8mIzM0OywgTlVMTCwgTVNfUkVDIHwgTVNfUFJJVkFURSwgTlVMTCksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2YgdGhlIGZhaWxmcyByb290LiBJdCBjYW5ub3QgZXZlbgomIzQzOwkgKiBiZSBuYW1lZCBhcyBhIG1vdW50IHRhcmdldDogcmVzb2x2aW5nICYjMzQ7LyYjMzQ7IGlzIHJlZnVzZWQgYmVmb3JlIHRoZQomIzQzOwkgKiBtb3VudCBtYWNoaW5lcnkgKHdoaWNoLCBmYWlsZnMgYmVpbmcgaW4gbm8gbW91bnQgbmFtZXNwYWNlLCB3b3VsZAomIzQzOwkgKiByZWplY3QgaXQgYW55d2F5KSBpcyBldmVyIHJlYWNoZWQuIG9wZW5fdHJlZShPUEVOX1RSRUVfQ0xPTkUpIGlzCiYjNDM7CSAqIGxpa2V3aXNlIG1vb3Qgc2luY2Ugbm8gZmQgdG8gdGhlIHJvb3QgY2FuIGJlIG9idGFpbmVkLgomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKG1vdW50KCYjMzQ7bm9uZSYjMzQ7LCAmIzM0Oy8mIzM0OywgJiMzNDt0bXBmcyYjMzQ7LCAwLCBOVUxMKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfc2V0bnNfZXNjYXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN0YXQgcmVhbHJvb3QsIHN0OwomIzQzOwlpbnQgbnNmZDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7c2V0bnMoKSB0byBhIG1vdW50IG5hbWVzcGFjZSByZXF1aXJlcyBwcml2aWxlZ2VzJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3RhdCgmIzM0Oy8mIzM0OywgJmFtcDtyZWFscm9vdCksIDApOwomIzQzOwluc2ZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvbnMvbW50JiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJQVNTRVJUX0dFKG5zZmQsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTsKJiM0MzsJQVNTRVJUX0VRKG9wZW4oJiMzNDsvZXRjJiMzNDssIE9fUEFUSCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyogQSBtb3VudCBuYW1lc3BhY2UgZmQgaXMgdGhlIGtleSBvdXQ6IGl0IHJlc2V0cyByb290IGFuZCBjd2QuICovCiYjNDM7CUFTU0VSVF9FUShzZXRucyhuc2ZkLCBDTE9ORV9ORVdOUyksIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UobnNmZCksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3RhdCgmIzM0Oy8mIzM0OywgJmFtcDtzdCksIDApOwomIzQzOwlBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpOwomIzQzOwlBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlYykKJiM0Mzt7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEV4ZWMgaW4gYSBjaGlsZDogYSB3cm9uZ2x5IHN1Y2Nlc3NmdWwgZXhlYyB3b3VsZCByZXBsYWNlIHRoZSB0ZXN0CiYjNDM7CSAqIGltYWdlIGFuZCBpdHMgZXhpdCBjb2RlIHdvdWxkIG5vdCBtYXRjaCB0aGUgc2VudGluZWwgYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CUFTU0VSVF9HRShwaWQsIDApOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWV4ZWNsKCYjMzQ7L2Jpbi90cnVlJiMzNDssICYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMKTsKJiM0MzsJCV9leGl0KGVycm5vID09IEVPUE5PVFNVUFAgPyBGQUlMRlNfRVhFQ19CTE9DS0VEIDogMSk7CiYjNDM7CX0KJiM0MzsJQVNTRVJUX0VRKHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCksIHBpZCk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKJiM0MzsJQVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEZBSUxGU19FWEVDX0JMT0NLRUQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlY19pbnRlcnByZXRlcikKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXJndltdID0geyAmIzM0O2ZhaWxmc190ZXN0JiMzNDssIE5VTEwgfTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbnZwW10gPSB7IE5VTEwgfTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwlpbnQgc3RhdHVzLCBleGVmZDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRXhlYyBvdXJzZWx2ZXM6IHRoZSBvbmUgYmluYXJ5IGd1YXJhbnRlZWQgdG8gYmUgYXJvdW5kLiAqLwomIzQzOwlleGVmZCA9IG9wZW4oJiMzNDsvcHJvYy9zZWxmL2V4ZSYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9HRShleGVmZCwgMCk7CiYjNDM7CWlmICghZWxmX2hhc19hYnNvbHV0ZV9pbnRlcnAoZXhlZmQpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dGVzdCBiaW5hcnkgaGFzIG5vIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlciYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBiaW5hcnkgaXRzZWxmIG5lZWRzIG5vIHBhdGggbG9va3VwIC0gaXQgaXMgZXhlY3V0ZWQgYnkgZmQgLQomIzQzOwkgKiBidXQgbG9hZGluZyBpdCBmYWlscyBvbiBvcGVuaW5nIHRoZSBhYnNvbHV0ZSBQVF9JTlRFUlAKJiM0MzsJICogaW50ZXJwcmV0ZXIuIFJ1biBpdCBpbiBhIGNoaWxkIHNvIGEgd3JvbmdseSBzdWNjZXNzZnVsIGV4ZWMgZG9lcwomIzQzOwkgKiBub3QgcmVwbGFjZSB0aGUgdGVzdCBpbWFnZSBhbmQgbWFzcXVlcmFkZSBhcyBhIHBhc3MuCiYjNDM7CSAqLwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CUFTU0VSVF9HRShwaWQsIDApOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCXN5c2NhbGwoX19OUl9leGVjdmVhdCwgZXhlZmQsICYjMzQ7JiMzNDssIGFyZ3YsIGVudnAsIEFUX0VNUFRZX1BBVEgpOwomIzQzOwkJX2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTsKJiM0MzsJfQomIzQzOwlBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkKTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOwomIzQzOwlBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRkFJTEZTX0VYRUNfQkxPQ0tFRCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9pbmhlcml0ZWQpCiYjNDM7ewomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CWlmIChnZXRldWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1QmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CUFTU0VSVF9HRShwaWQsIDApOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWlmIChvcGVuKCYjMzQ7L2V0YyYjMzQ7LCBPX1BBVEgpICE9IC0xIHx8IGVycm5vICE9IEVPUE5PVFNVUFApCiYjNDM7CQkJX2V4aXQoMSk7CiYjNDM7CQlfZXhpdCgwKTsKJiM0MzsJfQomIzQzOwlBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkKTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOwomIzQzOwlBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDA2CgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDE3NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlICYjMzk7ZmFpbGZzJiMzOTsgUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgZmFpbGZzYCwgYSBmaWxlc3lzdGVtIGRlc2lnbmVkIHRvIGZhaWwgZXZlcnkgb3BlcmF0aW9uLiBUaGUga2V5IGFkZGl0aW9ucyBoZXJlIGFyZSB0aGUgbmV3IGBmY2hyb290YCBzeXN0ZW0gY2FsbCBhbmQgdGhlIG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGlzIG1lYW5zIHdlJiMzOTt2ZSBtb2RpZmllZCBjb3JlIFZGUyBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSBhbmQgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LCB3aGljaCBsb29rcyBzdHJhaWdodGZvcndhcmQuIGBmY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKWAgb3IgYGZjaGRpcihGRF9GQUlMRlNfUk9PVClgIGFyZSBjbGVhciBlbnRyeSBwb2ludHMuCgpUaGUgYGZhaWxmcy5jYCBjb2RlIGNvbmZpcm1zIHRoaXMuIEZ1bmN0aW9uYWxpdHktd2lzZSwgYGZhaWxmc2AgaXRzZWxmIGlzIHNpbXBsZSDigJMgaXQgY29uc2lzdGVudGx5IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gSG93ZXZlciwgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUyksIG5hbWVseSB0aHJvdWdoIGBkX3BhdGhgLCBgZmNoZGlyYCwgYW5kIGBmY2hyb290YC4gVGhpcyB0ZWxscyBtZSB3ZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBpbnRlcmZhY2VzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzOgoKKiAgIGBzeXNfZmNocm9vdGA6IFRoaXMgaXMgdGhlIG5ldyBzeXN0ZW0gY2FsbCwgdGhlIG1haW4gZW50cnkgcG9pbnQgd2UgbmVlZCB0byB0ZXN0LgoqICAgYHN5c19mY2hkaXJgOiBUaGUgZXhpc3RpbmcgYGZjaGRpcmAgc3lzY2FsbCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgYEZEX0ZBSUxGU19ST09UYCwgbWFraW5nIGl0IGEga2V5IGZvY3VzIHRvby4KKiAgIGBmYWlsZnNfY3VycmVudF9jaGRpcmA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gYHN5c19mY2hkaXJgIHdoZW4gdGhlIGBGRF9GQUlMRlNfUk9PVGAgaXMgcGFzc2VkIHRvIGl0LgoqICAgYGZhaWxmc19nZXRfcm9vdGA6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYHN5c19mY2hyb290YC4KKiAgIGBmYWlsZnNfbW50YDogVGhpcyBpcyBsaWtlbHkgdGhlIG1vdW50IGZ1bmN0aW9uLgoKTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWVkZWQsIHNpbmNlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBidWlsdC1pbi4KClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgc3lzdGVtIGNhbGwgKGBmY2hyb290YCkgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgYW4gZXhpc3Rpbmcgb25lIChgZmNoZGlyYCkgdG8gaW50ZXJhY3Qgd2l0aCBhIG5ldyAmIzM0O2ZhaWxpbmcmIzM0OyBmaWxlc3lzdGVtIGNyZWF0ZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLiBXZSBuZWVkIHRvIGZ1enogdGhlc2UgaW50ZXJmYWNlcyB0byBsb29rIGZvciByZWdyZXNzaW9ucywgdnVsbmVyYWJpbGl0aWVzIHN1Y2ggYXMgY2hyb290IGVzY2FwZXMsIG9yIHVuZXhwZWN0ZWQgVkZTIGJlaGF2aW9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX2ZjaHJvb3QmIzM0OywKICAgICYjMzQ7c3lzX2ZjaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfY3VycmVudF9jaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7ZmFpbGZzX21udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX2ZjaHJvb3QmIzM0OywKICAgICYjMzQ7c3lzX2ZjaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfY3VycmVudF9jaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7ZmFpbGZzX21udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTowNTozNS44NTI0NDUzODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgyODQ4ODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfZmNocm9vdFwiLFxuICAgIFwic3lzX2ZjaGRpclwiLFxuICAgIFwiZmFpbGZzX2N1cnJlbnRfY2hkaXJcIixcbiAgICBcImZhaWxmc19nZXRfcm9vdFwiLFxuICAgIFwiZmFpbGZzX21udFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2VybmVsLWludGVybmFsIGZpbGVzeXN0ZW0gYGZhaWxmc2AgYW5kIGEgbmV3IHN5c3RlbSBjYWxsIGBmY2hyb290YC4gSXQgYWxzbyBtb2RpZmllcyBgZmNoZGlyYCB0byBhY2NlcHQgYSBuZXcgbWFnaWMgZmlsZSBkZXNjcmlwdG9yIGBGRF9GQUlMRlNfUk9PVGAuIFRoZXNlIGFyZSBjb3JlIFZGUyBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBlc2NhcGluZyBjaHJvb3QsIHJlZmVyZW5jZSBsZWFrcywgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBwYXRoIHJlc29sdXRpb24pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTowNTozNS44NTI0NTA4OTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MzM5OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFjYTRhMzAzYjA5NGI2YzhiNDJjMzc3MDI3OGI5M2E4NGIxN2NkMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTk6MDU6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjFmZjJkYjc5NDFkZjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XFxuQEAgLTAsMCArMSw3MyBAQFxcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rPT09PT09XFxuK2ZhaWxmc1xcbis9PT09PT1cXG4rXFxuK2ZhaWxmcyBpcyBhIGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIHRoYXQgZmFpbHMgZXZlcnkgb3BlcmF0aW9uXFxuK3JlYWNoaW5nIGl0IHdpdGggYGBFT1BOT1RTVVBQYGAuIEl0IGlzIHRoZSBjb3VudGVycGFydCB0byBudWxsZnMuIFdoZXJlXFxuK251bGxmcyBpcyBwZXJtYW5lbnRseSBlbXB0eSwgZmFpbGZzIG1lYW5zIFxcXCJub3RoaW5nIGlzIHN1cHBvcnRlZCBoZXJlXFxcIi5cXG4rSXQgY2Fubm90IGJlIG1vdW50ZWQgZnJvbSB1c2Vyc3BhY2UsIG5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mXFxuK2l0LiBJdCBjYW5ub3QgYmUgY2xvbmVkLlxcbitcXG4rVGhlIG9ubHkgd2F5IGludG8gaXQgaXMgdGhlIGBgRkRfRkFJTEZTX1JPT1RgYCBmaWxlIGRlc2NyaXB0b3Igc2VudGluZWwgd2hpY2hcXG4raXMgdW5kZXJzdG9vZCBieSBgYGZjaGRpcigyKWBgIGFuZCBgYGZjaHJvb3QoMilgYC5cXG4rXFxuK1NlbWFudGljc1xcbis9PT09PT09PT1cXG4rXFxuK0V2ZXJ5IHBhdGggd2FsayBvZiBhIGNvbXBvbmVudCB0aHJvdWdoIGZhaWxmcyBmYWlscyB3aXRoXFxuK2BgRU9QTk9UU1VQUGBgIGJlZm9yZSB0aGF0IGNvbXBvbmVudCBpcyBwYXJzZWQsIGluY2x1ZGluZyBgYC5gYC5cXG4rXFxuK05vIHBhdGggbG9va3VwIGNhbiBvcGVuIHRoZSByb290LCBub3QgZXZlbiB3aXRoIGBgT19QQVRIYGAuXFxuK1xcbitBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5XFxuK2BgQVRfRkRDV0RgYC1yZWxhdGl2ZSBsb29rdXAuIEFzIHdpdGggYW55IHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgaXNcXG4rdW5yZWFjaGFibGUgZnJvbSB0aGUgcHJvY2VzcyByb290LCB0aGUgYGBnZXRjd2QoMilgYCBzeXN0ZW0gY2FsbCByZXR1cm5zXFxuK2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLlxcbitcXG4rQSBwcm9jZXNzIHdpdGggaXRzIHJvb3QgZGlyZWN0b3J5IGluIGZhaWxmcyBmYWlscyBldmVyeSBhYnNvbHV0ZSBwYXRoXFxuK2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseVxcbitsaW5rZWQgYmluYXJpZXMuIEluIG90aGVyIHdvcmRzLCB0aGlzIGZhaWxzIGV4ZWMuXFxuK1xcbitMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXRcXG4raXMgdGhlIGBgZnNfc3RydWN0YGAgZXF1aXZhbGVudCBvZiBgYFJFU09MVkVfQkVORUFUSGBgLiBUaGUgcHJvY2VzcyBtdXN0XFxuK2FuY2hvciBldmVyeSBsb29rdXAgYXQgYSBmaWxlIGRlc2NyaXB0b3IgaXQgZXhwbGljaXRseSBob2xkcy5cXG4rXFxuK0VudGVyaW5nXFxuKz09PT09PT09XFxuK1xcbitgYGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApYGAgcmVxdWlyZXMgYGBDQVBfU1lTX0NIUk9PVGBgIGluIHRoZVxcbitjYWxsZXIncyB1c2VyIG5hbWVzcGFjZSwgbWlycm9yaW5nIGBgY2hyb290KDIpYGAuIFVucHJpdmlsZWdlZCBjYWxsZXJzXFxuK21heSBlbnRlciBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBob2xkOlxcbitcXG4rKiBgYG5vX25ld19wcml2c2BgIGlzIHNldDogc2V0dWlkIGJpbmFyaWVzIG9uIHJlZ3VsYXIgbW91bnRzIHJlbWFpblxcbisgIHJlYWNoYWJsZSB2aWEgaW5oZXJpdGVkIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBleGVjdXRpbmcgdGhlbVxcbisgIHdpdGggYW4gdW51c2FibGUgcm9vdCBkaXJlY3RvcnkgaXMgdGhlIGNsYXNzaWMgY29uZnVzZWQgZGVwdXR5LlxcbitcXG4rKiBUaGUgY2FsbGVyIGlzIG5vdCBhbHJlYWR5IGNocm9vdGVkOiB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgd2hhdFxcbisgIGNvbmZpbmVzIGBgLi5gYCByZXNvbHV0aW9uIGFuZCB0aGUgZmFpbGZzIHJvb3QgY2FuIG5ldmVyIGJlIHJlYWNoZWQgYnlcXG4rICB3YWxraW5nIHVwIGEgcmVhbCBtb3VudCB0cmVlLCBzbyBtb3ZpbmcgdGhlIHJvb3Qgb2YgYSBjaHJvb3RlZCB0YXNrIHRvXFxuKyAgZmFpbGZzIHdvdWxkIGFsbG93IGl0IHRvIGVzY2FwZSBpdHMgY2hyb290IHZpYSBgYG9wZW5hdChmZCwgXFxcIi4uXFxcIilgYC5cXG4rXFxuKyogVGhlIGNhbGxlciBkb2VzIG5vdCBzaGFyZSBpdHMgYGBmc19zdHJ1Y3RgYDogYGBub19uZXdfcHJpdnNgYCBpc1xcbisgIGNoZWNrZWQgb24gdGhlIGNhbGxpbmcgdGhyZWFkLCBidXQgdGhlIHJvb3QgbGl2ZXMgaW4gdGhlIGBgZnNfc3RydWN0YGAuXFxuKyAgQSBgYENMT05FX0ZTYGAgc2libGluZyB3aXRob3V0IGBgbm9fbmV3X3ByaXZzYGAgY291bGQgb3RoZXJ3aXNlIGV4ZWN1dGVcXG4rICBhIHNldHVpZCBiaW5hcnkgd2l0aCB0aGUgZmFpbGZzIHJvb3QsIHNvIGVudHJ5IHJlcXVpcmVzIGBgZnMtXFx1MDAzZXVzZXJzID09XFxuKyAgMWBgLCB0aGUgc2FtZSByZXN0cmljdGlvbiBgYHNldG5zKDIpYGAgYXBwbGllcyBmb3IgdGhlIG1vdW50IGFuZCB1c2VyXFxuKyAgbmFtZXNwYWNlcy5cXG4rXFxuK0xlYXZpbmdcXG4rPT09PT09PVxcbitcXG4rQmFja2luZyBvdXQgaXMgY3VycmVudGx5IGhhcmQsIGJ1dCB0aGlzIGlzIGEgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnRcXG4raW1wbGVtZW50YXRpb24sIG5vdCBhIGd1YXJhbnRlZWQgaW50ZXJmYWNlLCBhbmQgbWF5IGJlIGxvb3NlbmVkIGxhdGVyLlxcbitGb3Igbm93IGEgcHJvY2VzcyB0aGF0IGVudGVyZWQgZmFpbGZzIGNvdW50cyBhcyBjaHJvb3RlZCwgc28gaXQgY2Fubm90XFxuK2NyZWF0ZSB1c2VyIG5hbWVzcGFjZXMgdG8gcmVnYWluIGBgQ0FQX1NZU19DSFJPT1RgYCwgYW5kIGBgY2hyb290KDIpYGBcXG4rb3IgYGBmY2hyb290KDIpYGAgYmFjayBvdXQgcmVxdWlyZSBgYENBUF9TWVNfQ0hST09UYGAuIFRoZSByZW1haW5pbmcgd2F5XFxuK291dCB0b2RheSBpcyBgYHNldG5zKDIpYGAgd2l0aCBhIG1vdW50IG5hbWVzcGFjZSBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoXFxuK3JlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgIG92ZXIgdGhlIHRhcmdldCBtb3VudCBuYW1lc3BhY2UgYXMgd2VsbCBhc1xcbitgYENBUF9TWVNfQ0hST09UYGAgYW5kIGBgQ0FQX1NZU19BRE1JTmBgIGluIHRoZSBjYWxsZXIncyB1c2VyIG5hbWVzcGFjZVxcbithbmQgcmVzZXRzIGJvdGggcm9vdCBhbmQgd29ya2luZyBkaXJlY3RvcnkuIEEgcHJvY2VzcyB0aGF0IGhvbGRzIG5vIHN1Y2hcXG4rZmlsZSBkZXNjcmlwdG9yIGFuZCByZXN0cmljdHMgYGAqY2hkaXIoKWBgL2BgKmNocm9vdCgpYGAvYGBzZXRucygpYGAgdmlhXFxuK3NlY2NvbXAgY2Fubm90IGN1cnJlbnRseSBnZXQgYmFjayBvdXQuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcXG5pbmRleCAxZjcxY2YxNTk1NDc2Yy4uNzM0YTQ1ZTUxNjY3NWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxcbkBAIC05MSw2ICs5MSw3IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLlxcbiAgICBleHQzXFxuICAgIGV4dDQvaW5kZXhcXG4gICAgZjJmc1xcbisgICBmYWlsZnNcXG4gICAgZ2ZzMi9pbmRleFxcbiAgICBoZnNcXG4gICAgaGZzcGx1c1xcbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuaW5kZXggZjMxYjdhZmZmYzM0NTkuLjUyZTM1MzhjYzdkZjQxIDEwMDY0NFxcbi0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtNTExLDMgKzUxMSw0IEBAXFxuIDU3OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNTgwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA1ODFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNTgyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsIGIvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcXG5pbmRleCA5NDM1MWUyMmJmY2Y3Ni4uNTU3MTdlZDMyYzI3ZTYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibFxcbkBAIC00ODYsMyArNDg2LDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibCBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmxcXG5pbmRleCA2MmQ5M2Q4OGUwZmVmOC4uZGYyZDFkODJmYjNjY2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmxcXG5AQCAtNDgzLDMgKzQ4Myw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuaW5kZXggMjQ4OTM0MjU3MTAxNGMuLmJhN2E0ZDg5MDNkMDQ0IDEwMDY0NFxcbi0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuQEAgLTQ3MSwzICs0NzEsNCBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbmluZGV4IDIyM2QyNjMwMzYyNzI0Li5jNTVhNWM5NmY0OWI4MiAxMDA2NDRcXG4tLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbkBAIC00NzcsMyArNDc3LDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxcbmluZGV4IDc0MzA3MTRlMmI4Zjg2Li45YWU4OGU0ZWFjNjFlZSAxMDA2NDRcXG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxcbisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsXFxuQEAgLTQxMCwzICs0MTAsNCBAQFxcbiA0NjlcXHRuMzJcXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdG4zMlxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0bjMyXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdG4zMlxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXFxuaW5kZXggNjMwYWFiOWU1NDI1OTIuLjgzZGM5M2EwNzEyZjEyIDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmxcXG5AQCAtMzg2LDMgKzM4Niw0IEBAXFxuIDQ2OVxcdG42NFxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0bjY0XFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRuNjRcXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0bjY0XFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcXG5pbmRleCAxMjg2NTMxMTIyODRiMi4uOWM2MjQyOWM5YjdiNGUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcXG4rKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibFxcbkBAIC00NTksMyArNDU5LDQgQEBcXG4gNDY5XFx0bzMyXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRvMzJcXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdG8zMlxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRvMzJcXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuaW5kZXggYzYzMzFkYWQ5NDYxM2IuLjg4YWRjNDAxNmNjZTAxIDEwMDY0NFxcbi0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbkBAIC00NzAsMyArNDcwLDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5pbmRleCA0ZmNjN2M1OGExMDVkYy4uY2ZiYjcwMDM5ZmYwMDcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtNTYyLDMgKzU2Miw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRub3NwdVxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5pbmRleCAwOWE3ZWYwNGQ5NzkxYS4uMWI0NWU2OGEyMTdiYjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtMzk4LDMgKzM5OCw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5pbmRleCA3MGIzMTVjYmU3MTBjMi4uYWNlMDY4ZGZmMGRlMDMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbkBAIC00NzUsMyArNDc1LDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbmluZGV4IDdlNzFiZjdmY2QxNGY3Li41YjlmZTBlODE0MGYyNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuQEAgLTUxNywzICs1MTcsNCBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXFxuaW5kZXggZjgzMmViZDJkNzliMDAuLjJjMTcyZWY0OGRmZDMzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXFxuKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmxcXG5AQCAtNDc3LDMgKzQ3Nyw0IEBAXFxuIDQ2OVxcdGkzODZcXHRmaWxlX3NldGF0dHJcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGkzODZcXHRsaXN0bnNcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGkzODZcXHRyc2VxX3NsaWNlX3lpZWxkXFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0aTM4NlxcdGZjaHJvb3RcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuaW5kZXggNTI0MTU1ZDY1NWRhMTUuLmQ1YjYwNDViMDA5MGNjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcXG5AQCAtMzk2LDYgKzM5Niw3IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdHN5c19mY2hyb290XFxuIFxcbiAjXFxuICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5XFxuZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbmluZGV4IGE5YmNhNGU0ODRkZWNmLi5kMzU0YmIyMzE3OTZjMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtNDQyLDMgKzQ0Miw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNzNiNmNhYjc3MzhlYTQgMTAwNjQ0XFxuLS0tIGEvZnMvTWFrZWZpbGVcXG4rKysgYi9mcy9NYWtlZmlsZVxcbkBAIC0xNiw3ICsxNiw3IEBAIG9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuIFxcdFxcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXFxcXG4gXFx0XFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxcXFxuIFxcdFxcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXFxcXG4tXFx0XFx0ZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vXFxuK1xcdFxcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xcbiBcXG4gb2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKVxcdCs9IGJ1ZmZlci5vIG1wYWdlLm9cXG4gb2JqLSQoQ09ORklHX1BST0NfRlMpXFx0XFx0Kz0gcHJvY19uYW1lc3BhY2Uub1xcbmRpZmYgLS1naXQgYS9mcy9kX3BhdGguYyBiL2ZzL2RfcGF0aC5jXFxuaW5kZXggYTQ4OTU3YzA5NzFlZjYuLmMyNTMwOTAwNmQ1ZDZkIDEwMDY0NFxcbi0tLSBhL2ZzL2RfcGF0aC5jXFxuKysrIGIvZnMvZF9wYXRoLmNcXG5AQCAtMjc5LDcgKzI3OSw4IEBAIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKVxcbiBcXHQgKiBhbmQgaW5zdGVhZCBoYXZlIGRfcGF0aCByZXR1cm4gdGhlIG1vdW50ZWQgcGF0aC5cXG4gXFx0ICovXFxuIFxcdGlmIChwYXRoLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2RuYW1lIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoIUlTX1JPT1QocGF0aC1cXHUwMDNlZGVudHJ5KSB8fCBwYXRoLVxcdTAwM2VkZW50cnkgIT0gcGF0aC1cXHUwMDNlbW50LVxcdTAwM2VtbnRfcm9vdCkpXFxuK1xcdCAgICAoIUlTX1JPT1QocGF0aC1cXHUwMDNlZGVudHJ5KSB8fCBwYXRoLVxcdTAwM2VkZW50cnkgIT0gcGF0aC1cXHUwMDNlbW50LVxcdTAwM2VtbnRfcm9vdCB8fFxcbitcXHQgICAgIGZhaWxmc19tbnQocGF0aC1cXHUwMDNlbW50KSkpXFxuIFxcdFxcdHJldHVybiBwYXRoLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfZG5hbWUocGF0aC1cXHUwMDNlZGVudHJ5LCBidWYsIGJ1Zmxlbik7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhaWxmcy5jIGIvZnMvZmFpbGZzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NmEzNmRhM2QyMzZkNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9mYWlsZnMuY1xcbkBAIC0wLDAgKzEsMTY2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IENocmlzdGlhbiBCcmF1bmVyIFxcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcXHUwMDNlICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMvc3VwZXJfdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFnaWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGF0aCBmYWlsZnNfcm9vdF9wYXRoID0ge307XFxuK1xcbit2b2lkIGZhaWxmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aClcXG4re1xcbitcXHQqcGF0aCA9IGZhaWxmc19yb290X3BhdGg7XFxuK1xcdHBhdGhfZ2V0KHBhdGgpO1xcbit9XFxuK1xcbitib29sIGZhaWxmc19tbnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpXFxuK3tcXG4rXFx0cmV0dXJuIG1udC1cXHUwMDNlbW50X3NiID09IGZhaWxmc19yb290X3BhdGgubW50LVxcdTAwM2VtbnRfc2I7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgICAgaW50IG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmFpbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdC8qIFVucmVhY2hhYmxlOiAtXFx1MDAzZXBlcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxlZCB0aGUgd2Fsay4gKi9cXG4rXFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGZhaWxmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4rXFx0LnBlcm1pc3Npb25cXHQ9IGZhaWxmc19wZXJtaXNzaW9uLFxcbitcXHQubG9va3VwXFx0XFx0PSBmYWlsZnNfbG9va3VwLFxcbitcXHQuZ2V0YXR0clxcdD0gZmFpbGZzX2dldGF0dHIsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX29wZXJhdGlvbnMgPSB7fTtcXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX2Rfd2Vha19yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSByb290IGlzIG9ubHkgZXZlciByZWFjaGVkIGFzIGEgcGF0aC13YWxrIHRlcm1pbmFsIGJ5IGp1bXBpbmdcXG4rXFx0ICogdG8gaXQ6IGFzIFxcXCIvXFxcIiB3aGVuIGl0IGlzIHRoZSBjYWxsZXIncyByb290LCBvciB0aHJvdWdoIGFcXG4rXFx0ICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uve3Jvb3QsY3dkfSBtYWdpYyBsaW5rLiAtXFx1MDAzZXBlcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxzXFxuK1xcdCAqIGV2ZXJ5IHdhbGsgb2YgYSBjb21wb25lbnQsIGJ1dCBhIGp1bXAgbGFuZHMgb24gdGhlIHJvb3Qgd2l0aG91dFxcbitcXHQgKiBvbmUuIFJlZnVzZSBoZXJlIHRvbyBzbyB0aGUgcm9vdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGFuIE9fUEFUSFxcbitcXHQgKiBvcGVuIG9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgY2hhciAqZmFpbGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbit7XFxuK1xcdHJldHVybiBkeW5hbWljX2RuYW1lKGJ1ZmZlciwgYnVmbGVuLCBcXFwiZmFpbGZzOi9cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmYWlsZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuK1xcdC5kX2RuYW1lXFx0XFx0PSBmYWlsZnNfZG5hbWUsXFxuK1xcdC5kX3dlYWtfcmV2YWxpZGF0ZVxcdD0gZmFpbGZzX2Rfd2Vha19yZXZhbGlkYXRlLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBmYWlsZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcXG4rXFx0LnN0YXRmc1xcdD0gZmFpbGZzX3N0YXRmcyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFxuK1xcdHMtXFx1MDAzZXNfbWF4Ynl0ZXNcXHRcXHQ9IE1BWF9MRlNfRklMRVNJWkU7XFxuK1xcdHMtXFx1MDAzZXNfYmxvY2tzaXplXFx0XFx0PSBQQUdFX1NJWkU7XFxuK1xcdHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHNcXHQ9IFBBR0VfU0hJRlQ7XFxuK1xcdHMtXFx1MDAzZXNfbWFnaWNcXHRcXHQ9IEZBSUxfRlNfTUFHSUM7XFxuK1xcdHMtXFx1MDAzZXNfb3BcXHRcXHRcXHQ9IFxcdTAwMjZmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucztcXG4rXFx0cy1cXHUwMDNlc19leHBvcnRfb3BcXHRcXHQ9IE5VTEw7XFxuK1xcdHMtXFx1MDAzZXNfeGF0dHJcXHRcXHQ9IE5VTEw7XFxuK1xcdHMtXFx1MDAzZXNfdGltZV9ncmFuXFx0XFx0PSAxO1xcbitcXHRzLVxcdTAwM2VzX2RfZmxhZ3NcXHRcXHQ9IDA7XFxuK1xcbitcXHRpbm9kZSA9IG5ld19pbm9kZShzKTtcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHQvKiBmYWlsZnMgc3VwcG9ydHMgbm8gb3BlcmF0aW9ucy4uLiAqL1xcbitcXHRpbm9kZS1cXHUwMDNlaV9tb2RlXFx0PSBTX0lGRElSO1xcbitcXHRzZXRfbmxpbmsoaW5vZGUsIDIpO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9vcFxcdD0gXFx1MDAyNmZhaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG4rXFx0aW5vZGUtXFx1MDAzZWlfZm9wXFx0PSBcXHUwMDI2ZmFpbGZzX2Rpcl9vcGVyYXRpb25zO1xcbitcXHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2lub1xcdD0gMTtcXG4rXFx0LyogLi4uIGFuZCBpcyBpbW11dGFibGUuICovXFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IFNfSU1NVVRBQkxFO1xcbitcXG4rXFx0c2V0X2RlZmF1bHRfZF9vcChzLCBcXHUwMDI2ZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zKTtcXG4rXFx0cy1cXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpO1xcbitcXHRpZiAoIXMtXFx1MDAzZXNfcm9vdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYWlsZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHJldHVybiBnZXRfdHJlZV9zaW5nbGUoZmMsIGZhaWxmc19maWxsX3N1cGVyKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZmFpbGZzX2NvbnRleHRfb3BzID0ge1xcbitcXHQuZ2V0X3RyZWVcXHQ9IGZhaWxmc19nZXRfdHJlZSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuK3tcXG4rXFx0ZmMtXFx1MDAzZW9wc1xcdFxcdD0gXFx1MDAyNmZhaWxmc19jb250ZXh0X29wcztcXG4rXFx0ZmMtXFx1MDAzZWdsb2JhbFxcdD0gdHJ1ZTtcXG4rXFx0ZmMtXFx1MDAzZXNiX2ZsYWdzXFx0fD0gU0JfTk9VU0VSO1xcbitcXHRmYy1cXHUwMDNlc19pZmxhZ3NcXHR8PSBTQl9JX05PRVhFQyB8IFNCX0lfTk9ERVY7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgZmFpbGZzX2N1cnJlbnRfY2hkaXIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGF0aCBwYXRoO1xcbitcXG4rXFx0ZmFpbGZzX2dldF9yb290KFxcdTAwMjZwYXRoKTtcXG4rXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnBhdGgpO1xcbitcXHRwYXRoX3B1dChcXHUwMDI2cGF0aCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZmFpbGZzX2ZzX3R5cGUgPSB7XFxuK1xcdC5uYW1lXFx0XFx0XFx0PSBcXFwiZmFpbGZzXFxcIixcXG4rXFx0LmluaXRfZnNfY29udGV4dFxcdD0gZmFpbGZzX2luaXRfZnNfY29udGV4dCxcXG4rXFx0LmtpbGxfc2JcXHRcXHQ9IGtpbGxfYW5vbl9zdXBlcixcXG4rfTtcXG4rXFxuK3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHZmc21vdW50ICptbnQ7XFxuK1xcbitcXHQvKiBBIHNpbmdsZSBpbnN0YW5jZSB0aGF0IGlzIG1lbWJlciBvZiBubyBtb3VudCBuYW1lc3BhY2UuICovXFxuK1xcdG1udCA9IGtlcm5fbW91bnQoXFx1MDAyNmZhaWxmc19mc190eXBlKTtcXG4rXFx0aWYgKElTX0VSUihtbnQpKVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiBGYWlsZWQgdG8gY3JlYXRlIGZhaWxmc1xcXCIpO1xcbitcXG4rXFx0ZmFpbGZzX3Jvb3RfcGF0aC5tbnRcXHQ9IG1udDtcXG4rXFx0ZmFpbGZzX3Jvb3RfcGF0aC5kZW50cnlcXHQ9IG1udC1cXHUwMDNlbW50X3Jvb3Q7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uNjdhYTA0NDQzNTFiMWEgMTAwNjQ0XFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2ludGVybmFsLmhcXG5AQCAtMzYyLDMgKzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7XFxuIHZvaWQgcGlkZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpO1xcbiB2b2lkIG5zZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpO1xcbit2b2lkIGZhaWxmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XFxuK3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpO1xcbitib29sIGZhaWxmc19tbnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xcbitpbnQgZmFpbGZzX2N1cnJlbnRfY2hkaXIodm9pZCk7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcXG5pbmRleCAzZDVjZDViZjNiMDUzNy4uODdjMzY1ZjJmODJiYTMgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZXNwYWNlLmNcXG4rKysgYi9mcy9uYW1lc3BhY2UuY1xcbkBAIC02Mjc0LDYgKzYyNzQsNyBAQCB2b2lkIF9faW5pdCBtbnRfaW5pdCh2b2lkKVxcbiBcXHRzaG1lbV9pbml0KCk7XFxuIFxcdGluaXRfcm9vdGZzKCk7XFxuIFxcdGluaXRfbW91bnRfdHJlZSgpO1xcbitcXHRmYWlsZnNfaW5pdCgpO1xcbiB9XFxuIFxcbiB2b2lkIHB1dF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKVxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTU3MCw5ICs1NzAsMTIgQEAgU1lTQ0FMTF9ERUZJTkUxKGNoZGlyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcXG4gXFxuIFNZU0NBTExfREVGSU5FMShmY2hkaXIsIHVuc2lnbmVkIGludCwgZmQpXFxuIHtcXG4tXFx0Q0xBU1MoZmRfcmF3LCBmKShmZCk7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuK1xcdGlmICgoaW50KWZkID09IEZEX0ZBSUxGU19ST09UKVxcbitcXHRcXHRyZXR1cm4gZmFpbGZzX2N1cnJlbnRfY2hkaXIoKTtcXG4rXFxuK1xcdENMQVNTKGZkX3JhdywgZikoZmQpO1xcbiBcXHRpZiAoZmRfZW1wdHkoZikpXFxuIFxcdFxcdHJldHVybiAtRUJBREY7XFxuIFxcbkBAIC02MTUsNiArNjE4LDUyIEBAIFNZU0NBTExfREVGSU5FMShjaHJvb3QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuK1NZU0NBTExfREVGSU5FMihmY2hyb290LCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBwYXRoIHBhdGg7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGlmIChmbGFncylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHtcXG4rXFx0XFx0aWYgKCFuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0NIUk9PVCkpIHtcXG4rXFx0XFx0XFx0aWYgKCF0YXNrX25vX25ld19wcml2cyhjdXJyZW50KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0XFx0XFx0LyogQSBzaGFyZWQgZnNfc3RydWN0IGxldHMgYSBzaWJsaW5nIGV4ZWMgc2V0dWlkIHBhc3QgdGhlIGNoZWNrIGFib3ZlLiAqL1xcbitcXHRcXHRcXHRpZiAoY3VycmVudC1cXHUwMDNlZnMtXFx1MDAzZXVzZXJzICE9IDEpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHQvKiBNb3ZpbmcgdGhlIHJvb3QgdG8gZmFpbGZzIGxpZnRzIHRoZSBvbGQgcm9vdCdzIFxcXCIuLlxcXCIgYmFycmllci4gKi9cXG4rXFx0XFx0XFx0aWYgKGN1cnJlbnRfY2hyb290ZWQoKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0XFx0fVxcbitcXHRcXHRmYWlsZnNfZ2V0X3Jvb3QoXFx1MDAyNnBhdGgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRDTEFTUyhmZF9yYXcsIGYpKGZkKTtcXG4rXFx0XFx0aWYgKGZkX2VtcHR5KGYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXG4rXFx0XFx0aWYgKCFkX2Nhbl9sb29rdXAoZmRfZmlsZShmKS1cXHUwMDNlZl9wYXRoLmRlbnRyeSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PVERJUjtcXG4rXFxuK1xcdFxcdGVycm9yID0gZmlsZV9wZXJtaXNzaW9uKGZkX2ZpbGUoZiksIE1BWV9FWEVDIHwgTUFZX0NIRElSKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRcXHRpZiAoIW5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIENBUF9TWVNfQ0hST09UKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdFxcdHBhdGggPSBmZF9maWxlKGYpLVxcdTAwM2VmX3BhdGg7XFxuK1xcdFxcdHBhdGhfZ2V0KFxcdTAwMjZwYXRoKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX2Nocm9vdChcXHUwMDI2cGF0aCk7XFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2cGF0aCk7XFxuK1xcdHBhdGhfcHV0KFxcdTAwMjZwYXRoKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbiBpbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oXFxuaW5kZXggODc0ZDkwNjdhNDNiNTAuLjg0MTNiNjI0YWQ0NzgyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxcbkBAIC00NTcsNiArNDU3LDcgQEAgYXNtbGlua2FnZSBsb25nIHN5c19mYWNjZXNzYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IG1vZGUsXFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcXG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2hkaXIodW5zaWduZWQgaW50IGZkKTtcXG4gYXNtbGlua2FnZSBsb25nIHN5c19jaHJvb3QoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcXG4rYXNtbGlua2FnZSBsb25nIHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2QodW5zaWduZWQgaW50IGZkLCB1bW9kZV90IG1vZGUpO1xcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZGF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcXG4gXFx0XFx0XFx0ICAgICB1bW9kZV90IG1vZGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcXG5pbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuQEAgLTg2Myw4ICs4NjMsMTIgQEAgX19TWVNDQUxMKF9fTlJfbGlzdG5zLCBzeXNfbGlzdG5zKVxcbiAjZGVmaW5lIF9fTlJfcnNlcV9zbGljZV95aWVsZCA0NzFcXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXFxuIFxcbisvKiBmcy9vcGVuLmMgKi9cXG4rI2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXFxuK19fU1lTQ0FMTChfX05SX2ZjaHJvb3QsIHN5c19mY2hyb290KVxcbitcXG4gI3VuZGVmIF9fTlJfc3lzY2FsbHNcXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxcbisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXFxuIFxcbiAvKlxcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcXG5pbmRleCBhYWRmYmY2ZTBjYjNhMC4uZTQzZTNkZTNlOWVlNDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaFxcbkBAIC0xMjQsNiArMTI0LDcgQEAgc3RydWN0IGRlbGVnYXRpb24ge1xcbiBcXG4gI2RlZmluZSBGRF9QSURGU19ST09UXFx0XFx0XFx0LTEwMDAyIC8qIFJvb3Qgb2YgdGhlIHBpZGZzIGZpbGVzeXN0ZW0gKi9cXG4gI2RlZmluZSBGRF9OU0ZTX1JPT1RcXHRcXHRcXHQtMTAwMDMgLyogUm9vdCBvZiB0aGUgbnNmcyBmaWxlc3lzdGVtICovXFxuKyNkZWZpbmUgRkRfRkFJTEZTX1JPT1RcXHRcXHRcXHQtMTAwMDQgLyogUm9vdCBvZiB0aGUgZmFpbGZzIGZpbGVzeXN0ZW0gKi9cXG4gI2RlZmluZSBGRF9JTlZBTElEXFx0XFx0XFx0LTEwMDA5IC8qIEludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiAtMTAwMDAgLSBFQkFERiA9IC0xMDAwOSAqL1xcbiBcXG4gLyogR2VuZXJpYyBmbGFncyBmb3IgdGhlICphdCgyKSBmYW1pbHkgb2Ygc3lzY2FsbHMuICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcXG5pbmRleCA0ZjJkYTkzNWE3NmNjYS4uZmQ1ZjBlOTU2NDhlZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaFxcbkBAIC0xMDUsNSArMTA1LDYgQEBcXG4gI2RlZmluZSBQSURfRlNfTUFHSUNcXHRcXHQweDUwNDk0NDQ2XFx0LyogXFxcIlBJREZcXFwiICovXFxuICNkZWZpbmUgR1VFU1RfTUVNRkRfTUFHSUNcXHQweDQ3NGQ0NTRkXFx0LyogXFxcIkdNRU1cXFwiICovXFxuICNkZWZpbmUgTlVMTF9GU19NQUdJQ1xcdFxcdDB4NEU1NTRDNENcXHQvKiBcXFwiTlVMTFxcXCIgKi9cXG4rI2RlZmluZSBGQUlMX0ZTX01BR0lDXFx0XFx0MHg0NjQxNDk0Q1xcdC8qIFxcXCJGQUlMXFxcIiAqL1xcbiBcXG4gI2VuZGlmIC8qIF9fTElOVVhfTUFHSUNfSF9fICovXFxuZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsXFxuaW5kZXggN2E0MmIzMmI2NTc3NjcuLjBhYjUzMTYwNTEyMDJlIDEwMDY0NFxcbi0tLSBhL3NjcmlwdHMvc3lzY2FsbC50YmxcXG4rKysgYi9zY3JpcHRzL3N5c2NhbGwudGJsXFxuQEAgLTQxMiwzICs0MTIsNCBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcXG5pbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuQEAgLTg2Myw4ICs4NjMsMTIgQEAgX19TWVNDQUxMKF9fTlJfbGlzdG5zLCBzeXNfbGlzdG5zKVxcbiAjZGVmaW5lIF9fTlJfcnNlcV9zbGljZV95aWVsZCA0NzFcXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXFxuIFxcbisvKiBmcy9vcGVuLmMgKi9cXG4rI2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXFxuK19fU1lTQ0FMTChfX05SX2ZjaHJvb3QsIHN5c19mY2hyb290KVxcbitcXG4gI3VuZGVmIF9fTlJfc3lzY2FsbHNcXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxcbisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXFxuIFxcbiAvKlxcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuaW5kZXggNTI0MTU1ZDY1NWRhMTUuLmQ1YjYwNDViMDA5MGNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcXG4rKysgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuQEAgLTM5Niw2ICszOTYsNyBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRzeXNfZmNocm9vdFxcbiBcXG4gI1xcbiAjIER1ZSB0byBhIGhpc3RvcmljYWwgZGVzaWduIGVycm9yLCBjZXJ0YWluIHN5c2NhbGxzIGFyZSBudW1iZXJlZCBkaWZmZXJlbnRseVxcbmRpZmYgLS1naXQgYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsIGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibFxcbmluZGV4IDdhNDJiMzJiNjU3NzY3Li4wYWI1MzE2MDUxMjAyZSAxMDA2NDRcXG4tLS0gYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXFxuKysrIGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibFxcbkBAIC00MTIsMyArNDEyLDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXFxuQEAgLTMzLDYgKzMzLDcgQEAgVEFSR0VUUyArPSBmY2htb2RhdDJcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtc1xcbiBUQVJHRVRTICs9IGZpbGVzeXN0ZW1zL2JpbmRlcmZzXFxuIFRBUkdFVFMgKz0gZmlsZXN5c3RlbXMvZXBvbGxcXG4rVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9mYWlsZnNcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9mYXRcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9vdmVybGF5ZnNcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9zdGF0bW91bnRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNkM2I1ZDg4NGQ3ZWE5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlXFxuQEAgLTAsMCArMSwyIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitmYWlsZnNfdGVzdFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYzVkOThiNGZlNzI1ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitDRkxBR1MgKz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcXG4rVEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3RcXG4rXFxuK2luY2x1ZGUgLi4vLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9mYWlsZnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYzQ2MWRjNDgzYTk5N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuY1xcbkBAIC0wLDAgKzEsNTgxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3ByY3RsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3Zmcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uLy4uL2tzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjaWZuZGVmIF9fTlJfZmNocm9vdFxcbisjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIEZEX1BJREZTX1JPT1RcXG4rI2RlZmluZSBGRF9QSURGU19ST09UIC0xMDAwMlxcbisjZW5kaWZcXG4rXFxuKyNpZm5kZWYgRkRfTlNGU19ST09UXFxuKyNkZWZpbmUgRkRfTlNGU19ST09UIC0xMDAwM1xcbisjZW5kaWZcXG4rXFxuKyNpZm5kZWYgRkRfRkFJTEZTX1JPT1RcXG4rI2RlZmluZSBGRF9GQUlMRlNfUk9PVCAtMTAwMDRcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIE5PQk9EWV9VSUQgNjU1MzRcXG4rXFxuKy8qIENoaWxkIHNlbnRpbmVsIGV4aXQgY29kZTogdGhlIGV4ZWMgd2FzIGJsb2NrZWQgYXMgZXhwZWN0ZWQuICovXFxuKyNkZWZpbmUgRkFJTEZTX0VYRUNfQkxPQ0tFRCA5OVxcbitcXG4rLyogU3RhY2sgZm9yIHRoZSBDTE9ORV9GUyBoZWxwZXIgaW4gZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0LiAqL1xcbisjZGVmaW5lIEZBSUxGU19DTE9ORV9TVEFDSyAoNjQgKiAxMDI0KVxcbitcXG4rc3RhdGljIGludCBzeXNfZmNocm9vdChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gc3lzY2FsbChfX05SX2ZjaHJvb3QsIGZkLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJhdyBzeXNjYWxsOiBnbGliYydzIGdldGN3ZCgpIHJlamVjdHMgdGhlIGtlcm5lbCdzIFxcXCIodW5yZWFjaGFibGUpXFxcIlxcbisgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxcbisgKi9cXG4rc3RhdGljIGxvbmcgc3lzX2dldGN3ZChjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0Y3dkLCBidWYsIHNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRyb3BfdG9fbm9ib2R5KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHNldHJlc3VpZChOT0JPRFlfVUlELCBOT0JPRFlfVUlELCBOT0JPRFlfVUlEKTtcXG4rfVxcbitcXG4rLyogUGFya2VkIENMT05FX0ZTIGNoaWxkOyBkaWVzIHdpdGggaXRzIHBhcmVudCBzbyBpdCBuZXZlciBsZWFrcy4gKi9cXG4rc3RhdGljIGludCBmYWlsZnNfcGFyayh2b2lkICphcmcpXFxuK3tcXG4rXFx0KHZvaWQpYXJnO1xcbitcXHRwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdLSUxMKTtcXG4rXFx0cGF1c2UoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi9cXG4rc3RhdGljIGludCBlbGZfaGFzX2Fic29sdXRlX2ludGVycChpbnQgZmQpXFxuK3tcXG4rXFx0RWxmVyhFaGRyKSBlaGRyO1xcbitcXHRFbGZXKFBoZHIpIHBoZHI7XFxuK1xcdGNoYXIgaW50ZXJwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChwcmVhZChmZCwgXFx1MDAyNmVoZHIsIHNpemVvZihlaGRyKSwgMCkgIT0gc2l6ZW9mKGVoZHIpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKG1lbWNtcChlaGRyLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRykgIT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWhkci5lX3BobnVtOyBpKyspIHtcXG4rXFx0XFx0aWYgKHByZWFkKGZkLCBcXHUwMDI2cGhkciwgc2l6ZW9mKHBoZHIpLFxcbitcXHRcXHRcXHQgIGVoZHIuZV9waG9mZiArIGkgKiBzaXplb2YocGhkcikpICE9IHNpemVvZihwaGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9JTlRFUlApXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAocHJlYWQoZmQsIFxcdTAwMjZpbnRlcnAsIDEsIHBoZHIucF9vZmZzZXQpICE9IDEpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gaW50ZXJwID09ICcvJztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1RFU1QoZmNoZGlyX3NlbnRpbmVsKVxcbit7XFxuK1xcdGNoYXIgYnVmW1BBVEhfTUFYXTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0QVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApO1xcbitcXG4rXFx0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdC4gKi9cXG4rXFx0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xcbitcXHRBU1NFUlRfRVEoc3RybmNtcChidWYsIFxcXCIodW5yZWFjaGFibGUpXFxcIiwgMTMpLCAwKTtcXG4rXFxuK1xcdC8qIEV2ZXJ5IEFUX0ZEQ1dELXJlbGF0aXZlIGxvb2t1cCBmYWlscy4gKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXFxcImZvb1xcXCIsIE9fUkRPTkxZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcXFwiLlxcXCIsIE9fUkRPTkxZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcXFwiLi5cXFwiLCBPX1JET05MWSksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFx0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXFxcImZvb1xcXCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFxuK1xcdC8qIFRoZSBjd2QgY2Fubm90IGJlIHBpbm5lZCBieSBmb2xsb3dpbmcgL3Byb2Mvc2VsZi9jd2QgaW50byBpdC4gKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9wcm9jL3NlbGYvY3dkXFxcIiwgT19QQVRIKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXG4rXFx0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkIHNvIGFic29sdXRlIGxvb2t1cHMga2VlcCB3b3JraW5nLi4uICovXFxuK1xcdGZkID0gb3BlbihcXFwiL1xcXCIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFxuK1xcdC8qIC4uLiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSByZWNvdmVyZWQuICovXFxuK1xcdEFTU0VSVF9FUShjaGRpcihcXFwiL1xcXCIpLCAwKTtcXG4rXFx0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xcbitcXHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXFxcIi9cXFwiKSwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZmNoZGlyX3JlamVjdHNfb3RoZXJfc2VudGluZWxzKVxcbit7XFxuK1xcdEFTU0VSVF9FUShmY2hkaXIoRkRfUElERlNfUk9PVCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XFxuK1xcdEFTU0VSVF9FUShmY2hkaXIoRkRfTlNGU19ST09UKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcXG4rXFx0QVNTRVJUX0VRKGZjaGRpcigtMTAwMDkpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3RfZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAxKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9cXFwiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMSksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X2JhZF9mZClcXG4re1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoLTEsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xcbitcXG4rXFx0LyogT25seSBGRF9GQUlMRlNfUk9PVCBpcyBhIHZhbGlkIHNlbnRpbmVsLiAqL1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfUElERlNfUk9PVCwgMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9OU0ZTX1JPT1QsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3Rfbm90ZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9zdGF0dXNcXFwiLCBPX1JET05MWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9yZWFsZmRfcmVxdWlyZXNfY2FwKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGlmIChnZXRldWlkKCkgPT0gMClcXG4rXFx0XFx0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xcbitcXG4rXFx0ZmQgPSBvcGVuKFxcXCIvXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3JlYWxmZClcXG4re1xcbitcXHRjaGFyIHRlbXBsYXRlW10gPSBcXFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcXFwiO1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRzdHJ1Y3Qgc3RhdCBzdDtcXG4rXFx0aW50IHRtcGZkLCBkZmQsIGZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImZjaHJvb3QoKSB3aXRoIGEgcmVndWxhciBmZCByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0dG1wZmQgPSBvcGVuKFxcXCIvdG1wXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UodG1wZmQsIDApO1xcbitcXG4rXFx0QVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTtcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2FuYXJ5XFxcIiwgdGVtcGxhdGUpO1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcbitcXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShkZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZGZkLCAwKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShkZmQpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzdGF0KFxcXCIvY2FuYXJ5XFxcIiwgXFx1MDAyNnN0KSwgMCk7XFxuK1xcbitcXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwOiBkaXJmZC1hbmNob3JlZCBJL08gd29ya3Mgd2l0aCB0aGUgbmV3IHJvb3QuICovXFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL2NhbmFyeVxcXCIsIHRlbXBsYXRlICsgc3RybGVuKFxcXCIvdG1wL1xcXCIpKTtcXG4rXFx0dW5saW5rYXQodG1wZmQsIHBhdGgsIDApO1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbClcXG4re1xcbitcXHRjaGFyIHRlbXBsYXRlW10gPSBcXFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcXFwiO1xcbitcXHRzdHJ1Y3Qgc3RhdCByZWFscm9vdCwgc3Q7XFxuK1xcdHN0cnVjdCBzdGF0ZnMgc2ZzO1xcbitcXHRjaGFyIGJ1ZltQQVRIX01BWF07XFxuK1xcdGludCBwcm9jZmQsIHRtcGZkLCBkZmQsIGZkO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRzdHJ1Y3QgZmlsZV9oYW5kbGUgaGFuZGxlO1xcbitcXHRcXHR1bnNpZ25lZCBjaGFyIGZfaGFuZGxlW01BWF9IQU5ETEVfU1pdO1xcbitcXHR9IGZoO1xcbitcXHRpbnQgbW50aWQ7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzdGF0KFxcXCIvXFxcIiwgXFx1MDAyNnJlYWxyb290KSwgMCk7XFxuK1xcdHByb2NmZCA9IG9wZW4oXFxcIi9wcm9jXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UocHJvY2ZkLCAwKTtcXG4rXFx0dG1wZmQgPSBvcGVuKFxcXCIvdG1wXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UodG1wZmQsIDApO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xcbitcXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcXG4rXFx0QVNTRVJUX0dFKGRmZCwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcXG4rXFxuK1xcdC8qIEFic29sdXRlIGxvb2t1cHMgZmFpbC4gKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9ldGMvcGFzc3dkXFxcIiwgT19SRE9OTFkpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcdEFTU0VSVF9FUShta2RpcihcXFwiL2Zvb1xcXCIsIDA3MDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcm9vdCBjYW5ub3QgYmUgcmVmZXJlbmNlZCBhdCBhbGwgLSBub3QgZXZlbiBhbiBPX1BBVEggb3BlbixcXG4rXFx0ICogd2hpY2ggc2tpcHMgLVxcdTAwM2VwZXJtaXNzaW9uKCksIGJlY2F1c2UgaXQgbGFuZHMgb24gdGhlIHJvb3QgYXMgYVxcbitcXHQgKiBqdW1wZWQgd2FsayB0ZXJtaW5hbCB0aGF0IC1cXHUwMDNlZF93ZWFrX3JldmFsaWRhdGUoKSByZWZ1c2VzLlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9cXFwiLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXHRBU1NFUlRfRVEob3BlbihcXFwiL1xcXCIsIE9fUEFUSCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXRmcyhcXFwiL1xcXCIsIFxcdTAwMjZzZnMpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGZvbGxvd2luZyAvcHJvYy9zZWxmL3Jvb3QgaW50byBpdCBlaXRoZXJcXG4rXFx0ICogKG9ubHkgdGhlIHJvb3QgaXMgaW4gZmFpbGZzIGhlcmUsIHNvIHNlbGYvY3dkIGlzIHN0aWxsIHJlYWwpLlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW5hdChwcm9jZmQsIFxcXCJzZWxmL3Jvb3RcXFwiLCBPX1BBVEgpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKiBOb3IgZW5jb2RlZCBpbnRvIGEgZmlsZSBoYW5kbGUuICovXFxuK1xcdGZoLmhhbmRsZS5oYW5kbGVfYnl0ZXMgPSBNQVhfSEFORExFX1NaO1xcbitcXHRBU1NFUlRfRVEobmFtZV90b19oYW5kbGVfYXQoQVRfRkRDV0QsIFxcXCIvXFxcIiwgXFx1MDAyNmZoLmhhbmRsZSwgXFx1MDAyNm1udGlkLCAwKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXG4rXFx0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdyB1bnJlYWNoYWJsZSBmcm9tIHRoZSByb290LiAqL1xcbitcXHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgXFxcIih1bnJlYWNoYWJsZSlcXFwiLCAxMyksIDApO1xcbitcXG4rXFx0LyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi9cXG4rXFx0ZmQgPSBvcGVuYXQoQVRfRkRDV0QsIFxcXCIuXFxcIiwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXHRmZCA9IG9wZW5hdChkZmQsIFxcXCJjYW5hcnlcXFwiLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEod3JpdGUoZmQsIFxcXCJ4XFxcIiwgMSksIDEpO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0ZmQgPSBvcGVuYXQoZGZkLCBcXFwiY2FuYXJ5XFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFxuK1xcdC8qIFxcXCIuLlxcXCIgd2Fsa3MgY2xhbXAgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZSwgbm90IGF0IGZhaWxmcy4gKi9cXG4rXFx0ZmQgPSBvcGVuYXQoQVRfRkRDV0QsIFxcXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLlxcXCIsIE9fUEFUSCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0KSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzdC5zdF9kZXYsIHJlYWxyb290LnN0X2Rldik7XFxuK1xcdEFTU0VSVF9FUShzdC5zdF9pbm8sIHJlYWxyb290LnN0X2lubyk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXG4rXFx0LyogcmVhZGxpbmsgb2YgdGhlIG1hZ2ljIGxpbmsgc3RpbGwgd29ya3M6IGl0IGRvZXMgbm90IGZvbGxvdy4gKi9cXG4rXFx0cmV0ID0gcmVhZGxpbmthdChwcm9jZmQsIFxcXCJzZWxmL3Jvb3RcXFwiLCBidWYsIHNpemVvZihidWYpIC0gMSk7XFxuK1xcdEFTU0VSVF9HVChyZXQsIDApO1xcbitcXHRidWZbcmV0XSA9ICdcXFxcMCc7XFxuK1xcdFRIX0xPRyhcXFwiL3Byb2Mvc2VsZi9yb290IHBvaW50cyB0byAnJXMnXFxcIiwgYnVmKTtcXG4rXFx0LyogZF9wYXRoKCkgbmFtZXMgdGhlIGZhaWxmcyByb290IHN5bnRoZXRpY2FsbHksIG5ldmVyIGFzIGEgcmVhbCBwYXRoLiAqL1xcbitcXHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXFxcImZhaWxmczovXFxcIiksIDApO1xcbitcXG4rXFx0LyogQnV0IGZvbGxvd2luZyBpdCBpbnRvIGZhaWxmcyBpcyByZWZ1c2VkLiAqL1xcbitcXHRBU1NFUlRfRVEoZnN0YXRhdChwcm9jZmQsIFxcXCJzZWxmL3Jvb3RcXFwiLCBcXHUwMDI2c3QsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXFxuK1xcdHVubGlua2F0KGRmZCwgXFxcImNhbmFyeVxcXCIsIDApO1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9hYnNvbHV0ZV9zeW1saW5rKVxcbit7XFxuK1xcdGNoYXIgdGVtcGxhdGVbXSA9IFxcXCIvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFxcXCI7XFxuK1xcdGludCB0bXBmZCwgZGZkLCBmZDtcXG4rXFxuK1xcdGlmIChnZXRldWlkKCkgIT0gMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXFxcIik7XFxuK1xcbitcXHR0bXBmZCA9IG9wZW4oXFxcIi90bXBcXFwiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XFxuK1xcdEFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7XFxuK1xcdGRmZCA9IG9wZW4odGVtcGxhdGUsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UoZGZkLCAwKTtcXG4rXFxuK1xcdGZkID0gb3BlbmF0KGRmZCwgXFxcInRhcmdldFxcXCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXHRBU1NFUlRfRVEoc3ltbGlua2F0KFxcXCJ0YXJnZXRcXFwiLCBkZmQsIFxcXCJyZWxcXFwiKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzeW1saW5rYXQoXFxcIi9ldGNcXFwiLCBkZmQsIFxcXCJhYnNcXFwiKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcXG4rXFxuK1xcdC8qIFJlbGF0aXZlIHN5bWxpbmtzIGtlZXAgcmVzb2x2aW5nIHdpdGhpbiB0aGUgZGlyZmQtYW5jaG9yZWQgd2Fsay4uLiAqL1xcbitcXHRmZCA9IG9wZW5hdChkZmQsIFxcXCJyZWxcXFwiLCBPX1JET05MWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXG4rXFx0LyogLi4uIGFic29sdXRlIHN5bWxpbmtzIHJlc3RhcnQgdGhlIHdhbGsgYXQgdGhlIGZhaWxmcyByb290LiAqL1xcbitcXHRBU1NFUlRfRVEob3BlbmF0KGRmZCwgXFxcImFic1xcXCIsIE9fUkRPTkxZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXG4rXFx0LyogQmVzdC1lZmZvcnQgY2xlYW51cCB2aWEgdGhlIHByZS1vcGVuZWQgZGlyZmRzLiAqL1xcbitcXHR1bmxpbmthdChkZmQsIFxcXCJhYnNcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGZkLCBcXFwicmVsXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRmZCwgXFxcInRhcmdldFxcXCIsIDApO1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF91bnByaXZpbGVnZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbUEFUSF9NQVhdO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSA9PSAwKVxcbitcXHRcXHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XFxuK1xcbitcXHQvKiBXaXRob3V0IG5vX25ld19wcml2cyBlbnRlcmluZyBmYWlsZnMgaXMgbm90IGFsbG93ZWQuLi4gKi9cXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTtcXG4rXFxuK1xcdC8qIC4uLiB3aXRoIG5vX25ld19wcml2cyBzZXQgaXQgaXMgYWxsb3dlZC4gKi9cXG4rXFx0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEob3BlbihcXFwiL2V0Yy9wYXNzd2RcXFwiLCBPX1JET05MWSksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFxuK1xcdC8qIFRoZSB0YXNrIGNvdW50cyBhcyBjaHJvb3RlZDogbm8gdXNlciBuYW1lc3BhY2VzIGFueW1vcmUuICovXFxuK1xcdEFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV1VTRVIpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xcbitcXG4rXFx0LyogV2l0aCBib3RoIHJvb3QgYW5kIGN3ZCBpbiBmYWlsZnMgZ2V0Y3dkKCkgcmVwb3J0cyBcXFwiL1xcXCIuICovXFxuK1xcdEFTU0VSVF9FUShmY2hkaXIoRkRfRkFJTEZTX1JPT1QpLCAwKTtcXG4rXFx0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xcbitcXHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXFxcIi9cXFwiKSwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9yZWplY3RlZF93aGVuX2Nocm9vdGVkKVxcbit7XFxuK1xcdGNoYXIgdGVtcGxhdGVbXSA9IFxcXCIvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFxcXCI7XFxuK1xcdGludCB0bXBmZDtcXG4rXFxuK1xcdGlmIChnZXRldWlkKCkgIT0gMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJjaHJvb3QoKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0dG1wZmQgPSBvcGVuKFxcXCIvdG1wXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UodG1wZmQsIDApO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoY2hyb290KHRlbXBsYXRlKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjaGRpcihcXFwiL1xcXCIpLCAwKTtcXG4rXFxuK1xcdC8qIFJlbW92ZSB0aGUgamFpbCB3aGlsZSBzdGlsbCBwcml2aWxlZ2VkOyBzdGlja3kgL3RtcCBibG9ja3Mgbm9ib2R5LiAqL1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK1xcbitcXHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7XFxuK1xcbitcXHQvKiBBbiB1bnByaXZpbGVnZWQgY2hyb290ZWQgdGFzayBtdXN0IG5vdCBsaWZ0IGl0cyBcXFwiLi5cXFwiIGJhcnJpZXIuICovXFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0KVxcbit7XFxuK1xcdGNoYXIgc3RhY2tbRkFJTEZTX0NMT05FX1NUQUNLXTtcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSA9PSAwKVxcbitcXHRcXHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XFxuK1xcbitcXHQvKiBBIENMT05FX0ZTIHNpYmxpbmcgc2hhcmVzIHRoZSBmc19zdHJ1Y3Q6IGJ1bXAgZnMtXFx1MDAzZXVzZXJzIHRvIDIuICovXFxuK1xcdHBpZCA9IGNsb25lKGZhaWxmc19wYXJrLCBzdGFjayArIHNpemVvZihzdGFjayksIENMT05FX0ZTIHwgU0lHQ0hMRCxcXG4rXFx0XFx0ICAgIE5VTEwpO1xcbitcXHRBU1NFUlRfR0UocGlkLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIHNpYmxpbmcgd2l0aG91dCBub19uZXdfcHJpdnMgY291bGQgZXhlYyBhIHNldHVpZCBiaW5hcnkgd2l0aFxcbitcXHQgKiB0aGUgZmFpbGZzIHJvb3QsIHNvIGEgc2hhcmVkIGZzX3N0cnVjdCBpcyByZWZ1c2VkIGV2ZW4gd2l0aFxcbitcXHQgKiBub19uZXdfcHJpdnMgc2V0LlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoa2lsbChwaWQsIFNJR0tJTEwpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHdhaXRwaWQocGlkLCBOVUxMLCAwKSwgcGlkKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX25vX292ZXJtb3VudClcXG4re1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibW91bnRpbmcgcmVxdWlyZXMgcHJpdmlsZWdlc1xcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ29udGFpbiB0aGUgYmxhc3QgcmFkaXVzOiBpZiBmYWlsZnMgZXZlciByZWdyZXNzZWQgYW5kIFxcXCIvXFxcIlxcbitcXHQgKiByZXNvbHZlZCB0byB0aGUgcmVhbCByb290LCB0aGUgdG1wZnMgbW91bnQgYmVsb3cgbXVzdCBub3QgdG91Y2hcXG4rXFx0ICogdGhlIGhvc3QuIEEgcHJpdmF0ZSBtb3VudCBuYW1lc3BhY2Uga2VlcHMgaXQgbG9jYWwgdG8gdGhpcyBjaGlsZC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV05TKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShtb3VudChOVUxMLCBcXFwiL1xcXCIsIE5VTEwsIE1TX1JFQyB8IE1TX1BSSVZBVEUsIE5VTEwpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2YgdGhlIGZhaWxmcyByb290LiBJdCBjYW5ub3QgZXZlblxcbitcXHQgKiBiZSBuYW1lZCBhcyBhIG1vdW50IHRhcmdldDogcmVzb2x2aW5nIFxcXCIvXFxcIiBpcyByZWZ1c2VkIGJlZm9yZSB0aGVcXG4rXFx0ICogbW91bnQgbWFjaGluZXJ5ICh3aGljaCwgZmFpbGZzIGJlaW5nIGluIG5vIG1vdW50IG5hbWVzcGFjZSwgd291bGRcXG4rXFx0ICogcmVqZWN0IGl0IGFueXdheSkgaXMgZXZlciByZWFjaGVkLiBvcGVuX3RyZWUoT1BFTl9UUkVFX0NMT05FKSBpc1xcbitcXHQgKiBsaWtld2lzZSBtb290IHNpbmNlIG5vIGZkIHRvIHRoZSByb290IGNhbiBiZSBvYnRhaW5lZC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUShtb3VudChcXFwibm9uZVxcXCIsIFxcXCIvXFxcIiwgXFxcInRtcGZzXFxcIiwgMCwgTlVMTCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX3NldG5zX2VzY2FwZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3RhdCByZWFscm9vdCwgc3Q7XFxuK1xcdGludCBuc2ZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldG5zKCkgdG8gYSBtb3VudCBuYW1lc3BhY2UgcmVxdWlyZXMgcHJpdmlsZWdlc1xcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN0YXQoXFxcIi9cXFwiLCBcXHUwMDI2cmVhbHJvb3QpLCAwKTtcXG4rXFx0bnNmZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvbnMvbW50XFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfR0UobnNmZCwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9ldGNcXFwiLCBPX1BBVEgpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKiBBIG1vdW50IG5hbWVzcGFjZSBmZCBpcyB0aGUga2V5IG91dDogaXQgcmVzZXRzIHJvb3QgYW5kIGN3ZC4gKi9cXG4rXFx0QVNTRVJUX0VRKHNldG5zKG5zZmQsIENMT05FX05FV05TKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShuc2ZkKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3RhdChcXFwiL1xcXCIsIFxcdTAwMjZzdCksIDApO1xcbitcXHRBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpO1xcbitcXHRBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlYylcXG4re1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwicHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeGVjIGluIGEgY2hpbGQ6IGEgd3JvbmdseSBzdWNjZXNzZnVsIGV4ZWMgd291bGQgcmVwbGFjZSB0aGUgdGVzdFxcbitcXHQgKiBpbWFnZSBhbmQgaXRzIGV4aXQgY29kZSB3b3VsZCBub3QgbWF0Y2ggdGhlIHNlbnRpbmVsIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRBU1NFUlRfR0UocGlkLCAwKTtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdGV4ZWNsKFxcXCIvYmluL3RydWVcXFwiLCBcXFwidHJ1ZVxcXCIsIE5VTEwpO1xcbitcXHRcXHRfZXhpdChlcnJubyA9PSBFT1BOT1RTVVBQID8gRkFJTEZTX0VYRUNfQkxPQ0tFRCA6IDEpO1xcbitcXHR9XFxuK1xcdEFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTtcXG4rXFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEZBSUxGU19FWEVDX0JMT0NLRUQpO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlY19pbnRlcnByZXRlcilcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyZ3ZbXSA9IHsgXFxcImZhaWxmc190ZXN0XFxcIiwgTlVMTCB9O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVudnBbXSA9IHsgTlVMTCB9O1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcdGludCBzdGF0dXMsIGV4ZWZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcXFwiKTtcXG4rXFxuK1xcdC8qIEV4ZWMgb3Vyc2VsdmVzOiB0aGUgb25lIGJpbmFyeSBndWFyYW50ZWVkIHRvIGJlIGFyb3VuZC4gKi9cXG4rXFx0ZXhlZmQgPSBvcGVuKFxcXCIvcHJvYy9zZWxmL2V4ZVxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0QVNTRVJUX0dFKGV4ZWZkLCAwKTtcXG4rXFx0aWYgKCFlbGZfaGFzX2Fic29sdXRlX2ludGVycChleGVmZCkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidGVzdCBiaW5hcnkgaGFzIG5vIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlclxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgYmluYXJ5IGl0c2VsZiBuZWVkcyBubyBwYXRoIGxvb2t1cCAtIGl0IGlzIGV4ZWN1dGVkIGJ5IGZkIC1cXG4rXFx0ICogYnV0IGxvYWRpbmcgaXQgZmFpbHMgb24gb3BlbmluZyB0aGUgYWJzb2x1dGUgUFRfSU5URVJQXFxuK1xcdCAqIGludGVycHJldGVyLiBSdW4gaXQgaW4gYSBjaGlsZCBzbyBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIGRvZXNcXG4rXFx0ICogbm90IHJlcGxhY2UgdGhlIHRlc3QgaW1hZ2UgYW5kIG1hc3F1ZXJhZGUgYXMgYSBwYXNzLlxcbitcXHQgKi9cXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRBU1NFUlRfR0UocGlkLCAwKTtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdHN5c2NhbGwoX19OUl9leGVjdmVhdCwgZXhlZmQsIFxcXCJcXFwiLCBhcmd2LCBlbnZwLCBBVF9FTVBUWV9QQVRIKTtcXG4rXFx0XFx0X2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTtcXG4rXFx0fVxcbitcXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApLCBwaWQpO1xcbitcXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XFxuK1xcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBGQUlMRlNfRVhFQ19CTE9DS0VEKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX2luaGVyaXRlZClcXG4re1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwicHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdEFTU0VSVF9HRShwaWQsIDApO1xcbitcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0aWYgKG9wZW4oXFxcIi9ldGNcXFwiLCBPX1BBVEgpICE9IC0xIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXFxuK1xcdFxcdFxcdF9leGl0KDEpO1xcbitcXHRcXHRfZXhpdCgwKTtcXG4rXFx0fVxcbitcXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApLCBwaWQpO1xcbitcXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XFxuK1xcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCAwKTtcXG4rfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6MDU6MzYuNTE2NTYyMzgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTYxNjQzNjM0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2ZjaHJvb3RcIixcbiAgICBcInN5c19mY2hkaXJcIixcbiAgICBcImZhaWxmc19jdXJyZW50X2NoZGlyXCIsXG4gICAgXCJmYWlsZnNfZ2V0X3Jvb3RcIixcbiAgICBcImZhaWxmc19tbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgZXNjYXBpbmcgY2hyb290LCByZWZlcmVuY2UgbGVha3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWNhNGEzMDNiMDk0YjZjOGI0MmMzNzcwMjc4YjkzYTg0YjE3Y2QwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE5OjA1OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIxZmYyZGI3OTQxZGYyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZhaWxmcy5yc3RcbkBAIC0wLDAgKzEsNzMgQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKz09PT09PVxuK2ZhaWxmc1xuKz09PT09PVxuK1xuK2ZhaWxmcyBpcyBhIGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIHRoYXQgZmFpbHMgZXZlcnkgb3BlcmF0aW9uXG4rcmVhY2hpbmcgaXQgd2l0aCBgYEVPUE5PVFNVUFBgYC4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIG51bGxmcy4gV2hlcmVcbitudWxsZnMgaXMgcGVybWFuZW50bHkgZW1wdHksIGZhaWxmcyBtZWFucyBcIm5vdGhpbmcgaXMgc3VwcG9ydGVkIGhlcmVcIi5cbitJdCBjYW5ub3QgYmUgbW91bnRlZCBmcm9tIHVzZXJzcGFjZSwgbm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2ZcbitpdC4gSXQgY2Fubm90IGJlIGNsb25lZC5cbitcbitUaGUgb25seSB3YXkgaW50byBpdCBpcyB0aGUgYGBGRF9GQUlMRlNfUk9PVGBgIGZpbGUgZGVzY3JpcHRvciBzZW50aW5lbCB3aGljaFxuK2lzIHVuZGVyc3Rvb2QgYnkgYGBmY2hkaXIoMilgYCBhbmQgYGBmY2hyb290KDIpYGAuXG4rXG4rU2VtYW50aWNzXG4rPT09PT09PT09XG4rXG4rRXZlcnkgcGF0aCB3YWxrIG9mIGEgY29tcG9uZW50IHRocm91Z2ggZmFpbGZzIGZhaWxzIHdpdGhcbitgYEVPUE5PVFNVUFBgYCBiZWZvcmUgdGhhdCBjb21wb25lbnQgaXMgcGFyc2VkLCBpbmNsdWRpbmcgYGAuYGAuXG4rXG4rTm8gcGF0aCBsb29rdXAgY2FuIG9wZW4gdGhlIHJvb3QsIG5vdCBldmVuIHdpdGggYGBPX1BBVEhgYC5cbitcbitBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5XG4rYGBBVF9GRENXRGBgLXJlbGF0aXZlIGxvb2t1cC4gQXMgd2l0aCBhbnkgd29ya2luZyBkaXJlY3RvcnkgdGhhdCBpc1xuK3VucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdCwgdGhlIGBgZ2V0Y3dkKDIpYGAgc3lzdGVtIGNhbGwgcmV0dXJuc1xuK2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLlxuK1xuK0EgcHJvY2VzcyB3aXRoIGl0cyByb290IGRpcmVjdG9yeSBpbiBmYWlsZnMgZmFpbHMgZXZlcnkgYWJzb2x1dGUgcGF0aFxuK2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseVxuK2xpbmtlZCBiaW5hcmllcy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZmFpbHMgZXhlYy5cbitcbitMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXRcbitpcyB0aGUgYGBmc19zdHJ1Y3RgYCBlcXVpdmFsZW50IG9mIGBgUkVTT0xWRV9CRU5FQVRIYGAuIFRoZSBwcm9jZXNzIG11c3RcbithbmNob3IgZXZlcnkgbG9va3VwIGF0IGEgZmlsZSBkZXNjcmlwdG9yIGl0IGV4cGxpY2l0bHkgaG9sZHMuXG4rXG4rRW50ZXJpbmdcbis9PT09PT09PVxuK1xuK2BgZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMClgYCByZXF1aXJlcyBgYENBUF9TWVNfQ0hST09UYGAgaW4gdGhlXG4rY2FsbGVyJ3MgdXNlciBuYW1lc3BhY2UsIG1pcnJvcmluZyBgYGNocm9vdCgyKWBgLiBVbnByaXZpbGVnZWQgY2FsbGVyc1xuK21heSBlbnRlciBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBob2xkOlxuK1xuKyogYGBub19uZXdfcHJpdnNgYCBpcyBzZXQ6IHNldHVpZCBiaW5hcmllcyBvbiByZWd1bGFyIG1vdW50cyByZW1haW5cbisgIHJlYWNoYWJsZSB2aWEgaW5oZXJpdGVkIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBleGVjdXRpbmcgdGhlbVxuKyAgd2l0aCBhbiB1bnVzYWJsZSByb290IGRpcmVjdG9yeSBpcyB0aGUgY2xhc3NpYyBjb25mdXNlZCBkZXB1dHkuXG4rXG4rKiBUaGUgY2FsbGVyIGlzIG5vdCBhbHJlYWR5IGNocm9vdGVkOiB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgd2hhdFxuKyAgY29uZmluZXMgYGAuLmBgIHJlc29sdXRpb24gYW5kIHRoZSBmYWlsZnMgcm9vdCBjYW4gbmV2ZXIgYmUgcmVhY2hlZCBieVxuKyAgd2Fsa2luZyB1cCBhIHJlYWwgbW91bnQgdHJlZSwgc28gbW92aW5nIHRoZSByb290IG9mIGEgY2hyb290ZWQgdGFzayB0b1xuKyAgZmFpbGZzIHdvdWxkIGFsbG93IGl0IHRvIGVzY2FwZSBpdHMgY2hyb290IHZpYSBgYG9wZW5hdChmZCwgXCIuLlwiKWBgLlxuK1xuKyogVGhlIGNhbGxlciBkb2VzIG5vdCBzaGFyZSBpdHMgYGBmc19zdHJ1Y3RgYDogYGBub19uZXdfcHJpdnNgYCBpc1xuKyAgY2hlY2tlZCBvbiB0aGUgY2FsbGluZyB0aHJlYWQsIGJ1dCB0aGUgcm9vdCBsaXZlcyBpbiB0aGUgYGBmc19zdHJ1Y3RgYC5cbisgIEEgYGBDTE9ORV9GU2BgIHNpYmxpbmcgd2l0aG91dCBgYG5vX25ld19wcml2c2BgIGNvdWxkIG90aGVyd2lzZSBleGVjdXRlXG4rICBhIHNldHVpZCBiaW5hcnkgd2l0aCB0aGUgZmFpbGZzIHJvb3QsIHNvIGVudHJ5IHJlcXVpcmVzIGBgZnMtXHUwMDNldXNlcnMgPT1cbisgIDFgYCwgdGhlIHNhbWUgcmVzdHJpY3Rpb24gYGBzZXRucygyKWBgIGFwcGxpZXMgZm9yIHRoZSBtb3VudCBhbmQgdXNlclxuKyAgbmFtZXNwYWNlcy5cbitcbitMZWF2aW5nXG4rPT09PT09PVxuK1xuK0JhY2tpbmcgb3V0IGlzIGN1cnJlbnRseSBoYXJkLCBidXQgdGhpcyBpcyBhIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50XG4raW1wbGVtZW50YXRpb24sIG5vdCBhIGd1YXJhbnRlZWQgaW50ZXJmYWNlLCBhbmQgbWF5IGJlIGxvb3NlbmVkIGxhdGVyLlxuK0ZvciBub3cgYSBwcm9jZXNzIHRoYXQgZW50ZXJlZCBmYWlsZnMgY291bnRzIGFzIGNocm9vdGVkLCBzbyBpdCBjYW5ub3RcbitjcmVhdGUgdXNlciBuYW1lc3BhY2VzIHRvIHJlZ2FpbiBgYENBUF9TWVNfQ0hST09UYGAsIGFuZCBgYGNocm9vdCgyKWBgXG4rb3IgYGBmY2hyb290KDIpYGAgYmFjayBvdXQgcmVxdWlyZSBgYENBUF9TWVNfQ0hST09UYGAuIFRoZSByZW1haW5pbmcgd2F5XG4rb3V0IHRvZGF5IGlzIGBgc2V0bnMoMilgYCB3aXRoIGEgbW91bnQgbmFtZXNwYWNlIGZpbGUgZGVzY3JpcHRvciwgd2hpY2hcbityZXF1aXJlcyBgYENBUF9TWVNfQURNSU5gYCBvdmVyIHRoZSB0YXJnZXQgbW91bnQgbmFtZXNwYWNlIGFzIHdlbGwgYXNcbitgYENBUF9TWVNfQ0hST09UYGAgYW5kIGBgQ0FQX1NZU19BRE1JTmBgIGluIHRoZSBjYWxsZXIncyB1c2VyIG5hbWVzcGFjZVxuK2FuZCByZXNldHMgYm90aCByb290IGFuZCB3b3JraW5nIGRpcmVjdG9yeS4gQSBwcm9jZXNzIHRoYXQgaG9sZHMgbm8gc3VjaFxuK2ZpbGUgZGVzY3JpcHRvciBhbmQgcmVzdHJpY3RzIGBgKmNoZGlyKClgYC9gYCpjaHJvb3QoKWBgL2Bgc2V0bnMoKWBgIHZpYVxuK3NlY2NvbXAgY2Fubm90IGN1cnJlbnRseSBnZXQgYmFjayBvdXQuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxuaW5kZXggMWY3MWNmMTU5NTQ3NmMuLjczNGE0NWU1MTY2NzVjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5AQCAtOTEsNiArOTEsNyBAQCBEb2N1bWVudGF0aW9uIGZvciBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy5cbiAgICBleHQzXG4gICAgZXh0NC9pbmRleFxuICAgIGYyZnNcbisgICBmYWlsZnNcbiAgICBnZnMyL2luZGV4XG4gICAgaGZzXG4gICAgaGZzcGx1c1xuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IGYzMWI3YWZmZmMzNDU5Li41MmUzNTM4Y2M3ZGY0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4rKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTUxMSwzICs1MTEsNCBAQFxuIDU3OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNTgwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDU4MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNTgyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibFxuaW5kZXggOTQzNTFlMjJiZmNmNzYuLjU1NzE3ZWQzMmMyN2U2IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcbisrKyBiL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsXG5AQCAtNDg2LDMgKzQ4Niw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxuaW5kZXggNjJkOTNkODhlMGZlZjguLmRmMmQxZDgyZmIzY2NmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxuKysrIGIvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxuQEAgLTQ4MywzICs0ODMsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IDI0ODkzNDI1NzEwMTRjLi5iYTdhNGQ4OTAzZDA0NCAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC00NzEsMyArNDcxLDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCAyMjNkMjYzMDM2MjcyNC4uYzU1YTVjOTZmNDliODIgMTAwNjQ0XG4tLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4rKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDc3LDMgKzQ3Nyw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsXG5pbmRleCA3NDMwNzE0ZTJiOGY4Ni4uOWFlODhlNGVhYzYxZWUgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmxcbkBAIC00MTAsMyArNDEwLDQgQEBcbiA0NjlcdG4zMlx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0bjMyXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdG4zMlx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0bjMyXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmxcbmluZGV4IDYzMGFhYjllNTQyNTkyLi44M2RjOTNhMDcxMmYxMiAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXG4rKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibFxuQEAgLTM4NiwzICszODYsNCBAQFxuIDQ2OVx0bjY0XHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRuNjRcdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0bjY0XHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRuNjRcdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibFxuaW5kZXggMTI4NjUzMTEyMjg0YjIuLjljNjI0MjljOWI3YjRlIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcbisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsXG5AQCAtNDU5LDMgKzQ1OSw0IEBAXG4gNDY5XHRvMzJcdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdG8zMlx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRvMzJcdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdG8zMlx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IGM2MzMxZGFkOTQ2MTNiLi44OGFkYzQwMTZjY2UwMSAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDcwLDMgKzQ3MCw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggNGZjYzdjNThhMTA1ZGMuLmNmYmI3MDAzOWZmMDA3IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTU2MiwzICs1NjIsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0bm9zcHVcdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggMDlhN2VmMDRkOTc5MWEuLjFiNDVlNjhhMjE3YmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTM5OCwzICszOTgsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggNzBiMzE1Y2JlNzEwYzIuLmFjZTA2OGRmZjBkZTAzIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDc1LDMgKzQ3NSw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCA3ZTcxYmY3ZmNkMTRmNy4uNWI5ZmUwZTgxNDBmMjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC01MTcsMyArNTE3LDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmxcbmluZGV4IGY4MzJlYmQyZDc5YjAwLi4yYzE3MmVmNDhkZmQzMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXG4rKysgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibFxuQEAgLTQ3NywzICs0NzcsNCBAQFxuIDQ2OVx0aTM4Nlx0ZmlsZV9zZXRhdHRyXHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGkzODZcdGxpc3Ruc1x0XHRcdHN5c19saXN0bnNcbiA0NzFcdGkzODZcdHJzZXFfc2xpY2VfeWllbGRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRpMzg2XHRmY2hyb290XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG5pbmRleCA1MjQxNTVkNjU1ZGExNS4uZDViNjA0NWIwMDkwY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibFxuKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbkBAIC0zOTYsNiArMzk2LDcgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0c3lzX2ZjaHJvb3RcbiBcbiAjXG4gIyBEdWUgdG8gYSBoaXN0b3JpY2FsIGRlc2lnbiBlcnJvciwgY2VydGFpbiBzeXNjYWxscyBhcmUgbnVtYmVyZWQgZGlmZmVyZW50bHlcbmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IGE5YmNhNGU0ODRkZWNmLi5kMzU0YmIyMzE3OTZjMiAxMDA2NDRcbi0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDQyLDMgKzQ0Miw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNzNiNmNhYjc3MzhlYTQgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuKysrIGIvZnMvTWFrZWZpbGVcbkBAIC0xNiw3ICsxNiw3IEBAIG9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG4gXHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG4gXHRcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcbiBcdFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcbi1cdFx0ZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vXG4rXHRcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xuIFxuIG9iai0kKENPTkZJR19CVUZGRVJfSEVBRClcdCs9IGJ1ZmZlci5vIG1wYWdlLm9cbiBvYmotJChDT05GSUdfUFJPQ19GUylcdFx0Kz0gcHJvY19uYW1lc3BhY2Uub1xuZGlmZiAtLWdpdCBhL2ZzL2RfcGF0aC5jIGIvZnMvZF9wYXRoLmNcbmluZGV4IGE0ODk1N2MwOTcxZWY2Li5jMjUzMDkwMDZkNWQ2ZCAxMDA2NDRcbi0tLSBhL2ZzL2RfcGF0aC5jXG4rKysgYi9mcy9kX3BhdGguY1xuQEAgLTI3OSw3ICsyNzksOCBAQCBjaGFyICpkX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbilcbiBcdCAqIGFuZCBpbnN0ZWFkIGhhdmUgZF9wYXRoIHJldHVybiB0aGUgbW91bnRlZCBwYXRoLlxuIFx0ICovXG4gXHRpZiAocGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2RuYW1lIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghSVNfUk9PVChwYXRoLVx1MDAzZWRlbnRyeSkgfHwgcGF0aC1cdTAwM2VkZW50cnkgIT0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3QpKVxuK1x0ICAgICghSVNfUk9PVChwYXRoLVx1MDAzZWRlbnRyeSkgfHwgcGF0aC1cdTAwM2VkZW50cnkgIT0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3QgfHxcbitcdCAgICAgZmFpbGZzX21udChwYXRoLVx1MDAzZW1udCkpKVxuIFx0XHRyZXR1cm4gcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2RuYW1lKHBhdGgtXHUwMDNlZGVudHJ5LCBidWYsIGJ1Zmxlbik7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvZnMvZmFpbGZzLmMgYi9mcy9mYWlsZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NmEzNmRhM2QyMzZkNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvZmFpbGZzLmNcbkBAIC0wLDAgKzEsMTY2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaHJpc3RpYW4gQnJhdW5lciBcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcdTAwM2UgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMvc3VwZXJfdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGF0aCBmYWlsZnNfcm9vdF9wYXRoID0ge307XG4rXG4rdm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0KnBhdGggPSBmYWlsZnNfcm9vdF9wYXRoO1xuK1x0cGF0aF9nZXQocGF0aCk7XG4rfVxuK1xuK2Jvb2wgZmFpbGZzX21udChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbit7XG4rXHRyZXR1cm4gbW50LVx1MDAzZW1udF9zYiA9PSBmYWlsZnNfcm9vdF9wYXRoLm1udC1cdTAwM2VtbnRfc2I7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmFpbGZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0ICAgICBpbnQgbWFzaylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmYWlsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdC8qIFVucmVhY2hhYmxlOiAtXHUwMDNlcGVybWlzc2lvbigpIGFscmVhZHkgZmFpbGVkIHRoZSB3YWxrLiAqL1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuK31cbitcbitzdGF0aWMgaW50IGZhaWxmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbitcdFx0XHQgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbitcdFx0XHQgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4rXHQucGVybWlzc2lvblx0PSBmYWlsZnNfcGVybWlzc2lvbixcbitcdC5sb29rdXBcdFx0PSBmYWlsZnNfbG9va3VwLFxuK1x0LmdldGF0dHJcdD0gZmFpbGZzX2dldGF0dHIsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX29wZXJhdGlvbnMgPSB7fTtcbitcbitzdGF0aWMgaW50IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHQvKlxuK1x0ICogVGhlIHJvb3QgaXMgb25seSBldmVyIHJlYWNoZWQgYXMgYSBwYXRoLXdhbGsgdGVybWluYWwgYnkganVtcGluZ1xuK1x0ICogdG8gaXQ6IGFzIFwiL1wiIHdoZW4gaXQgaXMgdGhlIGNhbGxlcidzIHJvb3QsIG9yIHRocm91Z2ggYVxuK1x0ICogL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3tyb290LGN3ZH0gbWFnaWMgbGluay4gLVx1MDAzZXBlcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxzXG4rXHQgKiBldmVyeSB3YWxrIG9mIGEgY29tcG9uZW50LCBidXQgYSBqdW1wIGxhbmRzIG9uIHRoZSByb290IHdpdGhvdXRcbitcdCAqIG9uZS4gUmVmdXNlIGhlcmUgdG9vIHNvIHRoZSByb290IGNhbm5vdCBiZSBwaW5uZWQgYnkgYW4gT19QQVRIXG4rXHQgKiBvcGVuIG9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLlxuK1x0ICovXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBjaGFyICpmYWlsZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4re1xuK1x0cmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sIFwiZmFpbGZzOi9cIik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuK1x0LmRfZG5hbWVcdFx0PSBmYWlsZnNfZG5hbWUsXG4rXHQuZF93ZWFrX3JldmFsaWRhdGVcdD0gZmFpbGZzX2Rfd2Vha19yZXZhbGlkYXRlLFxuK307XG4rXG4rc3RhdGljIGludCBmYWlsZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbitcdC5zdGF0ZnNcdD0gZmFpbGZzX3N0YXRmcyxcbit9O1xuK1xuK3N0YXRpYyBpbnQgZmFpbGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcbitcdHMtXHUwMDNlc19tYXhieXRlc1x0XHQ9IE1BWF9MRlNfRklMRVNJWkU7XG4rXHRzLVx1MDAzZXNfYmxvY2tzaXplXHRcdD0gUEFHRV9TSVpFO1xuK1x0cy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzXHQ9IFBBR0VfU0hJRlQ7XG4rXHRzLVx1MDAzZXNfbWFnaWNcdFx0PSBGQUlMX0ZTX01BR0lDO1xuK1x0cy1cdTAwM2VzX29wXHRcdFx0PSBcdTAwMjZmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucztcbitcdHMtXHUwMDNlc19leHBvcnRfb3BcdFx0PSBOVUxMO1xuK1x0cy1cdTAwM2VzX3hhdHRyXHRcdD0gTlVMTDtcbitcdHMtXHUwMDNlc190aW1lX2dyYW5cdFx0PSAxO1xuK1x0cy1cdTAwM2VzX2RfZmxhZ3NcdFx0PSAwO1xuK1xuK1x0aW5vZGUgPSBuZXdfaW5vZGUocyk7XG4rXHRpZiAoIWlub2RlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdC8qIGZhaWxmcyBzdXBwb3J0cyBubyBvcGVyYXRpb25zLi4uICovXG4rXHRpbm9kZS1cdTAwM2VpX21vZGVcdD0gU19JRkRJUjtcbitcdHNldF9ubGluayhpbm9kZSwgMik7XG4rXHRpbm9kZS1cdTAwM2VpX29wXHQ9IFx1MDAyNmZhaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbitcdGlub2RlLVx1MDAzZWlfZm9wXHQ9IFx1MDAyNmZhaWxmc19kaXJfb3BlcmF0aW9ucztcbitcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbitcdGlub2RlLVx1MDAzZWlfaW5vXHQ9IDE7XG4rXHQvKiAuLi4gYW5kIGlzIGltbXV0YWJsZS4gKi9cbitcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7XG4rXG4rXHRzZXRfZGVmYXVsdF9kX29wKHMsIFx1MDAyNmZhaWxmc19kZW50cnlfb3BlcmF0aW9ucyk7XG4rXHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbitcdGlmICghcy1cdTAwM2VzX3Jvb3QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmFpbGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBmYWlsZnNfZmlsbF9zdXBlcik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGZhaWxmc19jb250ZXh0X29wcyA9IHtcbitcdC5nZXRfdHJlZVx0PSBmYWlsZnNfZ2V0X3RyZWUsXG4rfTtcbitcbitzdGF0aWMgaW50IGZhaWxmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuK3tcbitcdGZjLVx1MDAzZW9wc1x0XHQ9IFx1MDAyNmZhaWxmc19jb250ZXh0X29wcztcbitcdGZjLVx1MDAzZWdsb2JhbFx0PSB0cnVlO1xuK1x0ZmMtXHUwMDNlc2JfZmxhZ3NcdHw9IFNCX05PVVNFUjtcbitcdGZjLVx1MDAzZXNfaWZsYWdzXHR8PSBTQl9JX05PRVhFQyB8IFNCX0lfTk9ERVY7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpXG4re1xuK1x0c3RydWN0IHBhdGggcGF0aDtcbitcbitcdGZhaWxmc19nZXRfcm9vdChcdTAwMjZwYXRoKTtcbitcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cGF0aCk7XG4rXHRwYXRoX3B1dChcdTAwMjZwYXRoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZmFpbGZzX2ZzX3R5cGUgPSB7XG4rXHQubmFtZVx0XHRcdD0gXCJmYWlsZnNcIixcbitcdC5pbml0X2ZzX2NvbnRleHRcdD0gZmFpbGZzX2luaXRfZnNfY29udGV4dCxcbitcdC5raWxsX3NiXHRcdD0ga2lsbF9hbm9uX3N1cGVyLFxuK307XG4rXG4rdm9pZCBfX2luaXQgZmFpbGZzX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcbitcbitcdC8qIEEgc2luZ2xlIGluc3RhbmNlIHRoYXQgaXMgbWVtYmVyIG9mIG5vIG1vdW50IG5hbWVzcGFjZS4gKi9cbitcdG1udCA9IGtlcm5fbW91bnQoXHUwMDI2ZmFpbGZzX2ZzX3R5cGUpO1xuK1x0aWYgKElTX0VSUihtbnQpKVxuK1x0XHRwYW5pYyhcIlZGUzogRmFpbGVkIHRvIGNyZWF0ZSBmYWlsZnNcIik7XG4rXG4rXHRmYWlsZnNfcm9vdF9wYXRoLm1udFx0PSBtbnQ7XG4rXHRmYWlsZnNfcm9vdF9wYXRoLmRlbnRyeVx0PSBtbnQtXHUwMDNlbW50X3Jvb3Q7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uNjdhYTA0NDQzNTFiMWEgMTAwNjQ0XG4tLS0gYS9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9pbnRlcm5hbC5oXG5AQCAtMzYyLDMgKzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBwaWRmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gdm9pZCBuc2ZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKTtcbit2b2lkIGZhaWxmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4rdm9pZCBfX2luaXQgZmFpbGZzX2luaXQodm9pZCk7XG4rYm9vbCBmYWlsZnNfbW50KGNvbnN0IHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbitpbnQgZmFpbGZzX2N1cnJlbnRfY2hkaXIodm9pZCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuY1xuaW5kZXggM2Q1Y2Q1YmYzYjA1MzcuLjg3YzM2NWYyZjgyYmEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZXNwYWNlLmNcbisrKyBiL2ZzL25hbWVzcGFjZS5jXG5AQCAtNjI3NCw2ICs2Mjc0LDcgQEAgdm9pZCBfX2luaXQgbW50X2luaXQodm9pZClcbiBcdHNobWVtX2luaXQoKTtcbiBcdGluaXRfcm9vdGZzKCk7XG4gXHRpbml0X21vdW50X3RyZWUoKTtcbitcdGZhaWxmc19pbml0KCk7XG4gfVxuIFxuIHZvaWQgcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTU3MCw5ICs1NzAsMTIgQEAgU1lTQ0FMTF9ERUZJTkUxKGNoZGlyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbiBcbiBTWVNDQUxMX0RFRklORTEoZmNoZGlyLCB1bnNpZ25lZCBpbnQsIGZkKVxuIHtcbi1cdENMQVNTKGZkX3JhdywgZikoZmQpO1xuIFx0aW50IGVycm9yO1xuIFxuK1x0aWYgKChpbnQpZmQgPT0gRkRfRkFJTEZTX1JPT1QpXG4rXHRcdHJldHVybiBmYWlsZnNfY3VycmVudF9jaGRpcigpO1xuK1xuK1x0Q0xBU1MoZmRfcmF3LCBmKShmZCk7XG4gXHRpZiAoZmRfZW1wdHkoZikpXG4gXHRcdHJldHVybiAtRUJBREY7XG4gXG5AQCAtNjE1LDYgKzYxOCw1MiBAQCBTWVNDQUxMX0RFRklORTEoY2hyb290LCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4rU1lTQ0FMTF9ERUZJTkUyKGZjaHJvb3QsIGludCwgZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHBhdGggcGF0aDtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChmbGFncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHtcbitcdFx0aWYgKCFuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0NIUk9PVCkpIHtcbitcdFx0XHRpZiAoIXRhc2tfbm9fbmV3X3ByaXZzKGN1cnJlbnQpKVxuK1x0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0XHQvKiBBIHNoYXJlZCBmc19zdHJ1Y3QgbGV0cyBhIHNpYmxpbmcgZXhlYyBzZXR1aWQgcGFzdCB0aGUgY2hlY2sgYWJvdmUuICovXG4rXHRcdFx0aWYgKGN1cnJlbnQtXHUwMDNlZnMtXHUwMDNldXNlcnMgIT0gMSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdC8qIE1vdmluZyB0aGUgcm9vdCB0byBmYWlsZnMgbGlmdHMgdGhlIG9sZCByb290J3MgXCIuLlwiIGJhcnJpZXIuICovXG4rXHRcdFx0aWYgKGN1cnJlbnRfY2hyb290ZWQoKSlcbitcdFx0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdH1cbitcdFx0ZmFpbGZzX2dldF9yb290KFx1MDAyNnBhdGgpO1xuK1x0fSBlbHNlIHtcbitcdFx0Q0xBU1MoZmRfcmF3LCBmKShmZCk7XG4rXHRcdGlmIChmZF9lbXB0eShmKSlcbitcdFx0XHRyZXR1cm4gLUVCQURGO1xuK1xuK1x0XHRpZiAoIWRfY2FuX2xvb2t1cChmZF9maWxlKGYpLVx1MDAzZWZfcGF0aC5kZW50cnkpKVxuK1x0XHRcdHJldHVybiAtRU5PVERJUjtcbitcbitcdFx0ZXJyb3IgPSBmaWxlX3Blcm1pc3Npb24oZmRfZmlsZShmKSwgTUFZX0VYRUMgfCBNQVlfQ0hESVIpO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0XHRpZiAoIW5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIENBUF9TWVNfQ0hST09UKSlcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0XHRwYXRoID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGg7XG4rXHRcdHBhdGhfZ2V0KFx1MDAyNnBhdGgpO1xuK1x0fVxuK1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX2Nocm9vdChcdTAwMjZwYXRoKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuK1x0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuIGludCBjaG1vZF9jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcbmluZGV4IDg3NGQ5MDY3YTQzYjUwLi44NDEzYjYyNGFkNDc4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oXG5AQCAtNDU3LDYgKzQ1Nyw3IEBAIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmFjY2Vzc2F0MihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBtb2RlLFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaGRpcih1bnNpZ25lZCBpbnQgZmQpO1xuIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hyb290KGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSk7XG4rYXNtbGlua2FnZSBsb25nIHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZCh1bnNpZ25lZCBpbnQgZmQsIHVtb2RlX3QgbW9kZSk7XG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2RhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXG4gXHRcdFx0ICAgICB1bW9kZV90IG1vZGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuaW5kZXggYTYyN2FjYzhmYjVmZWEuLjViN2U3N2E3YzczNmVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbkBAIC04NjMsOCArODYzLDEyIEBAIF9fU1lTQ0FMTChfX05SX2xpc3Rucywgc3lzX2xpc3RucylcbiAjZGVmaW5lIF9fTlJfcnNlcV9zbGljZV95aWVsZCA0NzFcbiBfX1NZU0NBTEwoX19OUl9yc2VxX3NsaWNlX3lpZWxkLCBzeXNfcnNlcV9zbGljZV95aWVsZClcbiBcbisvKiBmcy9vcGVuLmMgKi9cbisjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcbitfX1NZU0NBTEwoX19OUl9mY2hyb290LCBzeXNfZmNocm9vdClcbitcbiAjdW5kZWYgX19OUl9zeXNjYWxsc1xuLSNkZWZpbmUgX19OUl9zeXNjYWxscyA0NzJcbisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXG4gXG4gLypcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaFxuaW5kZXggYWFkZmJmNmUwY2IzYTAuLmU0M2UzZGUzZTllZTQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oXG5AQCAtMTI0LDYgKzEyNCw3IEBAIHN0cnVjdCBkZWxlZ2F0aW9uIHtcbiBcbiAjZGVmaW5lIEZEX1BJREZTX1JPT1RcdFx0XHQtMTAwMDIgLyogUm9vdCBvZiB0aGUgcGlkZnMgZmlsZXN5c3RlbSAqL1xuICNkZWZpbmUgRkRfTlNGU19ST09UXHRcdFx0LTEwMDAzIC8qIFJvb3Qgb2YgdGhlIG5zZnMgZmlsZXN5c3RlbSAqL1xuKyNkZWZpbmUgRkRfRkFJTEZTX1JPT1RcdFx0XHQtMTAwMDQgLyogUm9vdCBvZiB0aGUgZmFpbGZzIGZpbGVzeXN0ZW0gKi9cbiAjZGVmaW5lIEZEX0lOVkFMSURcdFx0XHQtMTAwMDkgLyogSW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6IC0xMDAwMCAtIEVCQURGID0gLTEwMDA5ICovXG4gXG4gLyogR2VuZXJpYyBmbGFncyBmb3IgdGhlICphdCgyKSBmYW1pbHkgb2Ygc3lzY2FsbHMuICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaFxuaW5kZXggNGYyZGE5MzVhNzZjY2EuLmZkNWYwZTk1NjQ4ZWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oXG5AQCAtMTA1LDUgKzEwNSw2IEBAXG4gI2RlZmluZSBQSURfRlNfTUFHSUNcdFx0MHg1MDQ5NDQ0Nlx0LyogXCJQSURGXCIgKi9cbiAjZGVmaW5lIEdVRVNUX01FTUZEX01BR0lDXHQweDQ3NGQ0NTRkXHQvKiBcIkdNRU1cIiAqL1xuICNkZWZpbmUgTlVMTF9GU19NQUdJQ1x0XHQweDRFNTU0QzRDXHQvKiBcIk5VTExcIiAqL1xuKyNkZWZpbmUgRkFJTF9GU19NQUdJQ1x0XHQweDQ2NDE0OTRDXHQvKiBcIkZBSUxcIiAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01BR0lDX0hfXyAqL1xuZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5pbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0XG4tLS0gYS9zY3JpcHRzL3N5c2NhbGwudGJsXG4rKysgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5AQCAtNDEyLDMgKzQxMiw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbmluZGV4IGE2MjdhY2M4ZmI1ZmVhLi41YjdlNzdhN2M3MzZlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG5AQCAtODYzLDggKzg2MywxMiBAQCBfX1NZU0NBTEwoX19OUl9saXN0bnMsIHN5c19saXN0bnMpXG4gI2RlZmluZSBfX05SX3JzZXFfc2xpY2VfeWllbGQgNDcxXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXG4gXG4rLyogZnMvb3Blbi5jICovXG4rI2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXG4rX19TWVNDQUxMKF9fTlJfZmNocm9vdCwgc3lzX2ZjaHJvb3QpXG4rXG4gI3VuZGVmIF9fTlJfc3lzY2FsbHNcbi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDcyXG4rI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3M1xuIFxuIC8qXG4gICogMzIgYml0IHN5c3RlbXMgdHJhZGl0aW9uYWxseSB1c2VkIGRpZmZlcmVudFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG5pbmRleCA1MjQxNTVkNjU1ZGExNS4uZDViNjA0NWIwMDkwY2MgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG4rKysgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG5AQCAtMzk2LDYgKzM5Niw3IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdHN5c19mY2hyb290XG4gXG4gI1xuICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5XG5kaWZmIC0tZ2l0IGEvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibCBiL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmxcbmluZGV4IDdhNDJiMzJiNjU3NzY3Li4wYWI1MzE2MDUxMjAyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmxcbisrKyBiL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmxcbkBAIC00MTIsMyArNDEyLDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuQEAgLTMzLDYgKzMzLDcgQEAgVEFSR0VUUyArPSBmY2htb2RhdDJcbiBUQVJHRVRTICs9IGZpbGVzeXN0ZW1zXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9iaW5kZXJmc1xuIFRBUkdFVFMgKz0gZmlsZXN5c3RlbXMvZXBvbGxcbitUQVJHRVRTICs9IGZpbGVzeXN0ZW1zL2ZhaWxmc1xuIFRBUkdFVFMgKz0gZmlsZXN5c3RlbXMvZmF0XG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9vdmVybGF5ZnNcbiBUQVJHRVRTICs9IGZpbGVzeXN0ZW1zL3N0YXRtb3VudFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzLy5naXRpZ25vcmVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2QzYjVkODg0ZDdlYTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlXG5AQCAtMCwwICsxLDIgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitmYWlsZnNfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYzVkOThiNGZlNzI1ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL01ha2VmaWxlXG5AQCAtMCwwICsxLDUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rQ0ZMQUdTICs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXG4rVEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3RcbitcbitpbmNsdWRlIC4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9mYWlsZnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2M0NjFkYzQ4M2E5OTdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9mYWlsZnNfdGVzdC5jXG5AQCAtMCwwICsxLDU4MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3ByY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3Zmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi8uLi9rc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjaWZuZGVmIF9fTlJfZmNocm9vdFxuKyNkZWZpbmUgX19OUl9mY2hyb290IDQ3MlxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgRkRfUElERlNfUk9PVFxuKyNkZWZpbmUgRkRfUElERlNfUk9PVCAtMTAwMDJcbisjZW5kaWZcbitcbisjaWZuZGVmIEZEX05TRlNfUk9PVFxuKyNkZWZpbmUgRkRfTlNGU19ST09UIC0xMDAwM1xuKyNlbmRpZlxuK1xuKyNpZm5kZWYgRkRfRkFJTEZTX1JPT1RcbisjZGVmaW5lIEZEX0ZBSUxGU19ST09UIC0xMDAwNFxuKyNlbmRpZlxuK1xuKyNkZWZpbmUgTk9CT0RZX1VJRCA2NTUzNFxuK1xuKy8qIENoaWxkIHNlbnRpbmVsIGV4aXQgY29kZTogdGhlIGV4ZWMgd2FzIGJsb2NrZWQgYXMgZXhwZWN0ZWQuICovXG4rI2RlZmluZSBGQUlMRlNfRVhFQ19CTE9DS0VEIDk5XG4rXG4rLyogU3RhY2sgZm9yIHRoZSBDTE9ORV9GUyBoZWxwZXIgaW4gZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0LiAqL1xuKyNkZWZpbmUgRkFJTEZTX0NMT05FX1NUQUNLICg2NCAqIDEwMjQpXG4rXG4rc3RhdGljIGludCBzeXNfZmNocm9vdChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX2ZjaHJvb3QsIGZkLCBmbGFncyk7XG4rfVxuK1xuKy8qXG4rICogUmF3IHN5c2NhbGw6IGdsaWJjJ3MgZ2V0Y3dkKCkgcmVqZWN0cyB0aGUga2VybmVsJ3MgXCIodW5yZWFjaGFibGUpXCJcbisgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxuKyAqL1xuK3N0YXRpYyBsb25nIHN5c19nZXRjd2QoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX2dldGN3ZCwgYnVmLCBzaXplKTtcbit9XG4rXG4rc3RhdGljIGludCBkcm9wX3RvX25vYm9keSh2b2lkKVxuK3tcbitcdHJldHVybiBzZXRyZXN1aWQoTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCk7XG4rfVxuK1xuKy8qIFBhcmtlZCBDTE9ORV9GUyBjaGlsZDsgZGllcyB3aXRoIGl0cyBwYXJlbnQgc28gaXQgbmV2ZXIgbGVha3MuICovXG4rc3RhdGljIGludCBmYWlsZnNfcGFyayh2b2lkICphcmcpXG4re1xuK1x0KHZvaWQpYXJnO1xuK1x0cHJjdGwoUFJfU0VUX1BERUFUSFNJRywgU0lHS0lMTCk7XG4rXHRwYXVzZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi9cbitzdGF0aWMgaW50IGVsZl9oYXNfYWJzb2x1dGVfaW50ZXJwKGludCBmZClcbit7XG4rXHRFbGZXKEVoZHIpIGVoZHI7XG4rXHRFbGZXKFBoZHIpIHBoZHI7XG4rXHRjaGFyIGludGVycDtcbitcdGludCBpO1xuK1xuK1x0aWYgKHByZWFkKGZkLCBcdTAwMjZlaGRyLCBzaXplb2YoZWhkciksIDApICE9IHNpemVvZihlaGRyKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAobWVtY21wKGVoZHIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVoZHIuZV9waG51bTsgaSsrKSB7XG4rXHRcdGlmIChwcmVhZChmZCwgXHUwMDI2cGhkciwgc2l6ZW9mKHBoZHIpLFxuK1x0XHRcdCAgZWhkci5lX3Bob2ZmICsgaSAqIHNpemVvZihwaGRyKSkgIT0gc2l6ZW9mKHBoZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRpZiAocGhkci5wX3R5cGUgIT0gUFRfSU5URVJQKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAocHJlYWQoZmQsIFx1MDAyNmludGVycCwgMSwgcGhkci5wX29mZnNldCkgIT0gMSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIGludGVycCA9PSAnLyc7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rVEVTVChmY2hkaXJfc2VudGluZWwpXG4re1xuK1x0Y2hhciBidWZbUEFUSF9NQVhdO1xuK1x0aW50IGZkO1xuK1xuK1x0QVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApO1xuK1xuK1x0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdC4gKi9cbitcdEFTU0VSVF9HVChzeXNfZ2V0Y3dkKGJ1Ziwgc2l6ZW9mKGJ1ZikpLCAwKTtcbitcdEFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgXCIodW5yZWFjaGFibGUpXCIsIDEzKSwgMCk7XG4rXG4rXHQvKiBFdmVyeSBBVF9GRENXRC1yZWxhdGl2ZSBsb29rdXAgZmFpbHMuICovXG4rXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcImZvb1wiLCBPX1JET05MWSksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcIi5cIiwgT19SRE9OTFkpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCIuLlwiLCBPX1JET05MWSksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcImZvb1wiLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogVGhlIGN3ZCBjYW5ub3QgYmUgcGlubmVkIGJ5IGZvbGxvd2luZyAvcHJvYy9zZWxmL2N3ZCBpbnRvIGl0LiAqL1xuK1x0QVNTRVJUX0VRKG9wZW4oXCIvcHJvYy9zZWxmL2N3ZFwiLCBPX1BBVEgpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkIHNvIGFic29sdXRlIGxvb2t1cHMga2VlcCB3b3JraW5nLi4uICovXG4rXHRmZCA9IG9wZW4oXCIvXCIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKGZkLCAwKTtcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK1xuK1x0LyogLi4uIGFuZCB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2FuIGJlIHJlY292ZXJlZC4gKi9cbitcdEFTU0VSVF9FUShjaGRpcihcIi9cIiksIDApO1xuK1x0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xuK1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwiL1wiKSwgMCk7XG4rfVxuK1xuK1RFU1QoZmNoZGlyX3JlamVjdHNfb3RoZXJfc2VudGluZWxzKVxuK3tcbitcdEFTU0VSVF9FUShmY2hkaXIoRkRfUElERlNfUk9PVCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xuK1x0QVNTRVJUX0VRKGZjaGRpcihGRF9OU0ZTX1JPT1QpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcbitcdEFTU0VSVF9FUShmY2hkaXIoLTEwMDA5KSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9mbGFncylcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDEpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4rXG4rXHRmZCA9IG9wZW4oXCIvXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDEpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbit9XG4rXG4rVEVTVChmY2hyb290X2JhZF9mZClcbit7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoLTEsIDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcbitcbitcdC8qIE9ubHkgRkRfRkFJTEZTX1JPT1QgaXMgYSB2YWxpZCBzZW50aW5lbC4gKi9cbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9QSURGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfTlNGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9ub3RkaXIpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL3Byb2Mvc2VsZi9zdGF0dXNcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX0dFKGZkLCAwKTtcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU5PVERJUik7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3JlYWxmZF9yZXF1aXJlc19jYXApXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0aWYgKGdldGV1aWQoKSA9PSAwKVxuK1x0XHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XG4rXG4rXHRmZCA9IG9wZW4oXCIvXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTtcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK31cbitcbitURVNUKGZjaHJvb3RfcmVhbGZkKVxuK3tcbitcdGNoYXIgdGVtcGxhdGVbXSA9IFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcIjtcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHRzdHJ1Y3Qgc3RhdCBzdDtcbitcdGludCB0bXBmZCwgZGZkLCBmZDtcbitcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwiZmNocm9vdCgpIHdpdGggYSByZWd1bGFyIGZkIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCIpO1xuK1xuK1x0dG1wZmQgPSBvcGVuKFwiL3RtcFwiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UodG1wZmQsIDApO1xuK1xuK1x0QVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTtcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9jYW5hcnlcIiwgdGVtcGxhdGUpO1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXG4rXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UoZGZkLCAwKTtcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChkZmQsIDApLCAwKTtcbitcdEFTU0VSVF9FUShjbG9zZShkZmQpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzdGF0KFwiL2NhbmFyeVwiLCBcdTAwMjZzdCksIDApO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cDogZGlyZmQtYW5jaG9yZWQgSS9PIHdvcmtzIHdpdGggdGhlIG5ldyByb290LiAqL1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL2NhbmFyeVwiLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpKTtcbitcdHVubGlua2F0KHRtcGZkLCBwYXRoLCAwKTtcbitcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpLCBBVF9SRU1PVkVESVIpO1xuK31cbitcbitURVNUKGZjaHJvb3Rfc2VudGluZWwpXG4re1xuK1x0Y2hhciB0ZW1wbGF0ZVtdID0gXCIvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFwiO1xuK1x0c3RydWN0IHN0YXQgcmVhbHJvb3QsIHN0O1xuK1x0c3RydWN0IHN0YXRmcyBzZnM7XG4rXHRjaGFyIGJ1ZltQQVRIX01BWF07XG4rXHRpbnQgcHJvY2ZkLCB0bXBmZCwgZGZkLCBmZDtcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBmaWxlX2hhbmRsZSBoYW5kbGU7XG4rXHRcdHVuc2lnbmVkIGNoYXIgZl9oYW5kbGVbTUFYX0hBTkRMRV9TWl07XG4rXHR9IGZoO1xuK1x0aW50IG1udGlkO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcIik7XG4rXG4rXHRBU1NFUlRfRVEoc3RhdChcIi9cIiwgXHUwMDI2cmVhbHJvb3QpLCAwKTtcbitcdHByb2NmZCA9IG9wZW4oXCIvcHJvY1wiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UocHJvY2ZkLCAwKTtcbitcdHRtcGZkID0gb3BlbihcIi90bXBcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKHRtcGZkLCAwKTtcbitcdEFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7XG4rXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShkZmQsIDApO1xuK1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHQvKiBBYnNvbHV0ZSBsb29rdXBzIGZhaWwuICovXG4rXHRBU1NFUlRfRVEob3BlbihcIi9ldGMvcGFzc3dkXCIsIE9fUkRPTkxZKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbitcdEFTU0VSVF9FUShta2RpcihcIi9mb29cIiwgMDcwMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHJvb3QgY2Fubm90IGJlIHJlZmVyZW5jZWQgYXQgYWxsIC0gbm90IGV2ZW4gYW4gT19QQVRIIG9wZW4sXG4rXHQgKiB3aGljaCBza2lwcyAtXHUwMDNlcGVybWlzc2lvbigpLCBiZWNhdXNlIGl0IGxhbmRzIG9uIHRoZSByb290IGFzIGFcbitcdCAqIGp1bXBlZCB3YWxrIHRlcm1pbmFsIHRoYXQgLVx1MDAzZWRfd2Vha19yZXZhbGlkYXRlKCkgcmVmdXNlcy5cbitcdCAqL1xuK1x0QVNTRVJUX0VRKG9wZW4oXCIvXCIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1x0QVNTRVJUX0VRKG9wZW4oXCIvXCIsIE9fUEFUSCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXHRBU1NFUlRfRVEoc3RhdGZzKFwiL1wiLCBcdTAwMjZzZnMpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LypcbitcdCAqIEl0IGNhbm5vdCBiZSBwaW5uZWQgYnkgZm9sbG93aW5nIC9wcm9jL3NlbGYvcm9vdCBpbnRvIGl0IGVpdGhlclxuK1x0ICogKG9ubHkgdGhlIHJvb3QgaXMgaW4gZmFpbGZzIGhlcmUsIHNvIHNlbGYvY3dkIGlzIHN0aWxsIHJlYWwpLlxuK1x0ICovXG4rXHRBU1NFUlRfRVEob3BlbmF0KHByb2NmZCwgXCJzZWxmL3Jvb3RcIiwgT19QQVRIKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbitcbitcdC8qIE5vciBlbmNvZGVkIGludG8gYSBmaWxlIGhhbmRsZS4gKi9cbitcdGZoLmhhbmRsZS5oYW5kbGVfYnl0ZXMgPSBNQVhfSEFORExFX1NaO1xuK1x0QVNTRVJUX0VRKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBcIi9cIiwgXHUwMDI2ZmguaGFuZGxlLCBcdTAwMjZtbnRpZCwgMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXG4rXHQvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgbm93IHVucmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuICovXG4rXHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4rXHRBU1NFUlRfRVEoc3RybmNtcChidWYsIFwiKHVucmVhY2hhYmxlKVwiLCAxMyksIDApO1xuK1xuK1x0LyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi9cbitcdGZkID0gb3BlbmF0KEFUX0ZEQ1dELCBcIi5cIiwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRmZCA9IG9wZW5hdChkZmQsIFwiY2FuYXJ5XCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKHdyaXRlKGZkLCBcInhcIiwgMSksIDEpO1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRmZCA9IG9wZW5hdChkZmQsIFwiY2FuYXJ5XCIsIE9fUkRPTkxZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbitcbitcdC8qIFwiLi5cIiB3YWxrcyBjbGFtcCBhdCB0aGUgdG9wIG9mIHRoZSBtb3VudCB0cmVlLCBub3QgYXQgZmFpbGZzLiAqL1xuK1x0ZmQgPSBvcGVuYXQoQVRfRkRDV0QsIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi5cIiwgT19QQVRIKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoZnN0YXQoZmQsIFx1MDAyNnN0KSwgMCk7XG4rXHRBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpO1xuK1x0QVNTRVJUX0VRKHN0LnN0X2lubywgcmVhbHJvb3Quc3RfaW5vKTtcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK1xuK1x0LyogcmVhZGxpbmsgb2YgdGhlIG1hZ2ljIGxpbmsgc3RpbGwgd29ya3M6IGl0IGRvZXMgbm90IGZvbGxvdy4gKi9cbitcdHJldCA9IHJlYWRsaW5rYXQocHJvY2ZkLCBcInNlbGYvcm9vdFwiLCBidWYsIHNpemVvZihidWYpIC0gMSk7XG4rXHRBU1NFUlRfR1QocmV0LCAwKTtcbitcdGJ1ZltyZXRdID0gJ1xcMCc7XG4rXHRUSF9MT0coXCIvcHJvYy9zZWxmL3Jvb3QgcG9pbnRzIHRvICclcydcIiwgYnVmKTtcbitcdC8qIGRfcGF0aCgpIG5hbWVzIHRoZSBmYWlsZnMgcm9vdCBzeW50aGV0aWNhbGx5LCBuZXZlciBhcyBhIHJlYWwgcGF0aC4gKi9cbitcdEFTU0VSVF9FUShzdHJjbXAoYnVmLCBcImZhaWxmczovXCIpLCAwKTtcbitcbitcdC8qIEJ1dCBmb2xsb3dpbmcgaXQgaW50byBmYWlsZnMgaXMgcmVmdXNlZC4gKi9cbitcdEFTU0VSVF9FUShmc3RhdGF0KHByb2NmZCwgXCJzZWxmL3Jvb3RcIiwgXHUwMDI2c3QsIDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCB2aWEgdGhlIHByZS1vcGVuZWQgZGlyZmRzLiAqL1xuK1x0dW5saW5rYXQoZGZkLCBcImNhbmFyeVwiLCAwKTtcbitcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpLCBBVF9SRU1PVkVESVIpO1xuK31cbitcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfYWJzb2x1dGVfc3ltbGluaylcbit7XG4rXHRjaGFyIHRlbXBsYXRlW10gPSBcIi90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYXCI7XG4rXHRpbnQgdG1wZmQsIGRmZCwgZmQ7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcIik7XG4rXG4rXHR0bXBmZCA9IG9wZW4oXCIvdG1wXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4rXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuK1x0ZGZkID0gb3Blbih0ZW1wbGF0ZSwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UoZGZkLCAwKTtcbitcbitcdGZkID0gb3BlbmF0KGRmZCwgXCJ0YXJnZXRcIiwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEFTU0VSVF9FUShzeW1saW5rYXQoXCJ0YXJnZXRcIiwgZGZkLCBcInJlbFwiKSwgMCk7XG4rXHRBU1NFUlRfRVEoc3ltbGlua2F0KFwiL2V0Y1wiLCBkZmQsIFwiYWJzXCIpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuK1xuK1x0LyogUmVsYXRpdmUgc3ltbGlua3Mga2VlcCByZXNvbHZpbmcgd2l0aGluIHRoZSBkaXJmZC1hbmNob3JlZCB3YWxrLi4uICovXG4rXHRmZCA9IG9wZW5hdChkZmQsIFwicmVsXCIsIE9fUkRPTkxZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbitcbitcdC8qIC4uLiBhYnNvbHV0ZSBzeW1saW5rcyByZXN0YXJ0IHRoZSB3YWxrIGF0IHRoZSBmYWlsZnMgcm9vdC4gKi9cbitcdEFTU0VSVF9FUShvcGVuYXQoZGZkLCBcImFic1wiLCBPX1JET05MWSksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXG4rXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXG4rXHR1bmxpbmthdChkZmQsIFwiYWJzXCIsIDApO1xuK1x0dW5saW5rYXQoZGZkLCBcInJlbFwiLCAwKTtcbitcdHVubGlua2F0KGRmZCwgXCJ0YXJnZXRcIiwgMCk7XG4rXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXCIvdG1wL1wiKSwgQVRfUkVNT1ZFRElSKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX3VucHJpdmlsZWdlZClcbit7XG4rXHRjaGFyIGJ1ZltQQVRIX01BWF07XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpID09IDApXG4rXHRcdEFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTtcbitcbitcdC8qIFdpdGhvdXQgbm9fbmV3X3ByaXZzIGVudGVyaW5nIGZhaWxmcyBpcyBub3QgYWxsb3dlZC4uLiAqL1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XG4rXG4rXHQvKiAuLi4gd2l0aCBub19uZXdfcHJpdnMgc2V0IGl0IGlzIGFsbG93ZWQuICovXG4rXHRBU1NFUlRfRVEocHJjdGwoUFJfU0VUX05PX05FV19QUklWUywgMSwgMCwgMCwgMCksIDApO1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEob3BlbihcIi9ldGMvcGFzc3dkXCIsIE9fUkRPTkxZKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbitcbitcdC8qIFRoZSB0YXNrIGNvdW50cyBhcyBjaHJvb3RlZDogbm8gdXNlciBuYW1lc3BhY2VzIGFueW1vcmUuICovXG4rXHRBU1NFUlRfRVEodW5zaGFyZShDTE9ORV9ORVdVU0VSKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XG4rXG4rXHQvKiBXaXRoIGJvdGggcm9vdCBhbmQgY3dkIGluIGZhaWxmcyBnZXRjd2QoKSByZXBvcnRzIFwiL1wiLiAqL1xuK1x0QVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApO1xuK1x0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xuK1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwiL1wiKSwgMCk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9yZWplY3RlZF93aGVuX2Nocm9vdGVkKVxuK3tcbitcdGNoYXIgdGVtcGxhdGVbXSA9IFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcIjtcbitcdGludCB0bXBmZDtcbitcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwiY2hyb290KCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcIik7XG4rXG4rXHR0bXBmZCA9IG9wZW4oXCIvdG1wXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4rXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGNocm9vdCh0ZW1wbGF0ZSksIDApO1xuK1x0QVNTRVJUX0VRKGNoZGlyKFwiL1wiKSwgMCk7XG4rXG4rXHQvKiBSZW1vdmUgdGhlIGphaWwgd2hpbGUgc3RpbGwgcHJpdmlsZWdlZDsgc3RpY2t5IC90bXAgYmxvY2tzIG5vYm9keS4gKi9cbitcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpLCBBVF9SRU1PVkVESVIpO1xuK1xuK1x0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuK1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbitcbitcdC8qIEFuIHVucHJpdmlsZWdlZCBjaHJvb3RlZCB0YXNrIG11c3Qgbm90IGxpZnQgaXRzIFwiLi5cIiBiYXJyaWVyLiAqL1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0KVxuK3tcbitcdGNoYXIgc3RhY2tbRkFJTEZTX0NMT05FX1NUQUNLXTtcbitcdHBpZF90IHBpZDtcbitcbitcdGlmIChnZXRldWlkKCkgPT0gMClcbitcdFx0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuK1xuK1x0LyogQSBDTE9ORV9GUyBzaWJsaW5nIHNoYXJlcyB0aGUgZnNfc3RydWN0OiBidW1wIGZzLVx1MDAzZXVzZXJzIHRvIDIuICovXG4rXHRwaWQgPSBjbG9uZShmYWlsZnNfcGFyaywgc3RhY2sgKyBzaXplb2Yoc3RhY2spLCBDTE9ORV9GUyB8IFNJR0NITEQsXG4rXHRcdCAgICBOVUxMKTtcbitcdEFTU0VSVF9HRShwaWQsIDApO1xuK1xuK1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBBIHNpYmxpbmcgd2l0aG91dCBub19uZXdfcHJpdnMgY291bGQgZXhlYyBhIHNldHVpZCBiaW5hcnkgd2l0aFxuK1x0ICogdGhlIGZhaWxmcyByb290LCBzbyBhIHNoYXJlZCBmc19zdHJ1Y3QgaXMgcmVmdXNlZCBldmVuIHdpdGhcbitcdCAqIG5vX25ld19wcml2cyBzZXQuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbitcbitcdEFTU0VSVF9FUShraWxsKHBpZCwgU0lHS0lMTCksIDApO1xuK1x0QVNTRVJUX0VRKHdhaXRwaWQocGlkLCBOVUxMLCAwKSwgcGlkKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX25vX292ZXJtb3VudClcbit7XG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcIm1vdW50aW5nIHJlcXVpcmVzIHByaXZpbGVnZXNcIik7XG4rXG4rXHQvKlxuK1x0ICogQ29udGFpbiB0aGUgYmxhc3QgcmFkaXVzOiBpZiBmYWlsZnMgZXZlciByZWdyZXNzZWQgYW5kIFwiL1wiXG4rXHQgKiByZXNvbHZlZCB0byB0aGUgcmVhbCByb290LCB0aGUgdG1wZnMgbW91bnQgYmVsb3cgbXVzdCBub3QgdG91Y2hcbitcdCAqIHRoZSBob3N0LiBBIHByaXZhdGUgbW91bnQgbmFtZXNwYWNlIGtlZXBzIGl0IGxvY2FsIHRvIHRoaXMgY2hpbGQuXG4rXHQgKi9cbitcdEFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV05TKSwgMCk7XG4rXHRBU1NFUlRfRVEobW91bnQoTlVMTCwgXCIvXCIsIE5VTEwsIE1TX1JFQyB8IE1TX1BSSVZBVEUsIE5VTEwpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuK1xuK1x0LypcbitcdCAqIE5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mIHRoZSBmYWlsZnMgcm9vdC4gSXQgY2Fubm90IGV2ZW5cbitcdCAqIGJlIG5hbWVkIGFzIGEgbW91bnQgdGFyZ2V0OiByZXNvbHZpbmcgXCIvXCIgaXMgcmVmdXNlZCBiZWZvcmUgdGhlXG4rXHQgKiBtb3VudCBtYWNoaW5lcnkgKHdoaWNoLCBmYWlsZnMgYmVpbmcgaW4gbm8gbW91bnQgbmFtZXNwYWNlLCB3b3VsZFxuK1x0ICogcmVqZWN0IGl0IGFueXdheSkgaXMgZXZlciByZWFjaGVkLiBvcGVuX3RyZWUoT1BFTl9UUkVFX0NMT05FKSBpc1xuK1x0ICogbGlrZXdpc2UgbW9vdCBzaW5jZSBubyBmZCB0byB0aGUgcm9vdCBjYW4gYmUgb2J0YWluZWQuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShtb3VudChcIm5vbmVcIiwgXCIvXCIsIFwidG1wZnNcIiwgMCwgTlVMTCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9zZXRuc19lc2NhcGUpXG4re1xuK1x0c3RydWN0IHN0YXQgcmVhbHJvb3QsIHN0O1xuK1x0aW50IG5zZmQ7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInNldG5zKCkgdG8gYSBtb3VudCBuYW1lc3BhY2UgcmVxdWlyZXMgcHJpdmlsZWdlc1wiKTtcbitcbitcdEFTU0VSVF9FUShzdGF0KFwiL1wiLCBcdTAwMjZyZWFscm9vdCksIDApO1xuK1x0bnNmZCA9IG9wZW4oXCIvcHJvYy9zZWxmL25zL21udFwiLCBPX1JET05MWSk7XG4rXHRBU1NFUlRfR0UobnNmZCwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbitcdEFTU0VSVF9FUShvcGVuKFwiL2V0Y1wiLCBPX1BBVEgpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogQSBtb3VudCBuYW1lc3BhY2UgZmQgaXMgdGhlIGtleSBvdXQ6IGl0IHJlc2V0cyByb290IGFuZCBjd2QuICovXG4rXHRBU1NFUlRfRVEoc2V0bnMobnNmZCwgQ0xPTkVfTkVXTlMpLCAwKTtcbitcdEFTU0VSVF9FUShjbG9zZShuc2ZkKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoc3RhdChcIi9cIiwgXHUwMDI2c3QpLCAwKTtcbitcdEFTU0VSVF9FUShzdC5zdF9kZXYsIHJlYWxyb290LnN0X2Rldik7XG4rXHRBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pO1xuK31cbitcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlYylcbit7XG4rXHRwaWRfdCBwaWQ7XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCIpO1xuK1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHQvKlxuK1x0ICogRXhlYyBpbiBhIGNoaWxkOiBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIHdvdWxkIHJlcGxhY2UgdGhlIHRlc3RcbitcdCAqIGltYWdlIGFuZCBpdHMgZXhpdCBjb2RlIHdvdWxkIG5vdCBtYXRjaCB0aGUgc2VudGluZWwgYmVsb3cuXG4rXHQgKi9cbitcdHBpZCA9IGZvcmsoKTtcbitcdEFTU0VSVF9HRShwaWQsIDApO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGV4ZWNsKFwiL2Jpbi90cnVlXCIsIFwidHJ1ZVwiLCBOVUxMKTtcbitcdFx0X2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTtcbitcdH1cbitcdEFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkKTtcbitcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTtcbitcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBGQUlMRlNfRVhFQ19CTE9DS0VEKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX2V4ZWNfaW50ZXJwcmV0ZXIpXG4re1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcmd2W10gPSB7IFwiZmFpbGZzX3Rlc3RcIiwgTlVMTCB9O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbnZwW10gPSB7IE5VTEwgfTtcbitcdHBpZF90IHBpZDtcbitcdGludCBzdGF0dXMsIGV4ZWZkO1xuK1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCIpO1xuK1xuK1x0LyogRXhlYyBvdXJzZWx2ZXM6IHRoZSBvbmUgYmluYXJ5IGd1YXJhbnRlZWQgdG8gYmUgYXJvdW5kLiAqL1xuK1x0ZXhlZmQgPSBvcGVuKFwiL3Byb2Mvc2VsZi9leGVcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX0dFKGV4ZWZkLCAwKTtcbitcdGlmICghZWxmX2hhc19hYnNvbHV0ZV9pbnRlcnAoZXhlZmQpKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ0ZXN0IGJpbmFyeSBoYXMgbm8gYWJzb2x1dGUgUFRfSU5URVJQIGludGVycHJldGVyXCIpO1xuK1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGJpbmFyeSBpdHNlbGYgbmVlZHMgbm8gcGF0aCBsb29rdXAgLSBpdCBpcyBleGVjdXRlZCBieSBmZCAtXG4rXHQgKiBidXQgbG9hZGluZyBpdCBmYWlscyBvbiBvcGVuaW5nIHRoZSBhYnNvbHV0ZSBQVF9JTlRFUlBcbitcdCAqIGludGVycHJldGVyLiBSdW4gaXQgaW4gYSBjaGlsZCBzbyBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIGRvZXNcbitcdCAqIG5vdCByZXBsYWNlIHRoZSB0ZXN0IGltYWdlIGFuZCBtYXNxdWVyYWRlIGFzIGEgcGFzcy5cbitcdCAqL1xuK1x0cGlkID0gZm9yaygpO1xuK1x0QVNTRVJUX0dFKHBpZCwgMCk7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0c3lzY2FsbChfX05SX2V4ZWN2ZWF0LCBleGVmZCwgXCJcIiwgYXJndiwgZW52cCwgQVRfRU1QVFlfUEFUSCk7XG4rXHRcdF9leGl0KGVycm5vID09IEVPUE5PVFNVUFAgPyBGQUlMRlNfRVhFQ19CTE9DS0VEIDogMSk7XG4rXHR9XG4rXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XG4rXHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRkFJTEZTX0VYRUNfQkxPQ0tFRCk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9pbmhlcml0ZWQpXG4re1xuK1x0cGlkX3QgcGlkO1xuK1x0aW50IHN0YXR1cztcbitcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwicHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFwiKTtcbitcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0QVNTRVJUX0dFKHBpZCwgMCk7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0aWYgKG9wZW4oXCIvZXRjXCIsIE9fUEFUSCkgIT0gLTEgfHwgZXJybm8gIT0gRU9QTk9UU1VQUClcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XG4rXHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgMCk7XG4rfVxuK1xuK1RFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTowNTozNi41MTY1NjM2ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjE2NDMzNzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgJ2ZhaWxmcycgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgZmFpbGZzYCwgYSBmaWxlc3lzdGVtIGRlc2lnbmVkIHRvIGZhaWwgZXZlcnkgb3BlcmF0aW9uLiBUaGUga2V5IGFkZGl0aW9ucyBoZXJlIGFyZSB0aGUgbmV3IGBmY2hyb290YCBzeXN0ZW0gY2FsbCBhbmQgdGhlIG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGlzIG1lYW5zIHdlJ3ZlIG1vZGlmaWVkIGNvcmUgVkZTIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gY29uZmlybSBpdHMgcmVhY2hhYmlsaXR5IGFuZCBvdmVyYWxsIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gYGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApYCBvciBgZmNoZGlyKEZEX0ZBSUxGU19ST09UKWAgYXJlIGNsZWFyIGVudHJ5IHBvaW50cy5cblxuVGhlIGBmYWlsZnMuY2AgY29kZSBjb25maXJtcyB0aGlzLiBGdW5jdGlvbmFsaXR5LXdpc2UsIGBmYWlsZnNgIGl0c2VsZiBpcyBzaW1wbGUg4oCTIGl0IGNvbnNpc3RlbnRseSByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIEhvd2V2ZXIsIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBuYW1lbHkgdGhyb3VnaCBgZF9wYXRoYCwgYGZjaGRpcmAsIGFuZCBgZmNocm9vdGAuIFRoaXMgdGVsbHMgbWUgd2Ugc2hvdWxkIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2UgaW50ZXJmYWNlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6XG5cbiogICBgc3lzX2ZjaHJvb3RgOiBUaGlzIGlzIHRoZSBuZXcgc3lzdGVtIGNhbGwsIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlIG5lZWQgdG8gdGVzdC5cbiogICBgc3lzX2ZjaGRpcmA6IFRoZSBleGlzdGluZyBgZmNoZGlyYCBzeXNjYWxsIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBgRkRfRkFJTEZTX1JPT1RgLCBtYWtpbmcgaXQgYSBrZXkgZm9jdXMgdG9vLlxuKiAgIGBmYWlsZnNfY3VycmVudF9jaGRpcmA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gYHN5c19mY2hkaXJgIHdoZW4gdGhlIGBGRF9GQUlMRlNfUk9PVGAgaXMgcGFzc2VkIHRvIGl0LlxuKiAgIGBmYWlsZnNfZ2V0X3Jvb3RgOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBzeXNfZmNocm9vdGAuXG4qICAgYGZhaWxmc19tbnRgOiBUaGlzIGlzIGxpa2VseSB0aGUgbW91bnQgZnVuY3Rpb24uXG5cbk5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkLCBzaW5jZSBpdCdzIHVuY29uZGl0aW9uYWxseSBidWlsdC1pbi5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzeXN0ZW0gY2FsbCAoYGZjaHJvb3RgKSBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBhbiBleGlzdGluZyBvbmUgKGBmY2hkaXJgKSB0byBpbnRlcmFjdCB3aXRoIGEgbmV3IFwiZmFpbGluZ1wiIGZpbGVzeXN0ZW0gY3JlYXRlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBpbnRlcmZhY2VzIHRvIGxvb2sgZm9yIHJlZ3Jlc3Npb25zLCB2dWxuZXJhYmlsaXRpZXMgc3VjaCBhcyBjaHJvb3QgZXNjYXBlcywgb3IgdW5leHBlY3RlZCBWRlMgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwNiwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6MDU6NTIuNjgwOTAyOTMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19mY2hyb290XCIsXG4gICAgXCJzeXNfZmNoZGlyXCIsXG4gICAgXCJmYWlsZnNfY3VycmVudF9jaGRpclwiLFxuICAgIFwiZmFpbGZzX2dldF9yb290XCIsXG4gICAgXCJmYWlsZnNfbW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBrZXJuZWwtaW50ZXJuYWwgZmlsZXN5c3RlbSBgZmFpbGZzYCBhbmQgYSBuZXcgc3lzdGVtIGNhbGwgYGZjaHJvb3RgLiBJdCBhbHNvIG1vZGlmaWVzIGBmY2hkaXJgIHRvIGFjY2VwdCBhIG5ldyBtYWdpYyBmaWxlIGRlc2NyaXB0b3IgYEZEX0ZBSUxGU19ST09UYC4gVGhlc2UgYXJlIGNvcmUgVkZTIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2ZjaHJvb3RcIixcbiAgICBcInN5c19mY2hkaXJcIixcbiAgICBcImZhaWxmc19jdXJyZW50X2NoZGlyXCIsXG4gICAgXCJmYWlsZnNfZ2V0X3Jvb3RcIixcbiAgICBcImZhaWxmc19tbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgZXNjYXBpbmcgY2hyb290LCByZWZlcmVuY2UgbGVha3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 18:29:13 +0000 UTC FinishedAt: 2026-07-25 19:05:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "series_id": "35b8a334-fa49-46c4-bea7-b24519cabfa7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "sys_fchroot", "sys_fchdir", "failfs_current_chdir", "failfs_get_root", "failfs_mnt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX2ZjaHJvb3QmIzM0OywKICAgICYjMzQ7c3lzX2ZjaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfY3VycmVudF9jaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7ZmFpbGZzX21udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxY2E0YTMwM2IwOTRiNmM4YjQyYzM3NzAyNzhiOTNhODRiMTdjZDA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTk6MDU6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIxZmYyZGI3OTQxZGYyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZhaWxmcy5yc3RcbkBAIC0wLDAgJiM0MzsxLDczIEBAXG4mIzQzOy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mzs9PT09PT1cbiYjNDM7ZmFpbGZzXG4mIzQzOz09PT09PVxuJiM0MztcbiYjNDM7ZmFpbGZzIGlzIGEga2VybmVsLWludGVybmFsIGZpbGVzeXN0ZW0gdGhhdCBmYWlscyBldmVyeSBvcGVyYXRpb25cbiYjNDM7cmVhY2hpbmcgaXQgd2l0aCBgYEVPUE5PVFNVUFBgYC4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIG51bGxmcy4gV2hlcmVcbiYjNDM7bnVsbGZzIGlzIHBlcm1hbmVudGx5IGVtcHR5LCBmYWlsZnMgbWVhbnMgXCYjMzQ7bm90aGluZyBpcyBzdXBwb3J0ZWQgaGVyZVwmIzM0Oy5cbiYjNDM7SXQgY2Fubm90IGJlIG1vdW50ZWQgZnJvbSB1c2Vyc3BhY2UsIG5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mXG4mIzQzO2l0LiBJdCBjYW5ub3QgYmUgY2xvbmVkLlxuJiM0MztcbiYjNDM7VGhlIG9ubHkgd2F5IGludG8gaXQgaXMgdGhlIGBgRkRfRkFJTEZTX1JPT1RgYCBmaWxlIGRlc2NyaXB0b3Igc2VudGluZWwgd2hpY2hcbiYjNDM7aXMgdW5kZXJzdG9vZCBieSBgYGZjaGRpcigyKWBgIGFuZCBgYGZjaHJvb3QoMilgYC5cbiYjNDM7XG4mIzQzO1NlbWFudGljc1xuJiM0Mzs9PT09PT09PT1cbiYjNDM7XG4mIzQzO0V2ZXJ5IHBhdGggd2FsayBvZiBhIGNvbXBvbmVudCB0aHJvdWdoIGZhaWxmcyBmYWlscyB3aXRoXG4mIzQzO2BgRU9QTk9UU1VQUGBgIGJlZm9yZSB0aGF0IGNvbXBvbmVudCBpcyBwYXJzZWQsIGluY2x1ZGluZyBgYC5gYC5cbiYjNDM7XG4mIzQzO05vIHBhdGggbG9va3VwIGNhbiBvcGVuIHRoZSByb290LCBub3QgZXZlbiB3aXRoIGBgT19QQVRIYGAuXG4mIzQzO1xuJiM0MztBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5XG4mIzQzO2BgQVRfRkRDV0RgYC1yZWxhdGl2ZSBsb29rdXAuIEFzIHdpdGggYW55IHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgaXNcbiYjNDM7dW5yZWFjaGFibGUgZnJvbSB0aGUgcHJvY2VzcyByb290LCB0aGUgYGBnZXRjd2QoMilgYCBzeXN0ZW0gY2FsbCByZXR1cm5zXG4mIzQzO2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLlxuJiM0MztcbiYjNDM7QSBwcm9jZXNzIHdpdGggaXRzIHJvb3QgZGlyZWN0b3J5IGluIGZhaWxmcyBmYWlscyBldmVyeSBhYnNvbHV0ZSBwYXRoXG4mIzQzO2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseVxuJiM0MztsaW5rZWQgYmluYXJpZXMuIEluIG90aGVyIHdvcmRzLCB0aGlzIGZhaWxzIGV4ZWMuXG4mIzQzO1xuJiM0MztMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXRcbiYjNDM7aXMgdGhlIGBgZnNfc3RydWN0YGAgZXF1aXZhbGVudCBvZiBgYFJFU09MVkVfQkVORUFUSGBgLiBUaGUgcHJvY2VzcyBtdXN0XG4mIzQzO2FuY2hvciBldmVyeSBsb29rdXAgYXQgYSBmaWxlIGRlc2NyaXB0b3IgaXQgZXhwbGljaXRseSBob2xkcy5cbiYjNDM7XG4mIzQzO0VudGVyaW5nXG4mIzQzOz09PT09PT09XG4mIzQzO1xuJiM0MztgYGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApYGAgcmVxdWlyZXMgYGBDQVBfU1lTX0NIUk9PVGBgIGluIHRoZVxuJiM0MztjYWxsZXImIzM5O3MgdXNlciBuYW1lc3BhY2UsIG1pcnJvcmluZyBgYGNocm9vdCgyKWBgLiBVbnByaXZpbGVnZWQgY2FsbGVyc1xuJiM0MzttYXkgZW50ZXIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgaG9sZDpcbiYjNDM7XG4mIzQzOyogYGBub19uZXdfcHJpdnNgYCBpcyBzZXQ6IHNldHVpZCBiaW5hcmllcyBvbiByZWd1bGFyIG1vdW50cyByZW1haW5cbiYjNDM7ICByZWFjaGFibGUgdmlhIGluaGVyaXRlZCBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9ycyBhbmQgZXhlY3V0aW5nIHRoZW1cbiYjNDM7ICB3aXRoIGFuIHVudXNhYmxlIHJvb3QgZGlyZWN0b3J5IGlzIHRoZSBjbGFzc2ljIGNvbmZ1c2VkIGRlcHV0eS5cbiYjNDM7XG4mIzQzOyogVGhlIGNhbGxlciBpcyBub3QgYWxyZWFkeSBjaHJvb3RlZDogdGhlIHJvb3QgZGlyZWN0b3J5IGlzIHdoYXRcbiYjNDM7ICBjb25maW5lcyBgYC4uYGAgcmVzb2x1dGlvbiBhbmQgdGhlIGZhaWxmcyByb290IGNhbiBuZXZlciBiZSByZWFjaGVkIGJ5XG4mIzQzOyAgd2Fsa2luZyB1cCBhIHJlYWwgbW91bnQgdHJlZSwgc28gbW92aW5nIHRoZSByb290IG9mIGEgY2hyb290ZWQgdGFzayB0b1xuJiM0MzsgIGZhaWxmcyB3b3VsZCBhbGxvdyBpdCB0byBlc2NhcGUgaXRzIGNocm9vdCB2aWEgYGBvcGVuYXQoZmQsIFwmIzM0Oy4uXCYjMzQ7KWBgLlxuJiM0MztcbiYjNDM7KiBUaGUgY2FsbGVyIGRvZXMgbm90IHNoYXJlIGl0cyBgYGZzX3N0cnVjdGBgOiBgYG5vX25ld19wcml2c2BgIGlzXG4mIzQzOyAgY2hlY2tlZCBvbiB0aGUgY2FsbGluZyB0aHJlYWQsIGJ1dCB0aGUgcm9vdCBsaXZlcyBpbiB0aGUgYGBmc19zdHJ1Y3RgYC5cbiYjNDM7ICBBIGBgQ0xPTkVfRlNgYCBzaWJsaW5nIHdpdGhvdXQgYGBub19uZXdfcHJpdnNgYCBjb3VsZCBvdGhlcndpc2UgZXhlY3V0ZVxuJiM0MzsgIGEgc2V0dWlkIGJpbmFyeSB3aXRoIHRoZSBmYWlsZnMgcm9vdCwgc28gZW50cnkgcmVxdWlyZXMgYGBmcy1cdTAwM2V1c2VycyA9PVxuJiM0MzsgIDFgYCwgdGhlIHNhbWUgcmVzdHJpY3Rpb24gYGBzZXRucygyKWBgIGFwcGxpZXMgZm9yIHRoZSBtb3VudCBhbmQgdXNlclxuJiM0MzsgIG5hbWVzcGFjZXMuXG4mIzQzO1xuJiM0MztMZWF2aW5nXG4mIzQzOz09PT09PT1cbiYjNDM7XG4mIzQzO0JhY2tpbmcgb3V0IGlzIGN1cnJlbnRseSBoYXJkLCBidXQgdGhpcyBpcyBhIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50XG4mIzQzO2ltcGxlbWVudGF0aW9uLCBub3QgYSBndWFyYW50ZWVkIGludGVyZmFjZSwgYW5kIG1heSBiZSBsb29zZW5lZCBsYXRlci5cbiYjNDM7Rm9yIG5vdyBhIHByb2Nlc3MgdGhhdCBlbnRlcmVkIGZhaWxmcyBjb3VudHMgYXMgY2hyb290ZWQsIHNvIGl0IGNhbm5vdFxuJiM0MztjcmVhdGUgdXNlciBuYW1lc3BhY2VzIHRvIHJlZ2FpbiBgYENBUF9TWVNfQ0hST09UYGAsIGFuZCBgYGNocm9vdCgyKWBgXG4mIzQzO29yIGBgZmNocm9vdCgyKWBgIGJhY2sgb3V0IHJlcXVpcmUgYGBDQVBfU1lTX0NIUk9PVGBgLiBUaGUgcmVtYWluaW5nIHdheVxuJiM0MztvdXQgdG9kYXkgaXMgYGBzZXRucygyKWBgIHdpdGggYSBtb3VudCBuYW1lc3BhY2UgZmlsZSBkZXNjcmlwdG9yLCB3aGljaFxuJiM0MztyZXF1aXJlcyBgYENBUF9TWVNfQURNSU5gYCBvdmVyIHRoZSB0YXJnZXQgbW91bnQgbmFtZXNwYWNlIGFzIHdlbGwgYXNcbiYjNDM7YGBDQVBfU1lTX0NIUk9PVGBgIGFuZCBgYENBUF9TWVNfQURNSU5gYCBpbiB0aGUgY2FsbGVyJiMzOTtzIHVzZXIgbmFtZXNwYWNlXG4mIzQzO2FuZCByZXNldHMgYm90aCByb290IGFuZCB3b3JraW5nIGRpcmVjdG9yeS4gQSBwcm9jZXNzIHRoYXQgaG9sZHMgbm8gc3VjaFxuJiM0MztmaWxlIGRlc2NyaXB0b3IgYW5kIHJlc3RyaWN0cyBgYCpjaGRpcigpYGAvYGAqY2hyb290KClgYC9gYHNldG5zKClgYCB2aWFcbiYjNDM7c2VjY29tcCBjYW5ub3QgY3VycmVudGx5IGdldCBiYWNrIG91dC5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5pbmRleCAxZjcxY2YxNTk1NDc2Yy4uNzM0YTQ1ZTUxNjY3NWMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBEb2N1bWVudGF0aW9uIGZvciBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy5cbiAgICBleHQzXG4gICAgZXh0NC9pbmRleFxuICAgIGYyZnNcbiYjNDM7ICAgZmFpbGZzXG4gICAgZ2ZzMi9pbmRleFxuICAgIGhmc1xuICAgIGhmc3BsdXNcbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCBmMzFiN2FmZmZjMzQ1OS4uNTJlMzUzOGNjN2RmNDEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC01MTEsMyAmIzQzOzUxMSw0IEBAXG4gNTc5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA1ODBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNTgxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NTgyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibFxuaW5kZXggOTQzNTFlMjJiZmNmNzYuLjU1NzE3ZWQzMmMyN2U2IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsXG5AQCAtNDg2LDMgJiM0Mzs0ODYsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmwgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsXG5pbmRleCA2MmQ5M2Q4OGUwZmVmOC4uZGYyZDFkODJmYjNjY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsXG5AQCAtNDgzLDMgJiM0Mzs0ODMsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCAyNDg5MzQyNTcxMDE0Yy4uYmE3YTRkODkwM2QwNDQgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDcxLDMgJiM0Mzs0NzEsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCAyMjNkMjYzMDM2MjcyNC4uYzU1YTVjOTZmNDliODIgMTAwNjQ0XG4tLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDc3LDMgJiM0Mzs0NzcsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmxcbmluZGV4IDc0MzA3MTRlMmI4Zjg2Li45YWU4OGU0ZWFjNjFlZSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxuQEAgLTQxMCwzICYjNDM7NDEwLDQgQEBcbiA0NjlcdG4zMlx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0bjMyXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdG4zMlx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdG4zMlx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXG5pbmRleCA2MzBhYWI5ZTU0MjU5Mi4uODNkYzkzYTA3MTJmMTIgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmxcbkBAIC0zODYsMyAmIzQzOzM4Niw0IEBAXG4gNDY5XHRuNjRcdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdG42NFx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRuNjRcdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRuNjRcdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibFxuaW5kZXggMTI4NjUzMTEyMjg0YjIuLjljNjI0MjljOWI3YjRlIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsXG5AQCAtNDU5LDMgJiM0Mzs0NTksNCBAQFxuIDQ2OVx0bzMyXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRvMzJcdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0bzMyXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0bzMyXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggYzYzMzFkYWQ5NDYxM2IuLjg4YWRjNDAxNmNjZTAxIDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC00NzAsMyAmIzQzOzQ3MCw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IDRmY2M3YzU4YTEwNWRjLi5jZmJiNzAwMzlmZjAwNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC01NjIsMyAmIzQzOzU2Miw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRub3NwdVx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggMDlhN2VmMDRkOTc5MWEuLjFiNDVlNjhhMjE3YmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTM5OCwzICYjNDM7Mzk4LDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCA3MGIzMTVjYmU3MTBjMi4uYWNlMDY4ZGZmMGRlMDMgMTAwNjQ0XG4tLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC00NzUsMyAmIzQzOzQ3NSw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggN2U3MWJmN2ZjZDE0ZjcuLjViOWZlMGU4MTQwZjI2IDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNTE3LDMgJiM0Mzs1MTcsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmxcbmluZGV4IGY4MzJlYmQyZDc5YjAwLi4yYzE3MmVmNDhkZmQzMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibFxuQEAgLTQ3NywzICYjNDM7NDc3LDQgQEBcbiA0NjlcdGkzODZcdGZpbGVfc2V0YXR0clx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRpMzg2XHRsaXN0bnNcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRpMzg2XHRyc2VxX3NsaWNlX3lpZWxkXHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGkzODZcdGZjaHJvb3RcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbmluZGV4IDUyNDE1NWQ2NTVkYTE1Li5kNWI2MDQ1YjAwOTBjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibFxuQEAgLTM5Niw2ICYjNDM7Mzk2LDcgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdHN5c19mY2hyb290XG4gXG4gI1xuICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5XG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCBhOWJjYTRlNDg0ZGVjZi4uZDM1NGJiMjMxNzk2YzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTQ0MiwzICYjNDM7NDQyLDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuJiM0Mzs0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNzNiNmNhYjc3MzhlYTQgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvTWFrZWZpbGVcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBvYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuIFx0XHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxuIFx0XHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXG4gXHRcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXG4tXHRcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMub1xuJiM0MztcdFx0ZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vIGZhaWxmcy5vXG4gXG4gb2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKVx0JiM0Mzs9IGJ1ZmZlci5vIG1wYWdlLm9cbiBvYmotJChDT05GSUdfUFJPQ19GUylcdFx0JiM0Mzs9IHByb2NfbmFtZXNwYWNlLm9cbmRpZmYgLS1naXQgYS9mcy9kX3BhdGguYyBiL2ZzL2RfcGF0aC5jXG5pbmRleCBhNDg5NTdjMDk3MWVmNi4uYzI1MzA5MDA2ZDVkNmQgMTAwNjQ0XG4tLS0gYS9mcy9kX3BhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZF9wYXRoLmNcbkBAIC0yNzksNyAmIzQzOzI3OSw4IEBAIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKVxuIFx0ICogYW5kIGluc3RlYWQgaGF2ZSBkX3BhdGggcmV0dXJuIHRoZSBtb3VudGVkIHBhdGguXG4gXHQgKi9cbiBcdGlmIChwYXRoLVx1MDAzZWRlbnRyeS1cdTAwM2VkX29wIFx1MDAyNlx1MDAyNiBwYXRoLVx1MDAzZWRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfZG5hbWUgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFJU19ST09UKHBhdGgtXHUwMDNlZGVudHJ5KSB8fCBwYXRoLVx1MDAzZWRlbnRyeSAhPSBwYXRoLVx1MDAzZW1udC1cdTAwM2VtbnRfcm9vdCkpXG4mIzQzO1x0ICAgICghSVNfUk9PVChwYXRoLVx1MDAzZWRlbnRyeSkgfHwgcGF0aC1cdTAwM2VkZW50cnkgIT0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3QgfHxcbiYjNDM7XHQgICAgIGZhaWxmc19tbnQocGF0aC1cdTAwM2VtbnQpKSlcbiBcdFx0cmV0dXJuIHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9kbmFtZShwYXRoLVx1MDAzZWRlbnRyeSwgYnVmLCBidWZsZW4pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZhaWxmcy5jIGIvZnMvZmFpbGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjZhMzZkYTNkMjM2ZDZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhaWxmcy5jXG5AQCAtMCwwICYjNDM7MSwxNjYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2hyaXN0aWFuIEJyYXVuZXIgXHUwMDNjYnJhdW5lckBrZXJuZWwub3JnXHUwMDNlICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMvc3VwZXJfdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBhdGggZmFpbGZzX3Jvb3RfcGF0aCA9IHt9O1xuJiM0MztcbiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHQqcGF0aCA9IGZhaWxmc19yb290X3BhdGg7XG4mIzQzO1x0cGF0aF9nZXQocGF0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgZmFpbGZzX21udChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtbnQtXHUwMDNlbW50X3NiID09IGZhaWxmc19yb290X3BhdGgubW50LVx1MDAzZW1udF9zYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYWlsZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0ICAgICBpbnQgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhaWxmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0LyogVW5yZWFjaGFibGU6IC1cdTAwM2VwZXJtaXNzaW9uKCkgYWxyZWFkeSBmYWlsZWQgdGhlIHdhbGsuICovXG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmFpbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuJiM0MztcdC5wZXJtaXNzaW9uXHQ9IGZhaWxmc19wZXJtaXNzaW9uLFxuJiM0MztcdC5sb29rdXBcdFx0PSBmYWlsZnNfbG9va3VwLFxuJiM0MztcdC5nZXRhdHRyXHQ9IGZhaWxmc19nZXRhdHRyLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFpbGZzX2Rpcl9vcGVyYXRpb25zID0ge307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJvb3QgaXMgb25seSBldmVyIHJlYWNoZWQgYXMgYSBwYXRoLXdhbGsgdGVybWluYWwgYnkganVtcGluZ1xuJiM0MztcdCAqIHRvIGl0OiBhcyBcJiMzNDsvXCYjMzQ7IHdoZW4gaXQgaXMgdGhlIGNhbGxlciYjMzk7cyByb290LCBvciB0aHJvdWdoIGFcbiYjNDM7XHQgKiAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uve3Jvb3QsY3dkfSBtYWdpYyBsaW5rLiAtXHUwMDNlcGVybWlzc2lvbigpIGFscmVhZHkgZmFpbHNcbiYjNDM7XHQgKiBldmVyeSB3YWxrIG9mIGEgY29tcG9uZW50LCBidXQgYSBqdW1wIGxhbmRzIG9uIHRoZSByb290IHdpdGhvdXRcbiYjNDM7XHQgKiBvbmUuIFJlZnVzZSBoZXJlIHRvbyBzbyB0aGUgcm9vdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGFuIE9fUEFUSFxuJiM0MztcdCAqIG9wZW4gb3IgZW5jb2RlZCBpbnRvIGEgZmlsZSBoYW5kbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY2hhciAqZmFpbGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sIFwmIzM0O2ZhaWxmczovXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmYWlsZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4mIzQzO1x0LmRfZG5hbWVcdFx0PSBmYWlsZnNfZG5hbWUsXG4mIzQzO1x0LmRfd2Vha19yZXZhbGlkYXRlXHQ9IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbiYjNDM7XHQuc3RhdGZzXHQ9IGZhaWxmc19zdGF0ZnMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XG4mIzQzO1x0cy1cdTAwM2VzX21heGJ5dGVzXHRcdD0gTUFYX0xGU19GSUxFU0laRTtcbiYjNDM7XHRzLVx1MDAzZXNfYmxvY2tzaXplXHRcdD0gUEFHRV9TSVpFO1xuJiM0MztcdHMtXHUwMDNlc19ibG9ja3NpemVfYml0c1x0PSBQQUdFX1NISUZUO1xuJiM0MztcdHMtXHUwMDNlc19tYWdpY1x0XHQ9IEZBSUxfRlNfTUFHSUM7XG4mIzQzO1x0cy1cdTAwM2VzX29wXHRcdFx0PSBcdTAwMjZmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucztcbiYjNDM7XHRzLVx1MDAzZXNfZXhwb3J0X29wXHRcdD0gTlVMTDtcbiYjNDM7XHRzLVx1MDAzZXNfeGF0dHJcdFx0PSBOVUxMO1xuJiM0MztcdHMtXHUwMDNlc190aW1lX2dyYW5cdFx0PSAxO1xuJiM0MztcdHMtXHUwMDNlc19kX2ZsYWdzXHRcdD0gMDtcbiYjNDM7XG4mIzQzO1x0aW5vZGUgPSBuZXdfaW5vZGUocyk7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHQvKiBmYWlsZnMgc3VwcG9ydHMgbm8gb3BlcmF0aW9ucy4uLiAqL1xuJiM0MztcdGlub2RlLVx1MDAzZWlfbW9kZVx0PSBTX0lGRElSO1xuJiM0MztcdHNldF9ubGluayhpbm9kZSwgMik7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9vcFx0PSBcdTAwMjZmYWlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9mb3BcdD0gXHUwMDI2ZmFpbGZzX2Rpcl9vcGVyYXRpb25zO1xuJiM0MztcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2lub1x0PSAxO1xuJiM0MztcdC8qIC4uLiBhbmQgaXMgaW1tdXRhYmxlLiAqL1xuJiM0MztcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7XG4mIzQzO1xuJiM0MztcdHNldF9kZWZhdWx0X2Rfb3AocywgXHUwMDI2ZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zKTtcbiYjNDM7XHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbiYjNDM7XHRpZiAoIXMtXHUwMDNlc19yb290KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhaWxmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBmYWlsZnNfZmlsbF9zdXBlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGZhaWxmc19jb250ZXh0X29wcyA9IHtcbiYjNDM7XHQuZ2V0X3RyZWVcdD0gZmFpbGZzX2dldF90cmVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYWlsZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiYjNDM7e1xuJiM0MztcdGZjLVx1MDAzZW9wc1x0XHQ9IFx1MDAyNmZhaWxmc19jb250ZXh0X29wcztcbiYjNDM7XHRmYy1cdTAwM2VnbG9iYWxcdD0gdHJ1ZTtcbiYjNDM7XHRmYy1cdTAwM2VzYl9mbGFnc1x0fD0gU0JfTk9VU0VSO1xuJiM0MztcdGZjLVx1MDAzZXNfaWZsYWdzXHR8PSBTQl9JX05PRVhFQyB8IFNCX0lfTk9ERVY7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBmYWlsZnNfY3VycmVudF9jaGRpcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhdGggcGF0aDtcbiYjNDM7XG4mIzQzO1x0ZmFpbGZzX2dldF9yb290KFx1MDAyNnBhdGgpO1xuJiM0MztcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cGF0aCk7XG4mIzQzO1x0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBmYWlsZnNfZnNfdHlwZSA9IHtcbiYjNDM7XHQubmFtZVx0XHRcdD0gXCYjMzQ7ZmFpbGZzXCYjMzQ7LFxuJiM0MztcdC5pbml0X2ZzX2NvbnRleHRcdD0gZmFpbGZzX2luaXRfZnNfY29udGV4dCxcbiYjNDM7XHQua2lsbF9zYlx0XHQ9IGtpbGxfYW5vbl9zdXBlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcbiYjNDM7XG4mIzQzO1x0LyogQSBzaW5nbGUgaW5zdGFuY2UgdGhhdCBpcyBtZW1iZXIgb2Ygbm8gbW91bnQgbmFtZXNwYWNlLiAqL1xuJiM0MztcdG1udCA9IGtlcm5fbW91bnQoXHUwMDI2ZmFpbGZzX2ZzX3R5cGUpO1xuJiM0MztcdGlmIChJU19FUlIobW50KSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogRmFpbGVkIHRvIGNyZWF0ZSBmYWlsZnNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmYWlsZnNfcm9vdF9wYXRoLm1udFx0PSBtbnQ7XG4mIzQzO1x0ZmFpbGZzX3Jvb3RfcGF0aC5kZW50cnlcdD0gbW50LVx1MDAzZW1udF9yb290O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcbmluZGV4IDM1NWQ5M2Y5MjIwODYxLi42N2FhMDQ0NDM1MWIxYSAxMDA2NDRcbi0tLSBhL2ZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ludGVybmFsLmhcbkBAIC0zNjIsMyAmIzQzOzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBwaWRmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gdm9pZCBuc2ZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKTtcbiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpO1xuJiM0Mzt2b2lkIF9faW5pdCBmYWlsZnNfaW5pdCh2b2lkKTtcbiYjNDM7Ym9vbCBmYWlsZnNfbW50KGNvbnN0IHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiYjNDM7aW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li44N2MzNjVmMmY4MmJhMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTYyNzQsNiAmIzQzOzYyNzQsNyBAQCB2b2lkIF9faW5pdCBtbnRfaW5pdCh2b2lkKVxuIFx0c2htZW1faW5pdCgpO1xuIFx0aW5pdF9yb290ZnMoKTtcbiBcdGluaXRfbW91bnRfdHJlZSgpO1xuJiM0MztcdGZhaWxmc19pbml0KCk7XG4gfVxuIFxuIHZvaWQgcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uY1xuQEAgLTU3MCw5ICYjNDM7NTcwLDEyIEBAIFNZU0NBTExfREVGSU5FMShjaGRpciwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpXG4gXG4gU1lTQ0FMTF9ERUZJTkUxKGZjaGRpciwgdW5zaWduZWQgaW50LCBmZClcbiB7XG4tXHRDTEFTUyhmZF9yYXcsIGYpKGZkKTtcbiBcdGludCBlcnJvcjtcbiBcbiYjNDM7XHRpZiAoKGludClmZCA9PSBGRF9GQUlMRlNfUk9PVClcbiYjNDM7XHRcdHJldHVybiBmYWlsZnNfY3VycmVudF9jaGRpcigpO1xuJiM0MztcbiYjNDM7XHRDTEFTUyhmZF9yYXcsIGYpKGZkKTtcbiBcdGlmIChmZF9lbXB0eShmKSlcbiBcdFx0cmV0dXJuIC1FQkFERjtcbiBcbkBAIC02MTUsNiAmIzQzOzYxOCw1MiBAQCBTWVNDQUxMX0RFRklORTEoY2hyb290LCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4mIzQzO1NZU0NBTExfREVGSU5FMihmY2hyb290LCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhdGggcGF0aDtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHtcbiYjNDM7XHRcdGlmICghbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgQ0FQX1NZU19DSFJPT1QpKSB7XG4mIzQzO1x0XHRcdGlmICghdGFza19ub19uZXdfcHJpdnMoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdFx0LyogQSBzaGFyZWQgZnNfc3RydWN0IGxldHMgYSBzaWJsaW5nIGV4ZWMgc2V0dWlkIHBhc3QgdGhlIGNoZWNrIGFib3ZlLiAqL1xuJiM0MztcdFx0XHRpZiAoY3VycmVudC1cdTAwM2Vmcy1cdTAwM2V1c2VycyAhPSAxKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHQvKiBNb3ZpbmcgdGhlIHJvb3QgdG8gZmFpbGZzIGxpZnRzIHRoZSBvbGQgcm9vdCYjMzk7cyBcJiMzNDsuLlwmIzM0OyBiYXJyaWVyLiAqL1xuJiM0MztcdFx0XHRpZiAoY3VycmVudF9jaHJvb3RlZCgpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRmYWlsZnNfZ2V0X3Jvb3QoXHUwMDI2cGF0aCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdENMQVNTKGZkX3JhdywgZikoZmQpO1xuJiM0MztcdFx0aWYgKGZkX2VtcHR5KGYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZF9jYW5fbG9va3VwKGZkX2ZpbGUoZiktXHUwMDNlZl9wYXRoLmRlbnRyeSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PVERJUjtcbiYjNDM7XG4mIzQzO1x0XHRlcnJvciA9IGZpbGVfcGVybWlzc2lvbihmZF9maWxlKGYpLCBNQVlfRVhFQyB8IE1BWV9DSERJUik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIENBUF9TWVNfQ0hST09UKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0XHRwYXRoID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGg7XG4mIzQzO1x0XHRwYXRoX2dldChcdTAwMjZwYXRoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9jaHJvb3QoXHUwMDI2cGF0aCk7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuJiM0MztcdHBhdGhfcHV0KFx1MDAyNnBhdGgpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oXG5pbmRleCA4NzRkOTA2N2E0M2I1MC4uODQxM2I2MjRhZDQ3ODIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxuQEAgLTQ1Nyw2ICYjNDM7NDU3LDcgQEAgYXNtbGlua2FnZSBsb25nIHN5c19mYWNjZXNzYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IG1vZGUsXG4gYXNtbGlua2FnZSBsb25nIHN5c19jaGRpcihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUpO1xuIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmNoZGlyKHVuc2lnbmVkIGludCBmZCk7XG4gYXNtbGlua2FnZSBsb25nIHN5c19jaHJvb3QoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcbiYjNDM7YXNtbGlua2FnZSBsb25nIHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZCh1bnNpZ25lZCBpbnQgZmQsIHVtb2RlX3QgbW9kZSk7XG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2RhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXG4gXHRcdFx0ICAgICB1bW9kZV90IG1vZGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuaW5kZXggYTYyN2FjYzhmYjVmZWEuLjViN2U3N2E3YzczNmVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbkBAIC04NjMsOCAmIzQzOzg2MywxMiBAQCBfX1NZU0NBTEwoX19OUl9saXN0bnMsIHN5c19saXN0bnMpXG4gI2RlZmluZSBfX05SX3JzZXFfc2xpY2VfeWllbGQgNDcxXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXG4gXG4mIzQzOy8qIGZzL29wZW4uYyAqL1xuJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcbiYjNDM7X19TWVNDQUxMKF9fTlJfZmNocm9vdCwgc3lzX2ZjaHJvb3QpXG4mIzQzO1xuICN1bmRlZiBfX05SX3N5c2NhbGxzXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxuJiM0MzsjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXG4gXG4gLypcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaFxuaW5kZXggYWFkZmJmNmUwY2IzYTAuLmU0M2UzZGUzZTllZTQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oXG5AQCAtMTI0LDYgJiM0MzsxMjQsNyBAQCBzdHJ1Y3QgZGVsZWdhdGlvbiB7XG4gXG4gI2RlZmluZSBGRF9QSURGU19ST09UXHRcdFx0LTEwMDAyIC8qIFJvb3Qgb2YgdGhlIHBpZGZzIGZpbGVzeXN0ZW0gKi9cbiAjZGVmaW5lIEZEX05TRlNfUk9PVFx0XHRcdC0xMDAwMyAvKiBSb290IG9mIHRoZSBuc2ZzIGZpbGVzeXN0ZW0gKi9cbiYjNDM7I2RlZmluZSBGRF9GQUlMRlNfUk9PVFx0XHRcdC0xMDAwNCAvKiBSb290IG9mIHRoZSBmYWlsZnMgZmlsZXN5c3RlbSAqL1xuICNkZWZpbmUgRkRfSU5WQUxJRFx0XHRcdC0xMDAwOSAvKiBJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjogLTEwMDAwIC0gRUJBREYgPSAtMTAwMDkgKi9cbiBcbiAvKiBHZW5lcmljIGZsYWdzIGZvciB0aGUgKmF0KDIpIGZhbWlseSBvZiBzeXNjYWxscy4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oXG5pbmRleCA0ZjJkYTkzNWE3NmNjYS4uZmQ1ZjBlOTU2NDhlZTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcbkBAIC0xMDUsNSAmIzQzOzEwNSw2IEBAXG4gI2RlZmluZSBQSURfRlNfTUFHSUNcdFx0MHg1MDQ5NDQ0Nlx0LyogXCYjMzQ7UElERlwmIzM0OyAqL1xuICNkZWZpbmUgR1VFU1RfTUVNRkRfTUFHSUNcdDB4NDc0ZDQ1NGRcdC8qIFwmIzM0O0dNRU1cJiMzNDsgKi9cbiAjZGVmaW5lIE5VTExfRlNfTUFHSUNcdFx0MHg0RTU1NEM0Q1x0LyogXCYjMzQ7TlVMTFwmIzM0OyAqL1xuJiM0MzsjZGVmaW5lIEZBSUxfRlNfTUFHSUNcdFx0MHg0NjQxNDk0Q1x0LyogXCYjMzQ7RkFJTFwmIzM0OyAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01BR0lDX0hfXyAqL1xuZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5pbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0XG4tLS0gYS9zY3JpcHRzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5AQCAtNDEyLDMgJiM0Mzs0MTIsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuaW5kZXggYTYyN2FjYzhmYjVmZWEuLjViN2U3N2E3YzczNmVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbkBAIC04NjMsOCAmIzQzOzg2MywxMiBAQCBfX1NZU0NBTEwoX19OUl9saXN0bnMsIHN5c19saXN0bnMpXG4gI2RlZmluZSBfX05SX3JzZXFfc2xpY2VfeWllbGQgNDcxXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXG4gXG4mIzQzOy8qIGZzL29wZW4uYyAqL1xuJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcbiYjNDM7X19TWVNDQUxMKF9fTlJfZmNocm9vdCwgc3lzX2ZjaHJvb3QpXG4mIzQzO1xuICN1bmRlZiBfX05SX3N5c2NhbGxzXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxuJiM0MzsjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXG4gXG4gLypcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbmluZGV4IDUyNDE1NWQ2NTVkYTE1Li5kNWI2MDQ1YjAwOTBjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbkBAIC0zOTYsNiAmIzQzOzM5Niw3IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbiYjNDM7NDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRzeXNfZmNocm9vdFxuIFxuICNcbiAjIER1ZSB0byBhIGhpc3RvcmljYWwgZGVzaWduIGVycm9yLCBjZXJ0YWluIHN5c2NhbGxzIGFyZSBudW1iZXJlZCBkaWZmZXJlbnRseVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwgYi90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXG5pbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0XG4tLS0gYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXG5AQCAtNDEyLDMgJiM0Mzs0MTIsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4mIzQzOzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuQEAgLTMzLDYgJiM0MzszMyw3IEBAIFRBUkdFVFMgJiM0Mzs9IGZjaG1vZGF0MlxuIFRBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zXG4gVEFSR0VUUyAmIzQzOz0gZmlsZXN5c3RlbXMvYmluZGVyZnNcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9lcG9sbFxuJiM0MztUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9mYWlsZnNcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9mYXRcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9vdmVybGF5ZnNcbiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9zdGF0bW91bnRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNkM2I1ZDg4NGQ3ZWE5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZVxuQEAgLTAsMCAmIzQzOzEsMiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7ZmFpbGZzX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2M1ZDk4YjRmZTcyNWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3RcbiYjNDM7XG4mIzQzO2luY2x1ZGUgLi4vLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYzQ2MWRjNDgzYTk5N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDU4MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9wcmN0bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdmZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4va3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX05SX2ZjaHJvb3RcbiYjNDM7I2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBGRF9QSURGU19ST09UXG4mIzQzOyNkZWZpbmUgRkRfUElERlNfUk9PVCAtMTAwMDJcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEZEX05TRlNfUk9PVFxuJiM0MzsjZGVmaW5lIEZEX05TRlNfUk9PVCAtMTAwMDNcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEZEX0ZBSUxGU19ST09UXG4mIzQzOyNkZWZpbmUgRkRfRkFJTEZTX1JPT1QgLTEwMDA0XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBOT0JPRFlfVUlEIDY1NTM0XG4mIzQzO1xuJiM0MzsvKiBDaGlsZCBzZW50aW5lbCBleGl0IGNvZGU6IHRoZSBleGVjIHdhcyBibG9ja2VkIGFzIGV4cGVjdGVkLiAqL1xuJiM0MzsjZGVmaW5lIEZBSUxGU19FWEVDX0JMT0NLRUQgOTlcbiYjNDM7XG4mIzQzOy8qIFN0YWNrIGZvciB0aGUgQ0xPTkVfRlMgaGVscGVyIGluIGZjaHJvb3Rfc2VudGluZWxfc2hhcmVkX2ZzX3N0cnVjdC4gKi9cbiYjNDM7I2RlZmluZSBGQUlMRlNfQ0xPTkVfU1RBQ0sgKDY0ICogMTAyNClcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3lzX2ZjaHJvb3QoaW50IGZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3lzY2FsbChfX05SX2ZjaHJvb3QsIGZkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJhdyBzeXNjYWxsOiBnbGliYyYjMzk7cyBnZXRjd2QoKSByZWplY3RzIHRoZSBrZXJuZWwmIzM5O3MgXCYjMzQ7KHVucmVhY2hhYmxlKVwmIzM0O1xuJiM0MzsgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGxvbmcgc3lzX2dldGN3ZChjaGFyICpidWYsIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9nZXRjd2QsIGJ1Ziwgc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZHJvcF90b19ub2JvZHkodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzZXRyZXN1aWQoTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBhcmtlZCBDTE9ORV9GUyBjaGlsZDsgZGllcyB3aXRoIGl0cyBwYXJlbnQgc28gaXQgbmV2ZXIgbGVha3MuICovXG4mIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3Bhcmsodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0KHZvaWQpYXJnO1xuJiM0MztcdHByY3RsKFBSX1NFVF9QREVBVEhTSUcsIFNJR0tJTEwpO1xuJiM0MztcdHBhdXNlKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi9cbiYjNDM7c3RhdGljIGludCBlbGZfaGFzX2Fic29sdXRlX2ludGVycChpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRFbGZXKEVoZHIpIGVoZHI7XG4mIzQzO1x0RWxmVyhQaGRyKSBwaGRyO1xuJiM0MztcdGNoYXIgaW50ZXJwO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJlYWQoZmQsIFx1MDAyNmVoZHIsIHNpemVvZihlaGRyKSwgMCkgIT0gc2l6ZW9mKGVoZHIpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKG1lbWNtcChlaGRyLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRykgIT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlaGRyLmVfcGhudW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocHJlYWQoZmQsIFx1MDAyNnBoZHIsIHNpemVvZihwaGRyKSxcbiYjNDM7XHRcdFx0ICBlaGRyLmVfcGhvZmYgJiM0MzsgaSAqIHNpemVvZihwaGRyKSkgIT0gc2l6ZW9mKHBoZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9JTlRFUlApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHByZWFkKGZkLCBcdTAwMjZpbnRlcnAsIDEsIHBoZHIucF9vZmZzZXQpICE9IDEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIGludGVycCA9PSAmIzM5Oy8mIzM5OztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaGRpcl9zZW50aW5lbClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmY2hkaXIoRkRfRkFJTEZTX1JPT1QpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdC4gKi9cbiYjNDM7XHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cm5jbXAoYnVmLCBcJiMzNDsodW5yZWFjaGFibGUpXCYjMzQ7LCAxMyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBFdmVyeSBBVF9GRENXRC1yZWxhdGl2ZSBsb29rdXAgZmFpbHMuICovXG4mIzQzO1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Zm9vXCYjMzQ7LCBPX1JET05MWSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcdEFTU0VSVF9FUShvcGVuYXQoQVRfRkRDV0QsIFwmIzM0Oy5cJiMzNDssIE9fUkRPTkxZKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Li5cJiMzNDssIE9fUkRPTkxZKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Zm9vXCYjMzQ7LCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGN3ZCBjYW5ub3QgYmUgcGlubmVkIGJ5IGZvbGxvd2luZyAvcHJvYy9zZWxmL2N3ZCBpbnRvIGl0LiAqL1xuJiM0MztcdEFTU0VSVF9FUShvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvY3dkXCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkIHNvIGFic29sdXRlIGxvb2t1cHMga2VlcCB3b3JraW5nLi4uICovXG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9cJiMzNDssIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIC4uLiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSByZWNvdmVyZWQuICovXG4mIzQzO1x0QVNTRVJUX0VRKGNoZGlyKFwmIzM0Oy9cJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwmIzM0Oy9cJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChmY2hkaXJfcmVqZWN0c19vdGhlcl9zZW50aW5lbHMpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEoZmNoZGlyKEZEX1BJREZTX1JPT1QpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO1x0QVNTRVJUX0VRKGZjaGRpcihGRF9OU0ZTX1JPT1QpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO1x0QVNTRVJUX0VRKGZjaGRpcigtMTAwMDkpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9mbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAxKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9cJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9iYWRfZmQpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoLTEsIDApLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgRkRfRkFJTEZTX1JPT1QgaXMgYSB2YWxpZCBzZW50aW5lbC4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfUElERlNfUk9PVCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfTlNGU19ST09ULCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfbm90ZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc2VsZi9zdGF0dXNcJiMzNDssIE9fUkRPTkxZKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3RfcmVhbGZkX3JlcXVpcmVzX2NhcClcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSA9PSAwKVxuJiM0MztcdFx0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L1wmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KGZkLCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3RfcmVhbGZkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciB0ZW1wbGF0ZVtdID0gXCYjMzQ7L3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcJiMzNDs7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRzdHJ1Y3Qgc3RhdCBzdDtcbiYjNDM7XHRpbnQgdG1wZmQsIGRmZCwgZmQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmY2hyb290KCkgd2l0aCBhIHJlZ3VsYXIgZmQgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR0bXBmZCA9IG9wZW4oXCYjMzQ7L3RtcFwmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9jYW5hcnlcJiMzNDssIHRlbXBsYXRlKTtcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGRmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KGRmZCwgMCksIDApO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShkZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQoXCYjMzQ7L2NhbmFyeVwmIzM0OywgXHUwMDI2c3QpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cDogZGlyZmQtYW5jaG9yZWQgSS9PIHdvcmtzIHdpdGggdGhlIG5ldyByb290LiAqL1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2FuYXJ5XCYjMzQ7LCB0ZW1wbGF0ZSAmIzQzOyBzdHJsZW4oXCYjMzQ7L3RtcC9cJiMzNDspKTtcbiYjNDM7XHR1bmxpbmthdCh0bXBmZCwgcGF0aCwgMCk7XG4mIzQzO1x0dW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbihcJiMzNDsvdG1wL1wmIzM0OyksIEFUX1JFTU9WRURJUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbClcbiYjNDM7e1xuJiM0MztcdGNoYXIgdGVtcGxhdGVbXSA9IFwmIzM0Oy90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdHN0cnVjdCBzdGF0IHJlYWxyb290LCBzdDtcbiYjNDM7XHRzdHJ1Y3Qgc3RhdGZzIHNmcztcbiYjNDM7XHRjaGFyIGJ1ZltQQVRIX01BWF07XG4mIzQzO1x0aW50IHByb2NmZCwgdG1wZmQsIGRmZCwgZmQ7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBmaWxlX2hhbmRsZSBoYW5kbGU7XG4mIzQzO1x0XHR1bnNpZ25lZCBjaGFyIGZfaGFuZGxlW01BWF9IQU5ETEVfU1pdO1xuJiM0MztcdH0gZmg7XG4mIzQzO1x0aW50IG1udGlkO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzdGF0KFwmIzM0Oy9cJiMzNDssIFx1MDAyNnJlYWxyb290KSwgMCk7XG4mIzQzO1x0cHJvY2ZkID0gb3BlbihcJiMzNDsvcHJvY1wmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShwcm9jZmQsIDApO1xuJiM0MztcdHRtcGZkID0gb3BlbihcJiMzNDsvdG1wXCYjMzQ7LCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHRtcGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuJiM0MztcdGRmZCA9IG9wZW4odGVtcGxhdGUsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRShkZmQsIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQWJzb2x1dGUgbG9va3VwcyBmYWlsLiAqL1xuJiM0MztcdEFTU0VSVF9FUShvcGVuKFwmIzM0Oy9ldGMvcGFzc3dkXCYjMzQ7LCBPX1JET05MWSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcdEFTU0VSVF9FUShta2RpcihcJiMzNDsvZm9vXCYjMzQ7LCAwNzAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJvb3QgY2Fubm90IGJlIHJlZmVyZW5jZWQgYXQgYWxsIC0gbm90IGV2ZW4gYW4gT19QQVRIIG9wZW4sXG4mIzQzO1x0ICogd2hpY2ggc2tpcHMgLVx1MDAzZXBlcm1pc3Npb24oKSwgYmVjYXVzZSBpdCBsYW5kcyBvbiB0aGUgcm9vdCBhcyBhXG4mIzQzO1x0ICoganVtcGVkIHdhbGsgdGVybWluYWwgdGhhdCAtXHUwMDNlZF93ZWFrX3JldmFsaWRhdGUoKSByZWZ1c2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShvcGVuKFwmIzM0Oy9cJiMzNDssIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XHRBU1NFUlRfRVEob3BlbihcJiMzNDsvXCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3RhdGZzKFwmIzM0Oy9cJiMzNDssIFx1MDAyNnNmcyksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IGNhbm5vdCBiZSBwaW5uZWQgYnkgZm9sbG93aW5nIC9wcm9jL3NlbGYvcm9vdCBpbnRvIGl0IGVpdGhlclxuJiM0MztcdCAqIChvbmx5IHRoZSByb290IGlzIGluIGZhaWxmcyBoZXJlLCBzbyBzZWxmL2N3ZCBpcyBzdGlsbCByZWFsKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEob3BlbmF0KHByb2NmZCwgXCYjMzQ7c2VsZi9yb290XCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogTm9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLiAqL1xuJiM0MztcdGZoLmhhbmRsZS5oYW5kbGVfYnl0ZXMgPSBNQVhfSEFORExFX1NaO1xuJiM0MztcdEFTU0VSVF9FUShuYW1lX3RvX2hhbmRsZV9hdChBVF9GRENXRCwgXCYjMzQ7L1wmIzM0OywgXHUwMDI2ZmguaGFuZGxlLCBcdTAwMjZtbnRpZCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgbm93IHVucmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuICovXG4mIzQzO1x0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xuJiM0MztcdEFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgXCYjMzQ7KHVucmVhY2hhYmxlKVwmIzM0OywgMTMpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi9cbiYjNDM7XHRmZCA9IG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7LlwmIzM0OywgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7XHRmZCA9IG9wZW5hdChkZmQsIFwmIzM0O2NhbmFyeVwmIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEFTU0VSVF9FUSh3cml0ZShmZCwgXCYjMzQ7eFwmIzM0OywgMSksIDEpO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdGZkID0gb3BlbmF0KGRmZCwgXCYjMzQ7Y2FuYXJ5XCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogXCYjMzQ7Li5cJiMzNDsgd2Fsa3MgY2xhbXAgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZSwgbm90IGF0IGZhaWxmcy4gKi9cbiYjNDM7XHRmZCA9IG9wZW5hdChBVF9GRENXRCwgXCYjMzQ7Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi5cJiMzNDssIE9fUEFUSCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoZnN0YXQoZmQsIFx1MDAyNnN0KSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0LnN0X2RldiwgcmVhbHJvb3Quc3RfZGV2KTtcbiYjNDM7XHRBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pO1xuJiM0MztcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiByZWFkbGluayBvZiB0aGUgbWFnaWMgbGluayBzdGlsbCB3b3JrczogaXQgZG9lcyBub3QgZm9sbG93LiAqL1xuJiM0MztcdHJldCA9IHJlYWRsaW5rYXQocHJvY2ZkLCBcJiMzNDtzZWxmL3Jvb3RcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbiYjNDM7XHRBU1NFUlRfR1QocmV0LCAwKTtcbiYjNDM7XHRidWZbcmV0XSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0VEhfTE9HKFwmIzM0Oy9wcm9jL3NlbGYvcm9vdCBwb2ludHMgdG8gJiMzOTslcyYjMzk7XCYjMzQ7LCBidWYpO1xuJiM0MztcdC8qIGRfcGF0aCgpIG5hbWVzIHRoZSBmYWlsZnMgcm9vdCBzeW50aGV0aWNhbGx5LCBuZXZlciBhcyBhIHJlYWwgcGF0aC4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXCYjMzQ7ZmFpbGZzOi9cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQnV0IGZvbGxvd2luZyBpdCBpbnRvIGZhaWxmcyBpcyByZWZ1c2VkLiAqL1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdGF0KHByb2NmZCwgXCYjMzQ7c2VsZi9yb290XCYjMzQ7LCBcdTAwMjZzdCwgMCksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXG4mIzQzO1x0dW5saW5rYXQoZGZkLCBcJiMzNDtjYW5hcnlcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSAmIzQzOyBzdHJsZW4oXCYjMzQ7L3RtcC9cJiMzNDspLCBBVF9SRU1PVkVESVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfYWJzb2x1dGVfc3ltbGluaylcbiYjNDM7e1xuJiM0MztcdGNoYXIgdGVtcGxhdGVbXSA9IFwmIzM0Oy90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdGludCB0bXBmZCwgZGZkLCBmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR0bXBmZCA9IG9wZW4oXCYjMzQ7L3RtcFwmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTtcbiYjNDM7XHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcbiYjNDM7XHRBU1NFUlRfR0UoZGZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuYXQoZGZkLCBcJiMzNDt0YXJnZXRcJiMzNDssIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3ltbGlua2F0KFwmIzM0O3RhcmdldFwmIzM0OywgZGZkLCBcJiMzNDtyZWxcJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3ltbGlua2F0KFwmIzM0Oy9ldGNcJiMzNDssIGRmZCwgXCYjMzQ7YWJzXCYjMzQ7KSwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBSZWxhdGl2ZSBzeW1saW5rcyBrZWVwIHJlc29sdmluZyB3aXRoaW4gdGhlIGRpcmZkLWFuY2hvcmVkIHdhbGsuLi4gKi9cbiYjNDM7XHRmZCA9IG9wZW5hdChkZmQsIFwmIzM0O3JlbFwmIzM0OywgT19SRE9OTFkpO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIC4uLiBhYnNvbHV0ZSBzeW1saW5rcyByZXN0YXJ0IHRoZSB3YWxrIGF0IHRoZSBmYWlsZnMgcm9vdC4gKi9cbiYjNDM7XHRBU1NFUlRfRVEob3BlbmF0KGRmZCwgXCYjMzQ7YWJzXCYjMzQ7LCBPX1JET05MWSksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuJiM0MztcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXG4mIzQzO1x0dW5saW5rYXQoZGZkLCBcJiMzNDthYnNcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRmZCwgXCYjMzQ7cmVsXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkZmQsIFwmIzM0O3RhcmdldFwmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbihcJiMzNDsvdG1wL1wmIzM0OyksIEFUX1JFTU9WRURJUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF91bnByaXZpbGVnZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZltQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgPT0gMClcbiYjNDM7XHRcdEFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogV2l0aG91dCBub19uZXdfcHJpdnMgZW50ZXJpbmcgZmFpbGZzIGlzIG5vdCBhbGxvd2VkLi4uICovXG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xuJiM0MztcbiYjNDM7XHQvKiAuLi4gd2l0aCBub19uZXdfcHJpdnMgc2V0IGl0IGlzIGFsbG93ZWQuICovXG4mIzQzO1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG9wZW4oXCYjMzQ7L2V0Yy9wYXNzd2RcJiMzNDssIE9fUkRPTkxZKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB0YXNrIGNvdW50cyBhcyBjaHJvb3RlZDogbm8gdXNlciBuYW1lc3BhY2VzIGFueW1vcmUuICovXG4mIzQzO1x0QVNTRVJUX0VRKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUiksIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTtcbiYjNDM7XG4mIzQzO1x0LyogV2l0aCBib3RoIHJvb3QgYW5kIGN3ZCBpbiBmYWlsZnMgZ2V0Y3dkKCkgcmVwb3J0cyBcJiMzNDsvXCYjMzQ7LiAqL1xuJiM0MztcdEFTU0VSVF9FUShmY2hkaXIoRkRfRkFJTEZTX1JPT1QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwmIzM0Oy9cJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChmY2hyb290X3NlbnRpbmVsX3JlamVjdGVkX3doZW5fY2hyb290ZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHRlbXBsYXRlW10gPSBcJiMzNDsvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFwmIzM0OztcbiYjNDM7XHRpbnQgdG1wZmQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtjaHJvb3QoKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRtcGZkID0gb3BlbihcJiMzNDsvdG1wXCYjMzQ7LCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHRtcGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShjaHJvb3QodGVtcGxhdGUpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY2hkaXIoXCYjMzQ7L1wmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBSZW1vdmUgdGhlIGphaWwgd2hpbGUgc3RpbGwgcHJpdmlsZWdlZDsgc3RpY2t5IC90bXAgYmxvY2tzIG5vYm9keS4gKi9cbiYjNDM7XHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgJiM0Mzsgc3RybGVuKFwmIzM0Oy90bXAvXCYjMzQ7KSwgQVRfUkVNT1ZFRElSKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuJiM0MztcdEFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEFuIHVucHJpdmlsZWdlZCBjaHJvb3RlZCB0YXNrIG11c3Qgbm90IGxpZnQgaXRzIFwmIzM0Oy4uXCYjMzQ7IGJhcnJpZXIuICovXG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfc2hhcmVkX2ZzX3N0cnVjdClcbiYjNDM7e1xuJiM0MztcdGNoYXIgc3RhY2tbRkFJTEZTX0NMT05FX1NUQUNLXTtcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgPT0gMClcbiYjNDM7XHRcdEFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBDTE9ORV9GUyBzaWJsaW5nIHNoYXJlcyB0aGUgZnNfc3RydWN0OiBidW1wIGZzLVx1MDAzZXVzZXJzIHRvIDIuICovXG4mIzQzO1x0cGlkID0gY2xvbmUoZmFpbGZzX3BhcmssIHN0YWNrICYjNDM7IHNpemVvZihzdGFjayksIENMT05FX0ZTIHwgU0lHQ0hMRCxcbiYjNDM7XHRcdCAgICBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfR0UocGlkLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHNpYmxpbmcgd2l0aG91dCBub19uZXdfcHJpdnMgY291bGQgZXhlYyBhIHNldHVpZCBiaW5hcnkgd2l0aFxuJiM0MztcdCAqIHRoZSBmYWlsZnMgcm9vdCwgc28gYSBzaGFyZWQgZnNfc3RydWN0IGlzIHJlZnVzZWQgZXZlbiB3aXRoXG4mIzQzO1x0ICogbm9fbmV3X3ByaXZzIHNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoa2lsbChwaWQsIFNJR0tJTEwpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIE5VTEwsIDApLCBwaWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfbm9fb3Zlcm1vdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O21vdW50aW5nIHJlcXVpcmVzIHByaXZpbGVnZXNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbnRhaW4gdGhlIGJsYXN0IHJhZGl1czogaWYgZmFpbGZzIGV2ZXIgcmVncmVzc2VkIGFuZCBcJiMzNDsvXCYjMzQ7XG4mIzQzO1x0ICogcmVzb2x2ZWQgdG8gdGhlIHJlYWwgcm9vdCwgdGhlIHRtcGZzIG1vdW50IGJlbG93IG11c3Qgbm90IHRvdWNoXG4mIzQzO1x0ICogdGhlIGhvc3QuIEEgcHJpdmF0ZSBtb3VudCBuYW1lc3BhY2Uga2VlcHMgaXQgbG9jYWwgdG8gdGhpcyBjaGlsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEodW5zaGFyZShDTE9ORV9ORVdOUyksIDApO1xuJiM0MztcdEFTU0VSVF9FUShtb3VudChOVUxMLCBcJiMzNDsvXCYjMzQ7LCBOVUxMLCBNU19SRUMgfCBNU19QUklWQVRFLCBOVUxMKSwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mIHRoZSBmYWlsZnMgcm9vdC4gSXQgY2Fubm90IGV2ZW5cbiYjNDM7XHQgKiBiZSBuYW1lZCBhcyBhIG1vdW50IHRhcmdldDogcmVzb2x2aW5nIFwmIzM0Oy9cJiMzNDsgaXMgcmVmdXNlZCBiZWZvcmUgdGhlXG4mIzQzO1x0ICogbW91bnQgbWFjaGluZXJ5ICh3aGljaCwgZmFpbGZzIGJlaW5nIGluIG5vIG1vdW50IG5hbWVzcGFjZSwgd291bGRcbiYjNDM7XHQgKiByZWplY3QgaXQgYW55d2F5KSBpcyBldmVyIHJlYWNoZWQuIG9wZW5fdHJlZShPUEVOX1RSRUVfQ0xPTkUpIGlzXG4mIzQzO1x0ICogbGlrZXdpc2UgbW9vdCBzaW5jZSBubyBmZCB0byB0aGUgcm9vdCBjYW4gYmUgb2J0YWluZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX0VRKG1vdW50KFwmIzM0O25vbmVcJiMzNDssIFwmIzM0Oy9cJiMzNDssIFwmIzM0O3RtcGZzXCYjMzQ7LCAwLCBOVUxMKSwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9zZXRuc19lc2NhcGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RhdCByZWFscm9vdCwgc3Q7XG4mIzQzO1x0aW50IG5zZmQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtzZXRucygpIHRvIGEgbW91bnQgbmFtZXNwYWNlIHJlcXVpcmVzIHByaXZpbGVnZXNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3RhdChcJiMzNDsvXCYjMzQ7LCBcdTAwMjZyZWFscm9vdCksIDApO1xuJiM0MztcdG5zZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvbnMvbW50XCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKG5zZmQsIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEob3BlbihcJiMzNDsvZXRjXCYjMzQ7LCBPX1BBVEgpLCAtMSk7XG4mIzQzO1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBtb3VudCBuYW1lc3BhY2UgZmQgaXMgdGhlIGtleSBvdXQ6IGl0IHJlc2V0cyByb290IGFuZCBjd2QuICovXG4mIzQzO1x0QVNTRVJUX0VRKHNldG5zKG5zZmQsIENMT05FX05FV05TKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGNsb3NlKG5zZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQoXCYjMzQ7L1wmIzM0OywgXHUwMDI2c3QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpO1xuJiM0MztcdEFTU0VSVF9FUShzdC5zdF9pbm8sIHJlYWxyb290LnN0X2lubyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9leGVjKVxuJiM0Mzt7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRldWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhlYyBpbiBhIGNoaWxkOiBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIHdvdWxkIHJlcGxhY2UgdGhlIHRlc3RcbiYjNDM7XHQgKiBpbWFnZSBhbmQgaXRzIGV4aXQgY29kZSB3b3VsZCBub3QgbWF0Y2ggdGhlIHNlbnRpbmVsIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdHBpZCA9IGZvcmsoKTtcbiYjNDM7XHRBU1NFUlRfR0UocGlkLCAwKTtcbiYjNDM7XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdGV4ZWNsKFwmIzM0Oy9iaW4vdHJ1ZVwmIzM0OywgXCYjMzQ7dHJ1ZVwmIzM0OywgTlVMTCk7XG4mIzQzO1x0XHRfZXhpdChlcnJubyA9PSBFT1BOT1RTVVBQID8gRkFJTEZTX0VYRUNfQkxPQ0tFRCA6IDEpO1xuJiM0MztcdH1cbiYjNDM7XHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpO1xuJiM0MztcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBGQUlMRlNfRVhFQ19CTE9DS0VEKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChmY2hyb290X3NlbnRpbmVsX2V4ZWNfaW50ZXJwcmV0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyZ3ZbXSA9IHsgXCYjMzQ7ZmFpbGZzX3Rlc3RcJiMzNDssIE5VTEwgfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVudnBbXSA9IHsgTlVMTCB9O1xuJiM0MztcdHBpZF90IHBpZDtcbiYjNDM7XHRpbnQgc3RhdHVzLCBleGVmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBFeGVjIG91cnNlbHZlczogdGhlIG9uZSBiaW5hcnkgZ3VhcmFudGVlZCB0byBiZSBhcm91bmQuICovXG4mIzQzO1x0ZXhlZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvZXhlXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX0dFKGV4ZWZkLCAwKTtcbiYjNDM7XHRpZiAoIWVsZl9oYXNfYWJzb2x1dGVfaW50ZXJwKGV4ZWZkKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDt0ZXN0IGJpbmFyeSBoYXMgbm8gYWJzb2x1dGUgUFRfSU5URVJQIGludGVycHJldGVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGJpbmFyeSBpdHNlbGYgbmVlZHMgbm8gcGF0aCBsb29rdXAgLSBpdCBpcyBleGVjdXRlZCBieSBmZCAtXG4mIzQzO1x0ICogYnV0IGxvYWRpbmcgaXQgZmFpbHMgb24gb3BlbmluZyB0aGUgYWJzb2x1dGUgUFRfSU5URVJQXG4mIzQzO1x0ICogaW50ZXJwcmV0ZXIuIFJ1biBpdCBpbiBhIGNoaWxkIHNvIGEgd3JvbmdseSBzdWNjZXNzZnVsIGV4ZWMgZG9lc1xuJiM0MztcdCAqIG5vdCByZXBsYWNlIHRoZSB0ZXN0IGltYWdlIGFuZCBtYXNxdWVyYWRlIGFzIGEgcGFzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0QVNTRVJUX0dFKHBpZCwgMCk7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRzeXNjYWxsKF9fTlJfZXhlY3ZlYXQsIGV4ZWZkLCBcJiMzNDtcJiMzNDssIGFyZ3YsIGVudnAsIEFUX0VNUFRZX1BBVEgpO1xuJiM0MztcdFx0X2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQpO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTtcbiYjNDM7XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRkFJTEZTX0VYRUNfQkxPQ0tFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9pbmhlcml0ZWQpXG4mIzQzO3tcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0cGlkID0gZm9yaygpO1xuJiM0MztcdEFTU0VSVF9HRShwaWQsIDApO1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0aWYgKG9wZW4oXCYjMzQ7L2V0Y1wmIzM0OywgT19QQVRIKSAhPSAtMSB8fCBlcnJubyAhPSBFT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRfZXhpdCgxKTtcbiYjNDM7XHRcdF9leGl0KDApO1xuJiM0MztcdH1cbiYjNDM7XHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpO1xuJiM0MztcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfZmNocm9vdCYjMzQ7LAogICAgJiMzNDtzeXNfZmNoZGlyJiMzNDssCiAgICAmIzM0O2ZhaWxmc19jdXJyZW50X2NoZGlyJiMzNDssCiAgICAmIzM0O2ZhaWxmc19nZXRfcm9vdCYjMzQ7LAogICAgJiMzNDtmYWlsZnNfbW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2VybmVsLWludGVybmFsIGZpbGVzeXN0ZW0gYGZhaWxmc2AgYW5kIGEgbmV3IHN5c3RlbSBjYWxsIGBmY2hyb290YC4gSXQgYWxzbyBtb2RpZmllcyBgZmNoZGlyYCB0byBhY2NlcHQgYSBuZXcgbWFnaWMgZmlsZSBkZXNjcmlwdG9yIGBGRF9GQUlMRlNfUk9PVGAuIFRoZXNlIGFyZSBjb3JlIFZGUyBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgZXNjYXBpbmcgY2hyb290LCByZWZlcmVuY2UgbGVha3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjYTRhMzAzYjA5NGI2YzhiNDJjMzc3MDI3OGI5M2E4NGIxN2NkMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxOTowNTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmFpbGZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmFpbGZzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjFmZjJkYjc5NDFkZjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZhaWxmcy5yc3QKQEAgLTAsMCAmIzQzOzEsNzMgQEAKJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOz09PT09PQomIzQzO2ZhaWxmcwomIzQzOz09PT09PQomIzQzOwomIzQzO2ZhaWxmcyBpcyBhIGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIHRoYXQgZmFpbHMgZXZlcnkgb3BlcmF0aW9uCiYjNDM7cmVhY2hpbmcgaXQgd2l0aCBgYEVPUE5PVFNVUFBgYC4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIG51bGxmcy4gV2hlcmUKJiM0MztudWxsZnMgaXMgcGVybWFuZW50bHkgZW1wdHksIGZhaWxmcyBtZWFucyAmIzM0O25vdGhpbmcgaXMgc3VwcG9ydGVkIGhlcmUmIzM0Oy4KJiM0MztJdCBjYW5ub3QgYmUgbW91bnRlZCBmcm9tIHVzZXJzcGFjZSwgbm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2YKJiM0MztpdC4gSXQgY2Fubm90IGJlIGNsb25lZC4KJiM0MzsKJiM0MztUaGUgb25seSB3YXkgaW50byBpdCBpcyB0aGUgYGBGRF9GQUlMRlNfUk9PVGBgIGZpbGUgZGVzY3JpcHRvciBzZW50aW5lbCB3aGljaAomIzQzO2lzIHVuZGVyc3Rvb2QgYnkgYGBmY2hkaXIoMilgYCBhbmQgYGBmY2hyb290KDIpYGAuCiYjNDM7CiYjNDM7U2VtYW50aWNzCiYjNDM7PT09PT09PT09CiYjNDM7CiYjNDM7RXZlcnkgcGF0aCB3YWxrIG9mIGEgY29tcG9uZW50IHRocm91Z2ggZmFpbGZzIGZhaWxzIHdpdGgKJiM0MztgYEVPUE5PVFNVUFBgYCBiZWZvcmUgdGhhdCBjb21wb25lbnQgaXMgcGFyc2VkLCBpbmNsdWRpbmcgYGAuYGAuCiYjNDM7CiYjNDM7Tm8gcGF0aCBsb29rdXAgY2FuIG9wZW4gdGhlIHJvb3QsIG5vdCBldmVuIHdpdGggYGBPX1BBVEhgYC4KJiM0MzsKJiM0MztBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5CiYjNDM7YGBBVF9GRENXRGBgLXJlbGF0aXZlIGxvb2t1cC4gQXMgd2l0aCBhbnkgd29ya2luZyBkaXJlY3RvcnkgdGhhdCBpcwomIzQzO3VucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdCwgdGhlIGBgZ2V0Y3dkKDIpYGAgc3lzdGVtIGNhbGwgcmV0dXJucwomIzQzO2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLgomIzQzOwomIzQzO0EgcHJvY2VzcyB3aXRoIGl0cyByb290IGRpcmVjdG9yeSBpbiBmYWlsZnMgZmFpbHMgZXZlcnkgYWJzb2x1dGUgcGF0aAomIzQzO2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseQomIzQzO2xpbmtlZCBiaW5hcmllcy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZmFpbHMgZXhlYy4KJiM0MzsKJiM0MztMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXQKJiM0MztpcyB0aGUgYGBmc19zdHJ1Y3RgYCBlcXVpdmFsZW50IG9mIGBgUkVTT0xWRV9CRU5FQVRIYGAuIFRoZSBwcm9jZXNzIG11c3QKJiM0MzthbmNob3IgZXZlcnkgbG9va3VwIGF0IGEgZmlsZSBkZXNjcmlwdG9yIGl0IGV4cGxpY2l0bHkgaG9sZHMuCiYjNDM7CiYjNDM7RW50ZXJpbmcKJiM0Mzs9PT09PT09PQomIzQzOwomIzQzO2BgZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMClgYCByZXF1aXJlcyBgYENBUF9TWVNfQ0hST09UYGAgaW4gdGhlCiYjNDM7Y2FsbGVyJiMzOTtzIHVzZXIgbmFtZXNwYWNlLCBtaXJyb3JpbmcgYGBjaHJvb3QoMilgYC4gVW5wcml2aWxlZ2VkIGNhbGxlcnMKJiM0MzttYXkgZW50ZXIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgaG9sZDoKJiM0MzsKJiM0MzsqIGBgbm9fbmV3X3ByaXZzYGAgaXMgc2V0OiBzZXR1aWQgYmluYXJpZXMgb24gcmVndWxhciBtb3VudHMgcmVtYWluCiYjNDM7ICByZWFjaGFibGUgdmlhIGluaGVyaXRlZCBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9ycyBhbmQgZXhlY3V0aW5nIHRoZW0KJiM0MzsgIHdpdGggYW4gdW51c2FibGUgcm9vdCBkaXJlY3RvcnkgaXMgdGhlIGNsYXNzaWMgY29uZnVzZWQgZGVwdXR5LgomIzQzOwomIzQzOyogVGhlIGNhbGxlciBpcyBub3QgYWxyZWFkeSBjaHJvb3RlZDogdGhlIHJvb3QgZGlyZWN0b3J5IGlzIHdoYXQKJiM0MzsgIGNvbmZpbmVzIGBgLi5gYCByZXNvbHV0aW9uIGFuZCB0aGUgZmFpbGZzIHJvb3QgY2FuIG5ldmVyIGJlIHJlYWNoZWQgYnkKJiM0MzsgIHdhbGtpbmcgdXAgYSByZWFsIG1vdW50IHRyZWUsIHNvIG1vdmluZyB0aGUgcm9vdCBvZiBhIGNocm9vdGVkIHRhc2sgdG8KJiM0MzsgIGZhaWxmcyB3b3VsZCBhbGxvdyBpdCB0byBlc2NhcGUgaXRzIGNocm9vdCB2aWEgYGBvcGVuYXQoZmQsICYjMzQ7Li4mIzM0OylgYC4KJiM0MzsKJiM0MzsqIFRoZSBjYWxsZXIgZG9lcyBub3Qgc2hhcmUgaXRzIGBgZnNfc3RydWN0YGA6IGBgbm9fbmV3X3ByaXZzYGAgaXMKJiM0MzsgIGNoZWNrZWQgb24gdGhlIGNhbGxpbmcgdGhyZWFkLCBidXQgdGhlIHJvb3QgbGl2ZXMgaW4gdGhlIGBgZnNfc3RydWN0YGAuCiYjNDM7ICBBIGBgQ0xPTkVfRlNgYCBzaWJsaW5nIHdpdGhvdXQgYGBub19uZXdfcHJpdnNgYCBjb3VsZCBvdGhlcndpc2UgZXhlY3V0ZQomIzQzOyAgYSBzZXR1aWQgYmluYXJ5IHdpdGggdGhlIGZhaWxmcyByb290LCBzbyBlbnRyeSByZXF1aXJlcyBgYGZzLSZndDt1c2VycyA9PQomIzQzOyAgMWBgLCB0aGUgc2FtZSByZXN0cmljdGlvbiBgYHNldG5zKDIpYGAgYXBwbGllcyBmb3IgdGhlIG1vdW50IGFuZCB1c2VyCiYjNDM7ICBuYW1lc3BhY2VzLgomIzQzOwomIzQzO0xlYXZpbmcKJiM0Mzs9PT09PT09CiYjNDM7CiYjNDM7QmFja2luZyBvdXQgaXMgY3VycmVudGx5IGhhcmQsIGJ1dCB0aGlzIGlzIGEgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQKJiM0MztpbXBsZW1lbnRhdGlvbiwgbm90IGEgZ3VhcmFudGVlZCBpbnRlcmZhY2UsIGFuZCBtYXkgYmUgbG9vc2VuZWQgbGF0ZXIuCiYjNDM7Rm9yIG5vdyBhIHByb2Nlc3MgdGhhdCBlbnRlcmVkIGZhaWxmcyBjb3VudHMgYXMgY2hyb290ZWQsIHNvIGl0IGNhbm5vdAomIzQzO2NyZWF0ZSB1c2VyIG5hbWVzcGFjZXMgdG8gcmVnYWluIGBgQ0FQX1NZU19DSFJPT1RgYCwgYW5kIGBgY2hyb290KDIpYGAKJiM0MztvciBgYGZjaHJvb3QoMilgYCBiYWNrIG91dCByZXF1aXJlIGBgQ0FQX1NZU19DSFJPT1RgYC4gVGhlIHJlbWFpbmluZyB3YXkKJiM0MztvdXQgdG9kYXkgaXMgYGBzZXRucygyKWBgIHdpdGggYSBtb3VudCBuYW1lc3BhY2UgZmlsZSBkZXNjcmlwdG9yLCB3aGljaAomIzQzO3JlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgIG92ZXIgdGhlIHRhcmdldCBtb3VudCBuYW1lc3BhY2UgYXMgd2VsbCBhcwomIzQzO2BgQ0FQX1NZU19DSFJPT1RgYCBhbmQgYGBDQVBfU1lTX0FETUlOYGAgaW4gdGhlIGNhbGxlciYjMzk7cyB1c2VyIG5hbWVzcGFjZQomIzQzO2FuZCByZXNldHMgYm90aCByb290IGFuZCB3b3JraW5nIGRpcmVjdG9yeS4gQSBwcm9jZXNzIHRoYXQgaG9sZHMgbm8gc3VjaAomIzQzO2ZpbGUgZGVzY3JpcHRvciBhbmQgcmVzdHJpY3RzIGBgKmNoZGlyKClgYC9gYCpjaHJvb3QoKWBgL2Bgc2V0bnMoKWBgIHZpYQomIzQzO3NlY2NvbXAgY2Fubm90IGN1cnJlbnRseSBnZXQgYmFjayBvdXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0CmluZGV4IDFmNzFjZjE1OTU0NzZjLi43MzRhNDVlNTE2Njc1YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLgogICAgZXh0MwogICAgZXh0NC9pbmRleAogICAgZjJmcwomIzQzOyAgIGZhaWxmcwogICAgZ2ZzMi9pbmRleAogICAgaGZzCiAgICBoZnNwbHVzCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IGYzMWI3YWZmZmMzNDU5Li41MmUzNTM4Y2M3ZGY0MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTUxMSwzICYjNDM7NTExLDQgQEAKIDU3OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNTgwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNTgxCWNvbW1vbglyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzU4Mgljb21tb24JZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibAppbmRleCA5NDM1MWUyMmJmY2Y3Ni4uNTU3MTdlZDMyYzI3ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsCkBAIC00ODYsMyAmIzQzOzQ4Niw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmwgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsCmluZGV4IDYyZDkzZDg4ZTBmZWY4Li5kZjJkMWQ4MmZiM2NjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsCkBAIC00ODMsMyAmIzQzOzQ4Myw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IDI0ODkzNDI1NzEwMTRjLi5iYTdhNGQ4OTAzZDA0NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC00NzEsMyAmIzQzOzQ3MSw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IDIyM2QyNjMwMzYyNzI0Li5jNTVhNWM5NmY0OWI4MiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC00NzcsMyAmIzQzOzQ3Nyw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwKaW5kZXggNzQzMDcxNGUyYjhmODYuLjlhZTg4ZTRlYWM2MWVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibApAQCAtNDEwLDMgJiM0Mzs0MTAsNCBAQAogNDY5CW4zMglmaWxlX3NldGF0dHIJCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJbjMyCWxpc3RucwkJCQlzeXNfbGlzdG5zCiA0NzEJbjMyCXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCW4zMglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsCmluZGV4IDYzMGFhYjllNTQyNTkyLi44M2RjOTNhMDcxMmYxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmwKQEAgLTM4NiwzICYjNDM7Mzg2LDQgQEAKIDQ2OQluNjQJZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCW42NAlsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCW42NAlyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3MgluNjQJZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibAppbmRleCAxMjg2NTMxMTIyODRiMi4uOWM2MjQyOWM5YjdiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsCkBAIC00NTksMyAmIzQzOzQ1OSw0IEBACiA0NjkJbzMyCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAlvMzIJbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQlvMzIJcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJbzMyCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAppbmRleCBjNjMzMWRhZDk0NjEzYi4uODhhZGM0MDE2Y2NlMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTQ3MCwzICYjNDM7NDcwLDQgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCWNvbW1vbglyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKaW5kZXggNGZjYzdjNThhMTA1ZGMuLmNmYmI3MDAzOWZmMDA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTU2MiwzICYjNDM7NTYyLDQgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCW5vc3B1CXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWNvbW1vbglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAppbmRleCAwOWE3ZWYwNGQ5NzkxYS4uMWI0NWU2OGEyMTdiYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibApAQCAtMzk4LDMgJiM0MzszOTgsNCBAQAogNDY5CWNvbW1vbglmaWxlX3NldGF0dHIJCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCQlzeXNfbGlzdG5zCiA0NzEJY29tbW9uCXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWNvbW1vbglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCmluZGV4IDcwYjMxNWNiZTcxMGMyLi5hY2UwNjhkZmYwZGUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKQEAgLTQ3NSwzICYjNDM7NDc1LDQgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQkJc3lzX2ZpbGVfc2V0YXR0cgogNDcwCWNvbW1vbglsaXN0bnMJCQkJc3lzX2xpc3RucwogNDcxCWNvbW1vbglyc2VxX3NsaWNlX3lpZWxkCQlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCQlzeXNfZmNocm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibAppbmRleCA3ZTcxYmY3ZmNkMTRmNy4uNWI5ZmUwZTgxNDBmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC01MTcsMyAmIzQzOzUxNyw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmwKaW5kZXggZjgzMmViZDJkNzliMDAuLjJjMTcyZWY0OGRmZDMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibApAQCAtNDc3LDMgJiM0Mzs0NzcsNCBAQAogNDY5CWkzODYJZmlsZV9zZXRhdHRyCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJaTM4NglsaXN0bnMJCQlzeXNfbGlzdG5zCiA0NzEJaTM4Nglyc2VxX3NsaWNlX3lpZWxkCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWkzODYJZmNocm9vdAkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsCmluZGV4IDUyNDE1NWQ2NTVkYTE1Li5kNWI2MDQ1YjAwOTBjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKQEAgLTM5Niw2ICYjNDM7Mzk2LDcgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCXN5c19mY2hyb290CiAKICMKICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKaW5kZXggYTliY2E0ZTQ4NGRlY2YuLmQzNTRiYjIzMTc5NmMyIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsCkBAIC00NDIsMyAmIzQzOzQ0Miw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggODlhOGE5ZDIwN2QxYzUuLjczYjZjYWI3NzM4ZWE0IDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9mcy9NYWtlZmlsZQpAQCAtMTYsNyAmIzQzOzE2LDcgQEAgb2JqLXkgOj0Jb3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcCiAJCXN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFwKIAkJZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcCiAJCWtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFwKLQkJZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vCiYjNDM7CQlmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm8KIAogb2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKQkmIzQzOz0gYnVmZmVyLm8gbXBhZ2Uubwogb2JqLSQoQ09ORklHX1BST0NfRlMpCQkmIzQzOz0gcHJvY19uYW1lc3BhY2UubwpkaWZmIC0tZ2l0IGEvZnMvZF9wYXRoLmMgYi9mcy9kX3BhdGguYwppbmRleCBhNDg5NTdjMDk3MWVmNi4uYzI1MzA5MDA2ZDVkNmQgMTAwNjQ0Ci0tLSBhL2ZzL2RfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RfcGF0aC5jCkBAIC0yNzksNyAmIzQzOzI3OSw4IEBAIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogCSAqIGFuZCBpbnN0ZWFkIGhhdmUgZF9wYXRoIHJldHVybiB0aGUgbW91bnRlZCBwYXRoLgogCSAqLwogCWlmIChwYXRoLSZndDtkZW50cnktJmd0O2Rfb3AgJmFtcDsmYW1wOyBwYXRoLSZndDtkZW50cnktJmd0O2Rfb3AtJmd0O2RfZG5hbWUgJmFtcDsmYW1wOwotCSAgICAoIUlTX1JPT1QocGF0aC0mZ3Q7ZGVudHJ5KSB8fCBwYXRoLSZndDtkZW50cnkgIT0gcGF0aC0mZ3Q7bW50LSZndDttbnRfcm9vdCkpCiYjNDM7CSAgICAoIUlTX1JPT1QocGF0aC0mZ3Q7ZGVudHJ5KSB8fCBwYXRoLSZndDtkZW50cnkgIT0gcGF0aC0mZ3Q7bW50LSZndDttbnRfcm9vdCB8fAomIzQzOwkgICAgIGZhaWxmc19tbnQocGF0aC0mZ3Q7bW50KSkpCiAJCXJldHVybiBwYXRoLSZndDtkZW50cnktJmd0O2Rfb3AtJmd0O2RfZG5hbWUocGF0aC0mZ3Q7ZGVudHJ5LCBidWYsIGJ1Zmxlbik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CmRpZmYgLS1naXQgYS9mcy9mYWlsZnMuYyBiL2ZzL2ZhaWxmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NmEzNmRhM2QyMzZkNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhaWxmcy5jCkBAIC0wLDAgJiM0MzsxLDE2NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2hyaXN0aWFuIEJyYXVuZXIgJmx0O2JyYXVuZXJAa2VybmVsLm9yZyZndDsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMvc3VwZXJfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnNfY29udGV4dC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc19zdHJ1Y3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGF0aCBmYWlsZnNfcm9vdF9wYXRoID0ge307CiYjNDM7CiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpCiYjNDM7ewomIzQzOwkqcGF0aCA9IGZhaWxmc19yb290X3BhdGg7CiYjNDM7CXBhdGhfZ2V0KHBhdGgpOwomIzQzO30KJiM0MzsKJiM0Mztib29sIGZhaWxmc19tbnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbW50LSZndDttbnRfc2IgPT0gZmFpbGZzX3Jvb3RfcGF0aC5tbnQtJmd0O21udF9zYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYWlsZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgIGludCBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmFpbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJLyogVW5yZWFjaGFibGU6IC0mZ3Q7cGVybWlzc2lvbigpIGFscmVhZHkgZmFpbGVkIHRoZSB3YWxrLiAqLwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmFpbGZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAomIzQzOwkJCSAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLAomIzQzOwkJCSAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmFpbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewomIzQzOwkucGVybWlzc2lvbgk9IGZhaWxmc19wZXJtaXNzaW9uLAomIzQzOwkubG9va3VwCQk9IGZhaWxmc19sb29rdXAsCiYjNDM7CS5nZXRhdHRyCT0gZmFpbGZzX2dldGF0dHIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX29wZXJhdGlvbnMgPSB7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByb290IGlzIG9ubHkgZXZlciByZWFjaGVkIGFzIGEgcGF0aC13YWxrIHRlcm1pbmFsIGJ5IGp1bXBpbmcKJiM0MzsJICogdG8gaXQ6IGFzICYjMzQ7LyYjMzQ7IHdoZW4gaXQgaXMgdGhlIGNhbGxlciYjMzk7cyByb290LCBvciB0aHJvdWdoIGEKJiM0MzsJICogL3Byb2MvJmx0O3BpZCZndDsve3Jvb3QsY3dkfSBtYWdpYyBsaW5rLiAtJmd0O3Blcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxzCiYjNDM7CSAqIGV2ZXJ5IHdhbGsgb2YgYSBjb21wb25lbnQsIGJ1dCBhIGp1bXAgbGFuZHMgb24gdGhlIHJvb3Qgd2l0aG91dAomIzQzOwkgKiBvbmUuIFJlZnVzZSBoZXJlIHRvbyBzbyB0aGUgcm9vdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGFuIE9fUEFUSAomIzQzOwkgKiBvcGVuIG9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqZmFpbGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sICYjMzQ7ZmFpbGZzOi8mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zID0gewomIzQzOwkuZF9kbmFtZQkJPSBmYWlsZnNfZG5hbWUsCiYjNDM7CS5kX3dlYWtfcmV2YWxpZGF0ZQk9IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHsKJiM0MzsJLnN0YXRmcwk9IGZhaWxmc19zdGF0ZnMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhaWxmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsKJiM0MzsJcy0mZ3Q7c19tYXhieXRlcwkJPSBNQVhfTEZTX0ZJTEVTSVpFOwomIzQzOwlzLSZndDtzX2Jsb2Nrc2l6ZQkJPSBQQUdFX1NJWkU7CiYjNDM7CXMtJmd0O3NfYmxvY2tzaXplX2JpdHMJPSBQQUdFX1NISUZUOwomIzQzOwlzLSZndDtzX21hZ2ljCQk9IEZBSUxfRlNfTUFHSUM7CiYjNDM7CXMtJmd0O3Nfb3AJCQk9ICZhbXA7ZmFpbGZzX3N1cGVyX29wZXJhdGlvbnM7CiYjNDM7CXMtJmd0O3NfZXhwb3J0X29wCQk9IE5VTEw7CiYjNDM7CXMtJmd0O3NfeGF0dHIJCT0gTlVMTDsKJiM0MzsJcy0mZ3Q7c190aW1lX2dyYW4JCT0gMTsKJiM0MzsJcy0mZ3Q7c19kX2ZsYWdzCQk9IDA7CiYjNDM7CiYjNDM7CWlub2RlID0gbmV3X2lub2RlKHMpOwomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIGZhaWxmcyBzdXBwb3J0cyBubyBvcGVyYXRpb25zLi4uICovCiYjNDM7CWlub2RlLSZndDtpX21vZGUJPSBTX0lGRElSOwomIzQzOwlzZXRfbmxpbmsoaW5vZGUsIDIpOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcAk9ICZhbXA7ZmFpbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AJPSAmYW1wO2ZhaWxmc19kaXJfb3BlcmF0aW9uczsKJiM0MzsJc2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpOwomIzQzOwlpbm9kZS0mZ3Q7aV9pbm8JPSAxOwomIzQzOwkvKiAuLi4gYW5kIGlzIGltbXV0YWJsZS4gKi8KJiM0MzsJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiYjNDM7CiYjNDM7CXNldF9kZWZhdWx0X2Rfb3AocywgJmFtcDtmYWlsZnNfZGVudHJ5X29wZXJhdGlvbnMpOwomIzQzOwlzLSZndDtzX3Jvb3QgPSBkX21ha2Vfcm9vdChpbm9kZSk7CiYjNDM7CWlmICghcy0mZ3Q7c19yb290KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhaWxmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBmYWlsZnNfZmlsbF9zdXBlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGZhaWxmc19jb250ZXh0X29wcyA9IHsKJiM0MzsJLmdldF90cmVlCT0gZmFpbGZzX2dldF90cmVlLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYWlsZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CWZjLSZndDtvcHMJCT0gJmFtcDtmYWlsZnNfY29udGV4dF9vcHM7CiYjNDM7CWZjLSZndDtnbG9iYWwJPSB0cnVlOwomIzQzOwlmYy0mZ3Q7c2JfZmxhZ3MJfD0gU0JfTk9VU0VSOwomIzQzOwlmYy0mZ3Q7c19pZmxhZ3MJfD0gU0JfSV9OT0VYRUMgfCBTQl9JX05PREVWOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOwomIzQzOwomIzQzOwlmYWlsZnNfZ2V0X3Jvb3QoJmFtcDtwYXRoKTsKJiM0MzsJc2V0X2ZzX3B3ZChjdXJyZW50LSZndDtmcywgJmFtcDtwYXRoKTsKJiM0MzsJcGF0aF9wdXQoJmFtcDtwYXRoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBmYWlsZnNfZnNfdHlwZSA9IHsKJiM0MzsJLm5hbWUJCQk9ICYjMzQ7ZmFpbGZzJiMzNDssCiYjNDM7CS5pbml0X2ZzX2NvbnRleHQJPSBmYWlsZnNfaW5pdF9mc19jb250ZXh0LAomIzQzOwkua2lsbF9zYgkJPSBraWxsX2Fub25fc3VwZXIsCiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBmYWlsZnNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmc21vdW50ICptbnQ7CiYjNDM7CiYjNDM7CS8qIEEgc2luZ2xlIGluc3RhbmNlIHRoYXQgaXMgbWVtYmVyIG9mIG5vIG1vdW50IG5hbWVzcGFjZS4gKi8KJiM0MzsJbW50ID0ga2Vybl9tb3VudCgmYW1wO2ZhaWxmc19mc190eXBlKTsKJiM0MzsJaWYgKElTX0VSUihtbnQpKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IEZhaWxlZCB0byBjcmVhdGUgZmFpbGZzJiMzNDspOwomIzQzOwomIzQzOwlmYWlsZnNfcm9vdF9wYXRoLm1udAk9IG1udDsKJiM0MzsJZmFpbGZzX3Jvb3RfcGF0aC5kZW50cnkJPSBtbnQtJmd0O21udF9yb290OwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYxLi42N2FhMDQ0NDM1MWIxYSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oCkBAIC0zNjIsMyAmIzQzOzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHBpZGZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKTsKIHZvaWQgbnNmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7CiYjNDM7dm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpOwomIzQzO3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpOwomIzQzO2Jvb2wgZmFpbGZzX21udChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiYjNDM7aW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCAzZDVjZDViZjNiMDUzNy4uODdjMzY1ZjJmODJiYTMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVzcGFjZS5jCkBAIC02Mjc0LDYgJiM0Mzs2Mjc0LDcgQEAgdm9pZCBfX2luaXQgbW50X2luaXQodm9pZCkKIAlzaG1lbV9pbml0KCk7CiAJaW5pdF9yb290ZnMoKTsKIAlpbml0X21vdW50X3RyZWUoKTsKJiM0MzsJZmFpbGZzX2luaXQoKTsKIH0KIAogdm9pZCBwdXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucykKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmMKQEAgLTU3MCw5ICYjNDM7NTcwLDEyIEBAIFNZU0NBTExfREVGSU5FMShjaGRpciwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpCiAKIFNZU0NBTExfREVGSU5FMShmY2hkaXIsIHVuc2lnbmVkIGludCwgZmQpCiB7Ci0JQ0xBU1MoZmRfcmF3LCBmKShmZCk7CiAJaW50IGVycm9yOwogCiYjNDM7CWlmICgoaW50KWZkID09IEZEX0ZBSUxGU19ST09UKQomIzQzOwkJcmV0dXJuIGZhaWxmc19jdXJyZW50X2NoZGlyKCk7CiYjNDM7CiYjNDM7CUNMQVNTKGZkX3JhdywgZikoZmQpOwogCWlmIChmZF9lbXB0eShmKSkKIAkJcmV0dXJuIC1FQkFERjsKIApAQCAtNjE1LDYgJiM0Mzs2MTgsNTIgQEAgU1lTQ0FMTF9ERUZJTkUxKGNocm9vdCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpCiAJcmV0dXJuIGVycm9yOwogfQogCiYjNDM7U1lTQ0FMTF9ERUZJTkUyKGZjaHJvb3QsIGludCwgZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChmbGFncykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHsKJiM0MzsJCWlmICghbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgQ0FQX1NZU19DSFJPT1QpKSB7CiYjNDM7CQkJaWYgKCF0YXNrX25vX25ld19wcml2cyhjdXJyZW50KSkKJiM0MzsJCQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCQkvKiBBIHNoYXJlZCBmc19zdHJ1Y3QgbGV0cyBhIHNpYmxpbmcgZXhlYyBzZXR1aWQgcGFzdCB0aGUgY2hlY2sgYWJvdmUuICovCiYjNDM7CQkJaWYgKGN1cnJlbnQtJmd0O2ZzLSZndDt1c2VycyAhPSAxKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkvKiBNb3ZpbmcgdGhlIHJvb3QgdG8gZmFpbGZzIGxpZnRzIHRoZSBvbGQgcm9vdCYjMzk7cyAmIzM0Oy4uJiMzNDsgYmFycmllci4gKi8KJiM0MzsJCQlpZiAoY3VycmVudF9jaHJvb3RlZCgpKQomIzQzOwkJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwkJfQomIzQzOwkJZmFpbGZzX2dldF9yb290KCZhbXA7cGF0aCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlDTEFTUyhmZF9yYXcsIGYpKGZkKTsKJiM0MzsJCWlmIChmZF9lbXB0eShmKSkKJiM0MzsJCQlyZXR1cm4gLUVCQURGOwomIzQzOwomIzQzOwkJaWYgKCFkX2Nhbl9sb29rdXAoZmRfZmlsZShmKS0mZ3Q7Zl9wYXRoLmRlbnRyeSkpCiYjNDM7CQkJcmV0dXJuIC1FTk9URElSOwomIzQzOwomIzQzOwkJZXJyb3IgPSBmaWxlX3Blcm1pc3Npb24oZmRfZmlsZShmKSwgTUFZX0VYRUMgfCBNQVlfQ0hESVIpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJCWlmICghbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgQ0FQX1NZU19DSFJPT1QpKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CQlwYXRoID0gZmRfZmlsZShmKS0mZ3Q7Zl9wYXRoOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtwYXRoKTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X3BhdGhfY2hyb290KCZhbXA7cGF0aCk7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlzZXRfZnNfcm9vdChjdXJyZW50LSZndDtmcywgJmFtcDtwYXRoKTsKJiM0MzsJcGF0aF9wdXQoJmFtcDtwYXRoKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKIGludCBjaG1vZF9jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDg3NGQ5MDY3YTQzYjUwLi44NDEzYjYyNGFkNDc4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNDU3LDYgJiM0Mzs0NTcsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzX2ZhY2Nlc3NhdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwKIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmNoZGlyKHVuc2lnbmVkIGludCBmZCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2Nocm9vdChjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUpOwomIzQzO2FzbWxpbmthZ2UgbG9uZyBzeXNfZmNocm9vdChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZCh1bnNpZ25lZCBpbnQgZmQsIHVtb2RlX3QgbW9kZSk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZGF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCSAgICAgdW1vZGVfdCBtb2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTg2Myw4ICYjNDM7ODYzLDEyIEBAIF9fU1lTQ0FMTChfX05SX2xpc3Rucywgc3lzX2xpc3RucykKICNkZWZpbmUgX19OUl9yc2VxX3NsaWNlX3lpZWxkIDQ3MQogX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpCiAKJiM0MzsvKiBmcy9vcGVuLmMgKi8KJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzIKJiM0MztfX1NZU0NBTEwoX19OUl9mY2hyb290LCBzeXNfZmNocm9vdCkKJiM0MzsKICN1bmRlZiBfX05SX3N5c2NhbGxzCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDcyCiYjNDM7I2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MwogCiAvKgogICogMzIgYml0IHN5c3RlbXMgdHJhZGl0aW9uYWxseSB1c2VkIGRpZmZlcmVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaAppbmRleCBhYWRmYmY2ZTBjYjNhMC4uZTQzZTNkZTNlOWVlNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oCkBAIC0xMjQsNiAmIzQzOzEyNCw3IEBAIHN0cnVjdCBkZWxlZ2F0aW9uIHsKIAogI2RlZmluZSBGRF9QSURGU19ST09UCQkJLTEwMDAyIC8qIFJvb3Qgb2YgdGhlIHBpZGZzIGZpbGVzeXN0ZW0gKi8KICNkZWZpbmUgRkRfTlNGU19ST09UCQkJLTEwMDAzIC8qIFJvb3Qgb2YgdGhlIG5zZnMgZmlsZXN5c3RlbSAqLwomIzQzOyNkZWZpbmUgRkRfRkFJTEZTX1JPT1QJCQktMTAwMDQgLyogUm9vdCBvZiB0aGUgZmFpbGZzIGZpbGVzeXN0ZW0gKi8KICNkZWZpbmUgRkRfSU5WQUxJRAkJCS0xMDAwOSAvKiBJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjogLTEwMDAwIC0gRUJBREYgPSAtMTAwMDkgKi8KIAogLyogR2VuZXJpYyBmbGFncyBmb3IgdGhlICphdCgyKSBmYW1pbHkgb2Ygc3lzY2FsbHMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oCmluZGV4IDRmMmRhOTM1YTc2Y2NhLi5mZDVmMGU5NTY0OGVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKQEAgLTEwNSw1ICYjNDM7MTA1LDYgQEAKICNkZWZpbmUgUElEX0ZTX01BR0lDCQkweDUwNDk0NDQ2CS8qICYjMzQ7UElERiYjMzQ7ICovCiAjZGVmaW5lIEdVRVNUX01FTUZEX01BR0lDCTB4NDc0ZDQ1NGQJLyogJiMzNDtHTUVNJiMzNDsgKi8KICNkZWZpbmUgTlVMTF9GU19NQUdJQwkJMHg0RTU1NEM0QwkvKiAmIzM0O05VTEwmIzM0OyAqLwomIzQzOyNkZWZpbmUgRkFJTF9GU19NQUdJQwkJMHg0NjQxNDk0QwkvKiAmIzM0O0ZBSUwmIzM0OyAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9NQUdJQ19IX18gKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsCmluZGV4IDdhNDJiMzJiNjU3NzY3Li4wYWI1MzE2MDUxMjAyZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9zeXNjYWxsLnRibAomIzQzOyYjNDM7JiM0MzsgYi9zY3JpcHRzL3N5c2NhbGwudGJsCkBAIC00MTIsMyAmIzQzOzQxMiw0IEBACiA0NjkJY29tbW9uCWZpbGVfc2V0YXR0cgkJCXN5c19maWxlX3NldGF0dHIKIDQ3MAljb21tb24JbGlzdG5zCQkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAkJc3lzX3JzZXFfc2xpY2VfeWllbGQKJiM0Mzs0NzIJY29tbW9uCWZjaHJvb3QJCQkJc3lzX2ZjaHJvb3QKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTg2Myw4ICYjNDM7ODYzLDEyIEBAIF9fU1lTQ0FMTChfX05SX2xpc3Rucywgc3lzX2xpc3RucykKICNkZWZpbmUgX19OUl9yc2VxX3NsaWNlX3lpZWxkIDQ3MQogX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpCiAKJiM0MzsvKiBmcy9vcGVuLmMgKi8KJiM0MzsjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzIKJiM0MztfX1NZU0NBTEwoX19OUl9mY2hyb290LCBzeXNfZmNocm9vdCkKJiM0MzsKICN1bmRlZiBfX05SX3N5c2NhbGxzCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDcyCiYjNDM7I2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MwogCiAvKgogICogMzIgYml0IHN5c3RlbXMgdHJhZGl0aW9uYWxseSB1c2VkIGRpZmZlcmVudApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKaW5kZXggNTI0MTU1ZDY1NWRhMTUuLmQ1YjYwNDViMDA5MGNjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwKQEAgLTM5Niw2ICYjNDM7Mzk2LDcgQEAKIDQ2OQljb21tb24JZmlsZV9zZXRhdHRyCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCXN5c19saXN0bnMKIDQ3MQljb21tb24JcnNlcV9zbGljZV95aWVsZAlzeXNfcnNlcV9zbGljZV95aWVsZAomIzQzOzQ3Mgljb21tb24JZmNocm9vdAkJCXN5c19mY2hyb290CiAKICMKICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5CmRpZmYgLS1naXQgYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsIGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibAppbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibApAQCAtNDEyLDMgJiM0Mzs0MTIsNCBAQAogNDY5CWNvbW1vbglmaWxlX3NldGF0dHIJCQlzeXNfZmlsZV9zZXRhdHRyCiA0NzAJY29tbW9uCWxpc3RucwkJCQlzeXNfbGlzdG5zCiA0NzEJY29tbW9uCXJzZXFfc2xpY2VfeWllbGQJCXN5c19yc2VxX3NsaWNlX3lpZWxkCiYjNDM7NDcyCWNvbW1vbglmY2hyb290CQkJCXN5c19mY2hyb290CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlCmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKQEAgLTMzLDYgJiM0MzszMyw3IEBAIFRBUkdFVFMgJiM0Mzs9IGZjaG1vZGF0MgogVEFSR0VUUyAmIzQzOz0gZmlsZXN5c3RlbXMKIFRBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zL2JpbmRlcmZzCiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9lcG9sbAomIzQzO1RBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zL2ZhaWxmcwogVEFSR0VUUyAmIzQzOz0gZmlsZXN5c3RlbXMvZmF0CiBUQVJHRVRTICYjNDM7PSBmaWxlc3lzdGVtcy9vdmVybGF5ZnMKIFRBUkdFVFMgJiM0Mzs9IGZpbGVzeXN0ZW1zL3N0YXRtb3VudApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2QzYjVkODg0ZDdlYTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZQpAQCAtMCwwICYjNDM7MSwyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7ZmFpbGZzX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uM2M1ZDk4YjRmZTcyNWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpCiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3QKJiM0MzsKJiM0MztpbmNsdWRlIC4uLy4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2M0NjFkYzQ4M2E5OTcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSw1ODEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21vdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9wcmN0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3Zmcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uL2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNpZm5kZWYgX19OUl9mY2hyb290CiYjNDM7I2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBGRF9QSURGU19ST09UCiYjNDM7I2RlZmluZSBGRF9QSURGU19ST09UIC0xMDAwMgomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgRkRfTlNGU19ST09UCiYjNDM7I2RlZmluZSBGRF9OU0ZTX1JPT1QgLTEwMDAzCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBGRF9GQUlMRlNfUk9PVAomIzQzOyNkZWZpbmUgRkRfRkFJTEZTX1JPT1QgLTEwMDA0CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBOT0JPRFlfVUlEIDY1NTM0CiYjNDM7CiYjNDM7LyogQ2hpbGQgc2VudGluZWwgZXhpdCBjb2RlOiB0aGUgZXhlYyB3YXMgYmxvY2tlZCBhcyBleHBlY3RlZC4gKi8KJiM0MzsjZGVmaW5lIEZBSUxGU19FWEVDX0JMT0NLRUQgOTkKJiM0MzsKJiM0MzsvKiBTdGFjayBmb3IgdGhlIENMT05FX0ZTIGhlbHBlciBpbiBmY2hyb290X3NlbnRpbmVsX3NoYXJlZF9mc19zdHJ1Y3QuICovCiYjNDM7I2RlZmluZSBGQUlMRlNfQ0xPTkVfU1RBQ0sgKDY0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9mY2hyb290LCBmZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJhdyBzeXNjYWxsOiBnbGliYyYjMzk7cyBnZXRjd2QoKSByZWplY3RzIHRoZSBrZXJuZWwmIzM5O3MgJiMzNDsodW5yZWFjaGFibGUpJiMzNDsKJiM0MzsgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nIHN5c19nZXRjd2QoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNjYWxsKF9fTlJfZ2V0Y3dkLCBidWYsIHNpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRyb3BfdG9fbm9ib2R5KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gc2V0cmVzdWlkKE5PQk9EWV9VSUQsIE5PQk9EWV9VSUQsIE5PQk9EWV9VSUQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQYXJrZWQgQ0xPTkVfRlMgY2hpbGQ7IGRpZXMgd2l0aCBpdHMgcGFyZW50IHNvIGl0IG5ldmVyIGxlYWtzLiAqLwomIzQzO3N0YXRpYyBpbnQgZmFpbGZzX3Bhcmsodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJKHZvaWQpYXJnOwomIzQzOwlwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdLSUxMKTsKJiM0MzsJcGF1c2UoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi8KJiM0MztzdGF0aWMgaW50IGVsZl9oYXNfYWJzb2x1dGVfaW50ZXJwKGludCBmZCkKJiM0Mzt7CiYjNDM7CUVsZlcoRWhkcikgZWhkcjsKJiM0MzsJRWxmVyhQaGRyKSBwaGRyOwomIzQzOwljaGFyIGludGVycDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChwcmVhZChmZCwgJmFtcDtlaGRyLCBzaXplb2YoZWhkciksIDApICE9IHNpemVvZihlaGRyKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAobWVtY21wKGVoZHIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLmVfcGhudW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocHJlYWQoZmQsICZhbXA7cGhkciwgc2l6ZW9mKHBoZHIpLAomIzQzOwkJCSAgZWhkci5lX3Bob2ZmICYjNDM7IGkgKiBzaXplb2YocGhkcikpICE9IHNpemVvZihwaGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChwaGRyLnBfdHlwZSAhPSBQVF9JTlRFUlApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAocHJlYWQoZmQsICZhbXA7aW50ZXJwLCAxLCBwaGRyLnBfb2Zmc2V0KSAhPSAxKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGludGVycCA9PSAmIzM5Oy8mIzM5OzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChmY2hkaXJfc2VudGluZWwpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZltQQVRIX01BWF07CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApOwomIzQzOwomIzQzOwkvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgdW5yZWFjaGFibGUgZnJvbSB0aGUgcHJvY2VzcyByb290LiAqLwomIzQzOwlBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgJiMzNDsodW5yZWFjaGFibGUpJiMzNDssIDEzKSwgMCk7CiYjNDM7CiYjNDM7CS8qIEV2ZXJ5IEFUX0ZEQ1dELXJlbGF0aXZlIGxvb2t1cCBmYWlscy4gKi8KJiM0MzsJQVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgJiMzNDtmb28mIzM0OywgT19SRE9OTFkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CUFTU0VSVF9FUShvcGVuYXQoQVRfRkRDV0QsICYjMzQ7LiYjMzQ7LCBPX1JET05MWSksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsJQVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgJiMzNDsuLiYjMzQ7LCBPX1JET05MWSksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsJQVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgJiMzNDtmb28mIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgY3dkIGNhbm5vdCBiZSBwaW5uZWQgYnkgZm9sbG93aW5nIC9wcm9jL3NlbGYvY3dkIGludG8gaXQuICovCiYjNDM7CUFTU0VSVF9FUShvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9jd2QmIzM0OywgT19QQVRIKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgcm9vdCBpcyB1bnRvdWNoZWQgc28gYWJzb2x1dGUgbG9va3VwcyBrZWVwIHdvcmtpbmcuLi4gKi8KJiM0MzsJZmQgPSBvcGVuKCYjMzQ7LyYjMzQ7LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CiYjNDM7CS8qIC4uLiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSByZWNvdmVyZWQuICovCiYjNDM7CUFTU0VSVF9FUShjaGRpcigmIzM0Oy8mIzM0OyksIDApOwomIzQzOwlBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdHJjbXAoYnVmLCAmIzM0Oy8mIzM0OyksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaGRpcl9yZWplY3RzX290aGVyX3NlbnRpbmVscykKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShmY2hkaXIoRkRfUElERlNfUk9PVCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFQkFERik7CiYjNDM7CUFTU0VSVF9FUShmY2hkaXIoRkRfTlNGU19ST09UKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVCQURGKTsKJiM0MzsJQVNTRVJUX0VRKGZjaGRpcigtMTAwMDkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3RfZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMSksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KGZkLCAxKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3RfYmFkX2ZkKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KC0xLCAwKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVCQURGKTsKJiM0MzsKJiM0MzsJLyogT25seSBGRF9GQUlMRlNfUk9PVCBpcyBhIHZhbGlkIHNlbnRpbmVsLiAqLwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfUElERlNfUk9PVCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFQkFERik7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9OU0ZTX1JPT1QsIDApLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfbm90ZGlyKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zZWxmL3N0YXR1cyYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9yZWFsZmRfcmVxdWlyZXNfY2FwKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpID09IDApCiYjNDM7CQlBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy8mIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDApLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRVBFUk0pOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChmY2hyb290X3JlYWxmZCkKJiM0Mzt7CiYjNDM7CWNoYXIgdGVtcGxhdGVbXSA9ICYjMzQ7L3RtcC9mYWlsZnNfdGVzdC5YWFhYWFgmIzM0OzsKJiM0MzsJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJc3RydWN0IHN0YXQgc3Q7CiYjNDM7CWludCB0bXBmZCwgZGZkLCBmZDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZmNocm9vdCgpIHdpdGggYSByZWd1bGFyIGZkIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UJiMzNDspOwomIzQzOwomIzQzOwl0bXBmZCA9IG9wZW4oJiMzNDsvdG1wJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKHRtcGZkLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2NhbmFyeSYjMzQ7LCB0ZW1wbGF0ZSk7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsKJiM0MzsJZGZkID0gb3Blbih0ZW1wbGF0ZSwgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UoZGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KGRmZCwgMCksIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZGZkKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzdGF0KCYjMzQ7L2NhbmFyeSYjMzQ7LCAmYW1wO3N0KSwgMCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXA6IGRpcmZkLWFuY2hvcmVkIEkvTyB3b3JrcyB3aXRoIHRoZSBuZXcgcm9vdC4gKi8KJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2NhbmFyeSYjMzQ7LCB0ZW1wbGF0ZSAmIzQzOyBzdHJsZW4oJiMzNDsvdG1wLyYjMzQ7KSk7CiYjNDM7CXVubGlua2F0KHRtcGZkLCBwYXRoLCAwKTsKJiM0MzsJdW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbigmIzM0Oy90bXAvJiMzNDspLCBBVF9SRU1PVkVESVIpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWwpCiYjNDM7ewomIzQzOwljaGFyIHRlbXBsYXRlW10gPSAmIzM0Oy90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYJiMzNDs7CiYjNDM7CXN0cnVjdCBzdGF0IHJlYWxyb290LCBzdDsKJiM0MzsJc3RydWN0IHN0YXRmcyBzZnM7CiYjNDM7CWNoYXIgYnVmW1BBVEhfTUFYXTsKJiM0MzsJaW50IHByb2NmZCwgdG1wZmQsIGRmZCwgZmQ7CiYjNDM7CXN0cnVjdCB7CiYjNDM7CQlzdHJ1Y3QgZmlsZV9oYW5kbGUgaGFuZGxlOwomIzQzOwkJdW5zaWduZWQgY2hhciBmX2hhbmRsZVtNQVhfSEFORExFX1NaXTsKJiM0MzsJfSBmaDsKJiM0MzsJaW50IG1udGlkOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHN0YXQoJiMzNDsvJiMzNDssICZhbXA7cmVhbHJvb3QpLCAwKTsKJiM0MzsJcHJvY2ZkID0gb3BlbigmIzM0Oy9wcm9jJiMzNDssIE9fUEFUSCB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKHByb2NmZCwgMCk7CiYjNDM7CXRtcGZkID0gb3BlbigmIzM0Oy90bXAmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UodG1wZmQsIDApOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpOwomIzQzOwlkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGRmZCwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApOwomIzQzOwomIzQzOwkvKiBBYnNvbHV0ZSBsb29rdXBzIGZhaWwuICovCiYjNDM7CUFTU0VSVF9FUShvcGVuKCYjMzQ7L2V0Yy9wYXNzd2QmIzM0OywgT19SRE9OTFkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CUFTU0VSVF9FUShta2RpcigmIzM0Oy9mb28mIzM0OywgMDcwMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHJvb3QgY2Fubm90IGJlIHJlZmVyZW5jZWQgYXQgYWxsIC0gbm90IGV2ZW4gYW4gT19QQVRIIG9wZW4sCiYjNDM7CSAqIHdoaWNoIHNraXBzIC0mZ3Q7cGVybWlzc2lvbigpLCBiZWNhdXNlIGl0IGxhbmRzIG9uIHRoZSByb290IGFzIGEKJiM0MzsJICoganVtcGVkIHdhbGsgdGVybWluYWwgdGhhdCAtJmd0O2Rfd2Vha19yZXZhbGlkYXRlKCkgcmVmdXNlcy4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShvcGVuKCYjMzQ7LyYjMzQ7LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwlBU1NFUlRfRVEob3BlbigmIzM0Oy8mIzM0OywgT19QQVRIKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwlBU1NFUlRfRVEoc3RhdGZzKCYjMzQ7LyYjMzQ7LCAmYW1wO3NmcyksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSXQgY2Fubm90IGJlIHBpbm5lZCBieSBmb2xsb3dpbmcgL3Byb2Mvc2VsZi9yb290IGludG8gaXQgZWl0aGVyCiYjNDM7CSAqIChvbmx5IHRoZSByb290IGlzIGluIGZhaWxmcyBoZXJlLCBzbyBzZWxmL2N3ZCBpcyBzdGlsbCByZWFsKS4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShvcGVuYXQocHJvY2ZkLCAmIzM0O3NlbGYvcm9vdCYjMzQ7LCBPX1BBVEgpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CiYjNDM7CS8qIE5vciBlbmNvZGVkIGludG8gYSBmaWxlIGhhbmRsZS4gKi8KJiM0MzsJZmguaGFuZGxlLmhhbmRsZV9ieXRlcyA9IE1BWF9IQU5ETEVfU1o7CiYjNDM7CUFTU0VSVF9FUShuYW1lX3RvX2hhbmRsZV9hdChBVF9GRENXRCwgJiMzNDsvJiMzNDssICZhbXA7ZmguaGFuZGxlLCAmYW1wO21udGlkLCAwKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgbm93IHVucmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuICovCiYjNDM7CUFTU0VSVF9HVChzeXNfZ2V0Y3dkKGJ1Ziwgc2l6ZW9mKGJ1ZikpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHN0cm5jbXAoYnVmLCAmIzM0Oyh1bnJlYWNoYWJsZSkmIzM0OywgMTMpLCAwKTsKJiM0MzsKJiM0MzsJLyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi8KJiM0MzsJZmQgPSBvcGVuYXQoQVRfRkRDV0QsICYjMzQ7LiYjMzQ7LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CWZkID0gb3BlbmF0KGRmZCwgJiMzNDtjYW5hcnkmIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHdyaXRlKGZkLCAmIzM0O3gmIzM0OywgMSksIDEpOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJZmQgPSBvcGVuYXQoZGZkLCAmIzM0O2NhbmFyeSYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCk7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzOwomIzQzOwkvKiAmIzM0Oy4uJiMzNDsgd2Fsa3MgY2xhbXAgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZSwgbm90IGF0IGZhaWxmcy4gKi8KJiM0MzsJZmQgPSBvcGVuYXQoQVRfRkRDV0QsICYjMzQ7Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4mIzM0OywgT19QQVRIKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGZzdGF0KGZkLCAmYW1wO3N0KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdC5zdF9kZXYsIHJlYWxyb290LnN0X2Rldik7CiYjNDM7CUFTU0VSVF9FUShzdC5zdF9pbm8sIHJlYWxyb290LnN0X2lubyk7CiYjNDM7CUFTU0VSVF9FUShjbG9zZShmZCksIDApOwomIzQzOwomIzQzOwkvKiByZWFkbGluayBvZiB0aGUgbWFnaWMgbGluayBzdGlsbCB3b3JrczogaXQgZG9lcyBub3QgZm9sbG93LiAqLwomIzQzOwlyZXQgPSByZWFkbGlua2F0KHByb2NmZCwgJiMzNDtzZWxmL3Jvb3QmIzM0OywgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwomIzQzOwlBU1NFUlRfR1QocmV0LCAwKTsKJiM0MzsJYnVmW3JldF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CVRIX0xPRygmIzM0Oy9wcm9jL3NlbGYvcm9vdCBwb2ludHMgdG8gJiMzOTslcyYjMzk7JiMzNDssIGJ1Zik7CiYjNDM7CS8qIGRfcGF0aCgpIG5hbWVzIHRoZSBmYWlsZnMgcm9vdCBzeW50aGV0aWNhbGx5LCBuZXZlciBhcyBhIHJlYWwgcGF0aC4gKi8KJiM0MzsJQVNTRVJUX0VRKHN0cmNtcChidWYsICYjMzQ7ZmFpbGZzOi8mIzM0OyksIDApOwomIzQzOwomIzQzOwkvKiBCdXQgZm9sbG93aW5nIGl0IGludG8gZmFpbGZzIGlzIHJlZnVzZWQuICovCiYjNDM7CUFTU0VSVF9FUShmc3RhdGF0KHByb2NmZCwgJiMzNDtzZWxmL3Jvb3QmIzM0OywgJmFtcDtzdCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyogQmVzdC1lZmZvcnQgY2xlYW51cCB2aWEgdGhlIHByZS1vcGVuZWQgZGlyZmRzLiAqLwomIzQzOwl1bmxpbmthdChkZmQsICYjMzQ7Y2FuYXJ5JiMzNDssIDApOwomIzQzOwl1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgJiM0Mzsgc3RybGVuKCYjMzQ7L3RtcC8mIzM0OyksIEFUX1JFTU9WRURJUik7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9hYnNvbHV0ZV9zeW1saW5rKQomIzQzO3sKJiM0MzsJY2hhciB0ZW1wbGF0ZVtdID0gJiMzNDsvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWCYjMzQ7OwomIzQzOwlpbnQgdG1wZmQsIGRmZCwgZmQ7CiYjNDM7CiYjNDM7CWlmIChnZXRldWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1QmIzM0Oyk7CiYjNDM7CiYjNDM7CXRtcGZkID0gb3BlbigmIzM0Oy90bXAmIzM0OywgT19QQVRIIHwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0UodG1wZmQsIDApOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpOwomIzQzOwlkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKGRmZCwgMCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KGRmZCwgJiMzNDt0YXJnZXQmIzM0OywgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeW1saW5rYXQoJiMzNDt0YXJnZXQmIzM0OywgZGZkLCAmIzM0O3JlbCYjMzQ7KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeW1saW5rYXQoJiMzNDsvZXRjJiMzNDssIGRmZCwgJiMzNDthYnMmIzM0OyksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyogUmVsYXRpdmUgc3ltbGlua3Mga2VlcCByZXNvbHZpbmcgd2l0aGluIHRoZSBkaXJmZC1hbmNob3JlZCB3YWxrLi4uICovCiYjNDM7CWZkID0gb3BlbmF0KGRmZCwgJiMzNDtyZWwmIzM0OywgT19SRE9OTFkpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsKJiM0MzsJLyogLi4uIGFic29sdXRlIHN5bWxpbmtzIHJlc3RhcnQgdGhlIHdhbGsgYXQgdGhlIGZhaWxmcyByb290LiAqLwomIzQzOwlBU1NFUlRfRVEob3BlbmF0KGRmZCwgJiMzNDthYnMmIzM0OywgT19SRE9OTFkpLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgdmlhIHRoZSBwcmUtb3BlbmVkIGRpcmZkcy4gKi8KJiM0MzsJdW5saW5rYXQoZGZkLCAmIzM0O2FicyYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGZkLCAmIzM0O3JlbCYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGZkLCAmIzM0O3RhcmdldCYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQodG1wZmQsIHRlbXBsYXRlICYjNDM7IHN0cmxlbigmIzM0Oy90bXAvJiMzNDspLCBBVF9SRU1PVkVESVIpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfdW5wcml2aWxlZ2VkKQomIzQzO3sKJiM0MzsJY2hhciBidWZbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpID09IDApCiYjNDM7CQlBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFdpdGhvdXQgbm9fbmV3X3ByaXZzIGVudGVyaW5nIGZhaWxmcyBpcyBub3QgYWxsb3dlZC4uLiAqLwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAtMSk7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRVBFUk0pOwomIzQzOwomIzQzOwkvKiAuLi4gd2l0aCBub19uZXdfcHJpdnMgc2V0IGl0IGlzIGFsbG93ZWQuICovCiYjNDM7CUFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEob3BlbigmIzM0Oy9ldGMvcGFzc3dkJiMzNDssIE9fUkRPTkxZKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzOwomIzQzOwkvKiBUaGUgdGFzayBjb3VudHMgYXMgY2hyb290ZWQ6IG5vIHVzZXIgbmFtZXNwYWNlcyBhbnltb3JlLiAqLwomIzQzOwlBU1NFUlRfRVEodW5zaGFyZShDTE9ORV9ORVdVU0VSKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTsKJiM0MzsKJiM0MzsJLyogV2l0aCBib3RoIHJvb3QgYW5kIGN3ZCBpbiBmYWlsZnMgZ2V0Y3dkKCkgcmVwb3J0cyAmIzM0Oy8mIzM0Oy4gKi8KJiM0MzsJQVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApOwomIzQzOwlBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzdHJjbXAoYnVmLCAmIzM0Oy8mIzM0OyksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfcmVqZWN0ZWRfd2hlbl9jaHJvb3RlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgdGVtcGxhdGVbXSA9ICYjMzQ7L3RtcC9mYWlsZnNfdGVzdC5YWFhYWFgmIzM0OzsKJiM0MzsJaW50IHRtcGZkOwomIzQzOwomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtjaHJvb3QoKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJdG1wZmQgPSBvcGVuKCYjMzQ7L3RtcCYjMzQ7LCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7CiYjNDM7CUFTU0VSVF9HRSh0bXBmZCwgMCk7CiYjNDM7CUFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShjaHJvb3QodGVtcGxhdGUpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNoZGlyKCYjMzQ7LyYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CS8qIFJlbW92ZSB0aGUgamFpbCB3aGlsZSBzdGlsbCBwcml2aWxlZ2VkOyBzdGlja3kgL3RtcCBibG9ja3Mgbm9ib2R5LiAqLwomIzQzOwl1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgJiM0Mzsgc3RybGVuKCYjMzQ7L3RtcC8mIzM0OyksIEFUX1JFTU9WRURJUik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyogQW4gdW5wcml2aWxlZ2VkIGNocm9vdGVkIHRhc2sgbXVzdCBub3QgbGlmdCBpdHMgJiMzNDsuLiYjMzQ7IGJhcnJpZXIuICovCiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0KQomIzQzO3sKJiM0MzsJY2hhciBzdGFja1tGQUlMRlNfQ0xPTkVfU1RBQ0tdOwomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CiYjNDM7CWlmIChnZXRldWlkKCkgPT0gMCkKJiM0MzsJCUFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTsKJiM0MzsKJiM0MzsJLyogQSBDTE9ORV9GUyBzaWJsaW5nIHNoYXJlcyB0aGUgZnNfc3RydWN0OiBidW1wIGZzLSZndDt1c2VycyB0byAyLiAqLwomIzQzOwlwaWQgPSBjbG9uZShmYWlsZnNfcGFyaywgc3RhY2sgJiM0Mzsgc2l6ZW9mKHN0YWNrKSwgQ0xPTkVfRlMgfCBTSUdDSExELAomIzQzOwkJICAgIE5VTEwpOwomIzQzOwlBU1NFUlRfR0UocGlkLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSBzaWJsaW5nIHdpdGhvdXQgbm9fbmV3X3ByaXZzIGNvdWxkIGV4ZWMgYSBzZXR1aWQgYmluYXJ5IHdpdGgKJiM0MzsJICogdGhlIGZhaWxmcyByb290LCBzbyBhIHNoYXJlZCBmc19zdHJ1Y3QgaXMgcmVmdXNlZCBldmVuIHdpdGgKJiM0MzsJICogbm9fbmV3X3ByaXZzIHNldC4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoa2lsbChwaWQsIFNJR0tJTEwpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBOVUxMLCAwKSwgcGlkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChmY2hyb290X3NlbnRpbmVsX25vX292ZXJtb3VudCkKJiM0Mzt7CiYjNDM7CWlmIChnZXRldWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21vdW50aW5nIHJlcXVpcmVzIHByaXZpbGVnZXMmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENvbnRhaW4gdGhlIGJsYXN0IHJhZGl1czogaWYgZmFpbGZzIGV2ZXIgcmVncmVzc2VkIGFuZCAmIzM0Oy8mIzM0OwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGUgcmVhbCByb290LCB0aGUgdG1wZnMgbW91bnQgYmVsb3cgbXVzdCBub3QgdG91Y2gKJiM0MzsJICogdGhlIGhvc3QuIEEgcHJpdmF0ZSBtb3VudCBuYW1lc3BhY2Uga2VlcHMgaXQgbG9jYWwgdG8gdGhpcyBjaGlsZC4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV05TKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShtb3VudChOVUxMLCAmIzM0Oy8mIzM0OywgTlVMTCwgTVNfUkVDIHwgTVNfUFJJVkFURSwgTlVMTCksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2YgdGhlIGZhaWxmcyByb290LiBJdCBjYW5ub3QgZXZlbgomIzQzOwkgKiBiZSBuYW1lZCBhcyBhIG1vdW50IHRhcmdldDogcmVzb2x2aW5nICYjMzQ7LyYjMzQ7IGlzIHJlZnVzZWQgYmVmb3JlIHRoZQomIzQzOwkgKiBtb3VudCBtYWNoaW5lcnkgKHdoaWNoLCBmYWlsZnMgYmVpbmcgaW4gbm8gbW91bnQgbmFtZXNwYWNlLCB3b3VsZAomIzQzOwkgKiByZWplY3QgaXQgYW55d2F5KSBpcyBldmVyIHJlYWNoZWQuIG9wZW5fdHJlZShPUEVOX1RSRUVfQ0xPTkUpIGlzCiYjNDM7CSAqIGxpa2V3aXNlIG1vb3Qgc2luY2Ugbm8gZmQgdG8gdGhlIHJvb3QgY2FuIGJlIG9idGFpbmVkLgomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKG1vdW50KCYjMzQ7bm9uZSYjMzQ7LCAmIzM0Oy8mIzM0OywgJiMzNDt0bXBmcyYjMzQ7LCAwLCBOVUxMKSwgLTEpOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfc2V0bnNfZXNjYXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN0YXQgcmVhbHJvb3QsIHN0OwomIzQzOwlpbnQgbnNmZDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7c2V0bnMoKSB0byBhIG1vdW50IG5hbWVzcGFjZSByZXF1aXJlcyBwcml2aWxlZ2VzJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3RhdCgmIzM0Oy8mIzM0OywgJmFtcDtyZWFscm9vdCksIDApOwomIzQzOwluc2ZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvbnMvbW50JiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJQVNTRVJUX0dFKG5zZmQsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTsKJiM0MzsJQVNTRVJUX0VRKG9wZW4oJiMzNDsvZXRjJiMzNDssIE9fUEFUSCksIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTsKJiM0MzsKJiM0MzsJLyogQSBtb3VudCBuYW1lc3BhY2UgZmQgaXMgdGhlIGtleSBvdXQ6IGl0IHJlc2V0cyByb290IGFuZCBjd2QuICovCiYjNDM7CUFTU0VSVF9FUShzZXRucyhuc2ZkLCBDTE9ORV9ORVdOUyksIDApOwomIzQzOwlBU1NFUlRfRVEoY2xvc2UobnNmZCksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc3RhdCgmIzM0Oy8mIzM0OywgJmFtcDtzdCksIDApOwomIzQzOwlBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpOwomIzQzOwlBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlYykKJiM0Mzt7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEV4ZWMgaW4gYSBjaGlsZDogYSB3cm9uZ2x5IHN1Y2Nlc3NmdWwgZXhlYyB3b3VsZCByZXBsYWNlIHRoZSB0ZXN0CiYjNDM7CSAqIGltYWdlIGFuZCBpdHMgZXhpdCBjb2RlIHdvdWxkIG5vdCBtYXRjaCB0aGUgc2VudGluZWwgYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CUFTU0VSVF9HRShwaWQsIDApOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWV4ZWNsKCYjMzQ7L2Jpbi90cnVlJiMzNDssICYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMKTsKJiM0MzsJCV9leGl0KGVycm5vID09IEVPUE5PVFNVUFAgPyBGQUlMRlNfRVhFQ19CTE9DS0VEIDogMSk7CiYjNDM7CX0KJiM0MzsJQVNTRVJUX0VRKHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCksIHBpZCk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKJiM0MzsJQVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEZBSUxGU19FWEVDX0JMT0NLRUQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlY19pbnRlcnByZXRlcikKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXJndltdID0geyAmIzM0O2ZhaWxmc190ZXN0JiMzNDssIE5VTEwgfTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbnZwW10gPSB7IE5VTEwgfTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwlpbnQgc3RhdHVzLCBleGVmZDsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRXhlYyBvdXJzZWx2ZXM6IHRoZSBvbmUgYmluYXJ5IGd1YXJhbnRlZWQgdG8gYmUgYXJvdW5kLiAqLwomIzQzOwlleGVmZCA9IG9wZW4oJiMzNDsvcHJvYy9zZWxmL2V4ZSYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9HRShleGVmZCwgMCk7CiYjNDM7CWlmICghZWxmX2hhc19hYnNvbHV0ZV9pbnRlcnAoZXhlZmQpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dGVzdCBiaW5hcnkgaGFzIG5vIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlciYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBiaW5hcnkgaXRzZWxmIG5lZWRzIG5vIHBhdGggbG9va3VwIC0gaXQgaXMgZXhlY3V0ZWQgYnkgZmQgLQomIzQzOwkgKiBidXQgbG9hZGluZyBpdCBmYWlscyBvbiBvcGVuaW5nIHRoZSBhYnNvbHV0ZSBQVF9JTlRFUlAKJiM0MzsJICogaW50ZXJwcmV0ZXIuIFJ1biBpdCBpbiBhIGNoaWxkIHNvIGEgd3JvbmdseSBzdWNjZXNzZnVsIGV4ZWMgZG9lcwomIzQzOwkgKiBub3QgcmVwbGFjZSB0aGUgdGVzdCBpbWFnZSBhbmQgbWFzcXVlcmFkZSBhcyBhIHBhc3MuCiYjNDM7CSAqLwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CUFTU0VSVF9HRShwaWQsIDApOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCXN5c2NhbGwoX19OUl9leGVjdmVhdCwgZXhlZmQsICYjMzQ7JiMzNDssIGFyZ3YsIGVudnAsIEFUX0VNUFRZX1BBVEgpOwomIzQzOwkJX2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTsKJiM0MzsJfQomIzQzOwlBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkKTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOwomIzQzOwlBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRkFJTEZTX0VYRUNfQkxPQ0tFRCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZmNocm9vdF9zZW50aW5lbF9pbmhlcml0ZWQpCiYjNDM7ewomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CWlmIChnZXRldWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3ByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1QmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CUFTU0VSVF9HRShwaWQsIDApOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWlmIChvcGVuKCYjMzQ7L2V0YyYjMzQ7LCBPX1BBVEgpICE9IC0xIHx8IGVycm5vICE9IEVPUE5PVFNVUFApCiYjNDM7CQkJX2V4aXQoMSk7CiYjNDM7CQlfZXhpdCgwKTsKJiM0MzsJfQomIzQzOwlBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkKTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOwomIzQzOwlBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDA2CgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDE3NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlICYjMzk7ZmFpbGZzJiMzOTsgUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgZmFpbGZzYCwgYSBmaWxlc3lzdGVtIGRlc2lnbmVkIHRvIGZhaWwgZXZlcnkgb3BlcmF0aW9uLiBUaGUga2V5IGFkZGl0aW9ucyBoZXJlIGFyZSB0aGUgbmV3IGBmY2hyb290YCBzeXN0ZW0gY2FsbCBhbmQgdGhlIG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGlzIG1lYW5zIHdlJiMzOTt2ZSBtb2RpZmllZCBjb3JlIFZGUyBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSBhbmQgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LCB3aGljaCBsb29rcyBzdHJhaWdodGZvcndhcmQuIGBmY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKWAgb3IgYGZjaGRpcihGRF9GQUlMRlNfUk9PVClgIGFyZSBjbGVhciBlbnRyeSBwb2ludHMuCgpUaGUgYGZhaWxmcy5jYCBjb2RlIGNvbmZpcm1zIHRoaXMuIEZ1bmN0aW9uYWxpdHktd2lzZSwgYGZhaWxmc2AgaXRzZWxmIGlzIHNpbXBsZSDigJMgaXQgY29uc2lzdGVudGx5IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gSG93ZXZlciwgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUyksIG5hbWVseSB0aHJvdWdoIGBkX3BhdGhgLCBgZmNoZGlyYCwgYW5kIGBmY2hyb290YC4gVGhpcyB0ZWxscyBtZSB3ZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBpbnRlcmZhY2VzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzOgoKKiAgIGBzeXNfZmNocm9vdGA6IFRoaXMgaXMgdGhlIG5ldyBzeXN0ZW0gY2FsbCwgdGhlIG1haW4gZW50cnkgcG9pbnQgd2UgbmVlZCB0byB0ZXN0LgoqICAgYHN5c19mY2hkaXJgOiBUaGUgZXhpc3RpbmcgYGZjaGRpcmAgc3lzY2FsbCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgYEZEX0ZBSUxGU19ST09UYCwgbWFraW5nIGl0IGEga2V5IGZvY3VzIHRvby4KKiAgIGBmYWlsZnNfY3VycmVudF9jaGRpcmA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gYHN5c19mY2hkaXJgIHdoZW4gdGhlIGBGRF9GQUlMRlNfUk9PVGAgaXMgcGFzc2VkIHRvIGl0LgoqICAgYGZhaWxmc19nZXRfcm9vdGA6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYHN5c19mY2hyb290YC4KKiAgIGBmYWlsZnNfbW50YDogVGhpcyBpcyBsaWtlbHkgdGhlIG1vdW50IGZ1bmN0aW9uLgoKTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWVkZWQsIHNpbmNlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBidWlsdC1pbi4KClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgc3lzdGVtIGNhbGwgKGBmY2hyb290YCkgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgYW4gZXhpc3Rpbmcgb25lIChgZmNoZGlyYCkgdG8gaW50ZXJhY3Qgd2l0aCBhIG5ldyAmIzM0O2ZhaWxpbmcmIzM0OyBmaWxlc3lzdGVtIGNyZWF0ZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLiBXZSBuZWVkIHRvIGZ1enogdGhlc2UgaW50ZXJmYWNlcyB0byBsb29rIGZvciByZWdyZXNzaW9ucywgdnVsbmVyYWJpbGl0aWVzIHN1Y2ggYXMgY2hyb290IGVzY2FwZXMsIG9yIHVuZXhwZWN0ZWQgVkZTIGJlaGF2aW9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX2ZjaHJvb3QmIzM0OywKICAgICYjMzQ7c3lzX2ZjaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfY3VycmVudF9jaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7ZmFpbGZzX21udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX2ZjaHJvb3QmIzM0OywKICAgICYjMzQ7c3lzX2ZjaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfY3VycmVudF9jaGRpciYjMzQ7LAogICAgJiMzNDtmYWlsZnNfZ2V0X3Jvb3QmIzM0OywKICAgICYjMzQ7ZmFpbGZzX21udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTowNTozNS44NTI0NDUzODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgyODQ4ODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfZmNocm9vdFwiLFxuICAgIFwic3lzX2ZjaGRpclwiLFxuICAgIFwiZmFpbGZzX2N1cnJlbnRfY2hkaXJcIixcbiAgICBcImZhaWxmc19nZXRfcm9vdFwiLFxuICAgIFwiZmFpbGZzX21udFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2VybmVsLWludGVybmFsIGZpbGVzeXN0ZW0gYGZhaWxmc2AgYW5kIGEgbmV3IHN5c3RlbSBjYWxsIGBmY2hyb290YC4gSXQgYWxzbyBtb2RpZmllcyBgZmNoZGlyYCB0byBhY2NlcHQgYSBuZXcgbWFnaWMgZmlsZSBkZXNjcmlwdG9yIGBGRF9GQUlMRlNfUk9PVGAuIFRoZXNlIGFyZSBjb3JlIFZGUyBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBlc2NhcGluZyBjaHJvb3QsIHJlZmVyZW5jZSBsZWFrcywgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBwYXRoIHJlc29sdXRpb24pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTowNTozNS44NTI0NTA4OTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MzM5OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFjYTRhMzAzYjA5NGI2YzhiNDJjMzc3MDI3OGI5M2E4NGIxN2NkMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTk6MDU6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjFmZjJkYjc5NDFkZjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XFxuQEAgLTAsMCArMSw3MyBAQFxcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rPT09PT09XFxuK2ZhaWxmc1xcbis9PT09PT1cXG4rXFxuK2ZhaWxmcyBpcyBhIGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIHRoYXQgZmFpbHMgZXZlcnkgb3BlcmF0aW9uXFxuK3JlYWNoaW5nIGl0IHdpdGggYGBFT1BOT1RTVVBQYGAuIEl0IGlzIHRoZSBjb3VudGVycGFydCB0byBudWxsZnMuIFdoZXJlXFxuK251bGxmcyBpcyBwZXJtYW5lbnRseSBlbXB0eSwgZmFpbGZzIG1lYW5zIFxcXCJub3RoaW5nIGlzIHN1cHBvcnRlZCBoZXJlXFxcIi5cXG4rSXQgY2Fubm90IGJlIG1vdW50ZWQgZnJvbSB1c2Vyc3BhY2UsIG5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mXFxuK2l0LiBJdCBjYW5ub3QgYmUgY2xvbmVkLlxcbitcXG4rVGhlIG9ubHkgd2F5IGludG8gaXQgaXMgdGhlIGBgRkRfRkFJTEZTX1JPT1RgYCBmaWxlIGRlc2NyaXB0b3Igc2VudGluZWwgd2hpY2hcXG4raXMgdW5kZXJzdG9vZCBieSBgYGZjaGRpcigyKWBgIGFuZCBgYGZjaHJvb3QoMilgYC5cXG4rXFxuK1NlbWFudGljc1xcbis9PT09PT09PT1cXG4rXFxuK0V2ZXJ5IHBhdGggd2FsayBvZiBhIGNvbXBvbmVudCB0aHJvdWdoIGZhaWxmcyBmYWlscyB3aXRoXFxuK2BgRU9QTk9UU1VQUGBgIGJlZm9yZSB0aGF0IGNvbXBvbmVudCBpcyBwYXJzZWQsIGluY2x1ZGluZyBgYC5gYC5cXG4rXFxuK05vIHBhdGggbG9va3VwIGNhbiBvcGVuIHRoZSByb290LCBub3QgZXZlbiB3aXRoIGBgT19QQVRIYGAuXFxuK1xcbitBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5XFxuK2BgQVRfRkRDV0RgYC1yZWxhdGl2ZSBsb29rdXAuIEFzIHdpdGggYW55IHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgaXNcXG4rdW5yZWFjaGFibGUgZnJvbSB0aGUgcHJvY2VzcyByb290LCB0aGUgYGBnZXRjd2QoMilgYCBzeXN0ZW0gY2FsbCByZXR1cm5zXFxuK2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLlxcbitcXG4rQSBwcm9jZXNzIHdpdGggaXRzIHJvb3QgZGlyZWN0b3J5IGluIGZhaWxmcyBmYWlscyBldmVyeSBhYnNvbHV0ZSBwYXRoXFxuK2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseVxcbitsaW5rZWQgYmluYXJpZXMuIEluIG90aGVyIHdvcmRzLCB0aGlzIGZhaWxzIGV4ZWMuXFxuK1xcbitMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXRcXG4raXMgdGhlIGBgZnNfc3RydWN0YGAgZXF1aXZhbGVudCBvZiBgYFJFU09MVkVfQkVORUFUSGBgLiBUaGUgcHJvY2VzcyBtdXN0XFxuK2FuY2hvciBldmVyeSBsb29rdXAgYXQgYSBmaWxlIGRlc2NyaXB0b3IgaXQgZXhwbGljaXRseSBob2xkcy5cXG4rXFxuK0VudGVyaW5nXFxuKz09PT09PT09XFxuK1xcbitgYGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApYGAgcmVxdWlyZXMgYGBDQVBfU1lTX0NIUk9PVGBgIGluIHRoZVxcbitjYWxsZXIncyB1c2VyIG5hbWVzcGFjZSwgbWlycm9yaW5nIGBgY2hyb290KDIpYGAuIFVucHJpdmlsZWdlZCBjYWxsZXJzXFxuK21heSBlbnRlciBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBob2xkOlxcbitcXG4rKiBgYG5vX25ld19wcml2c2BgIGlzIHNldDogc2V0dWlkIGJpbmFyaWVzIG9uIHJlZ3VsYXIgbW91bnRzIHJlbWFpblxcbisgIHJlYWNoYWJsZSB2aWEgaW5oZXJpdGVkIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBleGVjdXRpbmcgdGhlbVxcbisgIHdpdGggYW4gdW51c2FibGUgcm9vdCBkaXJlY3RvcnkgaXMgdGhlIGNsYXNzaWMgY29uZnVzZWQgZGVwdXR5LlxcbitcXG4rKiBUaGUgY2FsbGVyIGlzIG5vdCBhbHJlYWR5IGNocm9vdGVkOiB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgd2hhdFxcbisgIGNvbmZpbmVzIGBgLi5gYCByZXNvbHV0aW9uIGFuZCB0aGUgZmFpbGZzIHJvb3QgY2FuIG5ldmVyIGJlIHJlYWNoZWQgYnlcXG4rICB3YWxraW5nIHVwIGEgcmVhbCBtb3VudCB0cmVlLCBzbyBtb3ZpbmcgdGhlIHJvb3Qgb2YgYSBjaHJvb3RlZCB0YXNrIHRvXFxuKyAgZmFpbGZzIHdvdWxkIGFsbG93IGl0IHRvIGVzY2FwZSBpdHMgY2hyb290IHZpYSBgYG9wZW5hdChmZCwgXFxcIi4uXFxcIilgYC5cXG4rXFxuKyogVGhlIGNhbGxlciBkb2VzIG5vdCBzaGFyZSBpdHMgYGBmc19zdHJ1Y3RgYDogYGBub19uZXdfcHJpdnNgYCBpc1xcbisgIGNoZWNrZWQgb24gdGhlIGNhbGxpbmcgdGhyZWFkLCBidXQgdGhlIHJvb3QgbGl2ZXMgaW4gdGhlIGBgZnNfc3RydWN0YGAuXFxuKyAgQSBgYENMT05FX0ZTYGAgc2libGluZyB3aXRob3V0IGBgbm9fbmV3X3ByaXZzYGAgY291bGQgb3RoZXJ3aXNlIGV4ZWN1dGVcXG4rICBhIHNldHVpZCBiaW5hcnkgd2l0aCB0aGUgZmFpbGZzIHJvb3QsIHNvIGVudHJ5IHJlcXVpcmVzIGBgZnMtXFx1MDAzZXVzZXJzID09XFxuKyAgMWBgLCB0aGUgc2FtZSByZXN0cmljdGlvbiBgYHNldG5zKDIpYGAgYXBwbGllcyBmb3IgdGhlIG1vdW50IGFuZCB1c2VyXFxuKyAgbmFtZXNwYWNlcy5cXG4rXFxuK0xlYXZpbmdcXG4rPT09PT09PVxcbitcXG4rQmFja2luZyBvdXQgaXMgY3VycmVudGx5IGhhcmQsIGJ1dCB0aGlzIGlzIGEgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnRcXG4raW1wbGVtZW50YXRpb24sIG5vdCBhIGd1YXJhbnRlZWQgaW50ZXJmYWNlLCBhbmQgbWF5IGJlIGxvb3NlbmVkIGxhdGVyLlxcbitGb3Igbm93IGEgcHJvY2VzcyB0aGF0IGVudGVyZWQgZmFpbGZzIGNvdW50cyBhcyBjaHJvb3RlZCwgc28gaXQgY2Fubm90XFxuK2NyZWF0ZSB1c2VyIG5hbWVzcGFjZXMgdG8gcmVnYWluIGBgQ0FQX1NZU19DSFJPT1RgYCwgYW5kIGBgY2hyb290KDIpYGBcXG4rb3IgYGBmY2hyb290KDIpYGAgYmFjayBvdXQgcmVxdWlyZSBgYENBUF9TWVNfQ0hST09UYGAuIFRoZSByZW1haW5pbmcgd2F5XFxuK291dCB0b2RheSBpcyBgYHNldG5zKDIpYGAgd2l0aCBhIG1vdW50IG5hbWVzcGFjZSBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoXFxuK3JlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgIG92ZXIgdGhlIHRhcmdldCBtb3VudCBuYW1lc3BhY2UgYXMgd2VsbCBhc1xcbitgYENBUF9TWVNfQ0hST09UYGAgYW5kIGBgQ0FQX1NZU19BRE1JTmBgIGluIHRoZSBjYWxsZXIncyB1c2VyIG5hbWVzcGFjZVxcbithbmQgcmVzZXRzIGJvdGggcm9vdCBhbmQgd29ya2luZyBkaXJlY3RvcnkuIEEgcHJvY2VzcyB0aGF0IGhvbGRzIG5vIHN1Y2hcXG4rZmlsZSBkZXNjcmlwdG9yIGFuZCByZXN0cmljdHMgYGAqY2hkaXIoKWBgL2BgKmNocm9vdCgpYGAvYGBzZXRucygpYGAgdmlhXFxuK3NlY2NvbXAgY2Fubm90IGN1cnJlbnRseSBnZXQgYmFjayBvdXQuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcXG5pbmRleCAxZjcxY2YxNTk1NDc2Yy4uNzM0YTQ1ZTUxNjY3NWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxcbkBAIC05MSw2ICs5MSw3IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLlxcbiAgICBleHQzXFxuICAgIGV4dDQvaW5kZXhcXG4gICAgZjJmc1xcbisgICBmYWlsZnNcXG4gICAgZ2ZzMi9pbmRleFxcbiAgICBoZnNcXG4gICAgaGZzcGx1c1xcbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuaW5kZXggZjMxYjdhZmZmYzM0NTkuLjUyZTM1MzhjYzdkZjQxIDEwMDY0NFxcbi0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtNTExLDMgKzUxMSw0IEBAXFxuIDU3OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNTgwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA1ODFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNTgyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsIGIvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcXG5pbmRleCA5NDM1MWUyMmJmY2Y3Ni4uNTU3MTdlZDMyYzI3ZTYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibFxcbkBAIC00ODYsMyArNDg2LDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibCBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmxcXG5pbmRleCA2MmQ5M2Q4OGUwZmVmOC4uZGYyZDFkODJmYjNjY2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzY2FsbF8zMi50YmxcXG5AQCAtNDgzLDMgKzQ4Myw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuaW5kZXggMjQ4OTM0MjU3MTAxNGMuLmJhN2E0ZDg5MDNkMDQ0IDEwMDY0NFxcbi0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuQEAgLTQ3MSwzICs0NzEsNCBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbmluZGV4IDIyM2QyNjMwMzYyNzI0Li5jNTVhNWM5NmY0OWI4MiAxMDA2NDRcXG4tLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbkBAIC00NzcsMyArNDc3LDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxcbmluZGV4IDc0MzA3MTRlMmI4Zjg2Li45YWU4OGU0ZWFjNjFlZSAxMDA2NDRcXG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxcbisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsXFxuQEAgLTQxMCwzICs0MTAsNCBAQFxcbiA0NjlcXHRuMzJcXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdG4zMlxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0bjMyXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdG4zMlxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXFxuaW5kZXggNjMwYWFiOWU1NDI1OTIuLjgzZGM5M2EwNzEyZjEyIDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmxcXG5AQCAtMzg2LDMgKzM4Niw0IEBAXFxuIDQ2OVxcdG42NFxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0bjY0XFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRuNjRcXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0bjY0XFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcXG5pbmRleCAxMjg2NTMxMTIyODRiMi4uOWM2MjQyOWM5YjdiNGUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcXG4rKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibFxcbkBAIC00NTksMyArNDU5LDQgQEBcXG4gNDY5XFx0bzMyXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRvMzJcXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdG8zMlxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRvMzJcXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuaW5kZXggYzYzMzFkYWQ5NDYxM2IuLjg4YWRjNDAxNmNjZTAxIDEwMDY0NFxcbi0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbkBAIC00NzAsMyArNDcwLDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5pbmRleCA0ZmNjN2M1OGExMDVkYy4uY2ZiYjcwMDM5ZmYwMDcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtNTYyLDMgKzU2Miw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRub3NwdVxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5pbmRleCAwOWE3ZWYwNGQ5NzkxYS4uMWI0NWU2OGEyMTdiYjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtMzk4LDMgKzM5OCw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5pbmRleCA3MGIzMTVjYmU3MTBjMi4uYWNlMDY4ZGZmMGRlMDMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbkBAIC00NzUsMyArNDc1LDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbmluZGV4IDdlNzFiZjdmY2QxNGY3Li41YjlmZTBlODE0MGYyNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXFxuQEAgLTUxNywzICs1MTcsNCBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXFxuaW5kZXggZjgzMmViZDJkNzliMDAuLjJjMTcyZWY0OGRmZDMzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXFxuKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmxcXG5AQCAtNDc3LDMgKzQ3Nyw0IEBAXFxuIDQ2OVxcdGkzODZcXHRmaWxlX3NldGF0dHJcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGkzODZcXHRsaXN0bnNcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGkzODZcXHRyc2VxX3NsaWNlX3lpZWxkXFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0aTM4NlxcdGZjaHJvb3RcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuaW5kZXggNTI0MTU1ZDY1NWRhMTUuLmQ1YjYwNDViMDA5MGNjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcXG5AQCAtMzk2LDYgKzM5Niw3IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdHN5c19mY2hyb290XFxuIFxcbiAjXFxuICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5XFxuZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxcbmluZGV4IGE5YmNhNGU0ODRkZWNmLi5kMzU0YmIyMzE3OTZjMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG4rKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcXG5AQCAtNDQyLDMgKzQ0Miw0IEBAXFxuIDQ2OVxcdGNvbW1vblxcdGZpbGVfc2V0YXR0clxcdFxcdFxcdHN5c19maWxlX3NldGF0dHJcXG4gNDcwXFx0Y29tbW9uXFx0bGlzdG5zXFx0XFx0XFx0XFx0c3lzX2xpc3Ruc1xcbiA0NzFcXHRjb21tb25cXHRyc2VxX3NsaWNlX3lpZWxkXFx0XFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcXG4rNDcyXFx0Y29tbW9uXFx0ZmNocm9vdFxcdFxcdFxcdFxcdHN5c19mY2hyb290XFxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNzNiNmNhYjc3MzhlYTQgMTAwNjQ0XFxuLS0tIGEvZnMvTWFrZWZpbGVcXG4rKysgYi9mcy9NYWtlZmlsZVxcbkBAIC0xNiw3ICsxNiw3IEBAIG9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuIFxcdFxcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXFxcXG4gXFx0XFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxcXFxuIFxcdFxcdGtlcm5lbF9yZWFkX2ZpbGUubyBtbnRfaWRtYXBwaW5nLm8gcmVtYXBfcmFuZ2UubyBwaWRmcy5vIFxcXFxcXG4tXFx0XFx0ZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vXFxuK1xcdFxcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xcbiBcXG4gb2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKVxcdCs9IGJ1ZmZlci5vIG1wYWdlLm9cXG4gb2JqLSQoQ09ORklHX1BST0NfRlMpXFx0XFx0Kz0gcHJvY19uYW1lc3BhY2Uub1xcbmRpZmYgLS1naXQgYS9mcy9kX3BhdGguYyBiL2ZzL2RfcGF0aC5jXFxuaW5kZXggYTQ4OTU3YzA5NzFlZjYuLmMyNTMwOTAwNmQ1ZDZkIDEwMDY0NFxcbi0tLSBhL2ZzL2RfcGF0aC5jXFxuKysrIGIvZnMvZF9wYXRoLmNcXG5AQCAtMjc5LDcgKzI3OSw4IEBAIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKVxcbiBcXHQgKiBhbmQgaW5zdGVhZCBoYXZlIGRfcGF0aCByZXR1cm4gdGhlIG1vdW50ZWQgcGF0aC5cXG4gXFx0ICovXFxuIFxcdGlmIChwYXRoLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2RuYW1lIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoIUlTX1JPT1QocGF0aC1cXHUwMDNlZGVudHJ5KSB8fCBwYXRoLVxcdTAwM2VkZW50cnkgIT0gcGF0aC1cXHUwMDNlbW50LVxcdTAwM2VtbnRfcm9vdCkpXFxuK1xcdCAgICAoIUlTX1JPT1QocGF0aC1cXHUwMDNlZGVudHJ5KSB8fCBwYXRoLVxcdTAwM2VkZW50cnkgIT0gcGF0aC1cXHUwMDNlbW50LVxcdTAwM2VtbnRfcm9vdCB8fFxcbitcXHQgICAgIGZhaWxmc19tbnQocGF0aC1cXHUwMDNlbW50KSkpXFxuIFxcdFxcdHJldHVybiBwYXRoLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfZG5hbWUocGF0aC1cXHUwMDNlZGVudHJ5LCBidWYsIGJ1Zmxlbik7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhaWxmcy5jIGIvZnMvZmFpbGZzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NmEzNmRhM2QyMzZkNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9mYWlsZnMuY1xcbkBAIC0wLDAgKzEsMTY2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IENocmlzdGlhbiBCcmF1bmVyIFxcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcXHUwMDNlICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMvc3VwZXJfdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFnaWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGF0aCBmYWlsZnNfcm9vdF9wYXRoID0ge307XFxuK1xcbit2b2lkIGZhaWxmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aClcXG4re1xcbitcXHQqcGF0aCA9IGZhaWxmc19yb290X3BhdGg7XFxuK1xcdHBhdGhfZ2V0KHBhdGgpO1xcbit9XFxuK1xcbitib29sIGZhaWxmc19tbnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpXFxuK3tcXG4rXFx0cmV0dXJuIG1udC1cXHUwMDNlbW50X3NiID09IGZhaWxmc19yb290X3BhdGgubW50LVxcdTAwM2VtbnRfc2I7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgICAgaW50IG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmFpbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdC8qIFVucmVhY2hhYmxlOiAtXFx1MDAzZXBlcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxlZCB0aGUgd2Fsay4gKi9cXG4rXFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGZhaWxmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4rXFx0LnBlcm1pc3Npb25cXHQ9IGZhaWxmc19wZXJtaXNzaW9uLFxcbitcXHQubG9va3VwXFx0XFx0PSBmYWlsZnNfbG9va3VwLFxcbitcXHQuZ2V0YXR0clxcdD0gZmFpbGZzX2dldGF0dHIsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX29wZXJhdGlvbnMgPSB7fTtcXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX2Rfd2Vha19yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSByb290IGlzIG9ubHkgZXZlciByZWFjaGVkIGFzIGEgcGF0aC13YWxrIHRlcm1pbmFsIGJ5IGp1bXBpbmdcXG4rXFx0ICogdG8gaXQ6IGFzIFxcXCIvXFxcIiB3aGVuIGl0IGlzIHRoZSBjYWxsZXIncyByb290LCBvciB0aHJvdWdoIGFcXG4rXFx0ICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uve3Jvb3QsY3dkfSBtYWdpYyBsaW5rLiAtXFx1MDAzZXBlcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxzXFxuK1xcdCAqIGV2ZXJ5IHdhbGsgb2YgYSBjb21wb25lbnQsIGJ1dCBhIGp1bXAgbGFuZHMgb24gdGhlIHJvb3Qgd2l0aG91dFxcbitcXHQgKiBvbmUuIFJlZnVzZSBoZXJlIHRvbyBzbyB0aGUgcm9vdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGFuIE9fUEFUSFxcbitcXHQgKiBvcGVuIG9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgY2hhciAqZmFpbGZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbit7XFxuK1xcdHJldHVybiBkeW5hbWljX2RuYW1lKGJ1ZmZlciwgYnVmbGVuLCBcXFwiZmFpbGZzOi9cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmYWlsZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuK1xcdC5kX2RuYW1lXFx0XFx0PSBmYWlsZnNfZG5hbWUsXFxuK1xcdC5kX3dlYWtfcmV2YWxpZGF0ZVxcdD0gZmFpbGZzX2Rfd2Vha19yZXZhbGlkYXRlLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBmYWlsZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcXG4rXFx0LnN0YXRmc1xcdD0gZmFpbGZzX3N0YXRmcyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFxuK1xcdHMtXFx1MDAzZXNfbWF4Ynl0ZXNcXHRcXHQ9IE1BWF9MRlNfRklMRVNJWkU7XFxuK1xcdHMtXFx1MDAzZXNfYmxvY2tzaXplXFx0XFx0PSBQQUdFX1NJWkU7XFxuK1xcdHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHNcXHQ9IFBBR0VfU0hJRlQ7XFxuK1xcdHMtXFx1MDAzZXNfbWFnaWNcXHRcXHQ9IEZBSUxfRlNfTUFHSUM7XFxuK1xcdHMtXFx1MDAzZXNfb3BcXHRcXHRcXHQ9IFxcdTAwMjZmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucztcXG4rXFx0cy1cXHUwMDNlc19leHBvcnRfb3BcXHRcXHQ9IE5VTEw7XFxuK1xcdHMtXFx1MDAzZXNfeGF0dHJcXHRcXHQ9IE5VTEw7XFxuK1xcdHMtXFx1MDAzZXNfdGltZV9ncmFuXFx0XFx0PSAxO1xcbitcXHRzLVxcdTAwM2VzX2RfZmxhZ3NcXHRcXHQ9IDA7XFxuK1xcbitcXHRpbm9kZSA9IG5ld19pbm9kZShzKTtcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHQvKiBmYWlsZnMgc3VwcG9ydHMgbm8gb3BlcmF0aW9ucy4uLiAqL1xcbitcXHRpbm9kZS1cXHUwMDNlaV9tb2RlXFx0PSBTX0lGRElSO1xcbitcXHRzZXRfbmxpbmsoaW5vZGUsIDIpO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9vcFxcdD0gXFx1MDAyNmZhaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG4rXFx0aW5vZGUtXFx1MDAzZWlfZm9wXFx0PSBcXHUwMDI2ZmFpbGZzX2Rpcl9vcGVyYXRpb25zO1xcbitcXHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2lub1xcdD0gMTtcXG4rXFx0LyogLi4uIGFuZCBpcyBpbW11dGFibGUuICovXFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IFNfSU1NVVRBQkxFO1xcbitcXG4rXFx0c2V0X2RlZmF1bHRfZF9vcChzLCBcXHUwMDI2ZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zKTtcXG4rXFx0cy1cXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpO1xcbitcXHRpZiAoIXMtXFx1MDAzZXNfcm9vdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYWlsZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHJldHVybiBnZXRfdHJlZV9zaW5nbGUoZmMsIGZhaWxmc19maWxsX3N1cGVyKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZmFpbGZzX2NvbnRleHRfb3BzID0ge1xcbitcXHQuZ2V0X3RyZWVcXHQ9IGZhaWxmc19nZXRfdHJlZSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZmFpbGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuK3tcXG4rXFx0ZmMtXFx1MDAzZW9wc1xcdFxcdD0gXFx1MDAyNmZhaWxmc19jb250ZXh0X29wcztcXG4rXFx0ZmMtXFx1MDAzZWdsb2JhbFxcdD0gdHJ1ZTtcXG4rXFx0ZmMtXFx1MDAzZXNiX2ZsYWdzXFx0fD0gU0JfTk9VU0VSO1xcbitcXHRmYy1cXHUwMDNlc19pZmxhZ3NcXHR8PSBTQl9JX05PRVhFQyB8IFNCX0lfTk9ERVY7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgZmFpbGZzX2N1cnJlbnRfY2hkaXIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGF0aCBwYXRoO1xcbitcXG4rXFx0ZmFpbGZzX2dldF9yb290KFxcdTAwMjZwYXRoKTtcXG4rXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnBhdGgpO1xcbitcXHRwYXRoX3B1dChcXHUwMDI2cGF0aCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZmFpbGZzX2ZzX3R5cGUgPSB7XFxuK1xcdC5uYW1lXFx0XFx0XFx0PSBcXFwiZmFpbGZzXFxcIixcXG4rXFx0LmluaXRfZnNfY29udGV4dFxcdD0gZmFpbGZzX2luaXRfZnNfY29udGV4dCxcXG4rXFx0LmtpbGxfc2JcXHRcXHQ9IGtpbGxfYW5vbl9zdXBlcixcXG4rfTtcXG4rXFxuK3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHZmc21vdW50ICptbnQ7XFxuK1xcbitcXHQvKiBBIHNpbmdsZSBpbnN0YW5jZSB0aGF0IGlzIG1lbWJlciBvZiBubyBtb3VudCBuYW1lc3BhY2UuICovXFxuK1xcdG1udCA9IGtlcm5fbW91bnQoXFx1MDAyNmZhaWxmc19mc190eXBlKTtcXG4rXFx0aWYgKElTX0VSUihtbnQpKVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiBGYWlsZWQgdG8gY3JlYXRlIGZhaWxmc1xcXCIpO1xcbitcXG4rXFx0ZmFpbGZzX3Jvb3RfcGF0aC5tbnRcXHQ9IG1udDtcXG4rXFx0ZmFpbGZzX3Jvb3RfcGF0aC5kZW50cnlcXHQ9IG1udC1cXHUwMDNlbW50X3Jvb3Q7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uNjdhYTA0NDQzNTFiMWEgMTAwNjQ0XFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2ludGVybmFsLmhcXG5AQCAtMzYyLDMgKzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7XFxuIHZvaWQgcGlkZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpO1xcbiB2b2lkIG5zZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpO1xcbit2b2lkIGZhaWxmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XFxuK3ZvaWQgX19pbml0IGZhaWxmc19pbml0KHZvaWQpO1xcbitib29sIGZhaWxmc19tbnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xcbitpbnQgZmFpbGZzX2N1cnJlbnRfY2hkaXIodm9pZCk7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcXG5pbmRleCAzZDVjZDViZjNiMDUzNy4uODdjMzY1ZjJmODJiYTMgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZXNwYWNlLmNcXG4rKysgYi9mcy9uYW1lc3BhY2UuY1xcbkBAIC02Mjc0LDYgKzYyNzQsNyBAQCB2b2lkIF9faW5pdCBtbnRfaW5pdCh2b2lkKVxcbiBcXHRzaG1lbV9pbml0KCk7XFxuIFxcdGluaXRfcm9vdGZzKCk7XFxuIFxcdGluaXRfbW91bnRfdHJlZSgpO1xcbitcXHRmYWlsZnNfaW5pdCgpO1xcbiB9XFxuIFxcbiB2b2lkIHB1dF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKVxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTU3MCw5ICs1NzAsMTIgQEAgU1lTQ0FMTF9ERUZJTkUxKGNoZGlyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcXG4gXFxuIFNZU0NBTExfREVGSU5FMShmY2hkaXIsIHVuc2lnbmVkIGludCwgZmQpXFxuIHtcXG4tXFx0Q0xBU1MoZmRfcmF3LCBmKShmZCk7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuK1xcdGlmICgoaW50KWZkID09IEZEX0ZBSUxGU19ST09UKVxcbitcXHRcXHRyZXR1cm4gZmFpbGZzX2N1cnJlbnRfY2hkaXIoKTtcXG4rXFxuK1xcdENMQVNTKGZkX3JhdywgZikoZmQpO1xcbiBcXHRpZiAoZmRfZW1wdHkoZikpXFxuIFxcdFxcdHJldHVybiAtRUJBREY7XFxuIFxcbkBAIC02MTUsNiArNjE4LDUyIEBAIFNZU0NBTExfREVGSU5FMShjaHJvb3QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuK1NZU0NBTExfREVGSU5FMihmY2hyb290LCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBwYXRoIHBhdGg7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGlmIChmbGFncylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHtcXG4rXFx0XFx0aWYgKCFuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0NIUk9PVCkpIHtcXG4rXFx0XFx0XFx0aWYgKCF0YXNrX25vX25ld19wcml2cyhjdXJyZW50KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0XFx0XFx0LyogQSBzaGFyZWQgZnNfc3RydWN0IGxldHMgYSBzaWJsaW5nIGV4ZWMgc2V0dWlkIHBhc3QgdGhlIGNoZWNrIGFib3ZlLiAqL1xcbitcXHRcXHRcXHRpZiAoY3VycmVudC1cXHUwMDNlZnMtXFx1MDAzZXVzZXJzICE9IDEpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHQvKiBNb3ZpbmcgdGhlIHJvb3QgdG8gZmFpbGZzIGxpZnRzIHRoZSBvbGQgcm9vdCdzIFxcXCIuLlxcXCIgYmFycmllci4gKi9cXG4rXFx0XFx0XFx0aWYgKGN1cnJlbnRfY2hyb290ZWQoKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0XFx0fVxcbitcXHRcXHRmYWlsZnNfZ2V0X3Jvb3QoXFx1MDAyNnBhdGgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRDTEFTUyhmZF9yYXcsIGYpKGZkKTtcXG4rXFx0XFx0aWYgKGZkX2VtcHR5KGYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXG4rXFx0XFx0aWYgKCFkX2Nhbl9sb29rdXAoZmRfZmlsZShmKS1cXHUwMDNlZl9wYXRoLmRlbnRyeSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PVERJUjtcXG4rXFxuK1xcdFxcdGVycm9yID0gZmlsZV9wZXJtaXNzaW9uKGZkX2ZpbGUoZiksIE1BWV9FWEVDIHwgTUFZX0NIRElSKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRcXHRpZiAoIW5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIENBUF9TWVNfQ0hST09UKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdFxcdHBhdGggPSBmZF9maWxlKGYpLVxcdTAwM2VmX3BhdGg7XFxuK1xcdFxcdHBhdGhfZ2V0KFxcdTAwMjZwYXRoKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX2Nocm9vdChcXHUwMDI2cGF0aCk7XFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2cGF0aCk7XFxuK1xcdHBhdGhfcHV0KFxcdTAwMjZwYXRoKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbiBpbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oXFxuaW5kZXggODc0ZDkwNjdhNDNiNTAuLjg0MTNiNjI0YWQ0NzgyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxcbkBAIC00NTcsNiArNDU3LDcgQEAgYXNtbGlua2FnZSBsb25nIHN5c19mYWNjZXNzYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IG1vZGUsXFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcXG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2hkaXIodW5zaWduZWQgaW50IGZkKTtcXG4gYXNtbGlua2FnZSBsb25nIHN5c19jaHJvb3QoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcXG4rYXNtbGlua2FnZSBsb25nIHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2QodW5zaWduZWQgaW50IGZkLCB1bW9kZV90IG1vZGUpO1xcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZGF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcXG4gXFx0XFx0XFx0ICAgICB1bW9kZV90IG1vZGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcXG5pbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuQEAgLTg2Myw4ICs4NjMsMTIgQEAgX19TWVNDQUxMKF9fTlJfbGlzdG5zLCBzeXNfbGlzdG5zKVxcbiAjZGVmaW5lIF9fTlJfcnNlcV9zbGljZV95aWVsZCA0NzFcXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXFxuIFxcbisvKiBmcy9vcGVuLmMgKi9cXG4rI2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXFxuK19fU1lTQ0FMTChfX05SX2ZjaHJvb3QsIHN5c19mY2hyb290KVxcbitcXG4gI3VuZGVmIF9fTlJfc3lzY2FsbHNcXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxcbisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXFxuIFxcbiAvKlxcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcXG5pbmRleCBhYWRmYmY2ZTBjYjNhMC4uZTQzZTNkZTNlOWVlNDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaFxcbkBAIC0xMjQsNiArMTI0LDcgQEAgc3RydWN0IGRlbGVnYXRpb24ge1xcbiBcXG4gI2RlZmluZSBGRF9QSURGU19ST09UXFx0XFx0XFx0LTEwMDAyIC8qIFJvb3Qgb2YgdGhlIHBpZGZzIGZpbGVzeXN0ZW0gKi9cXG4gI2RlZmluZSBGRF9OU0ZTX1JPT1RcXHRcXHRcXHQtMTAwMDMgLyogUm9vdCBvZiB0aGUgbnNmcyBmaWxlc3lzdGVtICovXFxuKyNkZWZpbmUgRkRfRkFJTEZTX1JPT1RcXHRcXHRcXHQtMTAwMDQgLyogUm9vdCBvZiB0aGUgZmFpbGZzIGZpbGVzeXN0ZW0gKi9cXG4gI2RlZmluZSBGRF9JTlZBTElEXFx0XFx0XFx0LTEwMDA5IC8qIEludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiAtMTAwMDAgLSBFQkFERiA9IC0xMDAwOSAqL1xcbiBcXG4gLyogR2VuZXJpYyBmbGFncyBmb3IgdGhlICphdCgyKSBmYW1pbHkgb2Ygc3lzY2FsbHMuICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcXG5pbmRleCA0ZjJkYTkzNWE3NmNjYS4uZmQ1ZjBlOTU2NDhlZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaFxcbkBAIC0xMDUsNSArMTA1LDYgQEBcXG4gI2RlZmluZSBQSURfRlNfTUFHSUNcXHRcXHQweDUwNDk0NDQ2XFx0LyogXFxcIlBJREZcXFwiICovXFxuICNkZWZpbmUgR1VFU1RfTUVNRkRfTUFHSUNcXHQweDQ3NGQ0NTRkXFx0LyogXFxcIkdNRU1cXFwiICovXFxuICNkZWZpbmUgTlVMTF9GU19NQUdJQ1xcdFxcdDB4NEU1NTRDNENcXHQvKiBcXFwiTlVMTFxcXCIgKi9cXG4rI2RlZmluZSBGQUlMX0ZTX01BR0lDXFx0XFx0MHg0NjQxNDk0Q1xcdC8qIFxcXCJGQUlMXFxcIiAqL1xcbiBcXG4gI2VuZGlmIC8qIF9fTElOVVhfTUFHSUNfSF9fICovXFxuZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsXFxuaW5kZXggN2E0MmIzMmI2NTc3NjcuLjBhYjUzMTYwNTEyMDJlIDEwMDY0NFxcbi0tLSBhL3NjcmlwdHMvc3lzY2FsbC50YmxcXG4rKysgYi9zY3JpcHRzL3N5c2NhbGwudGJsXFxuQEAgLTQxMiwzICs0MTIsNCBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRcXHRzeXNfZmNocm9vdFxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcXG5pbmRleCBhNjI3YWNjOGZiNWZlYS4uNWI3ZTc3YTdjNzM2ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXFxuQEAgLTg2Myw4ICs4NjMsMTIgQEAgX19TWVNDQUxMKF9fTlJfbGlzdG5zLCBzeXNfbGlzdG5zKVxcbiAjZGVmaW5lIF9fTlJfcnNlcV9zbGljZV95aWVsZCA0NzFcXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXFxuIFxcbisvKiBmcy9vcGVuLmMgKi9cXG4rI2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXFxuK19fU1lTQ0FMTChfX05SX2ZjaHJvb3QsIHN5c19mY2hyb290KVxcbitcXG4gI3VuZGVmIF9fTlJfc3lzY2FsbHNcXG4tI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3MlxcbisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXFxuIFxcbiAvKlxcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuaW5kZXggNTI0MTU1ZDY1NWRhMTUuLmQ1YjYwNDViMDA5MGNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcXG4rKysgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXFxuQEAgLTM5Niw2ICszOTYsNyBAQFxcbiA0NjlcXHRjb21tb25cXHRmaWxlX3NldGF0dHJcXHRcXHRzeXNfZmlsZV9zZXRhdHRyXFxuIDQ3MFxcdGNvbW1vblxcdGxpc3Ruc1xcdFxcdFxcdHN5c19saXN0bnNcXG4gNDcxXFx0Y29tbW9uXFx0cnNlcV9zbGljZV95aWVsZFxcdHN5c19yc2VxX3NsaWNlX3lpZWxkXFxuKzQ3MlxcdGNvbW1vblxcdGZjaHJvb3RcXHRcXHRcXHRzeXNfZmNocm9vdFxcbiBcXG4gI1xcbiAjIER1ZSB0byBhIGhpc3RvcmljYWwgZGVzaWduIGVycm9yLCBjZXJ0YWluIHN5c2NhbGxzIGFyZSBudW1iZXJlZCBkaWZmZXJlbnRseVxcbmRpZmYgLS1naXQgYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsIGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibFxcbmluZGV4IDdhNDJiMzJiNjU3NzY3Li4wYWI1MzE2MDUxMjAyZSAxMDA2NDRcXG4tLS0gYS90b29scy9zY3JpcHRzL3N5c2NhbGwudGJsXFxuKysrIGIvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibFxcbkBAIC00MTIsMyArNDEyLDQgQEBcXG4gNDY5XFx0Y29tbW9uXFx0ZmlsZV9zZXRhdHRyXFx0XFx0XFx0c3lzX2ZpbGVfc2V0YXR0clxcbiA0NzBcXHRjb21tb25cXHRsaXN0bnNcXHRcXHRcXHRcXHRzeXNfbGlzdG5zXFxuIDQ3MVxcdGNvbW1vblxcdHJzZXFfc2xpY2VfeWllbGRcXHRcXHRzeXNfcnNlcV9zbGljZV95aWVsZFxcbis0NzJcXHRjb21tb25cXHRmY2hyb290XFx0XFx0XFx0XFx0c3lzX2ZjaHJvb3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXFxuQEAgLTMzLDYgKzMzLDcgQEAgVEFSR0VUUyArPSBmY2htb2RhdDJcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtc1xcbiBUQVJHRVRTICs9IGZpbGVzeXN0ZW1zL2JpbmRlcmZzXFxuIFRBUkdFVFMgKz0gZmlsZXN5c3RlbXMvZXBvbGxcXG4rVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9mYWlsZnNcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9mYXRcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9vdmVybGF5ZnNcXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9zdGF0bW91bnRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvLmdpdGlnbm9yZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNkM2I1ZDg4NGQ3ZWE5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlXFxuQEAgLTAsMCArMSwyIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitmYWlsZnNfdGVzdFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYzVkOThiNGZlNzI1ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitDRkxBR1MgKz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcXG4rVEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3RcXG4rXFxuK2luY2x1ZGUgLi4vLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9mYWlsZnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYzQ2MWRjNDgzYTk5N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mYWlsZnMvZmFpbGZzX3Rlc3QuY1xcbkBAIC0wLDAgKzEsNTgxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3ByY3RsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3Zmcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uLy4uL2tzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjaWZuZGVmIF9fTlJfZmNocm9vdFxcbisjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIEZEX1BJREZTX1JPT1RcXG4rI2RlZmluZSBGRF9QSURGU19ST09UIC0xMDAwMlxcbisjZW5kaWZcXG4rXFxuKyNpZm5kZWYgRkRfTlNGU19ST09UXFxuKyNkZWZpbmUgRkRfTlNGU19ST09UIC0xMDAwM1xcbisjZW5kaWZcXG4rXFxuKyNpZm5kZWYgRkRfRkFJTEZTX1JPT1RcXG4rI2RlZmluZSBGRF9GQUlMRlNfUk9PVCAtMTAwMDRcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIE5PQk9EWV9VSUQgNjU1MzRcXG4rXFxuKy8qIENoaWxkIHNlbnRpbmVsIGV4aXQgY29kZTogdGhlIGV4ZWMgd2FzIGJsb2NrZWQgYXMgZXhwZWN0ZWQuICovXFxuKyNkZWZpbmUgRkFJTEZTX0VYRUNfQkxPQ0tFRCA5OVxcbitcXG4rLyogU3RhY2sgZm9yIHRoZSBDTE9ORV9GUyBoZWxwZXIgaW4gZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0LiAqL1xcbisjZGVmaW5lIEZBSUxGU19DTE9ORV9TVEFDSyAoNjQgKiAxMDI0KVxcbitcXG4rc3RhdGljIGludCBzeXNfZmNocm9vdChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gc3lzY2FsbChfX05SX2ZjaHJvb3QsIGZkLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJhdyBzeXNjYWxsOiBnbGliYydzIGdldGN3ZCgpIHJlamVjdHMgdGhlIGtlcm5lbCdzIFxcXCIodW5yZWFjaGFibGUpXFxcIlxcbisgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxcbisgKi9cXG4rc3RhdGljIGxvbmcgc3lzX2dldGN3ZChjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0Y3dkLCBidWYsIHNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRyb3BfdG9fbm9ib2R5KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHNldHJlc3VpZChOT0JPRFlfVUlELCBOT0JPRFlfVUlELCBOT0JPRFlfVUlEKTtcXG4rfVxcbitcXG4rLyogUGFya2VkIENMT05FX0ZTIGNoaWxkOyBkaWVzIHdpdGggaXRzIHBhcmVudCBzbyBpdCBuZXZlciBsZWFrcy4gKi9cXG4rc3RhdGljIGludCBmYWlsZnNfcGFyayh2b2lkICphcmcpXFxuK3tcXG4rXFx0KHZvaWQpYXJnO1xcbitcXHRwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdLSUxMKTtcXG4rXFx0cGF1c2UoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi9cXG4rc3RhdGljIGludCBlbGZfaGFzX2Fic29sdXRlX2ludGVycChpbnQgZmQpXFxuK3tcXG4rXFx0RWxmVyhFaGRyKSBlaGRyO1xcbitcXHRFbGZXKFBoZHIpIHBoZHI7XFxuK1xcdGNoYXIgaW50ZXJwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChwcmVhZChmZCwgXFx1MDAyNmVoZHIsIHNpemVvZihlaGRyKSwgMCkgIT0gc2l6ZW9mKGVoZHIpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKG1lbWNtcChlaGRyLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRykgIT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWhkci5lX3BobnVtOyBpKyspIHtcXG4rXFx0XFx0aWYgKHByZWFkKGZkLCBcXHUwMDI2cGhkciwgc2l6ZW9mKHBoZHIpLFxcbitcXHRcXHRcXHQgIGVoZHIuZV9waG9mZiArIGkgKiBzaXplb2YocGhkcikpICE9IHNpemVvZihwaGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9JTlRFUlApXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAocHJlYWQoZmQsIFxcdTAwMjZpbnRlcnAsIDEsIHBoZHIucF9vZmZzZXQpICE9IDEpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gaW50ZXJwID09ICcvJztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1RFU1QoZmNoZGlyX3NlbnRpbmVsKVxcbit7XFxuK1xcdGNoYXIgYnVmW1BBVEhfTUFYXTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0QVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApO1xcbitcXG4rXFx0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdC4gKi9cXG4rXFx0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xcbitcXHRBU1NFUlRfRVEoc3RybmNtcChidWYsIFxcXCIodW5yZWFjaGFibGUpXFxcIiwgMTMpLCAwKTtcXG4rXFxuK1xcdC8qIEV2ZXJ5IEFUX0ZEQ1dELXJlbGF0aXZlIGxvb2t1cCBmYWlscy4gKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXFxcImZvb1xcXCIsIE9fUkRPTkxZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcXFwiLlxcXCIsIE9fUkRPTkxZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcXFwiLi5cXFwiLCBPX1JET05MWSksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFx0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXFxcImZvb1xcXCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFxuK1xcdC8qIFRoZSBjd2QgY2Fubm90IGJlIHBpbm5lZCBieSBmb2xsb3dpbmcgL3Byb2Mvc2VsZi9jd2QgaW50byBpdC4gKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9wcm9jL3NlbGYvY3dkXFxcIiwgT19QQVRIKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXG4rXFx0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkIHNvIGFic29sdXRlIGxvb2t1cHMga2VlcCB3b3JraW5nLi4uICovXFxuK1xcdGZkID0gb3BlbihcXFwiL1xcXCIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFxuK1xcdC8qIC4uLiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSByZWNvdmVyZWQuICovXFxuK1xcdEFTU0VSVF9FUShjaGRpcihcXFwiL1xcXCIpLCAwKTtcXG4rXFx0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xcbitcXHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXFxcIi9cXFwiKSwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZmNoZGlyX3JlamVjdHNfb3RoZXJfc2VudGluZWxzKVxcbit7XFxuK1xcdEFTU0VSVF9FUShmY2hkaXIoRkRfUElERlNfUk9PVCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XFxuK1xcdEFTU0VSVF9FUShmY2hkaXIoRkRfTlNGU19ST09UKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcXG4rXFx0QVNTRVJUX0VRKGZjaGRpcigtMTAwMDkpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3RfZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAxKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9cXFwiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMSksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X2JhZF9mZClcXG4re1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoLTEsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xcbitcXG4rXFx0LyogT25seSBGRF9GQUlMRlNfUk9PVCBpcyBhIHZhbGlkIHNlbnRpbmVsLiAqL1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfUElERlNfUk9PVCwgMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9OU0ZTX1JPT1QsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3Rfbm90ZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9zdGF0dXNcXFwiLCBPX1JET05MWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9yZWFsZmRfcmVxdWlyZXNfY2FwKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGlmIChnZXRldWlkKCkgPT0gMClcXG4rXFx0XFx0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xcbitcXG4rXFx0ZmQgPSBvcGVuKFxcXCIvXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3JlYWxmZClcXG4re1xcbitcXHRjaGFyIHRlbXBsYXRlW10gPSBcXFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcXFwiO1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRzdHJ1Y3Qgc3RhdCBzdDtcXG4rXFx0aW50IHRtcGZkLCBkZmQsIGZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImZjaHJvb3QoKSB3aXRoIGEgcmVndWxhciBmZCByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0dG1wZmQgPSBvcGVuKFxcXCIvdG1wXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UodG1wZmQsIDApO1xcbitcXG4rXFx0QVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTtcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2FuYXJ5XFxcIiwgdGVtcGxhdGUpO1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcbitcXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShkZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZGZkLCAwKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShkZmQpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzdGF0KFxcXCIvY2FuYXJ5XFxcIiwgXFx1MDAyNnN0KSwgMCk7XFxuK1xcbitcXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwOiBkaXJmZC1hbmNob3JlZCBJL08gd29ya3Mgd2l0aCB0aGUgbmV3IHJvb3QuICovXFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL2NhbmFyeVxcXCIsIHRlbXBsYXRlICsgc3RybGVuKFxcXCIvdG1wL1xcXCIpKTtcXG4rXFx0dW5saW5rYXQodG1wZmQsIHBhdGgsIDApO1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbClcXG4re1xcbitcXHRjaGFyIHRlbXBsYXRlW10gPSBcXFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcXFwiO1xcbitcXHRzdHJ1Y3Qgc3RhdCByZWFscm9vdCwgc3Q7XFxuK1xcdHN0cnVjdCBzdGF0ZnMgc2ZzO1xcbitcXHRjaGFyIGJ1ZltQQVRIX01BWF07XFxuK1xcdGludCBwcm9jZmQsIHRtcGZkLCBkZmQsIGZkO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRzdHJ1Y3QgZmlsZV9oYW5kbGUgaGFuZGxlO1xcbitcXHRcXHR1bnNpZ25lZCBjaGFyIGZfaGFuZGxlW01BWF9IQU5ETEVfU1pdO1xcbitcXHR9IGZoO1xcbitcXHRpbnQgbW50aWQ7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzdGF0KFxcXCIvXFxcIiwgXFx1MDAyNnJlYWxyb290KSwgMCk7XFxuK1xcdHByb2NmZCA9IG9wZW4oXFxcIi9wcm9jXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UocHJvY2ZkLCAwKTtcXG4rXFx0dG1wZmQgPSBvcGVuKFxcXCIvdG1wXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UodG1wZmQsIDApO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xcbitcXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcXG4rXFx0QVNTRVJUX0dFKGRmZCwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcXG4rXFxuK1xcdC8qIEFic29sdXRlIGxvb2t1cHMgZmFpbC4gKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9ldGMvcGFzc3dkXFxcIiwgT19SRE9OTFkpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcdEFTU0VSVF9FUShta2RpcihcXFwiL2Zvb1xcXCIsIDA3MDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcm9vdCBjYW5ub3QgYmUgcmVmZXJlbmNlZCBhdCBhbGwgLSBub3QgZXZlbiBhbiBPX1BBVEggb3BlbixcXG4rXFx0ICogd2hpY2ggc2tpcHMgLVxcdTAwM2VwZXJtaXNzaW9uKCksIGJlY2F1c2UgaXQgbGFuZHMgb24gdGhlIHJvb3QgYXMgYVxcbitcXHQgKiBqdW1wZWQgd2FsayB0ZXJtaW5hbCB0aGF0IC1cXHUwMDNlZF93ZWFrX3JldmFsaWRhdGUoKSByZWZ1c2VzLlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9cXFwiLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXHRBU1NFUlRfRVEob3BlbihcXFwiL1xcXCIsIE9fUEFUSCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXRmcyhcXFwiL1xcXCIsIFxcdTAwMjZzZnMpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJdCBjYW5ub3QgYmUgcGlubmVkIGJ5IGZvbGxvd2luZyAvcHJvYy9zZWxmL3Jvb3QgaW50byBpdCBlaXRoZXJcXG4rXFx0ICogKG9ubHkgdGhlIHJvb3QgaXMgaW4gZmFpbGZzIGhlcmUsIHNvIHNlbGYvY3dkIGlzIHN0aWxsIHJlYWwpLlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKG9wZW5hdChwcm9jZmQsIFxcXCJzZWxmL3Jvb3RcXFwiLCBPX1BBVEgpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKiBOb3IgZW5jb2RlZCBpbnRvIGEgZmlsZSBoYW5kbGUuICovXFxuK1xcdGZoLmhhbmRsZS5oYW5kbGVfYnl0ZXMgPSBNQVhfSEFORExFX1NaO1xcbitcXHRBU1NFUlRfRVEobmFtZV90b19oYW5kbGVfYXQoQVRfRkRDV0QsIFxcXCIvXFxcIiwgXFx1MDAyNmZoLmhhbmRsZSwgXFx1MDAyNm1udGlkLCAwKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXG4rXFx0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdyB1bnJlYWNoYWJsZSBmcm9tIHRoZSByb290LiAqL1xcbitcXHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgXFxcIih1bnJlYWNoYWJsZSlcXFwiLCAxMyksIDApO1xcbitcXG4rXFx0LyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi9cXG4rXFx0ZmQgPSBvcGVuYXQoQVRfRkRDV0QsIFxcXCIuXFxcIiwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXHRmZCA9IG9wZW5hdChkZmQsIFxcXCJjYW5hcnlcXFwiLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEod3JpdGUoZmQsIFxcXCJ4XFxcIiwgMSksIDEpO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0ZmQgPSBvcGVuYXQoZGZkLCBcXFwiY2FuYXJ5XFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApO1xcbitcXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFxuK1xcdC8qIFxcXCIuLlxcXCIgd2Fsa3MgY2xhbXAgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZSwgbm90IGF0IGZhaWxmcy4gKi9cXG4rXFx0ZmQgPSBvcGVuYXQoQVRfRkRDV0QsIFxcXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLlxcXCIsIE9fUEFUSCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0KSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzdC5zdF9kZXYsIHJlYWxyb290LnN0X2Rldik7XFxuK1xcdEFTU0VSVF9FUShzdC5zdF9pbm8sIHJlYWxyb290LnN0X2lubyk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXG4rXFx0LyogcmVhZGxpbmsgb2YgdGhlIG1hZ2ljIGxpbmsgc3RpbGwgd29ya3M6IGl0IGRvZXMgbm90IGZvbGxvdy4gKi9cXG4rXFx0cmV0ID0gcmVhZGxpbmthdChwcm9jZmQsIFxcXCJzZWxmL3Jvb3RcXFwiLCBidWYsIHNpemVvZihidWYpIC0gMSk7XFxuK1xcdEFTU0VSVF9HVChyZXQsIDApO1xcbitcXHRidWZbcmV0XSA9ICdcXFxcMCc7XFxuK1xcdFRIX0xPRyhcXFwiL3Byb2Mvc2VsZi9yb290IHBvaW50cyB0byAnJXMnXFxcIiwgYnVmKTtcXG4rXFx0LyogZF9wYXRoKCkgbmFtZXMgdGhlIGZhaWxmcyByb290IHN5bnRoZXRpY2FsbHksIG5ldmVyIGFzIGEgcmVhbCBwYXRoLiAqL1xcbitcXHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXFxcImZhaWxmczovXFxcIiksIDApO1xcbitcXG4rXFx0LyogQnV0IGZvbGxvd2luZyBpdCBpbnRvIGZhaWxmcyBpcyByZWZ1c2VkLiAqL1xcbitcXHRBU1NFUlRfRVEoZnN0YXRhdChwcm9jZmQsIFxcXCJzZWxmL3Jvb3RcXFwiLCBcXHUwMDI2c3QsIDApLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXFxuK1xcdHVubGlua2F0KGRmZCwgXFxcImNhbmFyeVxcXCIsIDApO1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9hYnNvbHV0ZV9zeW1saW5rKVxcbit7XFxuK1xcdGNoYXIgdGVtcGxhdGVbXSA9IFxcXCIvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFxcXCI7XFxuK1xcdGludCB0bXBmZCwgZGZkLCBmZDtcXG4rXFxuK1xcdGlmIChnZXRldWlkKCkgIT0gMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXFxcIik7XFxuK1xcbitcXHR0bXBmZCA9IG9wZW4oXFxcIi90bXBcXFwiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XFxuK1xcdEFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7XFxuK1xcdGRmZCA9IG9wZW4odGVtcGxhdGUsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UoZGZkLCAwKTtcXG4rXFxuK1xcdGZkID0gb3BlbmF0KGRmZCwgXFxcInRhcmdldFxcXCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXHRBU1NFUlRfRVEoc3ltbGlua2F0KFxcXCJ0YXJnZXRcXFwiLCBkZmQsIFxcXCJyZWxcXFwiKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzeW1saW5rYXQoXFxcIi9ldGNcXFwiLCBkZmQsIFxcXCJhYnNcXFwiKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcXG4rXFxuK1xcdC8qIFJlbGF0aXZlIHN5bWxpbmtzIGtlZXAgcmVzb2x2aW5nIHdpdGhpbiB0aGUgZGlyZmQtYW5jaG9yZWQgd2Fsay4uLiAqL1xcbitcXHRmZCA9IG9wZW5hdChkZmQsIFxcXCJyZWxcXFwiLCBPX1JET05MWSk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xcbitcXG4rXFx0LyogLi4uIGFic29sdXRlIHN5bWxpbmtzIHJlc3RhcnQgdGhlIHdhbGsgYXQgdGhlIGZhaWxmcyByb290LiAqL1xcbitcXHRBU1NFUlRfRVEob3BlbmF0KGRmZCwgXFxcImFic1xcXCIsIE9fUkRPTkxZKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xcbitcXG4rXFx0LyogQmVzdC1lZmZvcnQgY2xlYW51cCB2aWEgdGhlIHByZS1vcGVuZWQgZGlyZmRzLiAqL1xcbitcXHR1bmxpbmthdChkZmQsIFxcXCJhYnNcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGZkLCBcXFwicmVsXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRmZCwgXFxcInRhcmdldFxcXCIsIDApO1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF91bnByaXZpbGVnZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbUEFUSF9NQVhdO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSA9PSAwKVxcbitcXHRcXHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XFxuK1xcbitcXHQvKiBXaXRob3V0IG5vX25ld19wcml2cyBlbnRlcmluZyBmYWlsZnMgaXMgbm90IGFsbG93ZWQuLi4gKi9cXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTtcXG4rXFxuK1xcdC8qIC4uLiB3aXRoIG5vX25ld19wcml2cyBzZXQgaXQgaXMgYWxsb3dlZC4gKi9cXG4rXFx0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEob3BlbihcXFwiL2V0Yy9wYXNzd2RcXFwiLCBPX1JET05MWSksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rXFxuK1xcdC8qIFRoZSB0YXNrIGNvdW50cyBhcyBjaHJvb3RlZDogbm8gdXNlciBuYW1lc3BhY2VzIGFueW1vcmUuICovXFxuK1xcdEFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV1VTRVIpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRVBFUk0pO1xcbitcXG4rXFx0LyogV2l0aCBib3RoIHJvb3QgYW5kIGN3ZCBpbiBmYWlsZnMgZ2V0Y3dkKCkgcmVwb3J0cyBcXFwiL1xcXCIuICovXFxuK1xcdEFTU0VSVF9FUShmY2hkaXIoRkRfRkFJTEZTX1JPT1QpLCAwKTtcXG4rXFx0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xcbitcXHRBU1NFUlRfRVEoc3RyY21wKGJ1ZiwgXFxcIi9cXFwiKSwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9yZWplY3RlZF93aGVuX2Nocm9vdGVkKVxcbit7XFxuK1xcdGNoYXIgdGVtcGxhdGVbXSA9IFxcXCIvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFxcXCI7XFxuK1xcdGludCB0bXBmZDtcXG4rXFxuK1xcdGlmIChnZXRldWlkKCkgIT0gMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJjaHJvb3QoKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0dG1wZmQgPSBvcGVuKFxcXCIvdG1wXFxcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0UodG1wZmQsIDApO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoY2hyb290KHRlbXBsYXRlKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjaGRpcihcXFwiL1xcXCIpLCAwKTtcXG4rXFxuK1xcdC8qIFJlbW92ZSB0aGUgamFpbCB3aGlsZSBzdGlsbCBwcml2aWxlZ2VkOyBzdGlja3kgL3RtcCBibG9ja3Mgbm9ib2R5LiAqL1xcbitcXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXFxcIi90bXAvXFxcIiksIEFUX1JFTU9WRURJUik7XFxuK1xcbitcXHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7XFxuK1xcbitcXHQvKiBBbiB1bnByaXZpbGVnZWQgY2hyb290ZWQgdGFzayBtdXN0IG5vdCBsaWZ0IGl0cyBcXFwiLi5cXFwiIGJhcnJpZXIuICovXFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XFxuK31cXG4rXFxuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0KVxcbit7XFxuK1xcdGNoYXIgc3RhY2tbRkFJTEZTX0NMT05FX1NUQUNLXTtcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSA9PSAwKVxcbitcXHRcXHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XFxuK1xcbitcXHQvKiBBIENMT05FX0ZTIHNpYmxpbmcgc2hhcmVzIHRoZSBmc19zdHJ1Y3Q6IGJ1bXAgZnMtXFx1MDAzZXVzZXJzIHRvIDIuICovXFxuK1xcdHBpZCA9IGNsb25lKGZhaWxmc19wYXJrLCBzdGFjayArIHNpemVvZihzdGFjayksIENMT05FX0ZTIHwgU0lHQ0hMRCxcXG4rXFx0XFx0ICAgIE5VTEwpO1xcbitcXHRBU1NFUlRfR0UocGlkLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIHNpYmxpbmcgd2l0aG91dCBub19uZXdfcHJpdnMgY291bGQgZXhlYyBhIHNldHVpZCBiaW5hcnkgd2l0aFxcbitcXHQgKiB0aGUgZmFpbGZzIHJvb3QsIHNvIGEgc2hhcmVkIGZzX3N0cnVjdCBpcyByZWZ1c2VkIGV2ZW4gd2l0aFxcbitcXHQgKiBub19uZXdfcHJpdnMgc2V0LlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoa2lsbChwaWQsIFNJR0tJTEwpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHdhaXRwaWQocGlkLCBOVUxMLCAwKSwgcGlkKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX25vX292ZXJtb3VudClcXG4re1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibW91bnRpbmcgcmVxdWlyZXMgcHJpdmlsZWdlc1xcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ29udGFpbiB0aGUgYmxhc3QgcmFkaXVzOiBpZiBmYWlsZnMgZXZlciByZWdyZXNzZWQgYW5kIFxcXCIvXFxcIlxcbitcXHQgKiByZXNvbHZlZCB0byB0aGUgcmVhbCByb290LCB0aGUgdG1wZnMgbW91bnQgYmVsb3cgbXVzdCBub3QgdG91Y2hcXG4rXFx0ICogdGhlIGhvc3QuIEEgcHJpdmF0ZSBtb3VudCBuYW1lc3BhY2Uga2VlcHMgaXQgbG9jYWwgdG8gdGhpcyBjaGlsZC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV05TKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShtb3VudChOVUxMLCBcXFwiL1xcXCIsIE5VTEwsIE1TX1JFQyB8IE1TX1BSSVZBVEUsIE5VTEwpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2YgdGhlIGZhaWxmcyByb290LiBJdCBjYW5ub3QgZXZlblxcbitcXHQgKiBiZSBuYW1lZCBhcyBhIG1vdW50IHRhcmdldDogcmVzb2x2aW5nIFxcXCIvXFxcIiBpcyByZWZ1c2VkIGJlZm9yZSB0aGVcXG4rXFx0ICogbW91bnQgbWFjaGluZXJ5ICh3aGljaCwgZmFpbGZzIGJlaW5nIGluIG5vIG1vdW50IG5hbWVzcGFjZSwgd291bGRcXG4rXFx0ICogcmVqZWN0IGl0IGFueXdheSkgaXMgZXZlciByZWFjaGVkLiBvcGVuX3RyZWUoT1BFTl9UUkVFX0NMT05FKSBpc1xcbitcXHQgKiBsaWtld2lzZSBtb290IHNpbmNlIG5vIGZkIHRvIHRoZSByb290IGNhbiBiZSBvYnRhaW5lZC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUShtb3VudChcXFwibm9uZVxcXCIsIFxcXCIvXFxcIiwgXFxcInRtcGZzXFxcIiwgMCwgTlVMTCksIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX3NldG5zX2VzY2FwZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3RhdCByZWFscm9vdCwgc3Q7XFxuK1xcdGludCBuc2ZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldG5zKCkgdG8gYSBtb3VudCBuYW1lc3BhY2UgcmVxdWlyZXMgcHJpdmlsZWdlc1xcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN0YXQoXFxcIi9cXFwiLCBcXHUwMDI2cmVhbHJvb3QpLCAwKTtcXG4rXFx0bnNmZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvbnMvbW50XFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfR0UobnNmZCwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcXG4rXFx0QVNTRVJUX0VRKG9wZW4oXFxcIi9ldGNcXFwiLCBPX1BBVEgpLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XFxuK1xcbitcXHQvKiBBIG1vdW50IG5hbWVzcGFjZSBmZCBpcyB0aGUga2V5IG91dDogaXQgcmVzZXRzIHJvb3QgYW5kIGN3ZC4gKi9cXG4rXFx0QVNTRVJUX0VRKHNldG5zKG5zZmQsIENMT05FX05FV05TKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjbG9zZShuc2ZkKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc3RhdChcXFwiL1xcXCIsIFxcdTAwMjZzdCksIDApO1xcbitcXHRBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpO1xcbitcXHRBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlYylcXG4re1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwicHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeGVjIGluIGEgY2hpbGQ6IGEgd3JvbmdseSBzdWNjZXNzZnVsIGV4ZWMgd291bGQgcmVwbGFjZSB0aGUgdGVzdFxcbitcXHQgKiBpbWFnZSBhbmQgaXRzIGV4aXQgY29kZSB3b3VsZCBub3QgbWF0Y2ggdGhlIHNlbnRpbmVsIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRBU1NFUlRfR0UocGlkLCAwKTtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdGV4ZWNsKFxcXCIvYmluL3RydWVcXFwiLCBcXFwidHJ1ZVxcXCIsIE5VTEwpO1xcbitcXHRcXHRfZXhpdChlcnJubyA9PSBFT1BOT1RTVVBQID8gRkFJTEZTX0VYRUNfQkxPQ0tFRCA6IDEpO1xcbitcXHR9XFxuK1xcdEFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTtcXG4rXFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEZBSUxGU19FWEVDX0JMT0NLRUQpO1xcbit9XFxuK1xcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlY19pbnRlcnByZXRlcilcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyZ3ZbXSA9IHsgXFxcImZhaWxmc190ZXN0XFxcIiwgTlVMTCB9O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVudnBbXSA9IHsgTlVMTCB9O1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcdGludCBzdGF0dXMsIGV4ZWZkO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcXFwiKTtcXG4rXFxuK1xcdC8qIEV4ZWMgb3Vyc2VsdmVzOiB0aGUgb25lIGJpbmFyeSBndWFyYW50ZWVkIHRvIGJlIGFyb3VuZC4gKi9cXG4rXFx0ZXhlZmQgPSBvcGVuKFxcXCIvcHJvYy9zZWxmL2V4ZVxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0QVNTRVJUX0dFKGV4ZWZkLCAwKTtcXG4rXFx0aWYgKCFlbGZfaGFzX2Fic29sdXRlX2ludGVycChleGVmZCkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidGVzdCBiaW5hcnkgaGFzIG5vIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlclxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgYmluYXJ5IGl0c2VsZiBuZWVkcyBubyBwYXRoIGxvb2t1cCAtIGl0IGlzIGV4ZWN1dGVkIGJ5IGZkIC1cXG4rXFx0ICogYnV0IGxvYWRpbmcgaXQgZmFpbHMgb24gb3BlbmluZyB0aGUgYWJzb2x1dGUgUFRfSU5URVJQXFxuK1xcdCAqIGludGVycHJldGVyLiBSdW4gaXQgaW4gYSBjaGlsZCBzbyBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIGRvZXNcXG4rXFx0ICogbm90IHJlcGxhY2UgdGhlIHRlc3QgaW1hZ2UgYW5kIG1hc3F1ZXJhZGUgYXMgYSBwYXNzLlxcbitcXHQgKi9cXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRBU1NFUlRfR0UocGlkLCAwKTtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdHN5c2NhbGwoX19OUl9leGVjdmVhdCwgZXhlZmQsIFxcXCJcXFwiLCBhcmd2LCBlbnZwLCBBVF9FTVBUWV9QQVRIKTtcXG4rXFx0XFx0X2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTtcXG4rXFx0fVxcbitcXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApLCBwaWQpO1xcbitcXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XFxuK1xcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBGQUlMRlNfRVhFQ19CTE9DS0VEKTtcXG4rfVxcbitcXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX2luaGVyaXRlZClcXG4re1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwicHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdEFTU0VSVF9HRShwaWQsIDApO1xcbitcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0aWYgKG9wZW4oXFxcIi9ldGNcXFwiLCBPX1BBVEgpICE9IC0xIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXFxuK1xcdFxcdFxcdF9leGl0KDEpO1xcbitcXHRcXHRfZXhpdCgwKTtcXG4rXFx0fVxcbitcXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApLCBwaWQpO1xcbitcXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XFxuK1xcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCAwKTtcXG4rfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6MDU6MzYuNTE2NTYyMzgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTYxNjQzNjM0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2ZjaHJvb3RcIixcbiAgICBcInN5c19mY2hkaXJcIixcbiAgICBcImZhaWxmc19jdXJyZW50X2NoZGlyXCIsXG4gICAgXCJmYWlsZnNfZ2V0X3Jvb3RcIixcbiAgICBcImZhaWxmc19tbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgZXNjYXBpbmcgY2hyb290LCByZWZlcmVuY2UgbGVha3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWNhNGEzMDNiMDk0YjZjOGI0MmMzNzcwMjc4YjkzYTg0YjE3Y2QwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE5OjA1OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYWlsZnMucnN0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIxZmYyZGI3OTQxZGYyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZhaWxmcy5yc3RcbkBAIC0wLDAgKzEsNzMgQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKz09PT09PVxuK2ZhaWxmc1xuKz09PT09PVxuK1xuK2ZhaWxmcyBpcyBhIGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIHRoYXQgZmFpbHMgZXZlcnkgb3BlcmF0aW9uXG4rcmVhY2hpbmcgaXQgd2l0aCBgYEVPUE5PVFNVUFBgYC4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIG51bGxmcy4gV2hlcmVcbitudWxsZnMgaXMgcGVybWFuZW50bHkgZW1wdHksIGZhaWxmcyBtZWFucyBcIm5vdGhpbmcgaXMgc3VwcG9ydGVkIGhlcmVcIi5cbitJdCBjYW5ub3QgYmUgbW91bnRlZCBmcm9tIHVzZXJzcGFjZSwgbm90aGluZyBjYW4gYmUgbW91bnRlZCBvbiB0b3Agb2ZcbitpdC4gSXQgY2Fubm90IGJlIGNsb25lZC5cbitcbitUaGUgb25seSB3YXkgaW50byBpdCBpcyB0aGUgYGBGRF9GQUlMRlNfUk9PVGBgIGZpbGUgZGVzY3JpcHRvciBzZW50aW5lbCB3aGljaFxuK2lzIHVuZGVyc3Rvb2QgYnkgYGBmY2hkaXIoMilgYCBhbmQgYGBmY2hyb290KDIpYGAuXG4rXG4rU2VtYW50aWNzXG4rPT09PT09PT09XG4rXG4rRXZlcnkgcGF0aCB3YWxrIG9mIGEgY29tcG9uZW50IHRocm91Z2ggZmFpbGZzIGZhaWxzIHdpdGhcbitgYEVPUE5PVFNVUFBgYCBiZWZvcmUgdGhhdCBjb21wb25lbnQgaXMgcGFyc2VkLCBpbmNsdWRpbmcgYGAuYGAuXG4rXG4rTm8gcGF0aCBsb29rdXAgY2FuIG9wZW4gdGhlIHJvb3QsIG5vdCBldmVuIHdpdGggYGBPX1BBVEhgYC5cbitcbitBIHByb2Nlc3Mgd2l0aCBpdHMgd29ya2luZyBkaXJlY3RvcnkgaW4gZmFpbGZzIGZhaWxzIGV2ZXJ5XG4rYGBBVF9GRENXRGBgLXJlbGF0aXZlIGxvb2t1cC4gQXMgd2l0aCBhbnkgd29ya2luZyBkaXJlY3RvcnkgdGhhdCBpc1xuK3VucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdCwgdGhlIGBgZ2V0Y3dkKDIpYGAgc3lzdGVtIGNhbGwgcmV0dXJuc1xuK2EgcGF0aCBwcmVmaXhlZCB3aXRoIGBgKHVucmVhY2hhYmxlKWBgLlxuK1xuK0EgcHJvY2VzcyB3aXRoIGl0cyByb290IGRpcmVjdG9yeSBpbiBmYWlsZnMgZmFpbHMgZXZlcnkgYWJzb2x1dGUgcGF0aFxuK2xvb2t1cCBpbmNsdWRpbmcgYWJzb2x1dGUgc3ltbGlua3MgYW5kIHRoZSBpbnRlcnByZXRlciBvZiBkeW5hbWljYWxseVxuK2xpbmtlZCBiaW5hcmllcy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZmFpbHMgZXhlYy5cbitcbitMb29rdXBzIGFuY2hvcmVkIGF0IGV4cGxpY2l0IGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGtlZXAgd29ya2luZy4gSXRcbitpcyB0aGUgYGBmc19zdHJ1Y3RgYCBlcXVpdmFsZW50IG9mIGBgUkVTT0xWRV9CRU5FQVRIYGAuIFRoZSBwcm9jZXNzIG11c3RcbithbmNob3IgZXZlcnkgbG9va3VwIGF0IGEgZmlsZSBkZXNjcmlwdG9yIGl0IGV4cGxpY2l0bHkgaG9sZHMuXG4rXG4rRW50ZXJpbmdcbis9PT09PT09PVxuK1xuK2BgZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMClgYCByZXF1aXJlcyBgYENBUF9TWVNfQ0hST09UYGAgaW4gdGhlXG4rY2FsbGVyJ3MgdXNlciBuYW1lc3BhY2UsIG1pcnJvcmluZyBgYGNocm9vdCgyKWBgLiBVbnByaXZpbGVnZWQgY2FsbGVyc1xuK21heSBlbnRlciBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBob2xkOlxuK1xuKyogYGBub19uZXdfcHJpdnNgYCBpcyBzZXQ6IHNldHVpZCBiaW5hcmllcyBvbiByZWd1bGFyIG1vdW50cyByZW1haW5cbisgIHJlYWNoYWJsZSB2aWEgaW5oZXJpdGVkIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBleGVjdXRpbmcgdGhlbVxuKyAgd2l0aCBhbiB1bnVzYWJsZSByb290IGRpcmVjdG9yeSBpcyB0aGUgY2xhc3NpYyBjb25mdXNlZCBkZXB1dHkuXG4rXG4rKiBUaGUgY2FsbGVyIGlzIG5vdCBhbHJlYWR5IGNocm9vdGVkOiB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgd2hhdFxuKyAgY29uZmluZXMgYGAuLmBgIHJlc29sdXRpb24gYW5kIHRoZSBmYWlsZnMgcm9vdCBjYW4gbmV2ZXIgYmUgcmVhY2hlZCBieVxuKyAgd2Fsa2luZyB1cCBhIHJlYWwgbW91bnQgdHJlZSwgc28gbW92aW5nIHRoZSByb290IG9mIGEgY2hyb290ZWQgdGFzayB0b1xuKyAgZmFpbGZzIHdvdWxkIGFsbG93IGl0IHRvIGVzY2FwZSBpdHMgY2hyb290IHZpYSBgYG9wZW5hdChmZCwgXCIuLlwiKWBgLlxuK1xuKyogVGhlIGNhbGxlciBkb2VzIG5vdCBzaGFyZSBpdHMgYGBmc19zdHJ1Y3RgYDogYGBub19uZXdfcHJpdnNgYCBpc1xuKyAgY2hlY2tlZCBvbiB0aGUgY2FsbGluZyB0aHJlYWQsIGJ1dCB0aGUgcm9vdCBsaXZlcyBpbiB0aGUgYGBmc19zdHJ1Y3RgYC5cbisgIEEgYGBDTE9ORV9GU2BgIHNpYmxpbmcgd2l0aG91dCBgYG5vX25ld19wcml2c2BgIGNvdWxkIG90aGVyd2lzZSBleGVjdXRlXG4rICBhIHNldHVpZCBiaW5hcnkgd2l0aCB0aGUgZmFpbGZzIHJvb3QsIHNvIGVudHJ5IHJlcXVpcmVzIGBgZnMtXHUwMDNldXNlcnMgPT1cbisgIDFgYCwgdGhlIHNhbWUgcmVzdHJpY3Rpb24gYGBzZXRucygyKWBgIGFwcGxpZXMgZm9yIHRoZSBtb3VudCBhbmQgdXNlclxuKyAgbmFtZXNwYWNlcy5cbitcbitMZWF2aW5nXG4rPT09PT09PVxuK1xuK0JhY2tpbmcgb3V0IGlzIGN1cnJlbnRseSBoYXJkLCBidXQgdGhpcyBpcyBhIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50XG4raW1wbGVtZW50YXRpb24sIG5vdCBhIGd1YXJhbnRlZWQgaW50ZXJmYWNlLCBhbmQgbWF5IGJlIGxvb3NlbmVkIGxhdGVyLlxuK0ZvciBub3cgYSBwcm9jZXNzIHRoYXQgZW50ZXJlZCBmYWlsZnMgY291bnRzIGFzIGNocm9vdGVkLCBzbyBpdCBjYW5ub3RcbitjcmVhdGUgdXNlciBuYW1lc3BhY2VzIHRvIHJlZ2FpbiBgYENBUF9TWVNfQ0hST09UYGAsIGFuZCBgYGNocm9vdCgyKWBgXG4rb3IgYGBmY2hyb290KDIpYGAgYmFjayBvdXQgcmVxdWlyZSBgYENBUF9TWVNfQ0hST09UYGAuIFRoZSByZW1haW5pbmcgd2F5XG4rb3V0IHRvZGF5IGlzIGBgc2V0bnMoMilgYCB3aXRoIGEgbW91bnQgbmFtZXNwYWNlIGZpbGUgZGVzY3JpcHRvciwgd2hpY2hcbityZXF1aXJlcyBgYENBUF9TWVNfQURNSU5gYCBvdmVyIHRoZSB0YXJnZXQgbW91bnQgbmFtZXNwYWNlIGFzIHdlbGwgYXNcbitgYENBUF9TWVNfQ0hST09UYGAgYW5kIGBgQ0FQX1NZU19BRE1JTmBgIGluIHRoZSBjYWxsZXIncyB1c2VyIG5hbWVzcGFjZVxuK2FuZCByZXNldHMgYm90aCByb290IGFuZCB3b3JraW5nIGRpcmVjdG9yeS4gQSBwcm9jZXNzIHRoYXQgaG9sZHMgbm8gc3VjaFxuK2ZpbGUgZGVzY3JpcHRvciBhbmQgcmVzdHJpY3RzIGBgKmNoZGlyKClgYC9gYCpjaHJvb3QoKWBgL2Bgc2V0bnMoKWBgIHZpYVxuK3NlY2NvbXAgY2Fubm90IGN1cnJlbnRseSBnZXQgYmFjayBvdXQuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxuaW5kZXggMWY3MWNmMTU5NTQ3NmMuLjczNGE0NWU1MTY2NzVjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5AQCAtOTEsNiArOTEsNyBAQCBEb2N1bWVudGF0aW9uIGZvciBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy5cbiAgICBleHQzXG4gICAgZXh0NC9pbmRleFxuICAgIGYyZnNcbisgICBmYWlsZnNcbiAgICBnZnMyL2luZGV4XG4gICAgaGZzXG4gICAgaGZzcGx1c1xuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IGYzMWI3YWZmZmMzNDU5Li41MmUzNTM4Y2M3ZGY0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4rKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTUxMSwzICs1MTEsNCBAQFxuIDU3OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNTgwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDU4MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNTgyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwgYi9hcmNoL2FybS90b29scy9zeXNjYWxsLnRibFxuaW5kZXggOTQzNTFlMjJiZmNmNzYuLjU1NzE3ZWQzMmMyN2U2IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmxcbisrKyBiL2FyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsXG5AQCAtNDg2LDMgKzQ4Niw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxuaW5kZXggNjJkOTNkODhlMGZlZjguLmRmMmQxZDgyZmIzY2NmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxuKysrIGIvYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibFxuQEAgLTQ4MywzICs0ODMsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IDI0ODkzNDI1NzEwMTRjLi5iYTdhNGQ4OTAzZDA0NCAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC00NzEsMyArNDcxLDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCAyMjNkMjYzMDM2MjcyNC4uYzU1YTVjOTZmNDliODIgMTAwNjQ0XG4tLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG4rKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDc3LDMgKzQ3Nyw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibCBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsXG5pbmRleCA3NDMwNzE0ZTJiOGY4Ni4uOWFlODhlNGVhYzYxZWUgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjMyLnRibFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmxcbkBAIC00MTAsMyArNDEwLDQgQEBcbiA0NjlcdG4zMlx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0bjMyXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdG4zMlx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0bjMyXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmxcbmluZGV4IDYzMGFhYjllNTQyNTkyLi44M2RjOTNhMDcxMmYxMiAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsXG4rKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibFxuQEAgLTM4NiwzICszODYsNCBAQFxuIDQ2OVx0bjY0XHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRuNjRcdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0bjY0XHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRuNjRcdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibFxuaW5kZXggMTI4NjUzMTEyMjg0YjIuLjljNjI0MjljOWI3YjRlIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmxcbisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsXG5AQCAtNDU5LDMgKzQ1OSw0IEBAXG4gNDY5XHRvMzJcdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdG8zMlx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRvMzJcdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdG8zMlx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IGM2MzMxZGFkOTQ2MTNiLi44OGFkYzQwMTZjY2UwMSAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDcwLDMgKzQ3MCw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggNGZjYzdjNThhMTA1ZGMuLmNmYmI3MDAzOWZmMDA3IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTU2MiwzICs1NjIsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0bm9zcHVcdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggMDlhN2VmMDRkOTc5MWEuLjFiNDVlNjhhMjE3YmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuQEAgLTM5OCwzICszOTgsNCBAQFxuIDQ2OVx0Y29tbW9uXHRmaWxlX3NldGF0dHJcdFx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRjb21tb25cdGZjaHJvb3RcdFx0XHRcdHN5c19mY2hyb290XG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuaW5kZXggNzBiMzE1Y2JlNzEwYzIuLmFjZTA2OGRmZjBkZTAzIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDc1LDMgKzQ3NSw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibCBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5pbmRleCA3ZTcxYmY3ZmNkMTRmNy4uNWI5ZmUwZTgxNDBmMjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbkBAIC01MTcsMyArNTE3LDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmxcbmluZGV4IGY4MzJlYmQyZDc5YjAwLi4yYzE3MmVmNDhkZmQzMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsXG4rKysgYi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibFxuQEAgLTQ3NywzICs0NzcsNCBAQFxuIDQ2OVx0aTM4Nlx0ZmlsZV9zZXRhdHRyXHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGkzODZcdGxpc3Ruc1x0XHRcdHN5c19saXN0bnNcbiA0NzFcdGkzODZcdHJzZXFfc2xpY2VfeWllbGRcdHN5c19yc2VxX3NsaWNlX3lpZWxkXG4rNDcyXHRpMzg2XHRmY2hyb290XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibCBiL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG5pbmRleCA1MjQxNTVkNjU1ZGExNS4uZDViNjA0NWIwMDkwY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibFxuKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmxcbkBAIC0zOTYsNiArMzk2LDcgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0c3lzX2xpc3Ruc1xuIDQ3MVx0Y29tbW9uXHRyc2VxX3NsaWNlX3lpZWxkXHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0c3lzX2ZjaHJvb3RcbiBcbiAjXG4gIyBEdWUgdG8gYSBoaXN0b3JpY2FsIGRlc2lnbiBlcnJvciwgY2VydGFpbiBzeXNjYWxscyBhcmUgbnVtYmVyZWQgZGlmZmVyZW50bHlcbmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmxcbmluZGV4IGE5YmNhNGU0ODRkZWNmLi5kMzU0YmIyMzE3OTZjMiAxMDA2NDRcbi0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibFxuKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsXG5AQCAtNDQyLDMgKzQ0Miw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNzNiNmNhYjc3MzhlYTQgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuKysrIGIvZnMvTWFrZWZpbGVcbkBAIC0xNiw3ICsxNiw3IEBAIG9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG4gXHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG4gXHRcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcbiBcdFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcbi1cdFx0ZmlsZV9hdHRyLm8gZnNlcnJvci5vIG51bGxmcy5vXG4rXHRcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xuIFxuIG9iai0kKENPTkZJR19CVUZGRVJfSEVBRClcdCs9IGJ1ZmZlci5vIG1wYWdlLm9cbiBvYmotJChDT05GSUdfUFJPQ19GUylcdFx0Kz0gcHJvY19uYW1lc3BhY2Uub1xuZGlmZiAtLWdpdCBhL2ZzL2RfcGF0aC5jIGIvZnMvZF9wYXRoLmNcbmluZGV4IGE0ODk1N2MwOTcxZWY2Li5jMjUzMDkwMDZkNWQ2ZCAxMDA2NDRcbi0tLSBhL2ZzL2RfcGF0aC5jXG4rKysgYi9mcy9kX3BhdGguY1xuQEAgLTI3OSw3ICsyNzksOCBAQCBjaGFyICpkX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbilcbiBcdCAqIGFuZCBpbnN0ZWFkIGhhdmUgZF9wYXRoIHJldHVybiB0aGUgbW91bnRlZCBwYXRoLlxuIFx0ICovXG4gXHRpZiAocGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2RuYW1lIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghSVNfUk9PVChwYXRoLVx1MDAzZWRlbnRyeSkgfHwgcGF0aC1cdTAwM2VkZW50cnkgIT0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3QpKVxuK1x0ICAgICghSVNfUk9PVChwYXRoLVx1MDAzZWRlbnRyeSkgfHwgcGF0aC1cdTAwM2VkZW50cnkgIT0gcGF0aC1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3QgfHxcbitcdCAgICAgZmFpbGZzX21udChwYXRoLVx1MDAzZW1udCkpKVxuIFx0XHRyZXR1cm4gcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2RuYW1lKHBhdGgtXHUwMDNlZGVudHJ5LCBidWYsIGJ1Zmxlbik7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvZnMvZmFpbGZzLmMgYi9mcy9mYWlsZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NmEzNmRhM2QyMzZkNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvZmFpbGZzLmNcbkBAIC0wLDAgKzEsMTY2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaHJpc3RpYW4gQnJhdW5lciBcdTAwM2NicmF1bmVyQGtlcm5lbC5vcmdcdTAwM2UgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMvc3VwZXJfdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGF0aCBmYWlsZnNfcm9vdF9wYXRoID0ge307XG4rXG4rdm9pZCBmYWlsZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpXG4re1xuK1x0KnBhdGggPSBmYWlsZnNfcm9vdF9wYXRoO1xuK1x0cGF0aF9nZXQocGF0aCk7XG4rfVxuK1xuK2Jvb2wgZmFpbGZzX21udChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udClcbit7XG4rXHRyZXR1cm4gbW50LVx1MDAzZW1udF9zYiA9PSBmYWlsZnNfcm9vdF9wYXRoLm1udC1cdTAwM2VtbnRfc2I7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmFpbGZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0ICAgICBpbnQgbWFzaylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmYWlsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdC8qIFVucmVhY2hhYmxlOiAtXHUwMDNlcGVybWlzc2lvbigpIGFscmVhZHkgZmFpbGVkIHRoZSB3YWxrLiAqL1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuK31cbitcbitzdGF0aWMgaW50IGZhaWxmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbitcdFx0XHQgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbitcdFx0XHQgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4rXHQucGVybWlzc2lvblx0PSBmYWlsZnNfcGVybWlzc2lvbixcbitcdC5sb29rdXBcdFx0PSBmYWlsZnNfbG9va3VwLFxuK1x0LmdldGF0dHJcdD0gZmFpbGZzX2dldGF0dHIsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYWlsZnNfZGlyX29wZXJhdGlvbnMgPSB7fTtcbitcbitzdGF0aWMgaW50IGZhaWxmc19kX3dlYWtfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHQvKlxuK1x0ICogVGhlIHJvb3QgaXMgb25seSBldmVyIHJlYWNoZWQgYXMgYSBwYXRoLXdhbGsgdGVybWluYWwgYnkganVtcGluZ1xuK1x0ICogdG8gaXQ6IGFzIFwiL1wiIHdoZW4gaXQgaXMgdGhlIGNhbGxlcidzIHJvb3QsIG9yIHRocm91Z2ggYVxuK1x0ICogL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3tyb290LGN3ZH0gbWFnaWMgbGluay4gLVx1MDAzZXBlcm1pc3Npb24oKSBhbHJlYWR5IGZhaWxzXG4rXHQgKiBldmVyeSB3YWxrIG9mIGEgY29tcG9uZW50LCBidXQgYSBqdW1wIGxhbmRzIG9uIHRoZSByb290IHdpdGhvdXRcbitcdCAqIG9uZS4gUmVmdXNlIGhlcmUgdG9vIHNvIHRoZSByb290IGNhbm5vdCBiZSBwaW5uZWQgYnkgYW4gT19QQVRIXG4rXHQgKiBvcGVuIG9yIGVuY29kZWQgaW50byBhIGZpbGUgaGFuZGxlLlxuK1x0ICovXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBjaGFyICpmYWlsZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4re1xuK1x0cmV0dXJuIGR5bmFtaWNfZG5hbWUoYnVmZmVyLCBidWZsZW4sIFwiZmFpbGZzOi9cIik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZmFpbGZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuK1x0LmRfZG5hbWVcdFx0PSBmYWlsZnNfZG5hbWUsXG4rXHQuZF93ZWFrX3JldmFsaWRhdGVcdD0gZmFpbGZzX2Rfd2Vha19yZXZhbGlkYXRlLFxuK307XG4rXG4rc3RhdGljIGludCBmYWlsZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbitcdC5zdGF0ZnNcdD0gZmFpbGZzX3N0YXRmcyxcbit9O1xuK1xuK3N0YXRpYyBpbnQgZmFpbGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcbitcdHMtXHUwMDNlc19tYXhieXRlc1x0XHQ9IE1BWF9MRlNfRklMRVNJWkU7XG4rXHRzLVx1MDAzZXNfYmxvY2tzaXplXHRcdD0gUEFHRV9TSVpFO1xuK1x0cy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzXHQ9IFBBR0VfU0hJRlQ7XG4rXHRzLVx1MDAzZXNfbWFnaWNcdFx0PSBGQUlMX0ZTX01BR0lDO1xuK1x0cy1cdTAwM2VzX29wXHRcdFx0PSBcdTAwMjZmYWlsZnNfc3VwZXJfb3BlcmF0aW9ucztcbitcdHMtXHUwMDNlc19leHBvcnRfb3BcdFx0PSBOVUxMO1xuK1x0cy1cdTAwM2VzX3hhdHRyXHRcdD0gTlVMTDtcbitcdHMtXHUwMDNlc190aW1lX2dyYW5cdFx0PSAxO1xuK1x0cy1cdTAwM2VzX2RfZmxhZ3NcdFx0PSAwO1xuK1xuK1x0aW5vZGUgPSBuZXdfaW5vZGUocyk7XG4rXHRpZiAoIWlub2RlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdC8qIGZhaWxmcyBzdXBwb3J0cyBubyBvcGVyYXRpb25zLi4uICovXG4rXHRpbm9kZS1cdTAwM2VpX21vZGVcdD0gU19JRkRJUjtcbitcdHNldF9ubGluayhpbm9kZSwgMik7XG4rXHRpbm9kZS1cdTAwM2VpX29wXHQ9IFx1MDAyNmZhaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbitcdGlub2RlLVx1MDAzZWlfZm9wXHQ9IFx1MDAyNmZhaWxmc19kaXJfb3BlcmF0aW9ucztcbitcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbitcdGlub2RlLVx1MDAzZWlfaW5vXHQ9IDE7XG4rXHQvKiAuLi4gYW5kIGlzIGltbXV0YWJsZS4gKi9cbitcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7XG4rXG4rXHRzZXRfZGVmYXVsdF9kX29wKHMsIFx1MDAyNmZhaWxmc19kZW50cnlfb3BlcmF0aW9ucyk7XG4rXHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbitcdGlmICghcy1cdTAwM2VzX3Jvb3QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmFpbGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBmYWlsZnNfZmlsbF9zdXBlcik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGZhaWxmc19jb250ZXh0X29wcyA9IHtcbitcdC5nZXRfdHJlZVx0PSBmYWlsZnNfZ2V0X3RyZWUsXG4rfTtcbitcbitzdGF0aWMgaW50IGZhaWxmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuK3tcbitcdGZjLVx1MDAzZW9wc1x0XHQ9IFx1MDAyNmZhaWxmc19jb250ZXh0X29wcztcbitcdGZjLVx1MDAzZWdsb2JhbFx0PSB0cnVlO1xuK1x0ZmMtXHUwMDNlc2JfZmxhZ3NcdHw9IFNCX05PVVNFUjtcbitcdGZjLVx1MDAzZXNfaWZsYWdzXHR8PSBTQl9JX05PRVhFQyB8IFNCX0lfTk9ERVY7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGZhaWxmc19jdXJyZW50X2NoZGlyKHZvaWQpXG4re1xuK1x0c3RydWN0IHBhdGggcGF0aDtcbitcbitcdGZhaWxmc19nZXRfcm9vdChcdTAwMjZwYXRoKTtcbitcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cGF0aCk7XG4rXHRwYXRoX3B1dChcdTAwMjZwYXRoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZmFpbGZzX2ZzX3R5cGUgPSB7XG4rXHQubmFtZVx0XHRcdD0gXCJmYWlsZnNcIixcbitcdC5pbml0X2ZzX2NvbnRleHRcdD0gZmFpbGZzX2luaXRfZnNfY29udGV4dCxcbitcdC5raWxsX3NiXHRcdD0ga2lsbF9hbm9uX3N1cGVyLFxuK307XG4rXG4rdm9pZCBfX2luaXQgZmFpbGZzX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcbitcbitcdC8qIEEgc2luZ2xlIGluc3RhbmNlIHRoYXQgaXMgbWVtYmVyIG9mIG5vIG1vdW50IG5hbWVzcGFjZS4gKi9cbitcdG1udCA9IGtlcm5fbW91bnQoXHUwMDI2ZmFpbGZzX2ZzX3R5cGUpO1xuK1x0aWYgKElTX0VSUihtbnQpKVxuK1x0XHRwYW5pYyhcIlZGUzogRmFpbGVkIHRvIGNyZWF0ZSBmYWlsZnNcIik7XG4rXG4rXHRmYWlsZnNfcm9vdF9wYXRoLm1udFx0PSBtbnQ7XG4rXHRmYWlsZnNfcm9vdF9wYXRoLmRlbnRyeVx0PSBtbnQtXHUwMDNlbW50X3Jvb3Q7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCAzNTVkOTNmOTIyMDg2MS4uNjdhYTA0NDQzNTFiMWEgMTAwNjQ0XG4tLS0gYS9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9pbnRlcm5hbC5oXG5AQCAtMzYyLDMgKzM2Miw3IEBAIGludCBhbm9uX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBwaWRmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gdm9pZCBuc2ZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKTtcbit2b2lkIGZhaWxmc19nZXRfcm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4rdm9pZCBfX2luaXQgZmFpbGZzX2luaXQodm9pZCk7XG4rYm9vbCBmYWlsZnNfbW50KGNvbnN0IHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbitpbnQgZmFpbGZzX2N1cnJlbnRfY2hkaXIodm9pZCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuY1xuaW5kZXggM2Q1Y2Q1YmYzYjA1MzcuLjg3YzM2NWYyZjgyYmEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZXNwYWNlLmNcbisrKyBiL2ZzL25hbWVzcGFjZS5jXG5AQCAtNjI3NCw2ICs2Mjc0LDcgQEAgdm9pZCBfX2luaXQgbW50X2luaXQodm9pZClcbiBcdHNobWVtX2luaXQoKTtcbiBcdGluaXRfcm9vdGZzKCk7XG4gXHRpbml0X21vdW50X3RyZWUoKTtcbitcdGZhaWxmc19pbml0KCk7XG4gfVxuIFxuIHZvaWQgcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uNmIxYzE0ZTY4NGE5M2IgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTU3MCw5ICs1NzAsMTIgQEAgU1lTQ0FMTF9ERUZJTkUxKGNoZGlyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbiBcbiBTWVNDQUxMX0RFRklORTEoZmNoZGlyLCB1bnNpZ25lZCBpbnQsIGZkKVxuIHtcbi1cdENMQVNTKGZkX3JhdywgZikoZmQpO1xuIFx0aW50IGVycm9yO1xuIFxuK1x0aWYgKChpbnQpZmQgPT0gRkRfRkFJTEZTX1JPT1QpXG4rXHRcdHJldHVybiBmYWlsZnNfY3VycmVudF9jaGRpcigpO1xuK1xuK1x0Q0xBU1MoZmRfcmF3LCBmKShmZCk7XG4gXHRpZiAoZmRfZW1wdHkoZikpXG4gXHRcdHJldHVybiAtRUJBREY7XG4gXG5AQCAtNjE1LDYgKzYxOCw1MiBAQCBTWVNDQUxMX0RFRklORTEoY2hyb290LCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4rU1lTQ0FMTF9ERUZJTkUyKGZjaHJvb3QsIGludCwgZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHBhdGggcGF0aDtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChmbGFncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZmQgPT0gRkRfRkFJTEZTX1JPT1QpIHtcbitcdFx0aWYgKCFuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0NIUk9PVCkpIHtcbitcdFx0XHRpZiAoIXRhc2tfbm9fbmV3X3ByaXZzKGN1cnJlbnQpKVxuK1x0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0XHQvKiBBIHNoYXJlZCBmc19zdHJ1Y3QgbGV0cyBhIHNpYmxpbmcgZXhlYyBzZXR1aWQgcGFzdCB0aGUgY2hlY2sgYWJvdmUuICovXG4rXHRcdFx0aWYgKGN1cnJlbnQtXHUwMDNlZnMtXHUwMDNldXNlcnMgIT0gMSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdC8qIE1vdmluZyB0aGUgcm9vdCB0byBmYWlsZnMgbGlmdHMgdGhlIG9sZCByb290J3MgXCIuLlwiIGJhcnJpZXIuICovXG4rXHRcdFx0aWYgKGN1cnJlbnRfY2hyb290ZWQoKSlcbitcdFx0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdH1cbitcdFx0ZmFpbGZzX2dldF9yb290KFx1MDAyNnBhdGgpO1xuK1x0fSBlbHNlIHtcbitcdFx0Q0xBU1MoZmRfcmF3LCBmKShmZCk7XG4rXHRcdGlmIChmZF9lbXB0eShmKSlcbitcdFx0XHRyZXR1cm4gLUVCQURGO1xuK1xuK1x0XHRpZiAoIWRfY2FuX2xvb2t1cChmZF9maWxlKGYpLVx1MDAzZWZfcGF0aC5kZW50cnkpKVxuK1x0XHRcdHJldHVybiAtRU5PVERJUjtcbitcbitcdFx0ZXJyb3IgPSBmaWxlX3Blcm1pc3Npb24oZmRfZmlsZShmKSwgTUFZX0VYRUMgfCBNQVlfQ0hESVIpO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0XHRpZiAoIW5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIENBUF9TWVNfQ0hST09UKSlcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0XHRwYXRoID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGg7XG4rXHRcdHBhdGhfZ2V0KFx1MDAyNnBhdGgpO1xuK1x0fVxuK1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX2Nocm9vdChcdTAwMjZwYXRoKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuK1x0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuIGludCBjaG1vZF9jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcbmluZGV4IDg3NGQ5MDY3YTQzYjUwLi44NDEzYjYyNGFkNDc4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oXG5AQCAtNDU3LDYgKzQ1Nyw3IEBAIGFzbWxpbmthZ2UgbG9uZyBzeXNfZmFjY2Vzc2F0MihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBtb2RlLFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTtcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaGRpcih1bnNpZ25lZCBpbnQgZmQpO1xuIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hyb290KGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSk7XG4rYXNtbGlua2FnZSBsb25nIHN5c19mY2hyb290KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG1vZCh1bnNpZ25lZCBpbnQgZmQsIHVtb2RlX3QgbW9kZSk7XG4gYXNtbGlua2FnZSBsb25nIHN5c19mY2htb2RhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXG4gXHRcdFx0ICAgICB1bW9kZV90IG1vZGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuaW5kZXggYTYyN2FjYzhmYjVmZWEuLjViN2U3N2E3YzczNmVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbkBAIC04NjMsOCArODYzLDEyIEBAIF9fU1lTQ0FMTChfX05SX2xpc3Rucywgc3lzX2xpc3RucylcbiAjZGVmaW5lIF9fTlJfcnNlcV9zbGljZV95aWVsZCA0NzFcbiBfX1NZU0NBTEwoX19OUl9yc2VxX3NsaWNlX3lpZWxkLCBzeXNfcnNlcV9zbGljZV95aWVsZClcbiBcbisvKiBmcy9vcGVuLmMgKi9cbisjZGVmaW5lIF9fTlJfZmNocm9vdCA0NzJcbitfX1NZU0NBTEwoX19OUl9mY2hyb290LCBzeXNfZmNocm9vdClcbitcbiAjdW5kZWYgX19OUl9zeXNjYWxsc1xuLSNkZWZpbmUgX19OUl9zeXNjYWxscyA0NzJcbisjZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDczXG4gXG4gLypcbiAgKiAzMiBiaXQgc3lzdGVtcyB0cmFkaXRpb25hbGx5IHVzZWQgZGlmZmVyZW50XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZmNudGwuaFxuaW5kZXggYWFkZmJmNmUwY2IzYTAuLmU0M2UzZGUzZTllZTQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZjbnRsLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9mY250bC5oXG5AQCAtMTI0LDYgKzEyNCw3IEBAIHN0cnVjdCBkZWxlZ2F0aW9uIHtcbiBcbiAjZGVmaW5lIEZEX1BJREZTX1JPT1RcdFx0XHQtMTAwMDIgLyogUm9vdCBvZiB0aGUgcGlkZnMgZmlsZXN5c3RlbSAqL1xuICNkZWZpbmUgRkRfTlNGU19ST09UXHRcdFx0LTEwMDAzIC8qIFJvb3Qgb2YgdGhlIG5zZnMgZmlsZXN5c3RlbSAqL1xuKyNkZWZpbmUgRkRfRkFJTEZTX1JPT1RcdFx0XHQtMTAwMDQgLyogUm9vdCBvZiB0aGUgZmFpbGZzIGZpbGVzeXN0ZW0gKi9cbiAjZGVmaW5lIEZEX0lOVkFMSURcdFx0XHQtMTAwMDkgLyogSW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6IC0xMDAwMCAtIEVCQURGID0gLTEwMDA5ICovXG4gXG4gLyogR2VuZXJpYyBmbGFncyBmb3IgdGhlICphdCgyKSBmYW1pbHkgb2Ygc3lzY2FsbHMuICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaFxuaW5kZXggNGYyZGE5MzVhNzZjY2EuLmZkNWYwZTk1NjQ4ZWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oXG5AQCAtMTA1LDUgKzEwNSw2IEBAXG4gI2RlZmluZSBQSURfRlNfTUFHSUNcdFx0MHg1MDQ5NDQ0Nlx0LyogXCJQSURGXCIgKi9cbiAjZGVmaW5lIEdVRVNUX01FTUZEX01BR0lDXHQweDQ3NGQ0NTRkXHQvKiBcIkdNRU1cIiAqL1xuICNkZWZpbmUgTlVMTF9GU19NQUdJQ1x0XHQweDRFNTU0QzRDXHQvKiBcIk5VTExcIiAqL1xuKyNkZWZpbmUgRkFJTF9GU19NQUdJQ1x0XHQweDQ2NDE0OTRDXHQvKiBcIkZBSUxcIiAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01BR0lDX0hfXyAqL1xuZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3lzY2FsbC50YmwgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5pbmRleCA3YTQyYjMyYjY1Nzc2Ny4uMGFiNTMxNjA1MTIwMmUgMTAwNjQ0XG4tLS0gYS9zY3JpcHRzL3N5c2NhbGwudGJsXG4rKysgYi9zY3JpcHRzL3N5c2NhbGwudGJsXG5AQCAtNDEyLDMgKzQxMiw0IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRcdHN5c19maWxlX3NldGF0dHJcbiA0NzBcdGNvbW1vblx0bGlzdG5zXHRcdFx0XHRzeXNfbGlzdG5zXG4gNDcxXHRjb21tb25cdHJzZXFfc2xpY2VfeWllbGRcdFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdFx0c3lzX2ZjaHJvb3RcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi90b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmhcbmluZGV4IGE2MjdhY2M4ZmI1ZmVhLi41YjdlNzdhN2M3MzZlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oXG5AQCAtODYzLDggKzg2MywxMiBAQCBfX1NZU0NBTEwoX19OUl9saXN0bnMsIHN5c19saXN0bnMpXG4gI2RlZmluZSBfX05SX3JzZXFfc2xpY2VfeWllbGQgNDcxXG4gX19TWVNDQUxMKF9fTlJfcnNlcV9zbGljZV95aWVsZCwgc3lzX3JzZXFfc2xpY2VfeWllbGQpXG4gXG4rLyogZnMvb3Blbi5jICovXG4rI2RlZmluZSBfX05SX2ZjaHJvb3QgNDcyXG4rX19TWVNDQUxMKF9fTlJfZmNocm9vdCwgc3lzX2ZjaHJvb3QpXG4rXG4gI3VuZGVmIF9fTlJfc3lzY2FsbHNcbi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgNDcyXG4rI2RlZmluZSBfX05SX3N5c2NhbGxzIDQ3M1xuIFxuIC8qXG4gICogMzIgYml0IHN5c3RlbXMgdHJhZGl0aW9uYWxseSB1c2VkIGRpZmZlcmVudFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG5pbmRleCA1MjQxNTVkNjU1ZGExNS4uZDViNjA0NWIwMDkwY2MgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG4rKysgYi90b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsXG5AQCAtMzk2LDYgKzM5Niw3IEBAXG4gNDY5XHRjb21tb25cdGZpbGVfc2V0YXR0clx0XHRzeXNfZmlsZV9zZXRhdHRyXG4gNDcwXHRjb21tb25cdGxpc3Ruc1x0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0c3lzX3JzZXFfc2xpY2VfeWllbGRcbis0NzJcdGNvbW1vblx0ZmNocm9vdFx0XHRcdHN5c19mY2hyb290XG4gXG4gI1xuICMgRHVlIHRvIGEgaGlzdG9yaWNhbCBkZXNpZ24gZXJyb3IsIGNlcnRhaW4gc3lzY2FsbHMgYXJlIG51bWJlcmVkIGRpZmZlcmVudGx5XG5kaWZmIC0tZ2l0IGEvdG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibCBiL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmxcbmluZGV4IDdhNDJiMzJiNjU3NzY3Li4wYWI1MzE2MDUxMjAyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmxcbisrKyBiL3Rvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmxcbkBAIC00MTIsMyArNDEyLDQgQEBcbiA0NjlcdGNvbW1vblx0ZmlsZV9zZXRhdHRyXHRcdFx0c3lzX2ZpbGVfc2V0YXR0clxuIDQ3MFx0Y29tbW9uXHRsaXN0bnNcdFx0XHRcdHN5c19saXN0bnNcbiA0NzFcdGNvbW1vblx0cnNlcV9zbGljZV95aWVsZFx0XHRzeXNfcnNlcV9zbGljZV95aWVsZFxuKzQ3Mlx0Y29tbW9uXHRmY2hyb290XHRcdFx0XHRzeXNfZmNocm9vdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbmluZGV4IDhkNGRiMjI0MWNjMmEyLi5mODcxNjdiY2Y1ODI4MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuQEAgLTMzLDYgKzMzLDcgQEAgVEFSR0VUUyArPSBmY2htb2RhdDJcbiBUQVJHRVRTICs9IGZpbGVzeXN0ZW1zXG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9iaW5kZXJmc1xuIFRBUkdFVFMgKz0gZmlsZXN5c3RlbXMvZXBvbGxcbitUQVJHRVRTICs9IGZpbGVzeXN0ZW1zL2ZhaWxmc1xuIFRBUkdFVFMgKz0gZmlsZXN5c3RlbXMvZmF0XG4gVEFSR0VUUyArPSBmaWxlc3lzdGVtcy9vdmVybGF5ZnNcbiBUQVJHRVRTICs9IGZpbGVzeXN0ZW1zL3N0YXRtb3VudFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzLy5naXRpZ25vcmVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2QzYjVkODg0ZDdlYTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy8uZ2l0aWdub3JlXG5AQCAtMCwwICsxLDIgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitmYWlsZnNfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYzVkOThiNGZlNzI1ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL01ha2VmaWxlXG5AQCAtMCwwICsxLDUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rQ0ZMQUdTICs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXG4rVEVTVF9HRU5fUFJPR1MgOj0gZmFpbGZzX3Rlc3RcbitcbitpbmNsdWRlIC4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9mYWlsZnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmFpbGZzL2ZhaWxmc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2M0NjFkYzQ4M2E5OTdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZhaWxmcy9mYWlsZnNfdGVzdC5jXG5AQCAtMCwwICsxLDU4MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3ByY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3Zmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi8uLi9rc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjaWZuZGVmIF9fTlJfZmNocm9vdFxuKyNkZWZpbmUgX19OUl9mY2hyb290IDQ3MlxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgRkRfUElERlNfUk9PVFxuKyNkZWZpbmUgRkRfUElERlNfUk9PVCAtMTAwMDJcbisjZW5kaWZcbitcbisjaWZuZGVmIEZEX05TRlNfUk9PVFxuKyNkZWZpbmUgRkRfTlNGU19ST09UIC0xMDAwM1xuKyNlbmRpZlxuK1xuKyNpZm5kZWYgRkRfRkFJTEZTX1JPT1RcbisjZGVmaW5lIEZEX0ZBSUxGU19ST09UIC0xMDAwNFxuKyNlbmRpZlxuK1xuKyNkZWZpbmUgTk9CT0RZX1VJRCA2NTUzNFxuK1xuKy8qIENoaWxkIHNlbnRpbmVsIGV4aXQgY29kZTogdGhlIGV4ZWMgd2FzIGJsb2NrZWQgYXMgZXhwZWN0ZWQuICovXG4rI2RlZmluZSBGQUlMRlNfRVhFQ19CTE9DS0VEIDk5XG4rXG4rLyogU3RhY2sgZm9yIHRoZSBDTE9ORV9GUyBoZWxwZXIgaW4gZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0LiAqL1xuKyNkZWZpbmUgRkFJTEZTX0NMT05FX1NUQUNLICg2NCAqIDEwMjQpXG4rXG4rc3RhdGljIGludCBzeXNfZmNocm9vdChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX2ZjaHJvb3QsIGZkLCBmbGFncyk7XG4rfVxuK1xuKy8qXG4rICogUmF3IHN5c2NhbGw6IGdsaWJjJ3MgZ2V0Y3dkKCkgcmVqZWN0cyB0aGUga2VybmVsJ3MgXCIodW5yZWFjaGFibGUpXCJcbisgKiByZXN1bHQgYW5kIGZhbGxzIGJhY2sgdG8gYSBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxuKyAqL1xuK3N0YXRpYyBsb25nIHN5c19nZXRjd2QoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX2dldGN3ZCwgYnVmLCBzaXplKTtcbit9XG4rXG4rc3RhdGljIGludCBkcm9wX3RvX25vYm9keSh2b2lkKVxuK3tcbitcdHJldHVybiBzZXRyZXN1aWQoTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCwgTk9CT0RZX1VJRCk7XG4rfVxuK1xuKy8qIFBhcmtlZCBDTE9ORV9GUyBjaGlsZDsgZGllcyB3aXRoIGl0cyBwYXJlbnQgc28gaXQgbmV2ZXIgbGVha3MuICovXG4rc3RhdGljIGludCBmYWlsZnNfcGFyayh2b2lkICphcmcpXG4re1xuK1x0KHZvaWQpYXJnO1xuK1x0cHJjdGwoUFJfU0VUX1BERUFUSFNJRywgU0lHS0lMTCk7XG4rXHRwYXVzZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIElzIGZkIGEgZHluYW1pY2FsbHkgbGlua2VkIEVMRiB3aXRoIGFuIGFic29sdXRlIFBUX0lOVEVSUCBpbnRlcnByZXRlcj8gKi9cbitzdGF0aWMgaW50IGVsZl9oYXNfYWJzb2x1dGVfaW50ZXJwKGludCBmZClcbit7XG4rXHRFbGZXKEVoZHIpIGVoZHI7XG4rXHRFbGZXKFBoZHIpIHBoZHI7XG4rXHRjaGFyIGludGVycDtcbitcdGludCBpO1xuK1xuK1x0aWYgKHByZWFkKGZkLCBcdTAwMjZlaGRyLCBzaXplb2YoZWhkciksIDApICE9IHNpemVvZihlaGRyKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAobWVtY21wKGVoZHIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVoZHIuZV9waG51bTsgaSsrKSB7XG4rXHRcdGlmIChwcmVhZChmZCwgXHUwMDI2cGhkciwgc2l6ZW9mKHBoZHIpLFxuK1x0XHRcdCAgZWhkci5lX3Bob2ZmICsgaSAqIHNpemVvZihwaGRyKSkgIT0gc2l6ZW9mKHBoZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRpZiAocGhkci5wX3R5cGUgIT0gUFRfSU5URVJQKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAocHJlYWQoZmQsIFx1MDAyNmludGVycCwgMSwgcGhkci5wX29mZnNldCkgIT0gMSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIGludGVycCA9PSAnLyc7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rVEVTVChmY2hkaXJfc2VudGluZWwpXG4re1xuK1x0Y2hhciBidWZbUEFUSF9NQVhdO1xuK1x0aW50IGZkO1xuK1xuK1x0QVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApO1xuK1xuK1x0LyogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVucmVhY2hhYmxlIGZyb20gdGhlIHByb2Nlc3Mgcm9vdC4gKi9cbitcdEFTU0VSVF9HVChzeXNfZ2V0Y3dkKGJ1Ziwgc2l6ZW9mKGJ1ZikpLCAwKTtcbitcdEFTU0VSVF9FUShzdHJuY21wKGJ1ZiwgXCIodW5yZWFjaGFibGUpXCIsIDEzKSwgMCk7XG4rXG4rXHQvKiBFdmVyeSBBVF9GRENXRC1yZWxhdGl2ZSBsb29rdXAgZmFpbHMuICovXG4rXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcImZvb1wiLCBPX1JET05MWSksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcIi5cIiwgT19SRE9OTFkpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1x0QVNTRVJUX0VRKG9wZW5hdChBVF9GRENXRCwgXCIuLlwiLCBPX1JET05MWSksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXHRBU1NFUlRfRVEob3BlbmF0KEFUX0ZEQ1dELCBcImZvb1wiLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2MDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogVGhlIGN3ZCBjYW5ub3QgYmUgcGlubmVkIGJ5IGZvbGxvd2luZyAvcHJvYy9zZWxmL2N3ZCBpbnRvIGl0LiAqL1xuK1x0QVNTRVJUX0VRKG9wZW4oXCIvcHJvYy9zZWxmL2N3ZFwiLCBPX1BBVEgpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkIHNvIGFic29sdXRlIGxvb2t1cHMga2VlcCB3b3JraW5nLi4uICovXG4rXHRmZCA9IG9wZW4oXCIvXCIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKGZkLCAwKTtcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK1xuK1x0LyogLi4uIGFuZCB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2FuIGJlIHJlY292ZXJlZC4gKi9cbitcdEFTU0VSVF9FUShjaGRpcihcIi9cIiksIDApO1xuK1x0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xuK1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwiL1wiKSwgMCk7XG4rfVxuK1xuK1RFU1QoZmNoZGlyX3JlamVjdHNfb3RoZXJfc2VudGluZWxzKVxuK3tcbitcdEFTU0VSVF9FUShmY2hkaXIoRkRfUElERlNfUk9PVCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRUJBREYpO1xuK1x0QVNTRVJUX0VRKGZjaGRpcihGRF9OU0ZTX1JPT1QpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcbitcdEFTU0VSVF9FUShmY2hkaXIoLTEwMDA5KSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9mbGFncylcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDEpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4rXG4rXHRmZCA9IG9wZW4oXCIvXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDEpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbit9XG4rXG4rVEVTVChmY2hyb290X2JhZF9mZClcbit7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoLTEsIDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVCQURGKTtcbitcbitcdC8qIE9ubHkgRkRfRkFJTEZTX1JPT1QgaXMgYSB2YWxpZCBzZW50aW5lbC4gKi9cbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9QSURGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfTlNGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFQkFERik7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9ub3RkaXIpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL3Byb2Mvc2VsZi9zdGF0dXNcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX0dFKGZkLCAwKTtcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChmZCwgMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU5PVERJUik7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3JlYWxmZF9yZXF1aXJlc19jYXApXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0aWYgKGdldGV1aWQoKSA9PSAwKVxuK1x0XHRBU1NFUlRfRVEoZHJvcF90b19ub2JvZHkoKSwgMCk7XG4rXG4rXHRmZCA9IG9wZW4oXCIvXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoZmQsIDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVQRVJNKTtcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK31cbitcbitURVNUKGZjaHJvb3RfcmVhbGZkKVxuK3tcbitcdGNoYXIgdGVtcGxhdGVbXSA9IFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcIjtcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHRzdHJ1Y3Qgc3RhdCBzdDtcbitcdGludCB0bXBmZCwgZGZkLCBmZDtcbitcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwiZmNocm9vdCgpIHdpdGggYSByZWd1bGFyIGZkIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCIpO1xuK1xuK1x0dG1wZmQgPSBvcGVuKFwiL3RtcFwiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UodG1wZmQsIDApO1xuK1xuK1x0QVNTRVJUX05FKG1rZHRlbXAodGVtcGxhdGUpLCBOVUxMKTtcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9jYW5hcnlcIiwgdGVtcGxhdGUpO1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXG4rXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UoZGZkLCAwKTtcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChkZmQsIDApLCAwKTtcbitcdEFTU0VSVF9FUShjbG9zZShkZmQpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzdGF0KFwiL2NhbmFyeVwiLCBcdTAwMjZzdCksIDApO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cDogZGlyZmQtYW5jaG9yZWQgSS9PIHdvcmtzIHdpdGggdGhlIG5ldyByb290LiAqL1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL2NhbmFyeVwiLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpKTtcbitcdHVubGlua2F0KHRtcGZkLCBwYXRoLCAwKTtcbitcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpLCBBVF9SRU1PVkVESVIpO1xuK31cbitcbitURVNUKGZjaHJvb3Rfc2VudGluZWwpXG4re1xuK1x0Y2hhciB0ZW1wbGF0ZVtdID0gXCIvdG1wL2ZhaWxmc190ZXN0LlhYWFhYWFwiO1xuK1x0c3RydWN0IHN0YXQgcmVhbHJvb3QsIHN0O1xuK1x0c3RydWN0IHN0YXRmcyBzZnM7XG4rXHRjaGFyIGJ1ZltQQVRIX01BWF07XG4rXHRpbnQgcHJvY2ZkLCB0bXBmZCwgZGZkLCBmZDtcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBmaWxlX2hhbmRsZSBoYW5kbGU7XG4rXHRcdHVuc2lnbmVkIGNoYXIgZl9oYW5kbGVbTUFYX0hBTkRMRV9TWl07XG4rXHR9IGZoO1xuK1x0aW50IG1udGlkO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcIik7XG4rXG4rXHRBU1NFUlRfRVEoc3RhdChcIi9cIiwgXHUwMDI2cmVhbHJvb3QpLCAwKTtcbitcdHByb2NmZCA9IG9wZW4oXCIvcHJvY1wiLCBPX1BBVEggfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UocHJvY2ZkLCAwKTtcbitcdHRtcGZkID0gb3BlbihcIi90bXBcIiwgT19QQVRIIHwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKHRtcGZkLCAwKTtcbitcdEFTU0VSVF9ORShta2R0ZW1wKHRlbXBsYXRlKSwgTlVMTCk7XG4rXHRkZmQgPSBvcGVuKHRlbXBsYXRlLCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShkZmQsIDApO1xuK1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHQvKiBBYnNvbHV0ZSBsb29rdXBzIGZhaWwuICovXG4rXHRBU1NFUlRfRVEob3BlbihcIi9ldGMvcGFzc3dkXCIsIE9fUkRPTkxZKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbitcdEFTU0VSVF9FUShta2RpcihcIi9mb29cIiwgMDcwMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHJvb3QgY2Fubm90IGJlIHJlZmVyZW5jZWQgYXQgYWxsIC0gbm90IGV2ZW4gYW4gT19QQVRIIG9wZW4sXG4rXHQgKiB3aGljaCBza2lwcyAtXHUwMDNlcGVybWlzc2lvbigpLCBiZWNhdXNlIGl0IGxhbmRzIG9uIHRoZSByb290IGFzIGFcbitcdCAqIGp1bXBlZCB3YWxrIHRlcm1pbmFsIHRoYXQgLVx1MDAzZWRfd2Vha19yZXZhbGlkYXRlKCkgcmVmdXNlcy5cbitcdCAqL1xuK1x0QVNTRVJUX0VRKG9wZW4oXCIvXCIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1x0QVNTRVJUX0VRKG9wZW4oXCIvXCIsIE9fUEFUSCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXHRBU1NFUlRfRVEoc3RhdGZzKFwiL1wiLCBcdTAwMjZzZnMpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LypcbitcdCAqIEl0IGNhbm5vdCBiZSBwaW5uZWQgYnkgZm9sbG93aW5nIC9wcm9jL3NlbGYvcm9vdCBpbnRvIGl0IGVpdGhlclxuK1x0ICogKG9ubHkgdGhlIHJvb3QgaXMgaW4gZmFpbGZzIGhlcmUsIHNvIHNlbGYvY3dkIGlzIHN0aWxsIHJlYWwpLlxuK1x0ICovXG4rXHRBU1NFUlRfRVEob3BlbmF0KHByb2NmZCwgXCJzZWxmL3Jvb3RcIiwgT19QQVRIKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbitcbitcdC8qIE5vciBlbmNvZGVkIGludG8gYSBmaWxlIGhhbmRsZS4gKi9cbitcdGZoLmhhbmRsZS5oYW5kbGVfYnl0ZXMgPSBNQVhfSEFORExFX1NaO1xuK1x0QVNTRVJUX0VRKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBcIi9cIiwgXHUwMDI2ZmguaGFuZGxlLCBcdTAwMjZtbnRpZCwgMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXG4rXHQvKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgbm93IHVucmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuICovXG4rXHRBU1NFUlRfR1Qoc3lzX2dldGN3ZChidWYsIHNpemVvZihidWYpKSwgMCk7XG4rXHRBU1NFUlRfRVEoc3RybmNtcChidWYsIFwiKHVucmVhY2hhYmxlKVwiLCAxMyksIDApO1xuK1xuK1x0LyogTG9va3VwcyBhbmNob3JlZCBhdCByZWFsIGRpcmVjdG9yaWVzIGtlZXAgd29ya2luZy4gKi9cbitcdGZkID0gb3BlbmF0KEFUX0ZEQ1dELCBcIi5cIiwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRmZCA9IG9wZW5hdChkZmQsIFwiY2FuYXJ5XCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDYwMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKHdyaXRlKGZkLCBcInhcIiwgMSksIDEpO1xuK1x0QVNTRVJUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRmZCA9IG9wZW5hdChkZmQsIFwiY2FuYXJ5XCIsIE9fUkRPTkxZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbitcbitcdC8qIFwiLi5cIiB3YWxrcyBjbGFtcCBhdCB0aGUgdG9wIG9mIHRoZSBtb3VudCB0cmVlLCBub3QgYXQgZmFpbGZzLiAqL1xuK1x0ZmQgPSBvcGVuYXQoQVRfRkRDV0QsIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi5cIiwgT19QQVRIKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoZnN0YXQoZmQsIFx1MDAyNnN0KSwgMCk7XG4rXHRBU1NFUlRfRVEoc3Quc3RfZGV2LCByZWFscm9vdC5zdF9kZXYpO1xuK1x0QVNTRVJUX0VRKHN0LnN0X2lubywgcmVhbHJvb3Quc3RfaW5vKTtcbitcdEFTU0VSVF9FUShjbG9zZShmZCksIDApO1xuK1xuK1x0LyogcmVhZGxpbmsgb2YgdGhlIG1hZ2ljIGxpbmsgc3RpbGwgd29ya3M6IGl0IGRvZXMgbm90IGZvbGxvdy4gKi9cbitcdHJldCA9IHJlYWRsaW5rYXQocHJvY2ZkLCBcInNlbGYvcm9vdFwiLCBidWYsIHNpemVvZihidWYpIC0gMSk7XG4rXHRBU1NFUlRfR1QocmV0LCAwKTtcbitcdGJ1ZltyZXRdID0gJ1xcMCc7XG4rXHRUSF9MT0coXCIvcHJvYy9zZWxmL3Jvb3QgcG9pbnRzIHRvICclcydcIiwgYnVmKTtcbitcdC8qIGRfcGF0aCgpIG5hbWVzIHRoZSBmYWlsZnMgcm9vdCBzeW50aGV0aWNhbGx5LCBuZXZlciBhcyBhIHJlYWwgcGF0aC4gKi9cbitcdEFTU0VSVF9FUShzdHJjbXAoYnVmLCBcImZhaWxmczovXCIpLCAwKTtcbitcbitcdC8qIEJ1dCBmb2xsb3dpbmcgaXQgaW50byBmYWlsZnMgaXMgcmVmdXNlZC4gKi9cbitcdEFTU0VSVF9FUShmc3RhdGF0KHByb2NmZCwgXCJzZWxmL3Jvb3RcIiwgXHUwMDI2c3QsIDApLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCB2aWEgdGhlIHByZS1vcGVuZWQgZGlyZmRzLiAqL1xuK1x0dW5saW5rYXQoZGZkLCBcImNhbmFyeVwiLCAwKTtcbitcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpLCBBVF9SRU1PVkVESVIpO1xuK31cbitcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfYWJzb2x1dGVfc3ltbGluaylcbit7XG4rXHRjaGFyIHRlbXBsYXRlW10gPSBcIi90bXAvZmFpbGZzX3Rlc3QuWFhYWFhYXCI7XG4rXHRpbnQgdG1wZmQsIGRmZCwgZmQ7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInByaXZpbGVnZWQgZmNocm9vdChGRF9GQUlMRlNfUk9PVCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcIik7XG4rXG4rXHR0bXBmZCA9IG9wZW4oXCIvdG1wXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4rXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuK1x0ZGZkID0gb3Blbih0ZW1wbGF0ZSwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0UoZGZkLCAwKTtcbitcbitcdGZkID0gb3BlbmF0KGRmZCwgXCJ0YXJnZXRcIiwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEFTU0VSVF9FUShzeW1saW5rYXQoXCJ0YXJnZXRcIiwgZGZkLCBcInJlbFwiKSwgMCk7XG4rXHRBU1NFUlRfRVEoc3ltbGlua2F0KFwiL2V0Y1wiLCBkZmQsIFwiYWJzXCIpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuK1xuK1x0LyogUmVsYXRpdmUgc3ltbGlua3Mga2VlcCByZXNvbHZpbmcgd2l0aGluIHRoZSBkaXJmZC1hbmNob3JlZCB3YWxrLi4uICovXG4rXHRmZCA9IG9wZW5hdChkZmQsIFwicmVsXCIsIE9fUkRPTkxZKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXHRBU1NFUlRfRVEoY2xvc2UoZmQpLCAwKTtcbitcbitcdC8qIC4uLiBhYnNvbHV0ZSBzeW1saW5rcyByZXN0YXJ0IHRoZSB3YWxrIGF0IHRoZSBmYWlsZnMgcm9vdC4gKi9cbitcdEFTU0VSVF9FUShvcGVuYXQoZGZkLCBcImFic1wiLCBPX1JET05MWSksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rXG4rXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIHZpYSB0aGUgcHJlLW9wZW5lZCBkaXJmZHMuICovXG4rXHR1bmxpbmthdChkZmQsIFwiYWJzXCIsIDApO1xuK1x0dW5saW5rYXQoZGZkLCBcInJlbFwiLCAwKTtcbitcdHVubGlua2F0KGRmZCwgXCJ0YXJnZXRcIiwgMCk7XG4rXHR1bmxpbmthdCh0bXBmZCwgdGVtcGxhdGUgKyBzdHJsZW4oXCIvdG1wL1wiKSwgQVRfUkVNT1ZFRElSKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX3VucHJpdmlsZWdlZClcbit7XG4rXHRjaGFyIGJ1ZltQQVRIX01BWF07XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpID09IDApXG4rXHRcdEFTU0VSVF9FUShkcm9wX3RvX25vYm9keSgpLCAwKTtcbitcbitcdC8qIFdpdGhvdXQgbm9fbmV3X3ByaXZzIGVudGVyaW5nIGZhaWxmcyBpcyBub3QgYWxsb3dlZC4uLiAqL1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XG4rXG4rXHQvKiAuLi4gd2l0aCBub19uZXdfcHJpdnMgc2V0IGl0IGlzIGFsbG93ZWQuICovXG4rXHRBU1NFUlRfRVEocHJjdGwoUFJfU0VUX05PX05FV19QUklWUywgMSwgMCwgMCwgMCksIDApO1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEob3BlbihcIi9ldGMvcGFzc3dkXCIsIE9fUkRPTkxZKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQKTtcbitcbitcdC8qIFRoZSB0YXNrIGNvdW50cyBhcyBjaHJvb3RlZDogbm8gdXNlciBuYW1lc3BhY2VzIGFueW1vcmUuICovXG4rXHRBU1NFUlRfRVEodW5zaGFyZShDTE9ORV9ORVdVU0VSKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XG4rXG4rXHQvKiBXaXRoIGJvdGggcm9vdCBhbmQgY3dkIGluIGZhaWxmcyBnZXRjd2QoKSByZXBvcnRzIFwiL1wiLiAqL1xuK1x0QVNTRVJUX0VRKGZjaGRpcihGRF9GQUlMRlNfUk9PVCksIDApO1xuK1x0QVNTRVJUX0dUKHN5c19nZXRjd2QoYnVmLCBzaXplb2YoYnVmKSksIDApO1xuK1x0QVNTRVJUX0VRKHN0cmNtcChidWYsIFwiL1wiKSwgMCk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9yZWplY3RlZF93aGVuX2Nocm9vdGVkKVxuK3tcbitcdGNoYXIgdGVtcGxhdGVbXSA9IFwiL3RtcC9mYWlsZnNfdGVzdC5YWFhYWFhcIjtcbitcdGludCB0bXBmZDtcbitcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwiY2hyb290KCkgcmVxdWlyZXMgQ0FQX1NZU19DSFJPT1RcIik7XG4rXG4rXHR0bXBmZCA9IG9wZW4oXCIvdG1wXCIsIE9fUEFUSCB8IE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRSh0bXBmZCwgMCk7XG4rXHRBU1NFUlRfTkUobWtkdGVtcCh0ZW1wbGF0ZSksIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGNocm9vdCh0ZW1wbGF0ZSksIDApO1xuK1x0QVNTRVJUX0VRKGNoZGlyKFwiL1wiKSwgMCk7XG4rXG4rXHQvKiBSZW1vdmUgdGhlIGphaWwgd2hpbGUgc3RpbGwgcHJpdmlsZWdlZDsgc3RpY2t5IC90bXAgYmxvY2tzIG5vYm9keS4gKi9cbitcdHVubGlua2F0KHRtcGZkLCB0ZW1wbGF0ZSArIHN0cmxlbihcIi90bXAvXCIpLCBBVF9SRU1PVkVESVIpO1xuK1xuK1x0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuK1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbitcbitcdC8qIEFuIHVucHJpdmlsZWdlZCBjaHJvb3RlZCB0YXNrIG11c3Qgbm90IGxpZnQgaXRzIFwiLi5cIiBiYXJyaWVyLiAqL1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgLTEpO1xuK1x0QVNTRVJUX0VRKGVycm5vLCBFUEVSTSk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9zaGFyZWRfZnNfc3RydWN0KVxuK3tcbitcdGNoYXIgc3RhY2tbRkFJTEZTX0NMT05FX1NUQUNLXTtcbitcdHBpZF90IHBpZDtcbitcbitcdGlmIChnZXRldWlkKCkgPT0gMClcbitcdFx0QVNTRVJUX0VRKGRyb3BfdG9fbm9ib2R5KCksIDApO1xuK1xuK1x0LyogQSBDTE9ORV9GUyBzaWJsaW5nIHNoYXJlcyB0aGUgZnNfc3RydWN0OiBidW1wIGZzLVx1MDAzZXVzZXJzIHRvIDIuICovXG4rXHRwaWQgPSBjbG9uZShmYWlsZnNfcGFyaywgc3RhY2sgKyBzaXplb2Yoc3RhY2spLCBDTE9ORV9GUyB8IFNJR0NITEQsXG4rXHRcdCAgICBOVUxMKTtcbitcdEFTU0VSVF9HRShwaWQsIDApO1xuK1xuK1x0QVNTRVJUX0VRKHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBBIHNpYmxpbmcgd2l0aG91dCBub19uZXdfcHJpdnMgY291bGQgZXhlYyBhIHNldHVpZCBiaW5hcnkgd2l0aFxuK1x0ICogdGhlIGZhaWxmcyByb290LCBzbyBhIHNoYXJlZCBmc19zdHJ1Y3QgaXMgcmVmdXNlZCBldmVuIHdpdGhcbitcdCAqIG5vX25ld19wcml2cyBzZXQuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbitcbitcdEFTU0VSVF9FUShraWxsKHBpZCwgU0lHS0lMTCksIDApO1xuK1x0QVNTRVJUX0VRKHdhaXRwaWQocGlkLCBOVUxMLCAwKSwgcGlkKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX25vX292ZXJtb3VudClcbit7XG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcIm1vdW50aW5nIHJlcXVpcmVzIHByaXZpbGVnZXNcIik7XG4rXG4rXHQvKlxuK1x0ICogQ29udGFpbiB0aGUgYmxhc3QgcmFkaXVzOiBpZiBmYWlsZnMgZXZlciByZWdyZXNzZWQgYW5kIFwiL1wiXG4rXHQgKiByZXNvbHZlZCB0byB0aGUgcmVhbCByb290LCB0aGUgdG1wZnMgbW91bnQgYmVsb3cgbXVzdCBub3QgdG91Y2hcbitcdCAqIHRoZSBob3N0LiBBIHByaXZhdGUgbW91bnQgbmFtZXNwYWNlIGtlZXBzIGl0IGxvY2FsIHRvIHRoaXMgY2hpbGQuXG4rXHQgKi9cbitcdEFTU0VSVF9FUSh1bnNoYXJlKENMT05FX05FV05TKSwgMCk7XG4rXHRBU1NFUlRfRVEobW91bnQoTlVMTCwgXCIvXCIsIE5VTEwsIE1TX1JFQyB8IE1TX1BSSVZBVEUsIE5VTEwpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuK1xuK1x0LypcbitcdCAqIE5vdGhpbmcgY2FuIGJlIG1vdW50ZWQgb24gdG9wIG9mIHRoZSBmYWlsZnMgcm9vdC4gSXQgY2Fubm90IGV2ZW5cbitcdCAqIGJlIG5hbWVkIGFzIGEgbW91bnQgdGFyZ2V0OiByZXNvbHZpbmcgXCIvXCIgaXMgcmVmdXNlZCBiZWZvcmUgdGhlXG4rXHQgKiBtb3VudCBtYWNoaW5lcnkgKHdoaWNoLCBmYWlsZnMgYmVpbmcgaW4gbm8gbW91bnQgbmFtZXNwYWNlLCB3b3VsZFxuK1x0ICogcmVqZWN0IGl0IGFueXdheSkgaXMgZXZlciByZWFjaGVkLiBvcGVuX3RyZWUoT1BFTl9UUkVFX0NMT05FKSBpc1xuK1x0ICogbGlrZXdpc2UgbW9vdCBzaW5jZSBubyBmZCB0byB0aGUgcm9vdCBjYW4gYmUgb2J0YWluZWQuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShtb3VudChcIm5vbmVcIiwgXCIvXCIsIFwidG1wZnNcIiwgMCwgTlVMTCksIC0xKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9zZXRuc19lc2NhcGUpXG4re1xuK1x0c3RydWN0IHN0YXQgcmVhbHJvb3QsIHN0O1xuK1x0aW50IG5zZmQ7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInNldG5zKCkgdG8gYSBtb3VudCBuYW1lc3BhY2UgcmVxdWlyZXMgcHJpdmlsZWdlc1wiKTtcbitcbitcdEFTU0VSVF9FUShzdGF0KFwiL1wiLCBcdTAwMjZyZWFscm9vdCksIDApO1xuK1x0bnNmZCA9IG9wZW4oXCIvcHJvYy9zZWxmL25zL21udFwiLCBPX1JET05MWSk7XG4rXHRBU1NFUlRfR0UobnNmZCwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoc3lzX2ZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApLCAwKTtcbitcdEFTU0VSVF9FUShvcGVuKFwiL2V0Y1wiLCBPX1BBVEgpLCAtMSk7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFApO1xuK1xuK1x0LyogQSBtb3VudCBuYW1lc3BhY2UgZmQgaXMgdGhlIGtleSBvdXQ6IGl0IHJlc2V0cyByb290IGFuZCBjd2QuICovXG4rXHRBU1NFUlRfRVEoc2V0bnMobnNmZCwgQ0xPTkVfTkVXTlMpLCAwKTtcbitcdEFTU0VSVF9FUShjbG9zZShuc2ZkKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoc3RhdChcIi9cIiwgXHUwMDI2c3QpLCAwKTtcbitcdEFTU0VSVF9FUShzdC5zdF9kZXYsIHJlYWxyb290LnN0X2Rldik7XG4rXHRBU1NFUlRfRVEoc3Quc3RfaW5vLCByZWFscm9vdC5zdF9pbm8pO1xuK31cbitcbitURVNUKGZjaHJvb3Rfc2VudGluZWxfZXhlYylcbit7XG4rXHRwaWRfdCBwaWQ7XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCIpO1xuK1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHQvKlxuK1x0ICogRXhlYyBpbiBhIGNoaWxkOiBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIHdvdWxkIHJlcGxhY2UgdGhlIHRlc3RcbitcdCAqIGltYWdlIGFuZCBpdHMgZXhpdCBjb2RlIHdvdWxkIG5vdCBtYXRjaCB0aGUgc2VudGluZWwgYmVsb3cuXG4rXHQgKi9cbitcdHBpZCA9IGZvcmsoKTtcbitcdEFTU0VSVF9HRShwaWQsIDApO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGV4ZWNsKFwiL2Jpbi90cnVlXCIsIFwidHJ1ZVwiLCBOVUxMKTtcbitcdFx0X2V4aXQoZXJybm8gPT0gRU9QTk9UU1VQUCA/IEZBSUxGU19FWEVDX0JMT0NLRUQgOiAxKTtcbitcdH1cbitcdEFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkKTtcbitcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTtcbitcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBGQUlMRlNfRVhFQ19CTE9DS0VEKTtcbit9XG4rXG4rVEVTVChmY2hyb290X3NlbnRpbmVsX2V4ZWNfaW50ZXJwcmV0ZXIpXG4re1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcmd2W10gPSB7IFwiZmFpbGZzX3Rlc3RcIiwgTlVMTCB9O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbnZwW10gPSB7IE5VTEwgfTtcbitcdHBpZF90IHBpZDtcbitcdGludCBzdGF0dXMsIGV4ZWZkO1xuK1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJwcml2aWxlZ2VkIGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QpIHJlcXVpcmVzIENBUF9TWVNfQ0hST09UXCIpO1xuK1xuK1x0LyogRXhlYyBvdXJzZWx2ZXM6IHRoZSBvbmUgYmluYXJ5IGd1YXJhbnRlZWQgdG8gYmUgYXJvdW5kLiAqL1xuK1x0ZXhlZmQgPSBvcGVuKFwiL3Byb2Mvc2VsZi9leGVcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX0dFKGV4ZWZkLCAwKTtcbitcdGlmICghZWxmX2hhc19hYnNvbHV0ZV9pbnRlcnAoZXhlZmQpKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ0ZXN0IGJpbmFyeSBoYXMgbm8gYWJzb2x1dGUgUFRfSU5URVJQIGludGVycHJldGVyXCIpO1xuK1xuK1x0QVNTRVJUX0VRKHN5c19mY2hyb290KEZEX0ZBSUxGU19ST09ULCAwKSwgMCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGJpbmFyeSBpdHNlbGYgbmVlZHMgbm8gcGF0aCBsb29rdXAgLSBpdCBpcyBleGVjdXRlZCBieSBmZCAtXG4rXHQgKiBidXQgbG9hZGluZyBpdCBmYWlscyBvbiBvcGVuaW5nIHRoZSBhYnNvbHV0ZSBQVF9JTlRFUlBcbitcdCAqIGludGVycHJldGVyLiBSdW4gaXQgaW4gYSBjaGlsZCBzbyBhIHdyb25nbHkgc3VjY2Vzc2Z1bCBleGVjIGRvZXNcbitcdCAqIG5vdCByZXBsYWNlIHRoZSB0ZXN0IGltYWdlIGFuZCBtYXNxdWVyYWRlIGFzIGEgcGFzcy5cbitcdCAqL1xuK1x0cGlkID0gZm9yaygpO1xuK1x0QVNTRVJUX0dFKHBpZCwgMCk7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0c3lzY2FsbChfX05SX2V4ZWN2ZWF0LCBleGVmZCwgXCJcIiwgYXJndiwgZW52cCwgQVRfRU1QVFlfUEFUSCk7XG4rXHRcdF9leGl0KGVycm5vID09IEVPUE5PVFNVUFAgPyBGQUlMRlNfRVhFQ19CTE9DS0VEIDogMSk7XG4rXHR9XG4rXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XG4rXHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRkFJTEZTX0VYRUNfQkxPQ0tFRCk7XG4rfVxuK1xuK1RFU1QoZmNocm9vdF9zZW50aW5lbF9pbmhlcml0ZWQpXG4re1xuK1x0cGlkX3QgcGlkO1xuK1x0aW50IHN0YXR1cztcbitcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwicHJpdmlsZWdlZCBmY2hyb290KEZEX0ZBSUxGU19ST09UKSByZXF1aXJlcyBDQVBfU1lTX0NIUk9PVFwiKTtcbitcbitcdEFTU0VSVF9FUShzeXNfZmNocm9vdChGRF9GQUlMRlNfUk9PVCwgMCksIDApO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0QVNTRVJUX0dFKHBpZCwgMCk7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0aWYgKG9wZW4oXCIvZXRjXCIsIE9fUEFUSCkgIT0gLTEgfHwgZXJybm8gIT0gRU9QTk9UU1VQUClcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXHRBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCk7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7XG4rXHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgMCk7XG4rfVxuK1xuK1RFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTowNTozNi41MTY1NjM2ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjE2NDMzNzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgJ2ZhaWxmcycgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgZmFpbGZzYCwgYSBmaWxlc3lzdGVtIGRlc2lnbmVkIHRvIGZhaWwgZXZlcnkgb3BlcmF0aW9uLiBUaGUga2V5IGFkZGl0aW9ucyBoZXJlIGFyZSB0aGUgbmV3IGBmY2hyb290YCBzeXN0ZW0gY2FsbCBhbmQgdGhlIG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGlzIG1lYW5zIHdlJ3ZlIG1vZGlmaWVkIGNvcmUgVkZTIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gY29uZmlybSBpdHMgcmVhY2hhYmlsaXR5IGFuZCBvdmVyYWxsIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gYGZjaHJvb3QoRkRfRkFJTEZTX1JPT1QsIDApYCBvciBgZmNoZGlyKEZEX0ZBSUxGU19ST09UKWAgYXJlIGNsZWFyIGVudHJ5IHBvaW50cy5cblxuVGhlIGBmYWlsZnMuY2AgY29kZSBjb25maXJtcyB0aGlzLiBGdW5jdGlvbmFsaXR5LXdpc2UsIGBmYWlsZnNgIGl0c2VsZiBpcyBzaW1wbGUg4oCTIGl0IGNvbnNpc3RlbnRseSByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIEhvd2V2ZXIsIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBuYW1lbHkgdGhyb3VnaCBgZF9wYXRoYCwgYGZjaGRpcmAsIGFuZCBgZmNocm9vdGAuIFRoaXMgdGVsbHMgbWUgd2Ugc2hvdWxkIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2UgaW50ZXJmYWNlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6XG5cbiogICBgc3lzX2ZjaHJvb3RgOiBUaGlzIGlzIHRoZSBuZXcgc3lzdGVtIGNhbGwsIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlIG5lZWQgdG8gdGVzdC5cbiogICBgc3lzX2ZjaGRpcmA6IFRoZSBleGlzdGluZyBgZmNoZGlyYCBzeXNjYWxsIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBgRkRfRkFJTEZTX1JPT1RgLCBtYWtpbmcgaXQgYSBrZXkgZm9jdXMgdG9vLlxuKiAgIGBmYWlsZnNfY3VycmVudF9jaGRpcmA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gYHN5c19mY2hkaXJgIHdoZW4gdGhlIGBGRF9GQUlMRlNfUk9PVGAgaXMgcGFzc2VkIHRvIGl0LlxuKiAgIGBmYWlsZnNfZ2V0X3Jvb3RgOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBzeXNfZmNocm9vdGAuXG4qICAgYGZhaWxmc19tbnRgOiBUaGlzIGlzIGxpa2VseSB0aGUgbW91bnQgZnVuY3Rpb24uXG5cbk5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkLCBzaW5jZSBpdCdzIHVuY29uZGl0aW9uYWxseSBidWlsdC1pbi5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzeXN0ZW0gY2FsbCAoYGZjaHJvb3RgKSBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBhbiBleGlzdGluZyBvbmUgKGBmY2hkaXJgKSB0byBpbnRlcmFjdCB3aXRoIGEgbmV3IFwiZmFpbGluZ1wiIGZpbGVzeXN0ZW0gY3JlYXRlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBpbnRlcmZhY2VzIHRvIGxvb2sgZm9yIHJlZ3Jlc3Npb25zLCB2dWxuZXJhYmlsaXRpZXMgc3VjaCBhcyBjaHJvb3QgZXNjYXBlcywgb3IgdW5leHBlY3RlZCBWRlMgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwNiwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6MDU6NTIuNjgwOTAyOTMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19mY2hyb290XCIsXG4gICAgXCJzeXNfZmNoZGlyXCIsXG4gICAgXCJmYWlsZnNfY3VycmVudF9jaGRpclwiLFxuICAgIFwiZmFpbGZzX2dldF9yb290XCIsXG4gICAgXCJmYWlsZnNfbW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBrZXJuZWwtaW50ZXJuYWwgZmlsZXN5c3RlbSBgZmFpbGZzYCBhbmQgYSBuZXcgc3lzdGVtIGNhbGwgYGZjaHJvb3RgLiBJdCBhbHNvIG1vZGlmaWVzIGBmY2hkaXJgIHRvIGFjY2VwdCBhIG5ldyBtYWdpYyBmaWxlIGRlc2NyaXB0b3IgYEZEX0ZBSUxGU19ST09UYC4gVGhlc2UgYXJlIGNvcmUgVkZTIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGVzY2FwaW5nIGNocm9vdCwgcmVmZXJlbmNlIGxlYWtzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHBhdGggcmVzb2x1dGlvbikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2ZjaHJvb3RcIixcbiAgICBcInN5c19mY2hkaXJcIixcbiAgICBcImZhaWxmc19jdXJyZW50X2NoZGlyXCIsXG4gICAgXCJmYWlsZnNfZ2V0X3Jvb3RcIixcbiAgICBcImZhaWxmc19tbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbC1pbnRlcm5hbCBmaWxlc3lzdGVtIGBmYWlsZnNgIGFuZCBhIG5ldyBzeXN0ZW0gY2FsbCBgZmNocm9vdGAuIEl0IGFsc28gbW9kaWZpZXMgYGZjaGRpcmAgdG8gYWNjZXB0IGEgbmV3IG1hZ2ljIGZpbGUgZGVzY3JpcHRvciBgRkRfRkFJTEZTX1JPT1RgLiBUaGVzZSBhcmUgY29yZSBWRlMgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgZXNjYXBpbmcgY2hyb290LCByZWZlcmVuY2UgbGVha3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[1] Phase: Succeeded StartedAt: 2026-07-25 19:06:03 +0000 UTC FinishedAt: 2026-07-25 19:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 19:06:03 +0000 UTC FinishedAt: 2026-07-25 19:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2] Phase: Succeeded StartedAt: 2026-07-25 19:06:03 +0000 UTC FinishedAt: 2026-07-25 23:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 19:06:03 +0000 UTC FinishedAt: 2026-07-25 23:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 19:06:03 +0000 UTC FinishedAt: 2026-07-25 19:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 19:06:03 +0000 UTC FinishedAt: 2026-07-25 19:06:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowtrktf/series-workflowtrktf-convert-artifact-810035560/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 19:06:13 +0000 UTC FinishedAt: 2026-07-25 20:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 19:06:13 +0000 UTC FinishedAt: 2026-07-25 20:05:02 +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:*d1efda62-9dd9-47ef-b665-5fde208f8f6e,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-workflowtrktf/series-workflowtrktf-convert-artifact-810035560/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": "7809df1f-35f9-4059-8e69-f90407a0d8a6", "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-workflowtrktf/series-workflowtrktf-build-action-3749490398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 19:06:13 +0000 UTC FinishedAt: 2026-07-25 20:04:47 +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:*d1efda62-9dd9-47ef-b665-5fde208f8f6e,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-workflowtrktf/series-workflowtrktf-convert-artifact-810035560/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": "7809df1f-35f9-4059-8e69-f90407a0d8a6", "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-workflowtrktf/series-workflowtrktf-build-action-3749490398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 20:05:03 +0000 UTC FinishedAt: 2026-07-25 20:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 20:05:03 +0000 UTC FinishedAt: 2026-07-25 20:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 20:05:03 +0000 UTC FinishedAt: 2026-07-25 20:05:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 20:05:03 +0000 UTC FinishedAt: 2026-07-25 20:05:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowtrktf/series-workflowtrktf-convert-artifact-400375631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 20:05:35 +0000 UTC FinishedAt: 2026-07-25 20:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 20:05:35 +0000 UTC FinishedAt: 2026-07-25 20:07:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7809df1f-35f9-4059-8e69-f90407a0d8a6,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-workflowtrktf/series-workflowtrktf-build-action-3749490398/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-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 20:08:38 +0000 UTC FinishedAt: 2026-07-25 20:08:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 20:08:39 +0000 UTC FinishedAt: 2026-07-25 20:08:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 20:08:39 +0000 UTC FinishedAt: 2026-07-25 20:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 20:08:39 +0000 UTC FinishedAt: 2026-07-25 20:38:42 +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:*d1efda62-9dd9-47ef-b665-5fde208f8f6e,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-workflowtrktf/series-workflowtrktf-convert-artifact-400375631/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": "c10bea05-7094-4ed3-855c-3e7b24f93121", "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-workflowtrktf/series-workflowtrktf-build-action-3801663331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 20:08:39 +0000 UTC FinishedAt: 2026-07-25 20:38: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:*d1efda62-9dd9-47ef-b665-5fde208f8f6e,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-workflowtrktf/series-workflowtrktf-convert-artifact-400375631/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": "c10bea05-7094-4ed3-855c-3e7b24f93121", "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-workflowtrktf/series-workflowtrktf-build-action-3801663331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 20:38:42 +0000 UTC FinishedAt: 2026-07-25 20:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 20:38:42 +0000 UTC FinishedAt: 2026-07-25 20:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 20:38:42 +0000 UTC FinishedAt: 2026-07-25 20:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 20:38:42 +0000 UTC FinishedAt: 2026-07-25 20:40:36 +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:*c10bea05-7094-4ed3-855c-3e7b24f93121,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-workflowtrktf/series-workflowtrktf-build-action-3801663331/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-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 20:40:46 +0000 UTC FinishedAt: 2026-07-25 23:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 20:40:46 +0000 UTC FinishedAt: 2026-07-25 23:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},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:*7809df1f-35f9-4059-8e69-f90407a0d8a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c10bea05-7094-4ed3-855c-3e7b24f93121,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-workflowtrktf/series-workflowtrktf-build-action-3749490398/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-workflowtrktf/series-workflowtrktf-build-action-3801663331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 20:40:46 +0000 UTC FinishedAt: 2026-07-25 20:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 20:40:46 +0000 UTC FinishedAt: 2026-07-25 20:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},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-workflowtrktf/series-workflowtrktf-convert-artifact-2021408776/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 20:40:46 +0000 UTC FinishedAt: 2026-07-25 20:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 20:40:46 +0000 UTC FinishedAt: 2026-07-25 20:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 20:40:47 +0000 UTC FinishedAt: 2026-07-25 20:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 20:41:08 +0000 UTC FinishedAt: 2026-07-25 23:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrktf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sys_fchroot","sys_fchdir","failfs_current_chdir","failfs_get_root","failfs_mnt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","series_id":"35b8a334-fa49-46c4-bea7-b24519cabfa7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 20:41:08 +0000 UTC FinishedAt: 2026-07-25 23:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7809df1f-35f9-4059-8e69-f90407a0d8a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c10bea05-7094-4ed3-855c-3e7b24f93121,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-workflowtrktf/series-workflowtrktf-build-action-3749490398/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-workflowtrktf/series-workflowtrktf-build-action-3801663331/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-workflowtrktf/series-workflowtrktf-convert-artifact-2021408776/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,}