Name: series-workflowxbztm Phase: Succeeded StartedAt: 2026-08-01 11:05:42 +0000 UTC FinishedAt: 2026-08-01 14:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[0] Phase: Succeeded StartedAt: 2026-08-01 11:05:42 +0000 UTC FinishedAt: 2026-08-01 11:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 11:05:42 +0000 UTC FinishedAt: 2026-08-01 11:08:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_LANDLOCK", "BPF_SYSCALL", "SECURITY", "BPF_EVENTS", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_LANDLOCK", "BPF_SYSCALL", "SECURITY", "BPF_EVENTS", "BPF_JIT" ], "series_id": "158492be-10e7-4e70-a5a1-24bbff65c3c0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_landlock_get_ruleset_from_fd", "bpf_landlock_put_ruleset", "bpf_landlock_restrict_binprm", "bpf_landlock_put_ruleset_dtor", "security_policy_kptr_from_fd", "security_policy_kptr_put", "security_bprm_enforce_policy_kptr", "landlock_prepare_restriction", "landlock_apply_restriction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTEFORExPQ0smIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0JiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0mIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3ImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyJiMzNDssCiAgICAmIzM0O2xhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24mIzM0OywKICAgICYjMzQ7bGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBMYW5kbG9jayBMU00sIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBlbmZvcmNlIExhbmRsb2NrIHJ1bGVzZXRzIG9uIGV4ZWN1dGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIEJQRiBhbmQgTGFuZGxvY2sgc3Vic3lzdGVtcywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRlYjZkYTk0ZWJjNTE1YTZlZDQyZjg5MmYxOTJhMGJjMWVmZGU1NzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDExOjA3OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbmluZGV4IGM1MTg2NTI2ZTc2ZjYuLjAxMTk3Yzc1ODBlYzAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbkBAIC0xMjksNiAmIzQzOzEyOSwzMSBAQCBUaGUgcmVhc29uaW5nIGlzOlxuICAgcmVzdHJpY3Rpb25zLCBiZWNhdXNlIGFjY2VzcyB3aXRoaW4gdGhlIHNhbWUgc2NvcGUgaXMgYWxyZWFkeVxuICAgYWxsb3dlZCBiYXNlZCBvbiBgYExBTkRMT0NLX0FDQ0VTU19GU19SRVNPTFZFX1VOSVhgYC5cbiBcbiYjNDM7QlBGIGtmdW5jc1xuJiM0Mzs9PT09PT09PT09XG4mIzQzO1xuJiM0MztCUEYgcHJvZ3JhbXMgY2FuIGFwcGx5IGEgdXNlcnNwYWNlLWNyZWF0ZWQgTGFuZGxvY2sgcnVsZXNldCB0byBhblxuJiM0MztleGVjdXRpb24uICBBIHN5c2NhbGwgcHJvZ3JhbSAoYGBCUEZfUFJPR19UWVBFX1NZU0NBTExgYCksIHJ1bm5pbmcgaW5cbiYjNDM7dGhlIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgdGhhdCBzZXQgdGhlIHJ1bGVzZXQgdXAsIGFjcXVpcmVzIHRoZVxuJiM0MztydWxlc2V0IGZyb20gaXRzIGZpbGUgZGVzY3JpcHRvciBhbmQgdHlwaWNhbGx5IGhhbmRzIGl0IG92ZXIgdGhyb3VnaFxuJiM0MzthIG1hcCBrcHRyIGZpZWxkOyBhIHNsZWVwYWJsZSBMU00gQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4mIzQzO2BgYnBybV9jcmVkc19mb3JfZXhlY2BgIG9yIGBgYnBybV9jcmVkc19mcm9tX2ZpbGVgYCBob29rcyB0aGVuXG4mIzQzO2VuZm9yY2VzIGl0IG9uIGFuIGV4ZWN1dGlvbi5cbiYjNDM7XG4mIzQzO1RoaXMgY2FuIGJlIHVzZWQgdG8gaW5zcGVjdCB0aGUgcnVudGltZSBjb250ZXh0IG9mIGEgcGVuZGluZyBleGVjdXRpb24sXG4mIzQzO2FuZCBlbmZvcmNlIGEgTGFuZGxvY2sgcG9saWN5IHRocm91Z2ggQlBGLlxuJiM0MztcbiYjNDM7VGhlIHJlc3RyaWN0aW9uIGlzIHN0YWdlZCBpbiB0aGUgTGFuZGxvY2sgYmxvYiBvZiB0aGVcbiYjNDM7Y3JlZGVudGlhbHMgcHJlcGFyZWQgZm9yIHRoZSBleGVjdXRpb24gYW5kIGNvbW1pdHRlZCBwYXN0IHRoZSBleGVjXG4mIzQzO3BvaW50IG9mIG5vIHJldHVybiwgc28gYSBmYWlsZWQgZXhlY3V0aW9uIGxlYXZlcyB0aGUgY2FsbGluZyB0YXNrXG4mIzQzO3VudG91Y2hlZC4gIFRoZSBgYGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMilgYCBmbGFncyBhcHBseSwgd2l0aCB0aGVcbiYjNDM7ZXhjZXB0aW9uIG9mIGBgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ2BgLlxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGtlcm5lbC9icGYvYnBmX2xzbS5jXG4mIzQzOyAgICA6aWRlbnRpZmllcnM6IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXG4mIzQzOyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFxuJiM0MzsgICAgICAgICAgICAgICAgICBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtXG4mIzQzO1xuIFRlc3RzXG4gPT09PT1cbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcbmluZGV4IDU4OTVlNTI5ZGE3ZmYuLmZjM2FmMjA2ZTc5NTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdFxuQEAgLTE1LDMgJiM0MzsxNSwzMCBAQCBzZWUgYGBzZWN1cml0eS9zZWN1cml0eS5jYGAgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlczpcbiBcbiAuLiBrZXJuZWwtZG9jOjogc2VjdXJpdHkvc2VjdXJpdHkuY1xuICAgIDpleHBvcnQ6XG4mIzQzO1xuJiM0MztMU00gcG9saWN5IGtwdHIgaG9va3MgYW5kIEJQRiBrZnVuY3NcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgTFNNIGZyYW1ld29yayBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3IgaW5kaXZpZHVhbCBMU01zIHRvXG4mIzQzO2V4cG9zZSB0aGVpciBjb25maWd1cmF0aW9uIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQga3B0cnMuIEFuIExTTVxuJiM0MzttYXkgbm90IGV4cG9ydCBhbnkga2Z1bmMgb3Igb3RoZXIgQlBGIGludGVyZmFjZSBkaXJlY3RseS5cbiYjNDM7XG4mIzQzO0FuIExTTSB3aXNoaW5nIHRvIGV4cG9zZSBhIEJQRiBrZnVuYyBtdXN0IHJldXNlIGFuIGV4aXN0aW5nIHNlY3VyaXR5XG4mIzQzO2hvb2sgb3IgaW1wbGVtZW50IGEgbmV3IHN1ZmZpY2llbnRseSBnZW5lcmljIExTTSBob29rIGZvciB0aGUgZGVzaXJlZFxuJiM0MztpbnRlcmZhY2UuIFRoZSBob29rcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSBrZnVuYyBkZWZpbml0aW9ucyBpblxuJiM0MztgYGtlcm5lbC9icGZgYC4gVGhpcyBhbGxvd3MgTFNNIGhvb2tzIHRvIHJlbWFpbiBzdWZmaWNpZW50bHkgZ2VuZXJpY1xuJiM0Mzt3aGlsZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN0cm9uZyB0eXBpbmdcbiYjNDM7YW5kIHJ1bnRpbWUgY2hlY2tpbmcgb2ZmZXJlZCBieSB0aGUgQlBGIHZlcmlmaWVyLlxuJiM0MztcbiYjNDM7VGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGltcGxlbWVudHMgdGhlIG9wZXJhdGlvbiYjMzk7cyBob29rIHdpdGhcbiYjNDM7YGBMU01fSE9PS19JTklUKClgYCBsaWtlIGFueSBvdGhlciBob29rLiBBIEJQRiBwcm9ncmFtIGNhbGxpbmcgYW5cbiYjNDM7TFNNIGtmdW5jIHRoZXJlZm9yZSByZWFjaGVzIHRoZSBMU00gdGhlIHNhbWUgd2F5IGV2ZXJ5IG90aGVyXG4mIzQzO2tlcm5lbCBjYWxsZXIgZG9lczogdGhyb3VnaCBhbiBMU00gaG9vay4gVGhlIGhvb2tzIGJhY2tpbmcga2Z1bmNzXG4mIzQzO2ZvbGxvdyB0aGUgdXN1YWwgcnVsZXMgZm9yIG5ldyBMU00gaG9va3M6IHRoZWlyIGNvbnRyYWN0IG11c3QgYmVcbiYjNDM7TFNNIGFnbm9zdGljIHNvIHRoYXQgb3RoZXIgTFNNcyBjb3VsZCBwcm92aWRlIGEgbWVhbmluZ2Z1bFxuJiM0MztpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2FtZSBvcGVyYXRpb24uXG4mIzQzO1xuJiM0MztXaGV0aGVyIHRoZSBMU00gcHJvdmlkaW5nIGFuIG9wZXJhdGlvbiBpcyBidWlsdCBpbiBhbmQgYWN0aXZlIGlzIGFcbiYjNDM7cnVudGltZSBwcm9wZXJ0eTogdGhlIGtmdW5jcyBhcmUgYWx3YXlzIHJlZ2lzdGVyZWQgd2hlblxuJiM0MztgYENPTkZJR19CUEZfTFNNYGAgaXMgZW5hYmxlZC4gQlBGIHByb2dyYW0gbG9hZGluZyBpcyB0aHVzXG4mIzQzO2luZGVwZW5kZW50IG9mIHRoZSBib290LXRpbWUgTFNNIGNvbmZpZ3VyYXRpb24uXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uYTcwZWRiZDdiNzYxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTQ1Miw2ICYjNDM7NDUyLDExIEBAIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NyZWF0ZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIHVuaW9uIGJwZl9hdHRyICphdHRyXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBicGZfdG9rZW5fZnJlZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4pXG4gTFNNX0hPT0soaW50LCAwLCBicGZfdG9rZW5fY21kLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgZW51bSBicGZfY21kIGNtZClcbiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jYXBhYmxlLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcbiYjNDM7TFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgcG9saWN5X2twdHJfZnJvbV9mZCwgaW50IGZkLFxuJiM0MztcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjNDM7TFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBwb2xpY3lfa3B0cl9wdXQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuJiM0MztMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIExTTV9IT09LKGludCwgMCwgbG9ja2VkX2Rvd24sIGVudW0gbG9ja2Rvd25fcmVhc29uIHdoYXQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li40MGRmYTk2YjZhNzE5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC0xNjgsNiAmIzQzOzE2OCwyMyBAQCBzdHJ1Y3QgbHNtX3Byb3Age1xuIFx0c3RydWN0IGxzbV9wcm9wX2JwZiBicGY7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuJiM0MztcbiYjNDM7c3RydWN0IGxzbV9wb2xpY3lfbGFuZGxvY2sge1xuJiM0MztcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgcmVmZXJlbmNlIHRvIGFuIExTTSBwb2xpY3kgb2JqZWN0LCB0YWdnZWQgYnkgdGhlIExTTV9JRF8qIHZhbHVlXG4mIzQzOyAqIHBhc3NlZCBhbG9uZ3NpZGU6IG9ubHkgdGhlIG1hdGNoaW5nIExTTSYjMzk7cyBtZW1iZXIgaXMgdmFsaWQuICBUaGVcbiYjNDM7ICogbWVtYmVycyBhcmUgbm90IGd1YXJkZWQgYnkgdGhlIExTTXMmIzM5OyBDT05GSUcgb3B0aW9uczogdGhlIGNhbGxlcnNcbiYjNDM7ICogYXJlIGJ1aWx0IGluZGVwZW5kZW50bHkgb2YgYW55IGluZGl2aWR1YWwgTFNNIGFuZCBhIGNhbGwgZm9yIGFcbiYjNDM7ICogbWlzc2luZyBMU00gbXVzdCBmYWlsIGF0IHJ1bnRpbWUsIG5vdCBhdCBidWlsZCB0aW1lLlxuJiM0MzsgKi9cbiYjNDM7dW5pb24gbHNtX3BvbGljeV9rcHRyIHtcbiYjNDM7XHRzdHJ1Y3QgbHNtX3BvbGljeV9sYW5kbG9jayBsYW5kbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2tkb3duX3JlYXNvbnNbTE9DS0RPV05fQ09ORklERU5USUFMSVRZX01BWCYjNDM7MV07XG4gXG4gLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBzZWN1cml0eS9jb21tb25jYXAuYyAqL1xuQEAgLTIzMTIsNiAmIzQzOzIzMjksMTMgQEAgZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY3JlYXRlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXRcbiBleHRlcm4gdm9pZCBzZWN1cml0eV9icGZfdG9rZW5fZnJlZShzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbik7XG4gZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY21kKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBlbnVtIGJwZl9jbWQgY21kKTtcbiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKTtcbiYjNDM7ZXh0ZXJuIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuJiM0MztcdFx0XHRcdFx0dW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpO1xuJiM0MztleHRlcm4gdm9pZCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQodTY0IGxzbWlkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7XG4mIzQzO2V4dGVybiBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBmbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icGYoaW50IGNtZCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBib29sIGtlcm5lbClcbkBAIC0yMzY1LDYgJiM0MzsyMzg5LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnRcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgdTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4gI2VuZGlmIC8qIENPTkZJR19TRUNVUklUWSAqL1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9sc20uYyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5pbmRleCAzOTgzYjRjZTczYzgxLi42N2FhOTAyZjEyNTcwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5AQCAtMTQsOCAmIzQzOzE0LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbG9jYWxfc3RvcmFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYtY2dyb3VwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sc20uaFx1MDAzZVxuIFxuIC8qIEZvciBldmVyeSBMU00gaG9vayB0aGF0IGFsbG93cyBhdHRhY2htZW50IG9mIEJQRiBwcm9ncmFtcywgZGVjbGFyZSBhIG5vcFxuICAqIGZ1bmN0aW9uIHdoZXJlIGEgQlBGIHByb2dyYW0gY2FuIGJlIGF0dGFjaGVkLiBOb3RhYmx5LCB3ZSBxdWFsaWZ5IGVhY2ggd2l0aFxuQEAgLTU2LDYgJiM0Mzs1OCw5IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX3hmcm1fZGVjb2RlX3Nlc3Npb24pXG4gI2VuZGlmXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faXNtYWNsYWJlbClcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9maWxlX2FsbG9jX3NlY3VyaXR5KVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9wb2xpY3lfa3B0cl9mcm9tX2ZkKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9wb2xpY3lfa3B0cl9wdXQpXG4mIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cilcbiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKVxuIFxuIC8qIExpc3Qgb2YgTFNNIGhvb2tzIHRoYXQgc2hvdWxkIG9wZXJhdGUgb24gJiMzOTtjdXJyZW50JiMzOTsgY2dyb3VwIHJlZ2FyZGxlc3NcbkBAIC00NzAsMyAmIzQzOzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MzsvKiBMU00gcG9saWN5IGtmdW5jcyAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogT3BhcXVlIGhhbmRsZSBmb3IgYSBMYW5kbG9jayBydWxlc2V0LiAgT25seVxuJiM0MzsgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIHByb2R1Y2VzIG9uZSwgYW5kIG9ubHkgTGFuZGxvY2tcbiYjNDM7ICogcmVzb2x2ZXMgaXQuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQge307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgc2xlZXBhYmxlIExTTSBob29rcyBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKCkgYW5kXG4mIzQzOyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCgpIG1heSBiZSBjYWxsZWQgZnJvbS5cbiYjNDM7ICovXG4mIzQzO0JURl9TRVRfU1RBUlQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2NyZWRzX2Zvcl9leGVjKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2NyZWRzX2Zyb21fZmlsZSlcbiYjNDM7QlRGX1NFVF9FTkQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkIC0gR2V0IGEgTGFuZGxvY2sgcnVsZXNldCBmcm9tIGEgZmRcbiYjNDM7ICogQGZkOiBmaWxlIGRlc2NyaXB0b3Igb2YgYSBMYW5kbG9jayBydWxlc2V0LCByZXNvbHZlZCBpbiB0aGUgZmlsZVxuJiM0MzsgKiAgICAgIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIHRhc2sgcnVubmluZyB0aGUgcHJvZ3JhbVxuJiM0MzsgKlxuJiM0MzsgKiBBY3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZSBMYW5kbG9jayBydWxlc2V0IHJlZmVycmVkIHRvIGJ5IEBmZCwgYXNcbiYjNDM7ICogY3JlYXRlZCBieSBsYW5kbG9ja19jcmVhdGVfcnVsZXNldCgyKSBhbmQgcG9wdWxhdGVkIHdpdGhcbiYjNDM7ICogbGFuZGxvY2tfYWRkX3J1bGUoMikuICBPbmx5IHN5c2NhbGwgcHJvZ3JhbXMgbWF5IGNhbGwgdGhpcyBrZnVuYzpcbiYjNDM7ICogdGhleSBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaW52b2tpbmcgdGhlbSwgd2hlcmUgdGhlXG4mIzQzOyAqIHJ1bGVzZXQgZmQgaXMgbWVhbmluZ2Z1bC4gIFRoZSBhY3F1aXJlZCBydWxlc2V0IGNhbiBiZSBoYW5kZWQgdG8gYW5cbiYjNDM7ICogZW5mb3JjZW1lbnQgcHJvZ3JhbSB0aHJvdWdoIGEgbWFwIGtwdHIgZmllbGQuICBUaGUgcmVmZXJlbmNlIG11c3RcbiYjNDM7ICogYmUgcmVsZWFzZWQgd2l0aCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBBIHJlZmVyZW5jZWQgcnVsZXNldCBoYW5kbGUsIG9yIE5VTEwgaWYgQGZkIGlzIG5vdCBhXG4mIzQzOyAqIHJlYWRhYmxlIExhbmRsb2NrIHJ1bGVzZXQgZmQgb3IgdGhlIExhbmRsb2NrIExTTSBpcyBub3QgZW5hYmxlZC5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG4mIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZClcbiYjNDM7e1xuJiM0MztcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3k7XG4mIzQzO1xuJiM0MztcdGlmIChzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKExTTV9JRF9MQU5ETE9DSywgZmQsIFx1MDAyNnBvbGljeSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcG9saWN5LmxhbmRsb2NrLnJ1bGVzZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgLSBQdXQgYSBMYW5kbG9jayBydWxlc2V0XG4mIzQzOyAqIEBydWxlc2V0OiBMYW5kbG9jayBydWxlc2V0IHRvIHB1dFxuJiM0MzsgKlxuJiM0MzsgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIGFjcXVpcmVkIHdpdGggYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldClcbiYjNDM7e1xuJiM0MztcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9O1xuJiM0MztcbiYjNDM7XHRzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoTFNNX0lEX0xBTkRMT0NLLCBcdTAwMjZwb2xpY3kpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSAtIEVuZm9yY2UgYSBMYW5kbG9jayBydWxlc2V0IG9uIGV4ZWNcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzXG4mIzQzOyAqIEBicHJtOiBleGVjdXRpb24gY29udGV4dCBwcm92aWRpbmcgdGhlIHByZXBhcmVkIGNyZWRlbnRpYWxzIHRvXG4mIzQzOyAqICAgICAgICByZXN0cmljdFxuJiM0MzsgKiBAcnVsZXNldDogTGFuZGxvY2sgcnVsZXNldCB0byBlbmZvcmNlXG4mIzQzOyAqIEBmbGFnczogbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncywgZXhjZXB0XG4mIzQzOyAqICAgICAgICAgJUxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNcbiYjNDM7ICpcbiYjNDM7ICogUmVzdHJpY3QgdGhlIGNyZWRlbnRpYWxzIHByZXBhcmVkIGluIEBicHJtIHdpdGggQHJ1bGVzZXQsIHNvIHRoYXRcbiYjNDM7ICogdGhlIGV4ZWN1dGVkIHRhc2sgc3RhcnRzIGNvbmZpbmVkIGJ5IGl0LCBmb2xsb3dpbmcgdGhlIHNhbWUgZG9tYWluXG4mIzQzOyAqIGNvbXBvc2l0aW9uIHJ1bGVzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikuICBUaGUgcmVzdHJpY3Rpb24gaXNcbiYjNDM7ICogc3RhZ2VkIGFuZCBvbmx5IGNvbW1pdHRlZCBhdCB0aGUgZXhlY3V0aW9uJiMzOTtzIHBvaW50IG9mIG5vIHJldHVybjogYW5cbiYjNDM7ICogZXhlY3V0aW9uIHRoYXQgZmFpbHMgYmVmb3JlIHRoYXQgcG9pbnQgaXMgdW5hZmZlY3RlZCwgYW5kIGEgbGF0ZXJcbiYjNDM7ICogY2FsbCBvbiB0aGUgc2FtZSBleGVjdXRpb24gcmVwbGFjZXMgYSBwcmV2aW91c2x5IHN0YWdlZFxuJiM0MzsgKiByZXN0cmljdGlvbi4gIEBydWxlc2V0IGlzIG9ubHkgYm9ycm93ZWQ6IHRoZSBjYWxsZXIga2VlcHMgaXRzXG4mIzQzOyAqIHJlZmVyZW5jZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgZmxhZ3MgYXBwbHkgd2l0aCB0aGVpciB1c3VhbFxuJiM0MzsgKiBzZW1hbnRpY3MuICBPbmx5ICVMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DIGlzIHJlamVjdGVkLCBhcyBpdFxuJiM0MzsgKiB0YXJnZXRzIHRoZSBjYWxsaW5nIHRocmVhZHMgcmF0aGVyIHRoYW4gdGhlIGV4ZWN1dGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBMYW5kbG9jayBMU00gaXMgbm90XG4mIzQzOyAqIGVuYWJsZWQsIC1FSU5WQUwgaWYgQGZsYWdzIGNvbnRhaW5zIGFuIHVuc3VwcG9ydGVkIGZsYWcsIG90aGVyXG4mIzQzOyAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlIGFzIGZvciBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihMU01fSURfTEFORExPQ0ssIGJwcm0sXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZwb2xpY3ksIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRGVzdHJ1Y3RvciBmb3IgcmVmZXJlbmNlZCBicGZfbGFuZGxvY2tfcnVsZXNldCBrcHRycy4gKi9cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcih2b2lkICpydWxlc2V0KVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07XG4mIzQzO1xuJiM0MztcdHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dChMU01fSURfTEFORExPQ0ssIFx1MDAyNnBvbGljeSk7XG4mIzQzO31cbiYjNDM7Q0ZJX05PU0VBTChicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcik7XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaWRzKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQsXG4mIzQzO1x0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQsIEtGX1JFTEVBU0UgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG4mIzQzO1xuJiM0MztCVEZfSURfTElTVChicGZfbGFuZGxvY2tfZHRvcl9pZHMpXG4mIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3IpXG4mIzQzO1xuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYyxcbiYjNDM7XHRcdCAgIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKVxuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHMsIGZ1bmMsXG4mIzQzO1x0XHQgICBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQlBGX1BST0dfVFlQRV9MU00gYW5kIEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCBzaGFyZSB0aGVpciBrZnVuY1xuJiM0MzsgKiBsb29rdXAgYnVja2V0cyB3aXRoIG90aGVyIHByb2dyYW0gdHlwZXMsIHNvIHJlc3RyaWN0aW5nIHRoZSBMU01cbiYjNDM7ICogcG9saWN5IGtmdW5jcyByZXF1aXJlcyBhIGZpbHRlci4gIEEgcnVsZXNldCBmZCBpcyBvbmx5IG1lYW5pbmdmdWxcbiYjNDM7ICogaW4gdGhlIGZkIHRhYmxlIG9mIHRoZSB0YXNrIHRoYXQgc2V0IHRoZSBydWxlc2V0IHVwLCBzb1xuJiM0MzsgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIGlzIGV4Y2x1c2l2ZSB0byBzeXNjYWxsXG4mIzQzOyAqIHByb2dyYW1zLCB3aGljaCBydW4gaW4gdGhhdCB0YXNrJiMzOTtzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cbiYjNDM7ICogdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaXQgbWVkaWF0ZXMuICBFbmZvcmNlbWVudCBpcyBleGNsdXNpdmUgdG9cbiYjNDM7ICogdGhlIHNsZWVwYWJsZSBicHJtIExTTSBob29rcyB0aGUgcG9saWN5IG9wZXJhdGlvbiBpcyBzcGVjaWZpZWRcbiYjNDM7ICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmVcbiYjNDM7ICogaGVsZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiYjNDM7e1xuJiM0MztcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2YnBmX2xhbmRsb2NrX2tmdW5jX2lkcywga2Z1bmNfaWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJvZy1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19UWVBFX1NZU0NBTEw6XG4mIzQzO1x0XHRpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHNbMF0pXG4mIzQzO1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbiYjNDM7XHRcdGlmIChrZnVuY19pZCA9PSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfaWRzWzBdKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQlBGX0xTTV9DR1JPVVAgcHJvZ3JhbXMgcnVuIHVuZGVyIGNsYXNzaWMgUkNVIGFuZFxuJiM0MztcdFx0ICogY2Fubm90IHNsZWVwLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19ob29rcyxcbiYjNDM7XHRcdFx0XHRcdCBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9sYW5kbG9ja19rZnVuY19zZXQgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LnNldCA9IFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19pZHMsXG4mIzQzO1x0LmZpbHRlciA9IGJwZl9sYW5kbG9ja19rZnVuY19maWx0ZXIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX3BvbGljeV9rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2xhbmRsb2NrX2R0b3JzW10gPSB7XG4mIzQzO1x0XHR7XG4mIzQzO1x0XHRcdC5idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMF0sXG4mIzQzO1x0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMV0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9sYW5kbG9ja19kdG9ycyxcbiYjNDM7XHRcdFx0XHRcdCAgIEFSUkFZX1NJWkUoYnBmX2xhbmRsb2NrX2R0b3JzKSxcbiYjNDM7XHRcdFx0XHRcdCAgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztsYXRlX2luaXRjYWxsKGJwZl9sc21fcG9saWN5X2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlIGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcbmluZGV4IGZmYTc2NDZkOTlmM2UuLjliYTI4YzA2YjVhYzIgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcbkBAIC0xNiwzICYjNDM7MTYsNSBAQCBsYW5kbG9jay0kKENPTkZJR19BVURJVCkgJiM0Mzs9IFxcXG4gXHRpZC5vIFxcXG4gXHRhdWRpdC5vIFxcXG4gXHRkb21haW4ub1xuJiM0MztcbiYjNDM7bGFuZGxvY2stJChDT05GSUdfQlBGX0xTTSkgJiM0Mzs9IGJwZi5vXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNmODkwNjJkMzVhNzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rc1xuJiM0MzsgKlxuJiM0MzsgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGhvb2tzIGJhY2tpbmcgdGhlIExhbmRsb2NrIGtmdW5jc1xuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sc21faG9va3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2xhbmRsb2NrLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NyZWQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsaW1pdHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtydWxlc2V0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c2V0dXAuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuJiM0MztcbiYjNDM7XHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChmZCwgRk1PREVfQ0FOX1JFQUQpO1xuJiM0MztcdGlmIChJU19FUlIocnVsZXNldCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihydWxlc2V0KTtcbiYjNDM7XG4mIzQzO1x0cG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQgPSAoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICopcnVsZXNldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaG9va19wb2xpY3lfa3B0cl9wdXQodW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9XG4mIzQzO1x0XHQoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktXHUwMDNlbGFuZGxvY2sucnVsZXNldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXkgYmUgY2FsbGVkIGZyb20gYSBCUEYgb2JqZWN0IGRlc3RydWN0b3IgdGhhdCBjYW5ub3Qgc2xlZXAsXG4mIzQzO1x0ICogd2hlcmVhcyBkcm9wcGluZyB0aGUgbGFzdCBydWxlc2V0IHJlZmVyZW5jZSBmcmVlcyBpdCBhbmQgbWF5XG4mIzQzO1x0ICogc2xlZXA6IGFsd2F5cyBkZWZlciB0aGUgZnJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChydWxlc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ2hhcmdpbmcgc2NvcGUgZm9yIHRoZSBCUEYtZHJpdmVuIGRvbWFpbiBhbGxvY2F0aW9uczogcm9vdCwgaS5lLiBub2JvZHkuICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7XHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSxcbiYjNDM7XHRcdFx0XHRcdCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tXHUwMDNlY3JlZCk7XG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQgPVxuJiM0MztcdFx0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICopcG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQ7XG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIHJlc3RyaWN0aW9uO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICpvbGRfbWVtY2c7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTYW1lIGZsYWdzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMiksIGV4Y2VwdFxuJiM0MztcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkM6IHRoZSByZXN0cmljdGlvbiB0YXJnZXRzIHRoZVxuJiM0MztcdCAqIGV4ZWN1dGlvbiwgbm90IHRoZSBjYWxsaW5nIHRocmVhZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKChmbGFncyB8IExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNKSAhPVxuJiM0MztcdCAgICBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX0JJTlBSTSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBkb21haW4gY29uZmluZXMgdGhlIGV4ZWN1dGlvbiBvbiBiZWhhbGYgb2YgdGhlIEJQRlxuJiM0MztcdCAqIHByb2dyYW0sIG5vdCBvZiB0aGUgbWVkaWF0ZWQgdGFzazogZG8gbm90IGNoYXJnZSB0aGUgdGFzayYjMzk7c1xuJiM0MztcdCAqIG1lbWNnIGZvciBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKGdldF9icGZfbWVtY2coKSk7XG4mIzQzO1x0ZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZyZXN0cmljdGlvbik7XG4mIzQzO1x0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN0YWdlcyB0aGUgcmVzdHJpY3Rpb24gdW50aWwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZiB0aGVcbiYjNDM7XHQgKiBleGVjdXRpb24sIHJlcGxhY2luZyAoYW5kIHJlbGVhc2luZykgYW55IHByZXZpb3VzbHkgc3RhZ2VkXG4mIzQzO1x0ICogb25lLiAgTm90aGluZyBpcyBlbmZvcmNlZCB5ZXQ6IGFuIGV4ZWN1dGlvbiB0aGF0IGZhaWxzIGJlZm9yZVxuJiM0MztcdCAqIGNvbW1pdHRpbmcgaXRzIGNyZWRlbnRpYWxzIGRyb3BzIHRoZSBzdGFnZWQgcmVzdHJpY3Rpb24gaW5cbiYjNDM7XHQgKiBob29rX2NyZWRfZnJlZSgpIHdpdGggbm8gZWZmZWN0IG9uIHRoZSBjYWxsaW5nIHRhc2suXG4mIzQzO1x0ICovXG4mIzQzO1x0bGFuZGxvY2tfcHV0X3J1bGVzZXQoYnBybV9sbGNyZWQtXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4mIzQzO1x0YnBybV9sbGNyZWQtXHUwMDNlc3RhZ2VkID0gcmVzdHJpY3Rpb247XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tXHUwMDNlY3JlZCk7XG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIHJlc3RyaWN0aW9uO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZC5kb21haW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJlc3RyaWN0aW9uID0gYnBybV9sbGNyZWQtXHUwMDNlc3RhZ2VkO1xuJiM0MztcdGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4mIzQzO1xuJiM0MztcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGJwcm1fbGxjcmVkLCBcdTAwMjZyZXN0cmljdGlvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGxhbmRsb2NrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuJiM0MztcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKHBvbGljeV9rcHRyX3B1dCwgaG9va19wb2xpY3lfa3B0cl9wdXQpLFxuJiM0MztcdExTTV9IT09LX0lOSVQoYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyLCBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0ciksXG4mIzQzO1x0TFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHNlY3VyaXR5X2FkZF9ob29rcyhsYW5kbG9ja19ob29rcywgQVJSQVlfU0laRShsYW5kbG9ja19ob29rcyksXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmxhbmRsb2NrX2xzbWlkKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5oIGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lNTc3MjllNmE1NjQ0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuaFxuQEAgLTAsMCAmIzQzOzEsMjEgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rc1xuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxuJiM0MzsjZGVmaW5lIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9MU01cbiYjNDM7X19pbml0IHZvaWQgbGFuZGxvY2tfYWRkX2JwZl9ob29rcyh2b2lkKTtcbiYjNDM7I2Vsc2UgLyogQ09ORklHX0JQRl9MU00gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSCAqL1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xuaW5kZXggY2M0MTlkZTc1Y2Q2Yi4uZWZiZmQwYzIwNDc1MyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jXG5AQCAtOCwxNCAmIzQzOzgsMTE0IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sYW5kbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtjcmVkLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZG9tYWluLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtydWxlc2V0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzZXR1cC5oXCYjMzQ7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZSBhIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb25cbiYjNDM7ICpcbiYjNDM7ICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3Q6IHByb3ZpZGVzIHRoZSBwYXJlbnQgZG9tYWluIGFuZFxuJiM0MzsgKiAgICAgICAgICB0aGUgcHJldmlvdXMgbG9nIGNvbmZpZ3VyYXRpb24uICBOb3QgbW9kaWZpZWQuXG4mIzQzOyAqIEBydWxlc2V0OiBSdWxlc2V0IHRvIGVuZm9yY2UsIG9yIE5VTEwgZm9yIGEgbG9nLWNvbmZpZ3VyYXRpb24tb25seSBjaGFuZ2UuXG4mIzQzOyAqIEBmbGFnczogbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4mIzQzOyAqICAgICAgICAgdmFsaWRhdGluZyB0aGVtIGFnYWluc3QgdGhlIHNldCBvZiBmbGFncyBpdCBzdXBwb3J0cy5cbiYjNDM7ICogQHJlc3RyaWN0aW9uOiBDb21wdXRlZCByZXN0cmljdGlvbi4gIE9uIHN1Y2Nlc3MsIGhvbGRzIGEgcmVmZXJlbmNlIG9uXG4mIzQzOyAqICAgICAgICAgICAgICAgQHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiAoaWYgYW55KSwgd2hpY2hcbiYjNDM7ICogICAgICAgICAgICAgICBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpIHRyYW5zZmVycyB0byB0aGUgcmVzdHJpY3RlZFxuJiM0MzsgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmVzdHJpY3Rpb24gYnVpbGRzIG9uIEBsbGNyZWQmIzM5O3MgY3VycmVudCBzdGF0ZTogdGhlIGNhbGxlciBtdXN0IGFwcGx5XG4mIzQzOyAqIGl0IHRvIChvciBzdGFnZSBpdCBmb3IpIHRoZXNlIHNhbWUgY3JlZGVudGlhbHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKFxuJiM0MztcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQsIGNvbnN0IHUzMiBmbGFncyxcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHQvKiBUcmFuc2xhdGVzIFwmIzM0O29mZlwmIzM0OyBhbmQgXCYjMzQ7b25cJiMzNDsgZmxhZ3MgdG8gYm9vbGVhbnMuICovXG4mIzQzO1x0Y29uc3QgYm9vbCBsb2dfc2FtZV9leGVjID1cbiYjNDM7XHRcdCEoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NBTUVfRVhFQ19PRkYpO1xuJiM0MztcdGNvbnN0IGJvb2wgbG9nX25ld19leGVjID1cbiYjNDM7XHRcdCEhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XG4mIzQzO1x0Y29uc3QgYm9vbCBsb2dfc3ViZG9tYWlucyA9XG4mIzQzO1x0XHQhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XG4mIzQzO1x0Y29uc3QgYm9vbCBwcmV2X2xvZ19zdWJkb21haW5zID0gIWxsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7XG4mIzQzO1x0KnJlc3RyaWN0aW9uID0gKHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbil7fTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHRyZXN0cmljdGlvbi1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxuJiM0MztcdFx0XHRcdFx0ICAhbG9nX3N1YmRvbWFpbnM7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKCFydWxlc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IGxhbmRsb2NrX21lcmdlX3J1bGVzZXQobGxjcmVkLVx1MDAzZWRvbWFpbiwgcnVsZXNldCk7XG4mIzQzO1x0aWYgKElTX0VSUihyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pKSB7XG4mIzQzO1x0XHRjb25zdCBpbnQgZXJyID0gUFRSX0VSUihyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pO1xuJiM0MztcbiYjNDM7XHRcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHRyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zYW1lX2V4ZWMgPSBsb2dfc2FtZV9leGVjO1xuJiM0MztcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbi1cdTAwM2VoaWVyYXJjaHktXHUwMDNlbG9nX25ld19leGVjID0gbG9nX25ld19leGVjO1xuJiM0MztcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXHUwMDI2XHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxuJiM0MztcdFx0cmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfc3RhdHVzID1cbiYjNDM7XHRcdFx0TEFORExPQ0tfTE9HX0RJU0FCTEVEO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovXG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24gLSBFbmZvcmNlIGEgY29tcHV0ZWQgcmVzdHJpY3Rpb24gb24gY3JlZGVudGlhbHNcbiYjNDM7ICpcbiYjNDM7ICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXJcbiYjNDM7ICogICAgICAgICAgKHByZXBhcmVkIGFuZCBub3QgeWV0IGNvbW1pdHRlZCkuXG4mIzQzOyAqIEByZXN0cmljdGlvbjogUmVzdHJpY3Rpb24gY29tcHV0ZWQgYnkgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpXG4mIzQzOyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpc1xuJiM0MzsgKiAgICAgICAgICAgICAgIHRyYW5zZmVycmVkIHRvIEBsbGNyZWQuXG4mIzQzOyAqXG4mIzQzOyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnRcbiYjNDM7ICogb2YgZmFpbHVyZSwgZS5nLiBhbiBleGVjIHBvaW50IG9mIG5vIHJldHVybi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHRsbGNyZWQtXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmID0gcmVzdHJpY3Rpb24tXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovXG4mIzQzO1xuJiM0MztcdGlmICghcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBSZXBsYWNlcyB0aGUgb2xkIGRvbWFpbi4gKi9cbiYjNDM7XHRsYW5kbG9ja19wdXRfcnVsZXNldChsbGNyZWQtXHUwMDNlZG9tYWluKTtcbiYjNDM7XHRsbGNyZWQtXHUwMDNlZG9tYWluID0gcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluO1xuJiM0MztcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IE5VTEw7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0FVRElUXG4mIzQzO1x0bGxjcmVkLVx1MDAzZWRvbWFpbl9leGVjIHw9IEJJVChsbGNyZWQtXHUwMDNlZG9tYWluLVx1MDAzZW51bV9sYXllcnMgLSAxKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3Qgb2xkKVxuIHtcbkBAIC0yNCw2ICYjNDM7MTI0LDEyIEBAIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFxuIFx0bGFuZGxvY2tfZ2V0X3J1bGVzZXQob2xkX2xsY3JlZC1cdTAwM2Vkb21haW4pO1xuIFx0KmxhbmRsb2NrX2NyZWQobmV3KSA9ICpvbGRfbGxjcmVkO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0LyogT25seSBicHJtIGNyZWRlbnRpYWxzIG93biBhIHN0YWdlZCByZXN0cmljdGlvbjogbmV2ZXIgY29waWVkLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShsYW5kbG9ja19jcmVkKG5ldyktXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4mIzQzO1x0bGFuZGxvY2tfY3JlZChuZXcpLVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuIH1cbiBcbiBzdGF0aWMgaW50IGhvb2tfY3JlZF9wcmVwYXJlKHN0cnVjdCBjcmVkICpjb25zdCBuZXcsXG5AQCAtMzUsMTAgJiM0MzsxNDEsMTQgQEAgc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjb25zdCBjcmVkKVxuIHtcbi1cdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBkb20gPSBsYW5kbG9ja19jcmVkKGNyZWQpLVx1MDAzZWRvbWFpbjtcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkID0gbGFuZGxvY2tfY3JlZChjcmVkKTtcbiYjNDM7XG4mIzQzO1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZWRvbWFpbik7XG4gXG4tXHRpZiAoZG9tKVxuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChkb20pO1xuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9MU01cbiYjNDM7XHQvKiBSZWxlYXNlcyBhIHJlc3RyaWN0aW9uIHN0YWdlZCBmb3IgYW4gYWJvcnRlZCBleGVjdXRpb24uICovXG4mIzQzO1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZXN0YWdlZC5kb21haW4pO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BVURJVFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaFxuaW5kZXggZjI4N2M1NmI1ZmQ0Yi4uNzRmOGM5ODA4ZGM0YyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXG5AQCAtMjAsNiAmIzQzOzIwLDMxIEBAXG4gI2luY2x1ZGUgXCYjMzQ7cnVsZXNldC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2V0dXAuaFwmIzM0O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZWQgY3JlZGVudGlhbCByZXN0cmljdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmVzdWx0IG9mIGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKTogdGhlIG5ldyBzdGF0ZSB0aGF0XG4mIzQzOyAqIGVuZm9yY2luZyBhIHJ1bGVzZXQgd2l0aCBhIHNldCBvZiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzXG4mIzQzOyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXNcbiYjNDM7ICogZW5mb3JjZWQgd2l0aCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpLCBlaXRoZXIgcmlnaHQgYXdheVxuJiM0MzsgKiAobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSkgb3IgYWZ0ZXIgYSBzdGFnaW5nIHBlcmlvZCAocmVzdHJpY3Rpb25cbiYjNDM7ICogb2YgYW4gZXhlY3V0aW9uKS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiB7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQGRvbWFpbjogTmV3IGRvbWFpbiB0byBlbmZvcmNlLCBvd25pbmcgYSByZWZlcmVuY2UuICBOVUxMIGlmIHRoZVxuJiM0MztcdCAqIHJlc3RyaWN0aW9uIG9ubHkgY2FycmllcyBhIGxvZyBjb25maWd1cmF0aW9uIGNoYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqZG9tYWluO1xuJiM0MzsjaWZkZWYgQ09ORklHX0FVRElUXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQGxvZ19zdWJkb21haW5zX29mZjogTmV3IHZhbHVlIG9mIHRoZSBjcmVkZW50aWFscyYjMzk7XG4mIzQzO1x0ICogQGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkubG9nX3N1YmRvbWFpbnNfb2ZmLlxuJiM0MztcdCAqL1xuJiM0MztcdHU4IGxvZ19zdWJkb21haW5zX29mZiA6IDE7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgLSBDcmVkZW50aWFsIHNlY3VyaXR5IGJsb2JcbiAgKlxuQEAgLTM1LDYgJiM0Mzs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7XG4gXHQgKi9cbiBcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBzdGFnZWQ6IFJlc3RyaWN0aW9uIHN0YWdlZCBieSB0aGUgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgaG9vayxcbiYjNDM7XHQgKiBvd25pbmcgaXRzIGRvbWFpbiByZWZlcmVuY2UgYW5kIGFwcGxpZWQgYXQgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZlxuJiM0MztcdCAqIHRoZSBleGVjdXRpb24gKGJwcm1fY29tbWl0dGluZ19jcmVkcykuICBPbmx5IGV2ZXIgc2V0IG9uIHRoZVxuJiM0MztcdCAqIGNyZWRlbnRpYWxzIHByZXBhcmVkIGZvciBhbiBleGVjdXRpb24sIGJldHdlZW4gdGhlIHN0YWdpbmcgYW5kXG4mIzQzO1x0ICogZWl0aGVyIHRoZSBhcHBsaWNhdGlvbiBvciB0aGUgcmVsZWFzZSBvZiB0aGUgYWJvcnRlZCBjcmVkZW50aWFscztcbiYjNDM7XHQgKiBjb21taXR0ZWQgdGFzayBjcmVkZW50aWFscyBuZXZlciBjYXJyeSBhIHN0YWdlZCByZXN0cmljdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gc3RhZ2VkO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19BVURJVFxuIFx0LyoqXG4gXHQgKiBAZG9tYWluX2V4ZWM6IEJpdG1hc2sgaWRlbnRpZnlpbmcgdGhlIGRvbWFpbiBsYXllcnMgdGhhdCB3ZXJlIGVuZm9yY2VkIGJ5XG5AQCAtNzUsNiAmIzQzOzExMiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGFuZGxvY2tfY3JlZF9jb3B5KHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpkc3QsXG4gXHQqZHN0ID0gKnNyYztcbiBcbiBcdGxhbmRsb2NrX2dldF9ydWxlc2V0KHNyYy1cdTAwM2Vkb21haW4pO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0LyogT25seSBicHJtIGNyZWRlbnRpYWxzIG93biBhIHN0YWdlZCByZXN0cmljdGlvbjogbmV2ZXIgY29waWVkLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShzcmMtXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4mIzQzO1x0ZHN0LVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfY3VycmVudF9kb21haW4odm9pZClcbkBAIC0xNTMsNiAmIzQzOzE5NiwxNCBAQCBsYW5kbG9ja19nZXRfYXBwbGljYWJsZV9zdWJqZWN0KGNvbnN0IHN0cnVjdCBjcmVkICpjb25zdCBjcmVkLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztpbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxuJiM0MztcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4mIzQzO1xuJiM0Mzt2b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4mIzQzO1xuIF9faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9jcmVkX2hvb2tzKHZvaWQpO1xuIFxuICNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQ1JFRF9IICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmggYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxuaW5kZXggMDhkNWYyZjZkMzIxYS4uMGJlZGZlNjUwZWEwNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxuQEAgLTM3LDYgJiM0MzszNywxMCBAQFxuICNkZWZpbmUgTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGXHRMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DXG4gI2RlZmluZSBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEZcdCgoTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGIFx1MDAzY1x1MDAzYyAxKSAtIDEpXG4gXG4mIzQzOy8qIFN1YnNldCBvZiB0aGUgcmVzdHJpY3Qtc2VsZiBmbGFncyBhcHBsaWNhYmxlIHRvIGFuIGV4ZWN1dGlvbi4gKi9cbiYjNDM7I2RlZmluZSBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX0JJTlBSTSBcXFxuJiM0MztcdChMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEYgXHUwMDI2IH5MQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DKVxuJiM0MztcbiAvKiBjbGFuZy1mb3JtYXQgb24gKi9cbiBcbiAjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0xJTUlUU19IICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG5pbmRleCA0ZGQwOWVhMjJjODQ0Li4xNzZjNjI2ZjlmMTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcbkBAIC01MjAsNyAmIzQzOzUyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcnVsZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqY29uc3Qgd29yaylcbiBcdGZyZWVfcnVsZXNldChydWxlc2V0KTtcbiB9XG4gXG4tLyogT25seSBjYWxsZWQgYnkgaG9va19jcmVkX2ZyZWUoKS4gKi9cbiYjNDM7LyogRm9yIGNvbnRleHRzIHRoYXQgY2Fubm90IHNsZWVwLCBlLmcuIGhvb2tfY3JlZF9mcmVlKCkuICovXG4gdm9pZCBsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldClcbiB7XG4gXHRpZiAocnVsZXNldCBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnJ1bGVzZXQtXHUwMDNldXNhZ2UpKSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oXG5pbmRleCAwNDM3YWRmMTc0Mjg3Li5iNjVkMWMwN2UxOTJkIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmhcbkBAIC0yMjUsNiAmIzQzOzIyNSw5IEBAIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpcbiBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBwYXJlbnQsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCk7XG4gXG4mIzQzO3N0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgY29uc3QgZm1vZGVfdCBtb2RlKTtcbiYjNDM7XG4gY29uc3Qgc3RydWN0IGxhbmRsb2NrX3J1bGUgKlxuIGxhbmRsb2NrX2ZpbmRfcnVsZShjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCxcbiBcdFx0ICAgY29uc3Qgc3RydWN0IGxhbmRsb2NrX2lkIGlkKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuY1xuaW5kZXggNDdkYWMxNzM2ZjEwMC4uM2I3ZTE4ZWRhZGZiYyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sc20uaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGYuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NvbW1vbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Y3JlZC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZXJyYXRhLmhcJiMzNDtcbkBAIC02OCw2ICYjNDM7NjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBsYW5kbG9ja19pbml0KHZvaWQpXG4gXHRsYW5kbG9ja19hZGRfdGFza19ob29rcygpO1xuIFx0bGFuZGxvY2tfYWRkX2ZzX2hvb2tzKCk7XG4gXHRsYW5kbG9ja19hZGRfbmV0X2hvb2tzKCk7XG4mIzQzO1x0bGFuZGxvY2tfYWRkX2JwZl9ob29rcygpO1xuIFx0bGFuZGxvY2tfaW5pdF9pZCgpO1xuIFx0bGFuZGxvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFx0cHJfaW5mbyhcJiMzNDtVcCBhbmQgcnVubmluZy5cXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmMgYi9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jXG5pbmRleCAzNmIwMjg5MmM2MmY1Li44OTk2MDFhZjdjNGUxIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xuQEAgLTI5Myw4ICYjNDM7MjkzLDggQEAgU1lTQ0FMTF9ERUZJTkUzKGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LFxuICAqIFJldHVybnMgYW4gb3duZWQgcnVsZXNldCBmcm9tIGEgRkQuIEl0IGlzIHRodXMgbmVlZGVkIHRvIGNhbGxcbiAgKiBsYW5kbG9ja19wdXRfcnVsZXNldCgpIG9uIHRoZSByZXR1cm4gdmFsdWUuXG4gICovXG4tc3RhdGljIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpnZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbi1cdFx0XHRcdFx0XHQgICAgY29uc3QgZm1vZGVfdCBtb2RlKVxuJiM0MztzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChjb25zdCBpbnQgZmQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSlcbiB7XG4gXHRDTEFTUyhmZCwgcnVsZXNldF9mKShmZCk7XG4gXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcbkBAIC00NzYsNyAmIzQzOzQ3Niw3IEBAIFNZU0NBTExfREVGSU5FNChsYW5kbG9ja19hZGRfcnVsZSwgY29uc3QgaW50LCBydWxlc2V0X2ZkLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdHJ1bGVzZXQgPSBnZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQsIEZNT0RFX0NBTl9XUklURSk7XG4mIzQzO1x0cnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1dSSVRFKTtcbiBcdGlmIChJU19FUlIocnVsZXNldCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xuIFxuQEAgLTUyOCw5ICYjNDM7NTI4LDggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXG4ge1xuIFx0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQgX19mcmVlKGxhbmRsb2NrX3B1dF9ydWxlc2V0KSA9IE5VTEw7XG4gXHRzdHJ1Y3QgY3JlZCAqbmV3X2NyZWQ7XG4tXHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqbmV3X2xsY3JlZDtcbi1cdGJvb2wgX19tYXliZV91bnVzZWQgbG9nX3NhbWVfZXhlYywgbG9nX25ld19leGVjLCBsb2dfc3ViZG9tYWlucyxcbi1cdFx0cHJldl9sb2dfc3ViZG9tYWlucztcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGlmICghaXNfaW5pdGlhbGl6ZWQoKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTU0NywxMyAmIzQzOzU0Niw2IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIFx0ICAgIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHQvKiBUcmFuc2xhdGVzIFwmIzM0O29mZlwmIzM0OyBmbGFnIHRvIGJvb2xlYW4uICovXG4tXHRsb2dfc2FtZV9leGVjID0gIShmbGFncyBcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU0FNRV9FWEVDX09GRik7XG4tXHQvKiBUcmFuc2xhdGVzIFwmIzM0O29uXCYjMzQ7IGZsYWcgdG8gYm9vbGVhbi4gKi9cbi1cdGxvZ19uZXdfZXhlYyA9ICEhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XG4tXHQvKiBUcmFuc2xhdGVzIFwmIzM0O29mZlwmIzM0OyBmbGFnIHRvIGJvb2xlYW4uICovXG4tXHRsb2dfc3ViZG9tYWlucyA9ICEoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NVQkRPTUFJTlNfT0ZGKTtcbi1cbiBcdC8qXG4gXHQgKiBJdCBpcyBhbGxvd2VkIHRvIHNldCBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiB3aXRoXG4gXHQgKiAtMSBhcyBydWxlc2V0X2ZkLCBvcHRpb25hbGx5IGNvbWJpbmVkIHdpdGhcbkBAIC01NjQsNyAmIzQzOzU1Niw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIFx0ICAgICAgKGZsYWdzIFx1MDAyNiB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgPT1cbiBcdFx0ICAgICAgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpKSB7XG4gXHRcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdFx0cnVsZXNldCA9IGdldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1JFQUQpO1xuJiM0MztcdFx0cnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIEZNT0RFX0NBTl9SRUFEKTtcbiBcdFx0aWYgKElTX0VSUihydWxlc2V0KSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihydWxlc2V0KTtcbiBcdH1cbkBAIC01NzQsNTMgJiM0Mzs1NjcsMjggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXG4gXHRpZiAoIW5ld19jcmVkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG5ld19sbGNyZWQgPSBsYW5kbG9ja19jcmVkKG5ld19jcmVkKTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRwcmV2X2xvZ19zdWJkb21haW5zID0gIW5ld19sbGNyZWQtXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmO1xuLVx0bmV3X2xsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxuLVx0XHRcdFx0XHQgIWxvZ19zdWJkb21haW5zO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbi1cbiBcdC8qXG4gXHQgKiBUaGUgb25seSBjYXNlIHdoZW4gYSBydWxlc2V0IG1heSBub3QgYmUgc2V0IGlzIGlmXG4gXHQgKiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiBpcyBzZXQgKG9wdGlvbmFsbHkgd2l0aFxuIFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZFxuIFx0ICogb3B0aW1pemUgdGhpcyBjYXNlIGJ5IG5vdCBjYWxsaW5nIGNvbW1pdF9jcmVkcygpIGlmIHRoaXMgZmxhZyB3YXNcbiBcdCAqIGFscmVhZHkgc2V0LCBidXQgaXQgaXMgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmQgbWFuaXB1bGF0aW5nXG4mIzQzO1x0ICogdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYmVjYXVzZSB0aGV5IGFyZSBkZWRpY2F0ZWQgcGVyIHRocmVhZC5cbiBcdCAqL1xuLVx0aWYgKHJ1bGVzZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmRcbi1cdFx0ICogbWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGJlY2F1c2UgdGhleSBhcmVcbi1cdFx0ICogZGVkaWNhdGVkIHBlciB0aHJlYWQuXG4tXHRcdCAqL1xuLVx0XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgbmV3X2RvbSA9XG4tXHRcdFx0bGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbiwgcnVsZXNldCk7XG4tXHRcdGlmIChJU19FUlIobmV3X2RvbSkpIHtcbi1cdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIobmV3X2RvbSk7XG4tXHRcdH1cbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zYW1lX2V4ZWMgPSBsb2dfc2FtZV9leGVjO1xuLVx0XHRuZXdfZG9tLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfbmV3X2V4ZWMgPSBsb2dfbmV3X2V4ZWM7XG4tXHRcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXHUwMDI2XHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxuLVx0XHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zdGF0dXMgPSBMQU5ETE9DS19MT0dfRElTQUJMRUQ7XG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuLVxuLVx0XHQvKiBSZXBsYWNlcyB0aGUgb2xkIChwcmVwYXJlZCkgZG9tYWluLiAqL1xuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbik7XG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluID0gbmV3X2RvbTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKG5ld19kb20tXHUwMDNlbnVtX2xheWVycyAtIDEpO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7XHRlcnIgPSBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBydWxlc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgZmxhZ3MsIFx1MDAyNnJlc3RyaWN0aW9uKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBcdTAwMjZyZXN0cmljdGlvbik7XG4mIzQzO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DKSB7XG4tXHRcdGNvbnN0IGludCBlcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoXG4tXHRcdFx0Y3VycmVudF9jcmVkKCksIG5ld19jcmVkKTtcbiYjNDM7XHRcdGVyciA9IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcyhjdXJyZW50X2NyZWQoKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRuZXdfY3JlZCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZTlkOGM5NDkyYmRiMiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01NDQxLDYgJiM0Mzs1NDQxLDExMiBAQCBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludCBjYXApXG4gXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhicGZfdG9rZW5fY2FwYWJsZSwgdG9rZW4sIGNhcCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCgpIC0gR2V0IGFuIExTTSBwb2xpY3kgb2JqZWN0IGZyb20gYSBmZFxuJiM0MzsgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gYXNrZWQgdG8gaW50ZXJwcmV0IEBmZFxuJiM0MzsgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciByZWZlcnJpbmcgdG8gYSBwb2xpY3kgb2JqZWN0LCByZXNvbHZlZCBpbiB0aGVcbiYjNDM7ICogICAgICBjYWxsaW5nIHRhc2smIzM5O3MgZmlsZSBkZXNjcmlwdG9yIHRhYmxlXG4mIzQzOyAqIEBwb2xpY3k6IHJlY2VpdmVzIHRoZSByZWZlcmVuY2VkIHBvbGljeSBvYmplY3QgaW4gdGhlIG1lbWJlciBvZiB0aGVcbiYjNDM7ICogICAgICAgICAgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkXG4mIzQzOyAqXG4mIzQzOyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHRyYW5zbGF0ZSBAZmQgaW50byBhIHJlZmVyZW5jZVxuJiM0MzsgKiBjb3VudGVkIHBvbGljeSBvYmplY3QuICBUaGUgY2FsbGVyIG11c3Qgbm90IGRlcmVmZXJlbmNlIHRoZVxuJiM0MzsgKiByZXR1cm5lZCBoYW5kbGUsIG11c3Qgb25seSBoYW5kIGl0IGJhY2sgdG8gdGhlIHNhbWUgTFNNLCBlLmcuXG4mIzQzOyAqIHRocm91Z2ggc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCksIGFuZCBtdXN0IHJlbGVhc2UgaXRcbiYjNDM7ICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2ZcbiYjNDM7ICogdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpcyBjYWxsZWQuICBUaGUgaG9vayBpcyBvbmx5IGNhbGxlZFxuJiM0MzsgKiBmcm9tIGEgY29udGV4dCB0aGF0IG1heSBzbGVlcC5cbiYjNDM7ICpcbiYjNDM7ICogQW4gaW1wbGVtZW50YXRpb24gbXVzdCBmaWxsIGl0cyBvd24gbWVtYmVyIG9mIEBwb2xpY3kgd2l0aCBhXG4mIzQzOyAqIHJlZmVyZW5jZSB0aGF0IHJlbWFpbnMgdmFsaWQgdW50aWwgaXQgaXMgcmVsZWFzZWQgdGhyb3VnaCB0aGVcbiYjNDM7ICogcG9saWN5X2twdHJfcHV0IGhvb2ssIGFuZCBtdXN0IG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgQGZkIGJleW9uZFxuJiM0MzsgKiB3aGF0IGl0cyBvd24gdXNlcnNwYWNlIEFQSSBjcmVhdGVkIGl0IHdpdGguXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIEBwb2xpY3kgaG9sZHMgYSByZWZlcmVuY2UgY291bnRlZCBwb2xpY3lcbiYjNDM7ICogb2JqZWN0LCAtRU9QTk9UU1VQUCBpZiB0aGUgTFNNIGRvZXMgbm90IGltcGxlbWVudCB0aGUgaG9vaywgbmVnYXRpdmVcbiYjNDM7ICogdmFsdWVzIG9uIG90aGVyIGZhaWx1cmVzLlxuJiM0MzsgKi9cbiYjNDM7aW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsXG4mIzQzO1x0XHRcdFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4mIzQzO1xuJiM0MztcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBwb2xpY3lfa3B0cl9mcm9tX2ZkKSB7XG4mIzQzO1x0XHRpZiAoc2NhbGwtXHUwMDNlaGwtXHUwMDNlbHNtaWQtXHUwMDNlaWQgIT0gbHNtaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmV0dXJuIHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2sucG9saWN5X2twdHJfZnJvbV9mZChmZCwgcG9saWN5KTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIExTTV9SRVRfREVGQVVMVChwb2xpY3lfa3B0cl9mcm9tX2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpIC0gUHV0IGEgcmVmZXJlbmNlIG9uIGFuIExTTSBwb2xpY3kgb2JqZWN0XG4mIzQzOyAqIEBsc21pZDogTFNNX0lEXyogdmFsdWUgb2YgdGhlIExTTSBvd25pbmcgQHBvbGljeVxuJiM0MzsgKiBAcG9saWN5OiB0aGUgcG9saWN5IG9iamVjdCwgaW4gdGhlIG1lbWJlciBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogICAgICAgICAgQGxzbWlkXG4mIzQzOyAqXG4mIzQzOyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgcHJldmlvdXNseSBvYnRhaW5lZCB3aXRoXG4mIzQzOyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb25cbiYjNDM7ICogb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpcyBjYWxsZWQsIGFuZCBAcG9saWN5IG11c3QgaGF2ZVxuJiM0MzsgKiBiZWVuIG9idGFpbmVkIGZyb20gdGhhdCBzYW1lIExTTS4gIEFuIGltcGxlbWVudGF0aW9uIG11c3Qgc3VwcG9ydFxuJiM0MzsgKiBiZWluZyBjYWxsZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBjYW5ub3Qgc2xlZXA6IHRoZSByZWxlYXNlIG9mIEJQRlxuJiM0MzsgKiBtYW5hZ2VkIHJlZmVyZW5jZXMgbWF5IGJlIGRyaXZlbiBmcm9tIG9iamVjdCBkZXN0cnVjdG9ycy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbiYjNDM7XG4mIzQzO1x0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX3B1dCkge1xuJiM0MztcdFx0aWYgKHNjYWxsLVx1MDAzZWhsLVx1MDAzZWxzbWlkLVx1MDAzZWlkICE9IGxzbWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2sucG9saWN5X2twdHJfcHV0KHBvbGljeSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdC8qIEEgaGVsZCByZWZlcmVuY2UgaW1wbGllcyB0aGUgbWF0Y2hpbmcgTFNNIGltcGxlbWVudHMgdGhlIGhvb2suICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgLSBFbmZvcmNlIGEgcG9saWN5IG9uIGV4ZWMgY3JlZGVudGlhbHNcbiYjNDM7ICogQGxzbWlkOiBMU01fSURfKiB2YWx1ZSBvZiB0aGUgTFNNIG93bmluZyBAcG9saWN5XG4mIzQzOyAqIEBicHJtOiBleGVjdXRpb24gY29udGV4dCBwcm92aWRpbmcgdGhlIHByZXBhcmVkIGNyZWRlbnRpYWxzIHRvIHJlc3RyaWN0XG4mIzQzOyAqIEBwb2xpY3k6IHRoZSBwb2xpY3kgb2JqZWN0IHRvIGVuZm9yY2UsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTVxuJiM0MzsgKiAgICAgICAgICBpZGVudGlmaWVkIGJ5IEBsc21pZFxuJiM0MzsgKiBAZmxhZ3M6IExTTS1zcGVjaWZpYyBlbmZvcmNlbWVudCBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBBc2sgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCB0byByZXN0cmljdCB0aGUgY3JlZGVudGlhbHNcbiYjNDM7ICogcHJlcGFyZWQgaW4gQGJwcm0gd2l0aCBAcG9saWN5LCBzbyB0aGF0IHRoZSBleGVjdXRlZCB0YXNrIHN0YXJ0c1xuJiM0MzsgKiBjb25maW5lZCBieSBpdC4gIEBwb2xpY3kgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgZnJvbSB0aGUgc2FtZSBMU01cbiYjNDM7ICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCk7IHRoZSBob29rIGJvcnJvd3MgdGhlXG4mIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciByZW1haW5zIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgaXQuXG4mIzQzOyAqIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpc1xuJiM0MzsgKiBjYWxsZWQ6IGFuIExTTSBuZXZlciByZWNlaXZlcyBhIHBvbGljeSBvYmplY3QgbWVhbnQgZm9yIGFub3RoZXIgTFNNLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGhvb2sgbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYW4gZXhlYyBzZWN1cml0eSBjb250ZXh0IHdoZXJlXG4mIzQzOyAqIEBicHJtJiMzOTtzIGNyZWRlbnRpYWxzIGFyZSBwcmVwYXJlZCBidXQgbm90IHlldCBjb21taXR0ZWQsIGkuZS4gZnJvbSBhXG4mIzQzOyAqIGJwcm1fY3JlZHNfZm9yX2V4ZWMoKSBvciBicHJtX2NyZWRzX2Zyb21fZmlsZSgpIGhvb2suXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBAcG9saWN5IGNvbXBvc2VzIHdpdGggcmVzdHJpY3Rpb25zIHRoZSBjcmVkZW50aWFscyBhbHJlYWR5XG4mIzQzOyAqIGNhcnJ5IGlzIGRlZmluZWQgYnkgdGhlIGltcGxlbWVudGluZyBMU00sIGFzIGlzIHRoZSBtZWFuaW5nIG9mXG4mIzQzOyAqIEBmbGFncywgdW5zdXBwb3J0ZWQgdmFsdWVzIG9mIHdoaWNoIGl0IG11c3QgcmVqZWN0IHdpdGggLUVJTlZBTC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIExTTSBkb2VzIG5vdFxuJiM0MzsgKiBpbXBsZW1lbnQgdGhlIGhvb2ssIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBmYWlsdXJlcy5cbiYjNDM7ICovXG4mIzQzO2ludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbiYjNDM7XG4mIzQzO1x0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cikge1xuJiM0MztcdFx0aWYgKHNjYWxsLVx1MDAzZWhsLVx1MDAzZWxzbWlkLVx1MDAzZWlkICE9IGxzbWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJldHVybiBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihicHJtLCBwb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTFNNX1JFVF9ERUZBVUxUKGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2VjdXJpdHlfYnBmX21hcF9mcmVlKCkgLSBGcmVlIGEgYnBmIG1hcCYjMzk7cyBMU00gYmxvYlxuICAqIEBtYXA6IGJwZiBtYXBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuaW5kZXggZWE3MDQ0ZjMwYWRjMy4uMmZhNzM0NDk3NDYxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbkBAIC0xMjAsNiAmIzQzOzEyMCw3IEBAIENPTkZJR19TQU1QTEVTPXlcbiBDT05GSUdfU0FNUExFX0xJVkVQQVRDSD1tXG4gQ09ORklHX1NFQ1VSSVRZPXlcbiBDT05GSUdfU0VDVVJJVFlGUz15XG4mIzQzO0NPTkZJR19TRUNVUklUWV9MQU5ETE9DSz15XG4gQ09ORklHX1NZTl9DT09LSUVTPXlcbiBDT05GSUdfVEVTVF9CUEY9bVxuIENPTkZJR19VRE1BQlVGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XG5pbmRleCA1MjNlMGQyOWJiZDQzLi4yYzRkODU3ZjY5ZjU0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjRcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XG5AQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBDT05GSUdfTEVHQUNZX1ZTWVNDQUxMX05PTkU9eVxuIENPTkZJR19MT0dfQlVGX1NISUZUPTIxXG4gQ09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0wXG4gQ09ORklHX0xPR089eVxuLUNPTkZJR19MU009XCYjMzQ7c2VsaW51eCxicGYsaW50ZWdyaXR5XCYjMzQ7XG4mIzQzO0NPTkZJR19MU009XCYjMzQ7bGFuZGxvY2ssc2VsaW51eCxicGYsaW50ZWdyaXR5XCYjMzQ7XG4gQ09ORklHX01BQ19QQVJUSVRJT049eVxuIENPTkZJR19NQUdJQ19TWVNSUT15XG4gQ09ORklHX01DT1JFMj15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jOTE5MjlmOThlODhlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jXG5AQCAtMCwwICYjNDM7MSwzMjkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXHUwMDNlICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sYW5kbG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3Muc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBGYWxsYmFja3MgZm9yIG9sZCBzeXN0ZW0gaGVhZGVycy4gKi9cbiYjNDM7I2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTlxuJiM0MzsjZGVmaW5lIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OICgxVSBcdTAwM2NcdTAwM2MgMSlcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xuJiM0MzsjZGVmaW5lIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgKDFVIFx1MDAzY1x1MDAzYyAzKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3J1bGVzZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC5oYW5kbGVkX2FjY2Vzc19mcyA9IExBTkRMT0NLX0FDQ0VTU19GU19XUklURV9GSUxFLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfbGFuZGxvY2tfY3JlYXRlX3J1bGVzZXQsIFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlc2V0X3Byb2dfc3RhdGUoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vub19ydWxlc2V0ID0gZmFsc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3RfZXJyID0gLTE7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3QyX2VyciA9IC0xO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWtmdW5jX2ZsYWdzID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vkb3VibGVfY2FsbCA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSdW5zIHRoZSBzeXNjYWxsIHByb2dyYW0gdGhhdCBhY3F1aXJlcyB0aGUgcnVsZXNldCBmcm9tXG4mIzQzOyAqIEBydWxlc2V0X2ZkLCBpbiB0aGUgcnVubmVyJiMzOTtzIGZkIHRhYmxlLCBhbmQgcGFya3MgaXQgaW4gdGhlIG1hcCBrcHRyXG4mIzQzOyAqIHNsb3QgZm9yIHRoZSBMU00gcHJvZ3JhbS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbG9hZF9ydWxlc2V0X2ludG9fbWFwKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MubG9hZF9ydWxlc2V0KSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9ydWxlc2V0X3J1blwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O2xvYWRfcnVsZXNldF9yZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWdvdF9udWxsX2Zvcl9iYWRfZmQsIFwmIzM0O2JhZF9mZF9udWxsXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRm9ya3MgYSBjaGlsZCB0aGF0IGV4ZWNzIFwmIzM0O3NoIC1jICYjMzk7XHUwMDNjc2hlbGxfY21kXHUwMDNlJiMzOTtcJiMzNDsuICBUaGUgbW9uaXRvcmVkIHBpZFxuJiM0MzsgKiBpcyBvbmx5IGtub3duLCBhbmQgY2FuIG9ubHkgYmUgcHVibGlzaGVkIHRvIHRoZSBCUEYgcHJvZ3JhbSwgb25jZVxuJiM0MzsgKiB0aGUgY2hpbGQgZXhpc3RzOiB0aGUgY2hpbGQgd2FpdHMgb24gYSBwaXBlIHVudGlsIHRoZSBwYXJlbnQgaGFzXG4mIzQzOyAqIHVwZGF0ZWQgaXQuICBSZXR1cm5zIHRoZSBjaGlsZCYjMzk7cyBleGl0IHN0YXR1cywgb3IgLTEgb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ1bl9leGVjX2NoaWxkKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsLFxuJiM0MztcdFx0XHQgIGJvb2wgbW9uaXRvcmVkLCBjb25zdCBjaGFyICpzaGVsbF9jbWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcGlwZV9mZHNbMl0sIHN0YXR1cztcbiYjNDM7XHRjaGFyIGJ1ZiA9IDA7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgXCYjMzQ7cGlwZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHBpZCA9IGZvcmsoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwmIzM0O2ZvcmtcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2Zkc1swXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0Y2hhciAqYXJndltdID0geyBcJiMzNDtzaFwmIzM0OywgXCYjMzQ7LWNcJiMzNDssIChjaGFyICopc2hlbGxfY21kLCBOVUxMIH07XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9mZHNbMV0pO1xuJiM0MztcdFx0cmVhZChwaXBlX2Zkc1swXSwgXHUwMDI2YnVmLCAxKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbiYjNDM7XHRcdGV4ZWN2KFwmIzM0Oy9iaW4vc2hcJiMzNDssIGFyZ3YpO1xuJiM0MztcdFx0ZXhpdCgxMjcpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShwaXBlX2Zkc1swXSk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IG1vbml0b3JlZCA/IHBpZCA6IDA7XG4mIzQzO1x0d3JpdGUocGlwZV9mZHNbMV0sIFx1MDAyNmJ1ZiwgMSk7XG4mIzQzO1x0Y2xvc2UocGlwZV9mZHNbMV0pO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcJiMzNDt3YWl0cGlkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcJiMzNDtjaGlsZF9leGl0ZWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFeGl0IGNvZGVzOiA0ID0gdW5leHBlY3RlZCB3cml0ZSBvdXRjb21lLCAwID0gZXZlcnl0aGluZyBhc1xuJiM0MzsgKiBleHBlY3RlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGZvcm1hdF9jaGlsZF9jbWQoY2hhciAqY21kLCBzaXplX3QgbGVuLCBib29sIGV4cGVjdF93cml0ZV9vayxcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBjaGFyICp0bXBfcGF0aClcbiYjNDM7e1xuJiM0MztcdGlmIChleHBlY3Rfd3JpdGVfb2spXG4mIzQzO1x0XHRzbnByaW50ZihjbWQsIGxlbiwgXCYjMzQ7ZWNobyB4IFx1MDAzZSAlcyB8fCBleGl0IDQ7IGV4aXQgMFwmIzM0OywgdG1wX3BhdGgpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNucHJpbnRmKGNtZCwgbGVuLFxuJiM0MztcdFx0XHQgXCYjMzQ7aWYgZWNobyB4IFx1MDAzZSAlcyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuIGV4aXQgNDsgZmk7IGV4aXQgMFwmIzM0OyxcbiYjNDM7XHRcdFx0IHRtcF9wYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9yZXN0cmljdF9iaW5wcm0odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsID0gTlVMTDtcbiYjNDM7XHRjaGFyIHRtcF9wYXRoW10gPSBcJiMzNDsvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRjaGFyIGNtZFsyNTZdO1xuJiM0MztcdGludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDtcbiYjNDM7XG4mIzQzO1x0dG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcJiMzNDtta3N0ZW1wXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRjbG9zZSh0bXBfZmQpO1xuJiM0MztcbiYjNDM7XHRydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTtcbiYjNDM7XHRpZiAocnVsZXNldF9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PU1lTKVxuJiM0MztcdFx0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdEFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCBcJiMzNDtsYW5kbG9ja19jcmVhdGVfcnVsZXNldFwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxpbms7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2VsID0gbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVsZXNldF9mZCA9IHJ1bGVzZXRfZmQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2F0dGFjaChza2VsKSwgXCYjMzQ7c2tlbF9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsb2FkX3J1bGVzZXRfaW50b19tYXAoc2tlbCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udHJvbDogYW4gdW5tb25pdG9yZWQgZXhlY3V0aW9uIG1heSB3cml0ZSB0byB0aGUgdG1wIGZpbGUuICovXG4mIzQzO1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbiYjNDM7XHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCBmYWxzZSwgY21kKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O2NvbnRyb2xfY2hpbGRfZXhpdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcJiMzNDtjb250cm9sX25vdF9tb25pdG9yZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgbW9uaXRvcmVkIGV4ZWN1dGlvbiBzdGFydHMgbGFuZGxvY2tlZDogdGhlIHJ1bGVzZXQgaGFuZGxlc1xuJiM0MztcdCAqIExBTkRMT0NLX0FDQ0VTU19GU19XUklURV9GSUxFIHdpdGhvdXQgYW55IHJ1bGUsIHNvIHRoZSB3cml0ZVxuJiM0MztcdCAqIG11c3QgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7cmVzdHJpY3RlZF9jaGlsZF9leGl0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxlZCwgXCYjMzQ7bHNtX3Byb2dfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlbm9fcnVsZXNldCwgXCYjMzQ7cnVsZXNldF9pbl9tYXBcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwmIzM0O3Jlc3RyaWN0X2JpbnBybVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBhdWRpdCBsb2cgZmxhZ3Mgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBhcHBseSB0b28uICovXG4mIzQzO1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VrZnVuY19mbGFncyA9IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OO1xuJiM0MztcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7bG9nX2ZsYWdzX2NoaWxkX2V4aXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXCYjMzQ7bG9nX2ZsYWdzX3Jlc3RyaWN0X2JpbnBybVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyB0YXJnZXRzIHRoZSBjYWxsaW5nIHRocmVhZHMsIG5vdFxuJiM0MztcdCAqIGFuIGV4ZWN1dGlvbjogdGhlIGtmdW5jIG11c3QgcmVqZWN0IGl0IGFuZCB0aGUgZXhlY3V0aW9uIG11c3RcbiYjNDM7XHQgKiBzdGF5IHVucmVzdHJpY3RlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWtmdW5jX2ZsYWdzID0gTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQztcbiYjNDM7XHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7dHN5bmNfY2hpbGRfZXhpdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQsIFwmIzM0O3RzeW5jX3Byb2dfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3RfZXJyLCAtRUlOVkFMLCBcJiMzNDt0c3luY19yZWplY3RlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBzZWNvbmQgY2FsbCBvbiB0aGUgc2FtZSBleGVjdXRpb24gcmVwbGFjZXMgdGhlIHN0YWdlZFxuJiM0MztcdCAqIGRvbWFpbiAoYW5kIHJlbGVhc2VzIHRoZSBmaXJzdCBvbmUpOiB0aGUgcmVzdWx0IGlzIGEgc2luZ2xlXG4mIzQzO1x0ICogcmVzdHJpY3Rpb24sIG5vdCBhbiBlcnJvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRvdWJsZV9jYWxsID0gdHJ1ZTtcbiYjNDM7XHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIGZhbHNlLCB0bXBfcGF0aCk7XG4mIzQzO1x0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O2RvdWJsZV9jaGlsZF9leGl0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwmIzM0O2RvdWJsZV9yZXN0cmljdF9maXJzdFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0Ml9lcnIsIDAsIFwmIzM0O2RvdWJsZV9yZXN0cmljdF9zZWNvbmRcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0bHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTtcbiYjNDM7XHRjbG9zZShydWxlc2V0X2ZkKTtcbiYjNDM7b3V0X3VubGluazpcbiYjNDM7XHR1bmxpbmsodG1wX3BhdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkXG4mIzQzOyAqIGRvbWFpbiByZWxlYXNlZCwgd2hlbiB0aGUgZXhlY3V0aW9uIGZhaWxzIGFmdGVyIHRoZSBicHJtIGhvb2s6IHRoZVxuJiM0MzsgKiBjYWxsaW5nIHRhc2sgbXVzdCBub3QgZW5kIHVwIGxhbmRsb2NrZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3Jlc3RyaWN0X2JpbnBybV9kaXNjYXJkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0Y2hhciB0bXBfcGF0aFtdID0gXCYjMzQ7L3RtcC9sc21fcG9saWN5X2tmdW5jc19YWFhYWFhcJiMzNDs7XG4mIzQzO1x0Y2hhciBnYXJiYWdlX3BhdGhbXSA9IFwmIzM0Oy90bXAvbHNtX3BvbGljeV9nYXJiYWdlX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRpbnQgcnVsZXNldF9mZCA9IC0xLCB0bXBfZmQsIGdhcmJhZ2VfZmQsIHBpcGVfZmRzWzJdLCBzdGF0dXM7XG4mIzQzO1x0Y2hhciBidWYgPSAwO1xuJiM0MztcdHBpZF90IHBpZDtcbiYjNDM7XG4mIzQzO1x0dG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcJiMzNDtta3N0ZW1wXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRjbG9zZSh0bXBfZmQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIGV4ZWN1dGFibGUgZmlsZSB0aGF0IG5vIGJpbmZtdCBoYW5kbGVyIGFjY2VwdHM6IHRoZSBleGVjXG4mIzQzO1x0ICogZmFpbHMgd2l0aCBFTk9FWEVDIGFmdGVyIGJwcm1fY3JlZHNfZm9yX2V4ZWMoKSBoYXMgcnVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGdhcmJhZ2VfZmQgPSBta3N0ZW1wKGdhcmJhZ2VfcGF0aCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZ2FyYmFnZV9mZCwgMCwgXCYjMzQ7bWtzdGVtcF9nYXJiYWdlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X3VubGluaztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUSh3cml0ZShnYXJiYWdlX2ZkLCBcJiMzNDtqdW5rXFxuXCYjMzQ7LCA1KSwgNSwgXCYjMzQ7d3JpdGVfZ2FyYmFnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGNsb3NlKGdhcmJhZ2VfZmQpO1xuJiM0MztcdFx0Z290byBvdXRfdW5saW5rO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhmY2htb2QoZ2FyYmFnZV9mZCwgMDcwMCksIFwmIzM0O2NobW9kX2dhcmJhZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShnYXJiYWdlX2ZkKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubGluaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZ2FyYmFnZV9mZCk7XG4mIzQzO1xuJiM0MztcdHJ1bGVzZXRfZmQgPSBjcmVhdGVfcnVsZXNldCgpO1xuJiM0MztcdGlmIChydWxlc2V0X2ZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpXG4mIzQzO1x0XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0QVNTRVJUX0dFKHJ1bGVzZXRfZmQsIDAsIFwmIzM0O2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0XCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubGluaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VydWxlc2V0X2ZkID0gcnVsZXNldF9mZDtcbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19hdHRhY2goc2tlbCksIFwmIzM0O3NrZWxfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9hZF9ydWxlc2V0X2ludG9fbWFwKHNrZWwpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9mZHMpLCBcJiMzNDtwaXBlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0Y2hhciAqYXJndltdID0geyBcJiMzNDtnYXJiYWdlXCYjMzQ7LCBOVUxMIH07XG4mIzQzO1x0XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9mZHNbMV0pO1xuJiM0MztcdFx0cmVhZChwaXBlX2Zkc1swXSwgXHUwMDI2YnVmLCAxKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbiYjNDM7XHRcdGV4ZWN2KGdhcmJhZ2VfcGF0aCwgYXJndik7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGZhaWxlZCBleGVjdXRpb24gbXVzdCBsZWF2ZSBubyB0cmFjZTogbm9cbiYjNDM7XHRcdCAqIExhbmRsb2NrIGRvbWFpbiwgaS5lLiB3cml0aW5nIG11c3Qgc3RpbGwgd29ya1xuJiM0MztcdFx0ICogKGV4aXQgNikuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZkID0gb3Blbih0bXBfcGF0aCwgT19XUk9OTFkgfCBPX1RSVU5DKTtcbiYjNDM7XHRcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0ZXhpdCg2KTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdGV4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gcGlkO1xuJiM0MztcdHdyaXRlKHBpcGVfZmRzWzFdLCBcdTAwMjZidWYsIDEpO1xuJiM0MztcdGNsb3NlKHBpcGVfZmRzWzFdKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCYjMzQ7d2FpdHBpZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcJiMzNDtjaGlsZF9leGl0ZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIDAsIFwmIzM0O2Rpc2NhcmRfY2hpbGRfZXhpdFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcJiMzNDtsc21fcHJvZ19jYWxsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwmIzM0O3Jlc3RyaWN0X2JpbnBybVwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdGlmIChydWxlc2V0X2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHJ1bGVzZXRfZmQpO1xuJiM0MztvdXRfdW5saW5rOlxuJiM0MztcdHVubGluayhnYXJiYWdlX3BhdGgpO1xuJiM0MztcdHVubGluayh0bXBfcGF0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9sc21fcG9saWN5X2tmdW5jcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmVzdHJpY3RfYmlucHJtXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfcmVzdHJpY3RfYmlucHJtKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmVzdHJpY3RfYmlucHJtX2Rpc2NhcmRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9yZXN0cmljdF9iaW5wcm1fZGlzY2FyZCgpO1xuJiM0MztcdFJVTl9URVNUUyhsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDMzNWRiNTQ3MDQwMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuY1xuQEAgLTAsMCAmIzQzOzEsMTAwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVx1MDAzZSAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQ7XG4mIzQzO1xuJiM0MztleHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcbiYjNDM7YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkXG4mIzQzO2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQpIF9fa3N5bTtcbiYjNDM7ZXh0ZXJuIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsXG4mIzQzO1x0XHRcdFx0XHR1MzIgZmxhZ3MpIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBMU00gcG9saWN5IGtmdW5jcyBhcmUgbGltaXRlZCB0byBMU00gYW5kIHN5c2NhbGwgcHJvZ3JhbXMgYnlcbiYjNDM7ICogdGhlIEJQRi1zaWRlIGtmdW5jIGZpbHRlcjogYSB0cmFjaW5nIHByb2dyYW0gY2FsbGluZyBvbmUgbXVzdCBmYWlsXG4mIzQzOyAqIHZlcmlmaWNhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvdGFza19uZXd0YXNrXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuJiM0MztcbiYjNDM7XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xuJiM0MztcdGlmIChydWxlc2V0KVxuJiM0MztcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHJ1bGVzZXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0XG4mIzQzOyAqIHNldCB0aGUgcnVsZXNldCB1cDogdGhlIGFjcXVpcmUga2Z1bmMgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGxcbiYjNDM7ICogcHJvZ3JhbXMgYW5kIG11c3QgYmUgcmVqZWN0ZWQgaW4gYW4gTFNNIHByb2dyYW0sIGV2ZW4gb24gYW5cbiYjNDM7ICogYWxsb3dlZCBob29rLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O2xzbS5zL2Jwcm1fY3JlZHNfZm9yX2V4ZWNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7XG4mIzQzO1xuJiM0MztcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG4mIzQzO1x0aWYgKHJ1bGVzZXQpXG4mIzQzO1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVuZm9yY2VtZW50IG5lZWRzIGFuIGV4ZWN1dGlvbiB0byByZXN0cmljdDogdGhlIGVuZm9yY2VtZW50IGtmdW5jXG4mIzQzOyAqIGlzIGV4Y2x1c2l2ZSB0byB0aGUgc2xlZXBhYmxlIGJwcm0gTFNNIGhvb2tzIGFuZCBtdXN0IGJlIHJlamVjdGVkXG4mIzQzOyAqIGluIGEgc3lzY2FsbCBwcm9ncmFtLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtIGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxuJiM0MztpbnQgc3lzY2FsbF9yZXN0cmljdCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShOVUxMLCBOVUxMLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQW55IExTTSBhdHRhY2ggcG9pbnQgb3RoZXIgdGhhbiB0aGUgc2xlZXBhYmxlIGJwcm0gaG9va3MgbXVzdCBiZVxuJiM0MzsgKiByZWplY3RlZC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtsc20ucy9maWxlX29wZW5cJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgaXMgbm90IGFsbG93ZWRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh3cm9uZ19ob29rLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChOVUxMKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGtmdW5jcyBtYXkgc2xlZXA6IGEgbm9uLXNsZWVwYWJsZSBwcm9ncmFtIG9uIGFuIGFsbG93ZWQgaG9va1xuJiM0MzsgKiBtdXN0IGJlIHJlamVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O2xzbS9icHJtX2NyZWRzX2Zvcl9leGVjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7X19tc2coXCYjMzQ7cHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhub25zbGVlcGFibGVfcHJvZywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7e1xuJiM0MztcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChOVUxMKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gYWNxdWlyZWQgcnVsZXNldCByZWZlcmVuY2UgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgcmV0dXJuaW5nLiAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlXCYjMzQ7KVxuJiM0MztpbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEwNzIwNmFlMTQ0ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuY1xuQEAgLTAsMCAmIzQzOzEsMTA3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVx1MDAzZSAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuJiM0MztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG4mIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xuJiM0MztleHRlcm4gdm9pZFxuJiM0MzticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KSBfX2tzeW07XG4mIzQzO2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LFxuJiM0MztcdFx0XHRcdFx0dTMyIGZsYWdzKSBfX2tzeW07XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnVsZXNldF9zbG90IHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgX19rcHRyICpydWxlc2V0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgcnVsZXNldF9zbG90KTtcbiYjNDM7fSBydWxlc2V0X21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IG1vbml0b3JlZF9waWQ7XG4mIzQzO2ludCBydWxlc2V0X2ZkO1xuJiM0Mzt1MzIga2Z1bmNfZmxhZ3M7XG4mIzQzO2Jvb2wgZG91YmxlX2NhbGw7XG4mIzQzO2Jvb2wgZ290X251bGxfZm9yX2JhZF9mZDtcbiYjNDM7Ym9vbCBub19ydWxlc2V0O1xuJiM0MztpbnQgcmVzdHJpY3RfZXJyO1xuJiM0MztpbnQgcmVzdHJpY3QyX2VycjtcbiYjNDM7Ym9vbCBjYWxsZWQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSdW5zIGluIHRoZSB0ZXN0IHJ1bm5lciYjMzk7cyBjb250ZXh0IHRocm91Z2ggQlBGX1BST0dfUlVOOlxuJiM0MzsgKiBAcnVsZXNldF9mZCBpcyByZXNvbHZlZCBpbiB0aGUgcnVubmVyJiMzOTtzIGZkIHRhYmxlIGFuZCB0aGUgYWNxdWlyZWRcbiYjNDM7ICogcnVsZXNldCBpcyBoYW5kZWQgdG8gdGhlIExTTSBwcm9ncmFtIHRocm91Z2ggdGhlIG1hcCBrcHRyIHNsb3QuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGxvYWRfcnVsZXNldCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsICpvbGQ7XG4mIzQzO1x0c3RydWN0IHJ1bGVzZXRfc2xvdCAqc2xvdDtcbiYjNDM7XHRpbnQga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0c2xvdCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2cnVsZXNldF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCFzbG90KVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdC8qIEEgZmQgdGhhdCBpcyBub3QgYSBMYW5kbG9jayBydWxlc2V0IG11c3QgcmVzb2x2ZSB0byBOVUxMLiAqL1xuJiM0MztcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG4mIzQzO1x0aWYgKCFydWxlc2V0KVxuJiM0MztcdFx0Z290X251bGxfZm9yX2JhZF9mZCA9IHRydWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHJ1bGVzZXQpO1xuJiM0MztcbiYjNDM7XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCk7XG4mIzQzO1x0aWYgKCFydWxlc2V0KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2c2xvdC1cdTAwM2VydWxlc2V0LCBydWxlc2V0KTtcbiYjNDM7XHRpZiAob2xkKVxuJiM0MztcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KG9sZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0cocmVzdHJpY3RfZXhlYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwgKm9sZDtcbiYjNDM7XHRzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90O1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAobW9uaXRvcmVkX3BpZCAhPSAoYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjYWxsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRzbG90ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZydWxlc2V0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXNsb3QpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cnVsZXNldCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2c2xvdC1cdTAwM2VydWxlc2V0LCBOVUxMKTtcbiYjNDM7XHRpZiAoIXJ1bGVzZXQpIHtcbiYjNDM7XHRcdG5vX3J1bGVzZXQgPSB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXN0cmljdF9lcnIgPSBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKGJwcm0sIHJ1bGVzZXQsIGtmdW5jX2ZsYWdzKTtcbiYjNDM7XHRpZiAoZG91YmxlX2NhbGwpXG4mIzQzO1x0XHQvKiBSZXBsYWNlcyB0aGUgZG9tYWluIHN0YWdlZCBieSB0aGUgZmlyc3QgY2FsbC4gKi9cbiYjNDM7XHRcdHJlc3RyaWN0Ml9lcnIgPSBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKGJwcm0sIHJ1bGVzZXQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBrZnVuY19mbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIHJ1bGVzZXQgZm9yIHRoZSBuZXh0IG1vbml0b3JlZCBleGVjdXRpb24uICovXG4mIzQzO1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZzbG90LVx1MDAzZXJ1bGVzZXQsIHJ1bGVzZXQpO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQob2xkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX0xBTkRMT0NLJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkJiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldCYjMzQ7LAogICAgJiMzNDticGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtJiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfcG9saWN5X2twdHJfcHV0JiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0ciYjMzQ7LAogICAgJiMzNDtsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uJiMzNDssCiAgICAmIzM0O2xhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBvbiBleGVjdXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBCUEYgYW5kIExhbmRsb2NrIHN1YnN5c3RlbXMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZWI2ZGE5NGViYzUxNWE2ZWQ0MmY4OTJmMTkyYTBiYzFlZmRlNTc5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMTowNzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QKaW5kZXggYzUxODY1MjZlNzZmNi4uMDExOTdjNzU4MGVjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QKQEAgLTEyOSw2ICYjNDM7MTI5LDMxIEBAIFRoZSByZWFzb25pbmcgaXM6CiAgIHJlc3RyaWN0aW9ucywgYmVjYXVzZSBhY2Nlc3Mgd2l0aGluIHRoZSBzYW1lIHNjb3BlIGlzIGFscmVhZHkKICAgYWxsb3dlZCBiYXNlZCBvbiBgYExBTkRMT0NLX0FDQ0VTU19GU19SRVNPTFZFX1VOSVhgYC4KIAomIzQzO0JQRiBrZnVuY3MKJiM0Mzs9PT09PT09PT09CiYjNDM7CiYjNDM7QlBGIHByb2dyYW1zIGNhbiBhcHBseSBhIHVzZXJzcGFjZS1jcmVhdGVkIExhbmRsb2NrIHJ1bGVzZXQgdG8gYW4KJiM0MztleGVjdXRpb24uICBBIHN5c2NhbGwgcHJvZ3JhbSAoYGBCUEZfUFJPR19UWVBFX1NZU0NBTExgYCksIHJ1bm5pbmcgaW4KJiM0Mzt0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgYWNxdWlyZXMgdGhlCiYjNDM7cnVsZXNldCBmcm9tIGl0cyBmaWxlIGRlc2NyaXB0b3IgYW5kIHR5cGljYWxseSBoYW5kcyBpdCBvdmVyIHRocm91Z2gKJiM0MzthIG1hcCBrcHRyIGZpZWxkOyBhIHNsZWVwYWJsZSBMU00gQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlCiYjNDM7YGBicHJtX2NyZWRzX2Zvcl9leGVjYGAgb3IgYGBicHJtX2NyZWRzX2Zyb21fZmlsZWBgIGhvb2tzIHRoZW4KJiM0MztlbmZvcmNlcyBpdCBvbiBhbiBleGVjdXRpb24uCiYjNDM7CiYjNDM7VGhpcyBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBydW50aW1lIGNvbnRleHQgb2YgYSBwZW5kaW5nIGV4ZWN1dGlvbiwKJiM0MzthbmQgZW5mb3JjZSBhIExhbmRsb2NrIHBvbGljeSB0aHJvdWdoIEJQRi4KJiM0MzsKJiM0MztUaGUgcmVzdHJpY3Rpb24gaXMgc3RhZ2VkIGluIHRoZSBMYW5kbG9jayBibG9iIG9mIHRoZQomIzQzO2NyZWRlbnRpYWxzIHByZXBhcmVkIGZvciB0aGUgZXhlY3V0aW9uIGFuZCBjb21taXR0ZWQgcGFzdCB0aGUgZXhlYwomIzQzO3BvaW50IG9mIG5vIHJldHVybiwgc28gYSBmYWlsZWQgZXhlY3V0aW9uIGxlYXZlcyB0aGUgY2FsbGluZyB0YXNrCiYjNDM7dW50b3VjaGVkLiAgVGhlIGBgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKWBgIGZsYWdzIGFwcGx5LCB3aXRoIHRoZQomIzQzO2V4Y2VwdGlvbiBvZiBgYExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNgYC4KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmMKJiM0MzsgICAgOmlkZW50aWZpZXJzOiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZAomIzQzOyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldAomIzQzOyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0KJiM0MzsKIFRlc3RzCiA9PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QKaW5kZXggNTg5NWU1MjlkYTdmZi4uZmMzYWYyMDZlNzk1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdApAQCAtMTUsMyAmIzQzOzE1LDMwIEBAIHNlZSBgYHNlY3VyaXR5L3NlY3VyaXR5LmNgYCBhbmQgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzOgogCiAuLiBrZXJuZWwtZG9jOjogc2VjdXJpdHkvc2VjdXJpdHkuYwogICAgOmV4cG9ydDoKJiM0MzsKJiM0MztMU00gcG9saWN5IGtwdHIgaG9va3MgYW5kIEJQRiBrZnVuY3MKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgTFNNIGZyYW1ld29yayBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3IgaW5kaXZpZHVhbCBMU01zIHRvCiYjNDM7ZXhwb3NlIHRoZWlyIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBCUEYga2Z1bmNzIGFuZCBrcHRycy4gQW4gTFNNCiYjNDM7bWF5IG5vdCBleHBvcnQgYW55IGtmdW5jIG9yIG90aGVyIEJQRiBpbnRlcmZhY2UgZGlyZWN0bHkuCiYjNDM7CiYjNDM7QW4gTFNNIHdpc2hpbmcgdG8gZXhwb3NlIGEgQlBGIGtmdW5jIG11c3QgcmV1c2UgYW4gZXhpc3Rpbmcgc2VjdXJpdHkKJiM0Mztob29rIG9yIGltcGxlbWVudCBhIG5ldyBzdWZmaWNpZW50bHkgZ2VuZXJpYyBMU00gaG9vayBmb3IgdGhlIGRlc2lyZWQKJiM0MztpbnRlcmZhY2UuIFRoZSBob29rcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSBrZnVuYyBkZWZpbml0aW9ucyBpbgomIzQzO2Bga2VybmVsL2JwZmBgLiBUaGlzIGFsbG93cyBMU00gaG9va3MgdG8gcmVtYWluIHN1ZmZpY2llbnRseSBnZW5lcmljCiYjNDM7d2hpbGUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzdHJvbmcgdHlwaW5nCiYjNDM7YW5kIHJ1bnRpbWUgY2hlY2tpbmcgb2ZmZXJlZCBieSB0aGUgQlBGIHZlcmlmaWVyLgomIzQzOwomIzQzO1RoZSBMU00gcHJvdmlkaW5nIGFuIG9wZXJhdGlvbiBpbXBsZW1lbnRzIHRoZSBvcGVyYXRpb24mIzM5O3MgaG9vayB3aXRoCiYjNDM7YGBMU01fSE9PS19JTklUKClgYCBsaWtlIGFueSBvdGhlciBob29rLiBBIEJQRiBwcm9ncmFtIGNhbGxpbmcgYW4KJiM0MztMU00ga2Z1bmMgdGhlcmVmb3JlIHJlYWNoZXMgdGhlIExTTSB0aGUgc2FtZSB3YXkgZXZlcnkgb3RoZXIKJiM0MztrZXJuZWwgY2FsbGVyIGRvZXM6IHRocm91Z2ggYW4gTFNNIGhvb2suIFRoZSBob29rcyBiYWNraW5nIGtmdW5jcwomIzQzO2ZvbGxvdyB0aGUgdXN1YWwgcnVsZXMgZm9yIG5ldyBMU00gaG9va3M6IHRoZWlyIGNvbnRyYWN0IG11c3QgYmUKJiM0MztMU00gYWdub3N0aWMgc28gdGhhdCBvdGhlciBMU01zIGNvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsCiYjNDM7aW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbWUgb3BlcmF0aW9uLgomIzQzOwomIzQzO1doZXRoZXIgdGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGlzIGJ1aWx0IGluIGFuZCBhY3RpdmUgaXMgYQomIzQzO3J1bnRpbWUgcHJvcGVydHk6IHRoZSBrZnVuY3MgYXJlIGFsd2F5cyByZWdpc3RlcmVkIHdoZW4KJiM0MztgYENPTkZJR19CUEZfTFNNYGAgaXMgZW5hYmxlZC4gQlBGIHByb2dyYW0gbG9hZGluZyBpcyB0aHVzCiYjNDM7aW5kZXBlbmRlbnQgb2YgdGhlIGJvb3QtdGltZSBMU00gY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uYTcwZWRiZDdiNzYxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTQ1Miw2ICYjNDM7NDUyLDExIEBAIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NyZWF0ZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIHVuaW9uIGJwZl9hdHRyICphdHRyCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGJwZl90b2tlbl9mcmVlLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbikKIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NtZCwgY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGVudW0gYnBmX2NtZCBjbWQpCiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jYXBhYmxlLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcCkKJiM0MztMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBwb2xpY3lfa3B0cl9mcm9tX2ZkLCBpbnQgZmQsCiYjNDM7CSB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSkKJiM0MztMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHBvbGljeV9rcHRyX3B1dCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7TFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAomIzQzOwkgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncykKICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogTFNNX0hPT0soaW50LCAwLCBsb2NrZWRfZG93biwgZW51bSBsb2NrZG93bl9yZWFzb24gd2hhdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li40MGRmYTk2YjZhNzE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNjgsNiAmIzQzOzE2OCwyMyBAQCBzdHJ1Y3QgbHNtX3Byb3AgewogCXN0cnVjdCBsc21fcHJvcF9icGYgYnBmOwogfTsKIAomIzQzO3N0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldDsKJiM0MzsKJiM0MztzdHJ1Y3QgbHNtX3BvbGljeV9sYW5kbG9jayB7CiYjNDM7CXN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSByZWZlcmVuY2UgdG8gYW4gTFNNIHBvbGljeSBvYmplY3QsIHRhZ2dlZCBieSB0aGUgTFNNX0lEXyogdmFsdWUKJiM0MzsgKiBwYXNzZWQgYWxvbmdzaWRlOiBvbmx5IHRoZSBtYXRjaGluZyBMU00mIzM5O3MgbWVtYmVyIGlzIHZhbGlkLiAgVGhlCiYjNDM7ICogbWVtYmVycyBhcmUgbm90IGd1YXJkZWQgYnkgdGhlIExTTXMmIzM5OyBDT05GSUcgb3B0aW9uczogdGhlIGNhbGxlcnMKJiM0MzsgKiBhcmUgYnVpbHQgaW5kZXBlbmRlbnRseSBvZiBhbnkgaW5kaXZpZHVhbCBMU00gYW5kIGEgY2FsbCBmb3IgYQomIzQzOyAqIG1pc3NpbmcgTFNNIG11c3QgZmFpbCBhdCBydW50aW1lLCBub3QgYXQgYnVpbGQgdGltZS4KJiM0MzsgKi8KJiM0Mzt1bmlvbiBsc21fcG9saWN5X2twdHIgewomIzQzOwlzdHJ1Y3QgbHNtX3BvbGljeV9sYW5kbG9jayBsYW5kbG9jazsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2tkb3duX3JlYXNvbnNbTE9DS0RPV05fQ09ORklERU5USUFMSVRZX01BWCYjNDM7MV07CiAKIC8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gc2VjdXJpdHkvY29tbW9uY2FwLmMgKi8KQEAgLTIzMTIsNiAmIzQzOzIzMjksMTMgQEAgZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY3JlYXRlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXQKIGV4dGVybiB2b2lkIHNlY3VyaXR5X2JwZl90b2tlbl9mcmVlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuKTsKIGV4dGVybiBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NtZChjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgZW51bSBicGZfY21kIGNtZCk7CiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKTsKJiM0MztleHRlcm4gaW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsCiYjNDM7CQkJCQl1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7CiYjNDM7ZXh0ZXJuIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpOwomIzQzO2V4dGVybiBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCSAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksCiYjNDM7CQkJCQkgICAgIHUzMiBmbGFncyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmKGludCBjbWQsIHVuaW9uIGJwZl9hdHRyICphdHRyLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBib29sIGtlcm5lbCkKQEAgLTIzNjUsNiAmIzQzOzIzODksMjUgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludAogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsCiYjNDM7CQkJCQkgICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQodTY0IGxzbWlkLAomIzQzOwkJCQkJICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwKJiM0MzsJCQkJCQkgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCQkgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksCiYjNDM7CQkJCQkJICAgIHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZICovCiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmMKaW5kZXggMzk4M2I0Y2U3M2M4MS4uNjdhYTkwMmYxMjU3MCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfbHNtLmMKQEAgLTE0LDggJiM0MzsxNCwxMCBAQAogI2luY2x1ZGUgJmx0O25ldC9icGZfc2tfc3RvcmFnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9sb2NhbF9zdG9yYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnRmX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGYtY2dyb3VwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbHNtLmgmZ3Q7CiAKIC8qIEZvciBldmVyeSBMU00gaG9vayB0aGF0IGFsbG93cyBhdHRhY2htZW50IG9mIEJQRiBwcm9ncmFtcywgZGVjbGFyZSBhIG5vcAogICogZnVuY3Rpb24gd2hlcmUgYSBCUEYgcHJvZ3JhbSBjYW4gYmUgYXR0YWNoZWQuIE5vdGFibHksIHdlIHF1YWxpZnkgZWFjaCB3aXRoCkBAIC01Niw2ICYjNDM7NTgsOSBAQCBCVEZfSUQoZnVuYywgYnBmX2xzbV94ZnJtX2RlY29kZV9zZXNzaW9uKQogI2VuZGlmCiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pc21hY2xhYmVsKQogQlRGX0lEKGZ1bmMsIGJwZl9sc21fZmlsZV9hbGxvY19zZWN1cml0eSkKJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9wb2xpY3lfa3B0cl9mcm9tX2ZkKQomIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX3B1dCkKJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIpCiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKQogCiAvKiBMaXN0IG9mIExTTSBob29rcyB0aGF0IHNob3VsZCBvcGVyYXRlIG9uICYjMzk7Y3VycmVudCYjMzk7IGNncm91cCByZWdhcmRsZXNzCkBAIC00NzAsMyAmIzQzOzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJfQogCXJldHVybiAwOwogfQomIzQzOwomIzQzOy8qIExTTSBwb2xpY3kga2Z1bmNzICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPcGFxdWUgaGFuZGxlIGZvciBhIExhbmRsb2NrIHJ1bGVzZXQuICBPbmx5CiYjNDM7ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBwcm9kdWNlcyBvbmUsIGFuZCBvbmx5IExhbmRsb2NrCiYjNDM7ICogcmVzb2x2ZXMgaXQuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0IHt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNsZWVwYWJsZSBMU00gaG9va3MgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSgpIGFuZAomIzQzOyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCgpIG1heSBiZSBjYWxsZWQgZnJvbS4KJiM0MzsgKi8KJiM0MztCVEZfU0VUX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19ob29rcykKJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2NyZWRzX2Zvcl9leGVjKQomIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZnJvbV9maWxlKQomIzQzO0JURl9TRVRfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19ob29rcykKJiM0MzsKJiM0MztfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgLSBHZXQgYSBMYW5kbG9jayBydWxlc2V0IGZyb20gYSBmZAomIzQzOyAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIG9mIGEgTGFuZGxvY2sgcnVsZXNldCwgcmVzb2x2ZWQgaW4gdGhlIGZpbGUKJiM0MzsgKiAgICAgIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIHRhc2sgcnVubmluZyB0aGUgcHJvZ3JhbQomIzQzOyAqCiYjNDM7ICogQWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUgTGFuZGxvY2sgcnVsZXNldCByZWZlcnJlZCB0byBieSBAZmQsIGFzCiYjNDM7ICogY3JlYXRlZCBieSBsYW5kbG9ja19jcmVhdGVfcnVsZXNldCgyKSBhbmQgcG9wdWxhdGVkIHdpdGgKJiM0MzsgKiBsYW5kbG9ja19hZGRfcnVsZSgyKS4gIE9ubHkgc3lzY2FsbCBwcm9ncmFtcyBtYXkgY2FsbCB0aGlzIGtmdW5jOgomIzQzOyAqIHRoZXkgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIGludm9raW5nIHRoZW0sIHdoZXJlIHRoZQomIzQzOyAqIHJ1bGVzZXQgZmQgaXMgbWVhbmluZ2Z1bC4gIFRoZSBhY3F1aXJlZCBydWxlc2V0IGNhbiBiZSBoYW5kZWQgdG8gYW4KJiM0MzsgKiBlbmZvcmNlbWVudCBwcm9ncmFtIHRocm91Z2ggYSBtYXAga3B0ciBmaWVsZC4gIFRoZSByZWZlcmVuY2UgbXVzdAomIzQzOyAqIGJlIHJlbGVhc2VkIHdpdGggYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IEEgcmVmZXJlbmNlZCBydWxlc2V0IGhhbmRsZSwgb3IgTlVMTCBpZiBAZmQgaXMgbm90IGEKJiM0MzsgKiByZWFkYWJsZSBMYW5kbG9jayBydWxlc2V0IGZkIG9yIHRoZSBMYW5kbG9jayBMU00gaXMgbm90IGVuYWJsZWQuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICoKJiM0MzticGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpCiYjNDM7ewomIzQzOwl1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5OwomIzQzOwomIzQzOwlpZiAoc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZChMU01fSURfTEFORExPQ0ssIGZkLCAmYW1wO3BvbGljeSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIHBvbGljeS5sYW5kbG9jay5ydWxlc2V0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgLSBQdXQgYSBMYW5kbG9jayBydWxlc2V0CiYjNDM7ICogQHJ1bGVzZXQ6IExhbmRsb2NrIHJ1bGVzZXQgdG8gcHV0CiYjNDM7ICoKJiM0MzsgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIGFjcXVpcmVkIHdpdGggYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQpCiYjNDM7ewomIzQzOwl1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTsKJiM0MzsKJiM0MzsJc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KExTTV9JRF9MQU5ETE9DSywgJmFtcDtwb2xpY3kpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtIC0gRW5mb3JjZSBhIExhbmRsb2NrIHJ1bGVzZXQgb24gZXhlYwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFscwomIzQzOyAqIEBicHJtOiBleGVjdXRpb24gY29udGV4dCBwcm92aWRpbmcgdGhlIHByZXBhcmVkIGNyZWRlbnRpYWxzIHRvCiYjNDM7ICogICAgICAgIHJlc3RyaWN0CiYjNDM7ICogQHJ1bGVzZXQ6IExhbmRsb2NrIHJ1bGVzZXQgdG8gZW5mb3JjZQomIzQzOyAqIEBmbGFnczogbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncywgZXhjZXB0CiYjNDM7ICogICAgICAgICAlTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQwomIzQzOyAqCiYjNDM7ICogUmVzdHJpY3QgdGhlIGNyZWRlbnRpYWxzIHByZXBhcmVkIGluIEBicHJtIHdpdGggQHJ1bGVzZXQsIHNvIHRoYXQKJiM0MzsgKiB0aGUgZXhlY3V0ZWQgdGFzayBzdGFydHMgY29uZmluZWQgYnkgaXQsIGZvbGxvd2luZyB0aGUgc2FtZSBkb21haW4KJiM0MzsgKiBjb21wb3NpdGlvbiBydWxlcyBhcyBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLiAgVGhlIHJlc3RyaWN0aW9uIGlzCiYjNDM7ICogc3RhZ2VkIGFuZCBvbmx5IGNvbW1pdHRlZCBhdCB0aGUgZXhlY3V0aW9uJiMzOTtzIHBvaW50IG9mIG5vIHJldHVybjogYW4KJiM0MzsgKiBleGVjdXRpb24gdGhhdCBmYWlscyBiZWZvcmUgdGhhdCBwb2ludCBpcyB1bmFmZmVjdGVkLCBhbmQgYSBsYXRlcgomIzQzOyAqIGNhbGwgb24gdGhlIHNhbWUgZXhlY3V0aW9uIHJlcGxhY2VzIGEgcHJldmlvdXNseSBzdGFnZWQKJiM0MzsgKiByZXN0cmljdGlvbi4gIEBydWxlc2V0IGlzIG9ubHkgYm9ycm93ZWQ6IHRoZSBjYWxsZXIga2VlcHMgaXRzCiYjNDM7ICogcmVmZXJlbmNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgZmxhZ3MgYXBwbHkgd2l0aCB0aGVpciB1c3VhbAomIzQzOyAqIHNlbWFudGljcy4gIE9ubHkgJUxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgaXMgcmVqZWN0ZWQsIGFzIGl0CiYjNDM7ICogdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzIHJhdGhlciB0aGFuIHRoZSBleGVjdXRpb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIExhbmRsb2NrIExTTSBpcyBub3QKJiM0MzsgKiBlbmFibGVkLCAtRUlOVkFMIGlmIEBmbGFncyBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBmbGFnLCBvdGhlcgomIzQzOyAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlIGFzIGZvciBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwKJiM0MzsJCQkJCSAgICAgdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJdW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07CiYjNDM7CiYjNDM7CXJldHVybiBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoTFNNX0lEX0xBTkRMT0NLLCBicHJtLAomIzQzOwkJCQkJCSAmYW1wO3BvbGljeSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEZXN0cnVjdG9yIGZvciByZWZlcmVuY2VkIGJwZl9sYW5kbG9ja19ydWxlc2V0IGtwdHJzLiAqLwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3Iodm9pZCAqcnVsZXNldCkKJiM0Mzt7CiYjNDM7CXVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9OwomIzQzOwomIzQzOwlzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoTFNNX0lEX0xBTkRMT0NLLCAmYW1wO3BvbGljeSk7CiYjNDM7fQomIzQzO0NGSV9OT1NFQUwoYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3IpOwomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCwKJiM0MzsJICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCwgS0ZfUkVMRUFTRSB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpCiYjNDM7CiYjNDM7QlRGX0lEX0xJU1QoYnBmX2xhbmRsb2NrX2R0b3JfaWRzKQomIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KQomIzQzO0JURl9JRChmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcikKJiM0MzsKJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYywKJiM0MzsJCSAgIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKQomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtX2lkcywgZnVuYywKJiM0MzsJCSAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0pCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCUEZfUFJPR19UWVBFX0xTTSBhbmQgQlBGX1BST0dfVFlQRV9TWVNDQUxMIHNoYXJlIHRoZWlyIGtmdW5jCiYjNDM7ICogbG9va3VwIGJ1Y2tldHMgd2l0aCBvdGhlciBwcm9ncmFtIHR5cGVzLCBzbyByZXN0cmljdGluZyB0aGUgTFNNCiYjNDM7ICogcG9saWN5IGtmdW5jcyByZXF1aXJlcyBhIGZpbHRlci4gIEEgcnVsZXNldCBmZCBpcyBvbmx5IG1lYW5pbmdmdWwKJiM0MzsgKiBpbiB0aGUgZmQgdGFibGUgb2YgdGhlIHRhc2sgdGhhdCBzZXQgdGhlIHJ1bGVzZXQgdXAsIHNvCiYjNDM7ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBpcyBleGNsdXNpdmUgdG8gc3lzY2FsbAomIzQzOyAqIHByb2dyYW1zLCB3aGljaCBydW4gaW4gdGhhdCB0YXNrJiMzOTtzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW4KJiM0MzsgKiB0aGUgY29udGV4dCBvZiB0aGUgdGFzayBpdCBtZWRpYXRlcy4gIEVuZm9yY2VtZW50IGlzIGV4Y2x1c2l2ZSB0bwomIzQzOyAqIHRoZSBzbGVlcGFibGUgYnBybSBMU00gaG9va3MgdGhlIHBvbGljeSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkCiYjNDM7ICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmUKJiM0MzsgKiBoZWxkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDticGZfbGFuZGxvY2tfa2Z1bmNfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwcm9nLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgQlBGX1BST0dfVFlQRV9TWVNDQUxMOgomIzQzOwkJaWYgKGtmdW5jX2lkID09IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1faWRzWzBdKQomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgQlBGX1BST0dfVFlQRV9MU006CiYjNDM7CQlpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkc1swXSkKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBCUEZfTFNNX0NHUk9VUCBwcm9ncmFtcyBydW4gdW5kZXIgY2xhc3NpYyBSQ1UgYW5kCiYjNDM7CQkgKiBjYW5ub3Qgc2xlZXAuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsKJiM0MzsJCWlmICghYnRmX2lkX3NldF9jb250YWlucygmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19ob29rcywKJiM0MzsJCQkJCSBwcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGZfaWQpKQomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2xhbmRsb2NrX2tmdW5jX3NldCA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5zZXQgPSAmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19pZHMsCiYjNDM7CS5maWx0ZXIgPSBicGZfbGFuZGxvY2tfa2Z1bmNfZmlsdGVyLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jIGJwZl9sYW5kbG9ja19kdG9yc1tdID0gewomIzQzOwkJewomIzQzOwkJCS5idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMF0sCiYjNDM7CQkJLmtmdW5jX2J0Zl9pZCA9IGJwZl9sYW5kbG9ja19kdG9yX2lkc1sxXSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19zZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19zZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfbGFuZGxvY2tfZHRvcnMsCiYjNDM7CQkJCQkgICBBUlJBWV9TSVpFKGJwZl9sYW5kbG9ja19kdG9ycyksCiYjNDM7CQkJCQkgICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZSBiL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlCmluZGV4IGZmYTc2NDZkOTlmM2UuLjliYTI4YzA2YjVhYzIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlCkBAIC0xNiwzICYjNDM7MTYsNSBAQCBsYW5kbG9jay0kKENPTkZJR19BVURJVCkgJiM0Mzs9IFwKIAlpZC5vIFwKIAlhdWRpdC5vIFwKIAlkb21haW4ubwomIzQzOwomIzQzO2xhbmRsb2NrLSQoQ09ORklHX0JQRl9MU00pICYjNDM7PSBicGYubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jZjg5MDYyZDM1YTcwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMKQEAgLTAsMCAmIzQzOzEsMTMwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogTGFuZGxvY2sgLSBMU00gcG9saWN5IGtwdHIgaG9va3MKJiM0MzsgKgomIzQzOyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMU00gaG9va3MgYmFja2luZyB0aGUgTGFuZGxvY2sga2Z1bmNzCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgJmx0O3V0aWxpdHllbWFsNzdAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xzbV9ob29rcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1jb250cm9sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbGFuZGxvY2suaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NyZWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsaW1pdHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtydWxlc2V0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c2V0dXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0OwomIzQzOwomIzQzOwlydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChmZCwgRk1PREVfQ0FOX1JFQUQpOwomIzQzOwlpZiAoSVNfRVJSKHJ1bGVzZXQpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocnVsZXNldCk7CiYjNDM7CiYjNDM7CXBvbGljeS0mZ3Q7bGFuZGxvY2sucnVsZXNldCA9IChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKilydWxlc2V0OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaG9va19wb2xpY3lfa3B0cl9wdXQodW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9CiYjNDM7CQkoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktJmd0O2xhbmRsb2NrLnJ1bGVzZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1heSBiZSBjYWxsZWQgZnJvbSBhIEJQRiBvYmplY3QgZGVzdHJ1Y3RvciB0aGF0IGNhbm5vdCBzbGVlcCwKJiM0MzsJICogd2hlcmVhcyBkcm9wcGluZyB0aGUgbGFzdCBydWxlc2V0IHJlZmVyZW5jZSBmcmVlcyBpdCBhbmQgbWF5CiYjNDM7CSAqIHNsZWVwOiBhbHdheXMgZGVmZXIgdGhlIGZyZWUuCiYjNDM7CSAqLwomIzQzOwlsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChydWxlc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ2hhcmdpbmcgc2NvcGUgZm9yIHRoZSBCUEYtZHJpdmVuIGRvbWFpbiBhbGxvY2F0aW9uczogcm9vdCwgaS5lLiBub2JvZHkuICovCiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfYnBmX21lbWNnKHZvaWQpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MzsJcmV0dXJuIHJvb3RfbWVtX2Nncm91cDsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCSB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSwKJiM0MzsJCQkJCSB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tJmd0O2NyZWQpOwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9CiYjNDM7CQkoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktJmd0O2xhbmRsb2NrLnJ1bGVzZXQ7CiYjNDM7CXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm9sZF9tZW1jZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2FtZSBmbGFncyBhcyBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLCBleGNlcHQKJiM0MzsJICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQzogdGhlIHJlc3RyaWN0aW9uIHRhcmdldHMgdGhlCiYjNDM7CSAqIGV4ZWN1dGlvbiwgbm90IHRoZSBjYWxsaW5nIHRocmVhZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGZsYWdzIHwgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pICE9CiYjNDM7CSAgICBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX0JJTlBSTSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZG9tYWluIGNvbmZpbmVzIHRoZSBleGVjdXRpb24gb24gYmVoYWxmIG9mIHRoZSBCUEYKJiM0MzsJICogcHJvZ3JhbSwgbm90IG9mIHRoZSBtZWRpYXRlZCB0YXNrOiBkbyBub3QgY2hhcmdlIHRoZSB0YXNrJiMzOTtzCiYjNDM7CSAqIG1lbWNnIGZvciBpdC4KJiM0MzsJICovCiYjNDM7CW9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ2V0X2JwZl9tZW1jZygpKTsKJiM0MzsJZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsCiYjNDM7CQkJCQkgICAmYW1wO3Jlc3RyaWN0aW9uKTsKJiM0MzsJc2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RhZ2VzIHRoZSByZXN0cmljdGlvbiB1bnRpbCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mIHRoZQomIzQzOwkgKiBleGVjdXRpb24sIHJlcGxhY2luZyAoYW5kIHJlbGVhc2luZykgYW55IHByZXZpb3VzbHkgc3RhZ2VkCiYjNDM7CSAqIG9uZS4gIE5vdGhpbmcgaXMgZW5mb3JjZWQgeWV0OiBhbiBleGVjdXRpb24gdGhhdCBmYWlscyBiZWZvcmUKJiM0MzsJICogY29tbWl0dGluZyBpdHMgY3JlZGVudGlhbHMgZHJvcHMgdGhlIHN0YWdlZCByZXN0cmljdGlvbiBpbgomIzQzOwkgKiBob29rX2NyZWRfZnJlZSgpIHdpdGggbm8gZWZmZWN0IG9uIHRoZSBjYWxsaW5nIHRhc2suCiYjNDM7CSAqLwomIzQzOwlsYW5kbG9ja19wdXRfcnVsZXNldChicHJtX2xsY3JlZC0mZ3Q7c3RhZ2VkLmRvbWFpbik7CiYjNDM7CWJwcm1fbGxjcmVkLSZndDtzdGFnZWQgPSByZXN0cmljdGlvbjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tJmd0O2NyZWQpOwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247CiYjNDM7CiYjNDM7CWlmICghYnBybV9sbGNyZWQtJmd0O3N0YWdlZC5kb21haW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJlc3RyaWN0aW9uID0gYnBybV9sbGNyZWQtJmd0O3N0YWdlZDsKJiM0MzsJYnBybV9sbGNyZWQtJmd0O3N0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7CiYjNDM7CWxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGJwcm1fbGxjcmVkLCAmYW1wO3Jlc3RyaWN0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgbGFuZGxvY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7CiYjNDM7CUxTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChwb2xpY3lfa3B0cl9wdXQsIGhvb2tfcG9saWN5X2twdHJfcHV0KSwKJiM0MzsJTFNNX0hPT0tfSU5JVChicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIGhvb2tfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSwKJiM0Mzt9OwomIzQzOwomIzQzO19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZCkKJiM0Mzt7CiYjNDM7CXNlY3VyaXR5X2FkZF9ob29rcyhsYW5kbG9ja19ob29rcywgQVJSQVlfU0laRShsYW5kbG9ja19ob29rcyksCiYjNDM7CQkJICAgJmFtcDtsYW5kbG9ja19sc21pZCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmggYi9zZWN1cml0eS9sYW5kbG9jay9icGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNTc3MjllNmE1NjQ0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmgKQEAgLTAsMCAmIzQzOzEsMjEgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rcwomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzICZsdDt1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSAomIzQzOyNkZWZpbmUgX1NFQ1VSSVRZX0xBTkRMT0NLX0JQRl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9MU00KJiM0MztfX2luaXQgdm9pZCBsYW5kbG9ja19hZGRfYnBmX2hvb2tzKHZvaWQpOwomIzQzOyNlbHNlIC8qIENPTkZJR19CUEZfTFNNICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqLwomIzQzOwomIzQzOyNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQlBGX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYwppbmRleCBjYzQxOWRlNzVjZDZiLi5lZmJmZDBjMjA0NzUzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jCkBAIC04LDE0ICYjNDM7OCwxMTQgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYmluZm10cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9sYW5kbG9jay5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvbW1vbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y3JlZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2RvbWFpbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cnVsZXNldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c2V0dXAuaCYjMzQ7CiAKJiM0MzsvKioKJiM0MzsgKiBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZSBhIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb24KJiM0MzsgKgomIzQzOyAqIEBsbGNyZWQ6IExhbmRsb2NrIGNyZWRlbnRpYWxzIHRvIHJlc3RyaWN0OiBwcm92aWRlcyB0aGUgcGFyZW50IGRvbWFpbiBhbmQKJiM0MzsgKiAgICAgICAgICB0aGUgcHJldmlvdXMgbG9nIGNvbmZpZ3VyYXRpb24uICBOb3QgbW9kaWZpZWQuCiYjNDM7ICogQHJ1bGVzZXQ6IFJ1bGVzZXQgdG8gZW5mb3JjZSwgb3IgTlVMTCBmb3IgYSBsb2ctY29uZmlndXJhdGlvbi1vbmx5IGNoYW5nZS4KJiM0MzsgKiBAZmxhZ3M6IGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgZmxhZ3MuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgomIzQzOyAqICAgICAgICAgdmFsaWRhdGluZyB0aGVtIGFnYWluc3QgdGhlIHNldCBvZiBmbGFncyBpdCBzdXBwb3J0cy4KJiM0MzsgKiBAcmVzdHJpY3Rpb246IENvbXB1dGVkIHJlc3RyaWN0aW9uLiAgT24gc3VjY2VzcywgaG9sZHMgYSByZWZlcmVuY2Ugb24KJiM0MzsgKiAgICAgICAgICAgICAgIEByZXN0cmljdGlvbi0mZ3Q7ZG9tYWluIChpZiBhbnkpLCB3aGljaAomIzQzOyAqICAgICAgICAgICAgICAgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oKSB0cmFuc2ZlcnMgdG8gdGhlIHJlc3RyaWN0ZWQKJiM0MzsgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLgomIzQzOyAqCiYjNDM7ICogVGhlIHJlc3RyaWN0aW9uIGJ1aWxkcyBvbiBAbGxjcmVkJiMzOTtzIGN1cnJlbnQgc3RhdGU6IHRoZSBjYWxsZXIgbXVzdCBhcHBseQomIzQzOyAqIGl0IHRvIChvciBzdGFnZSBpdCBmb3IpIHRoZXNlIHNhbWUgY3JlZGVudGlhbHMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oCiYjNDM7CWNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsCiYjNDM7CXN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsCiYjNDM7CXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQVVESVQKJiM0MzsJLyogVHJhbnNsYXRlcyAmIzM0O29mZiYjMzQ7IGFuZCAmIzM0O29uJiMzNDsgZmxhZ3MgdG8gYm9vbGVhbnMuICovCiYjNDM7CWNvbnN0IGJvb2wgbG9nX3NhbWVfZXhlYyA9CiYjNDM7CQkhKGZsYWdzICZhbXA7IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NBTUVfRVhFQ19PRkYpOwomIzQzOwljb25zdCBib29sIGxvZ19uZXdfZXhlYyA9CiYjNDM7CQkhIShmbGFncyAmYW1wOyBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7CiYjNDM7CWNvbnN0IGJvb2wgbG9nX3N1YmRvbWFpbnMgPQomIzQzOwkJIShmbGFncyAmYW1wOyBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7CiYjNDM7CWNvbnN0IGJvb2wgcHJldl9sb2dfc3ViZG9tYWlucyA9ICFsbGNyZWQtJmd0O2xvZ19zdWJkb21haW5zX29mZjsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiYjNDM7CiYjNDM7CSpyZXN0cmljdGlvbiA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BVURJVAomIzQzOwlyZXN0cmljdGlvbi0mZ3Q7bG9nX3N1YmRvbWFpbnNfb2ZmID0gIXByZXZfbG9nX3N1YmRvbWFpbnMgfHwKJiM0MzsJCQkJCSAgIWxvZ19zdWJkb21haW5zOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KJiM0MzsKJiM0MzsJaWYgKCFydWxlc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJlc3RyaWN0aW9uLSZndDtkb21haW4gPSBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KGxsY3JlZC0mZ3Q7ZG9tYWluLCBydWxlc2V0KTsKJiM0MzsJaWYgKElTX0VSUihyZXN0cmljdGlvbi0mZ3Q7ZG9tYWluKSkgewomIzQzOwkJY29uc3QgaW50IGVyciA9IFBUUl9FUlIocmVzdHJpY3Rpb24tJmd0O2RvbWFpbik7CiYjNDM7CiYjNDM7CQlyZXN0cmljdGlvbi0mZ3Q7ZG9tYWluID0gTlVMTDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FVRElUCiYjNDM7CXJlc3RyaWN0aW9uLSZndDtkb21haW4tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX3NhbWVfZXhlYyA9IGxvZ19zYW1lX2V4ZWM7CiYjNDM7CXJlc3RyaWN0aW9uLSZndDtkb21haW4tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX25ld19leGVjID0gbG9nX25ld19leGVjOwomIzQzOwlpZiAoKCFsb2dfc2FtZV9leGVjICZhbXA7JmFtcDsgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpCiYjNDM7CQlyZXN0cmljdGlvbi0mZ3Q7ZG9tYWluLSZndDtoaWVyYXJjaHktJmd0O2xvZ19zdGF0dXMgPQomIzQzOwkJCUxBTkRMT0NLX0xPR19ESVNBQkxFRDsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbiAtIEVuZm9yY2UgYSBjb21wdXRlZCByZXN0cmljdGlvbiBvbiBjcmVkZW50aWFscwomIzQzOyAqCiYjNDM7ICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXIKJiM0MzsgKiAgICAgICAgICAocHJlcGFyZWQgYW5kIG5vdCB5ZXQgY29tbWl0dGVkKS4KJiM0MzsgKiBAcmVzdHJpY3Rpb246IFJlc3RyaWN0aW9uIGNvbXB1dGVkIGJ5IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKQomIzQzOyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpcwomIzQzOyAqICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQgdG8gQGxsY3JlZC4KJiM0MzsgKgomIzQzOyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnQKJiM0MzsgKiBvZiBmYWlsdXJlLCBlLmcuIGFuIGV4ZWMgcG9pbnQgb2Ygbm8gcmV0dXJuLgomIzQzOyAqLwomIzQzO3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCwKJiM0MzsJCQkJc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbikKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19BVURJVAomIzQzOwlsbGNyZWQtJmd0O2xvZ19zdWJkb21haW5zX29mZiA9IHJlc3RyaWN0aW9uLSZndDtsb2dfc3ViZG9tYWluc19vZmY7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwomIzQzOwomIzQzOwlpZiAoIXJlc3RyaWN0aW9uLSZndDtkb21haW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFJlcGxhY2VzIHRoZSBvbGQgZG9tYWluLiAqLwomIzQzOwlsYW5kbG9ja19wdXRfcnVsZXNldChsbGNyZWQtJmd0O2RvbWFpbik7CiYjNDM7CWxsY3JlZC0mZ3Q7ZG9tYWluID0gcmVzdHJpY3Rpb24tJmd0O2RvbWFpbjsKJiM0MzsJcmVzdHJpY3Rpb24tJmd0O2RvbWFpbiA9IE5VTEw7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BVURJVAomIzQzOwlsbGNyZWQtJmd0O2RvbWFpbl9leGVjIHw9IEJJVChsbGNyZWQtJmd0O2RvbWFpbi0mZ3Q7bnVtX2xheWVycyAtIDEpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBob29rX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3Qgb2xkKQogewpAQCAtMjQsNiAmIzQzOzEyNCwxMiBAQCBzdGF0aWMgdm9pZCBob29rX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKIAogCWxhbmRsb2NrX2dldF9ydWxlc2V0KG9sZF9sbGNyZWQtJmd0O2RvbWFpbik7CiAJKmxhbmRsb2NrX2NyZWQobmV3KSA9ICpvbGRfbGxjcmVkOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzOwkvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovCiYjNDM7CVdBUk5fT05fT05DRShsYW5kbG9ja19jcmVkKG5ldyktJmd0O3N0YWdlZC5kb21haW4pOwomIzQzOwlsYW5kbG9ja19jcmVkKG5ldyktJmd0O3N0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovCiB9CiAKIHN0YXRpYyBpbnQgaG9va19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKQEAgLTM1LDEwICYjNDM7MTQxLDE0IEBAIHN0YXRpYyBpbnQgaG9va19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKIAogc3RhdGljIHZvaWQgaG9va19jcmVkX2ZyZWUoc3RydWN0IGNyZWQgKmNvbnN0IGNyZWQpCiB7Ci0Jc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IGRvbSA9IGxhbmRsb2NrX2NyZWQoY3JlZCktJmd0O2RvbWFpbjsKJiM0MzsJc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCA9IGxhbmRsb2NrX2NyZWQoY3JlZCk7CiYjNDM7CiYjNDM7CWxhbmRsb2NrX3B1dF9ydWxlc2V0X2RlZmVycmVkKGxsY3JlZC0mZ3Q7ZG9tYWluKTsKIAotCWlmIChkb20pCi0JCWxhbmRsb2NrX3B1dF9ydWxlc2V0X2RlZmVycmVkKGRvbSk7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CS8qIFJlbGVhc2VzIGEgcmVzdHJpY3Rpb24gc3RhZ2VkIGZvciBhbiBhYm9ydGVkIGV4ZWN1dGlvbi4gKi8KJiM0MzsJbGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLSZndDtzdGFnZWQuZG9tYWluKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi8KIH0KIAogI2lmZGVmIENPTkZJR19BVURJVApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oCmluZGV4IGYyODdjNTZiNWZkNGIuLjc0ZjhjOTgwOGRjNGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmgKQEAgLTIwLDYgJiM0MzsyMCwzMSBAQAogI2luY2x1ZGUgJiMzNDtydWxlc2V0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzZXR1cC5oJiMzNDsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAtIENvbXB1dGVkIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb24KJiM0MzsgKgomIzQzOyAqIFRoZSByZXN1bHQgb2YgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpOiB0aGUgbmV3IHN0YXRlIHRoYXQKJiM0MzsgKiBlbmZvcmNpbmcgYSBydWxlc2V0IHdpdGggYSBzZXQgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncwomIzQzOyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXMKJiM0MzsgKiBlbmZvcmNlZCB3aXRoIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKCksIGVpdGhlciByaWdodCBhd2F5CiYjNDM7ICogKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikpIG9yIGFmdGVyIGEgc3RhZ2luZyBwZXJpb2QgKHJlc3RyaWN0aW9uCiYjNDM7ICogb2YgYW4gZXhlY3V0aW9uKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gewomIzQzOwkvKioKJiM0MzsJICogQGRvbWFpbjogTmV3IGRvbWFpbiB0byBlbmZvcmNlLCBvd25pbmcgYSByZWZlcmVuY2UuICBOVUxMIGlmIHRoZQomIzQzOwkgKiByZXN0cmljdGlvbiBvbmx5IGNhcnJpZXMgYSBsb2cgY29uZmlndXJhdGlvbiBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqZG9tYWluOwomIzQzOyNpZmRlZiBDT05GSUdfQVVESVQKJiM0MzsJLyoqCiYjNDM7CSAqIEBsb2dfc3ViZG9tYWluc19vZmY6IE5ldyB2YWx1ZSBvZiB0aGUgY3JlZGVudGlhbHMmIzM5OwomIzQzOwkgKiBAbGFuZGxvY2tfY3JlZF9zZWN1cml0eS5sb2dfc3ViZG9tYWluc19vZmYuCiYjNDM7CSAqLwomIzQzOwl1OCBsb2dfc3ViZG9tYWluc19vZmYgOiAxOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KJiM0Mzt9OwomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAtIENyZWRlbnRpYWwgc2VjdXJpdHkgYmxvYgogICoKQEAgLTM1LDYgJiM0Mzs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7CiAJICovCiAJc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmRvbWFpbjsKIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzOwkvKioKJiM0MzsJICogQHN0YWdlZDogUmVzdHJpY3Rpb24gc3RhZ2VkIGJ5IHRoZSBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIoKSBob29rLAomIzQzOwkgKiBvd25pbmcgaXRzIGRvbWFpbiByZWZlcmVuY2UgYW5kIGFwcGxpZWQgYXQgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZgomIzQzOwkgKiB0aGUgZXhlY3V0aW9uIChicHJtX2NvbW1pdHRpbmdfY3JlZHMpLiAgT25seSBldmVyIHNldCBvbiB0aGUKJiM0MzsJICogY3JlZGVudGlhbHMgcHJlcGFyZWQgZm9yIGFuIGV4ZWN1dGlvbiwgYmV0d2VlbiB0aGUgc3RhZ2luZyBhbmQKJiM0MzsJICogZWl0aGVyIHRoZSBhcHBsaWNhdGlvbiBvciB0aGUgcmVsZWFzZSBvZiB0aGUgYWJvcnRlZCBjcmVkZW50aWFsczsKJiM0MzsJICogY29tbWl0dGVkIHRhc2sgY3JlZGVudGlhbHMgbmV2ZXIgY2FycnkgYSBzdGFnZWQgcmVzdHJpY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gc3RhZ2VkOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqLwomIzQzOwogI2lmZGVmIENPTkZJR19BVURJVAogCS8qKgogCSAqIEBkb21haW5fZXhlYzogQml0bWFzayBpZGVudGlmeWluZyB0aGUgZG9tYWluIGxheWVycyB0aGF0IHdlcmUgZW5mb3JjZWQgYnkKQEAgLTc1LDYgJiM0MzsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2NyZWRfY29weShzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqZHN0LAogCSpkc3QgPSAqc3JjOwogCiAJbGFuZGxvY2tfZ2V0X3J1bGVzZXQoc3JjLSZndDtkb21haW4pOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzOwkvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovCiYjNDM7CVdBUk5fT05fT05DRShzcmMtJmd0O3N0YWdlZC5kb21haW4pOwomIzQzOwlkc3QtJmd0O3N0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovCiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9jdXJyZW50X2RvbWFpbih2b2lkKQpAQCAtMTUzLDYgJiM0MzsxOTYsMTQgQEAgbGFuZGxvY2tfZ2V0X2FwcGxpY2FibGVfc3ViamVjdChjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3QgY3JlZCwKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO2ludCBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKAomIzQzOwljb25zdCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLAomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCwgY29uc3QgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKTsKJiM0MzsKJiM0Mzt2b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsCiYjNDM7CQkJCXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pOwomIzQzOwogX19pbml0IHZvaWQgbGFuZGxvY2tfYWRkX2NyZWRfaG9va3Modm9pZCk7CiAKICNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQ1JFRF9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oCmluZGV4IDA4ZDVmMmY2ZDMyMWEuLjBiZWRmZTY1MGVhMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oCkBAIC0zNyw2ICYjNDM7MzcsMTAgQEAKICNkZWZpbmUgTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGCUxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMKICNkZWZpbmUgTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGCSgoTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGICZsdDsmbHQ7IDEpIC0gMSkKIAomIzQzOy8qIFN1YnNldCBvZiB0aGUgcmVzdHJpY3Qtc2VsZiBmbGFncyBhcHBsaWNhYmxlIHRvIGFuIGV4ZWN1dGlvbi4gKi8KJiM0MzsjZGVmaW5lIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNIFwKJiM0MzsJKExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRiAmYW1wOyB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykKJiM0MzsKIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0xJTUlUU19IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmMgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmMKaW5kZXggNGRkMDllYTIyYzg0NC4uMTc2YzYyNmY5ZjEwNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuYwpAQCAtNTIwLDcgJiM0Mzs1MjAsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3J1bGVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmNvbnN0IHdvcmspCiAJZnJlZV9ydWxlc2V0KHJ1bGVzZXQpOwogfQogCi0vKiBPbmx5IGNhbGxlZCBieSBob29rX2NyZWRfZnJlZSgpLiAqLwomIzQzOy8qIEZvciBjb250ZXh0cyB0aGF0IGNhbm5vdCBzbGVlcCwgZS5nLiBob29rX2NyZWRfZnJlZSgpLiAqLwogdm9pZCBsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCkKIHsKIAlpZiAocnVsZXNldCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3J1bGVzZXQtJmd0O3VzYWdlKSkgewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oCmluZGV4IDA0MzdhZGYxNzQyODcuLmI2NWQxYzA3ZTE5MmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmgKQEAgLTIyNSw2ICYjNDM7MjI1LDkgQEAgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKgogbGFuZGxvY2tfbWVyZ2VfcnVsZXNldChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcGFyZW50LAogCQkgICAgICAgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQpOwogCiYjNDM7c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLAomIzQzOwkJCQkJCSAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSk7CiYjNDM7CiBjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZSAqCiBsYW5kbG9ja19maW5kX3J1bGUoY29uc3Qgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQsCiAJCSAgIGNvbnN0IHN0cnVjdCBsYW5kbG9ja19pZCBpZCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuYwppbmRleCA0N2RhYzE3MzZmMTAwLi4zYjdlMThlZGFkZmJjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbHNtX2hvb2tzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9sc20uaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7YnBmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2NyZWQuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VycmF0YS5oJiMzNDsKQEAgLTY4LDYgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGxhbmRsb2NrX2luaXQodm9pZCkKIAlsYW5kbG9ja19hZGRfdGFza19ob29rcygpOwogCWxhbmRsb2NrX2FkZF9mc19ob29rcygpOwogCWxhbmRsb2NrX2FkZF9uZXRfaG9va3MoKTsKJiM0MzsJbGFuZGxvY2tfYWRkX2JwZl9ob29rcygpOwogCWxhbmRsb2NrX2luaXRfaWQoKTsKIAlsYW5kbG9ja19pbml0aWFsaXplZCA9IHRydWU7CiAJcHJfaW5mbygmIzM0O1VwIGFuZCBydW5uaW5nLlxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmMKaW5kZXggMzZiMDI4OTJjNjJmNS4uODk5NjAxYWY3YzRlMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jCkBAIC0yOTMsOCAmIzQzOzI5Myw4IEBAIFNZU0NBTExfREVGSU5FMyhsYW5kbG9ja19jcmVhdGVfcnVsZXNldCwKICAqIFJldHVybnMgYW4gb3duZWQgcnVsZXNldCBmcm9tIGEgRkQuIEl0IGlzIHRodXMgbmVlZGVkIHRvIGNhbGwKICAqIGxhbmRsb2NrX3B1dF9ydWxlc2V0KCkgb24gdGhlIHJldHVybiB2YWx1ZS4KICAqLwotc3RhdGljIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpnZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCwKLQkJCQkJCSAgICBjb25zdCBmbW9kZV90IG1vZGUpCiYjNDM7c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLAomIzQzOwkJCQkJCSAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSkKIHsKIAlDTEFTUyhmZCwgcnVsZXNldF9mKShmZCk7CiAJc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7CkBAIC00NzYsNyAmIzQzOzQ3Niw3IEBAIFNZU0NBTExfREVGSU5FNChsYW5kbG9ja19hZGRfcnVsZSwgY29uc3QgaW50LCBydWxlc2V0X2ZkLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi8KLQlydWxlc2V0ID0gZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpOwomIzQzOwlydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpOwogCWlmIChJU19FUlIocnVsZXNldCkpCiAJCXJldHVybiBQVFJfRVJSKHJ1bGVzZXQpOwogCkBAIC01MjgsOSAmIzQzOzUyOCw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLAogewogCXN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0IF9fZnJlZShsYW5kbG9ja19wdXRfcnVsZXNldCkgPSBOVUxMOwogCXN0cnVjdCBjcmVkICpuZXdfY3JlZDsKLQlzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqbmV3X2xsY3JlZDsKLQlib29sIF9fbWF5YmVfdW51c2VkIGxvZ19zYW1lX2V4ZWMsIGxvZ19uZXdfZXhlYywgbG9nX3N1YmRvbWFpbnMsCi0JCXByZXZfbG9nX3N1YmRvbWFpbnM7CiYjNDM7CXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjsKJiM0MzsJaW50IGVycjsKIAogCWlmICghaXNfaW5pdGlhbGl6ZWQoKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNTQ3LDEzICYjNDM7NTQ2LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsCiAJICAgIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBUcmFuc2xhdGVzICYjMzQ7b2ZmJiMzNDsgZmxhZyB0byBib29sZWFuLiAqLwotCWxvZ19zYW1lX2V4ZWMgPSAhKGZsYWdzICZhbXA7IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NBTUVfRVhFQ19PRkYpOwotCS8qIFRyYW5zbGF0ZXMgJiMzNDtvbiYjMzQ7IGZsYWcgdG8gYm9vbGVhbi4gKi8KLQlsb2dfbmV3X2V4ZWMgPSAhIShmbGFncyAmYW1wOyBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7Ci0JLyogVHJhbnNsYXRlcyAmIzM0O29mZiYjMzQ7IGZsYWcgdG8gYm9vbGVhbi4gKi8KLQlsb2dfc3ViZG9tYWlucyA9ICEoZmxhZ3MgJmFtcDsgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpOwotCiAJLyoKIAkgKiBJdCBpcyBhbGxvd2VkIHRvIHNldCBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiB3aXRoCiAJICogLTEgYXMgcnVsZXNldF9mZCwgb3B0aW9uYWxseSBjb21iaW5lZCB3aXRoCkBAIC01NjQsNyAmIzQzOzU1Niw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLAogCSAgICAgIChmbGFncyAmYW1wOyB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgPT0KIAkJICAgICAgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpKSB7CiAJCS8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi8KLQkJcnVsZXNldCA9IGdldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1JFQUQpOwomIzQzOwkJcnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwKJiM0MzsJCQkJCQkgICAgICAgRk1PREVfQ0FOX1JFQUQpOwogCQlpZiAoSVNfRVJSKHJ1bGVzZXQpKQogCQkJcmV0dXJuIFBUUl9FUlIocnVsZXNldCk7CiAJfQpAQCAtNTc0LDUzICYjNDM7NTY3LDI4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLAogCWlmICghbmV3X2NyZWQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbmV3X2xsY3JlZCA9IGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpOwotCi0jaWZkZWYgQ09ORklHX0FVRElUCi0JcHJldl9sb2dfc3ViZG9tYWlucyA9ICFuZXdfbGxjcmVkLSZndDtsb2dfc3ViZG9tYWluc19vZmY7Ci0JbmV3X2xsY3JlZC0mZ3Q7bG9nX3N1YmRvbWFpbnNfb2ZmID0gIXByZXZfbG9nX3N1YmRvbWFpbnMgfHwKLQkJCQkJICFsb2dfc3ViZG9tYWluczsKLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KLQogCS8qCiAJICogVGhlIG9ubHkgY2FzZSB3aGVuIGEgcnVsZXNldCBtYXkgbm90IGJlIHNldCBpcyBpZgogCSAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NVQkRPTUFJTlNfT0ZGIGlzIHNldCAob3B0aW9uYWxseSB3aXRoCiAJICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZAogCSAqIG9wdGltaXplIHRoaXMgY2FzZSBieSBub3QgY2FsbGluZyBjb21taXRfY3JlZHMoKSBpZiB0aGlzIGZsYWcgd2FzCiAJICogYWxyZWFkeSBzZXQsIGJ1dCBpdCBpcyBub3Qgd29ydGggdGhlIGNvbXBsZXhpdHkuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWxlIGNvcHlpbmcgYW5kIG1hbmlwdWxhdGluZwomIzQzOwkgKiB0aGUgY3VycmVudCBjcmVkZW50aWFscyBiZWNhdXNlIHRoZXkgYXJlIGRlZGljYXRlZCBwZXIgdGhyZWFkLgogCSAqLwotCWlmIChydWxlc2V0KSB7Ci0JCS8qCi0JCSAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWxlIGNvcHlpbmcgYW5kCi0JCSAqIG1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBjcmVkZW50aWFscyBiZWNhdXNlIHRoZXkgYXJlCi0JCSAqIGRlZGljYXRlZCBwZXIgdGhyZWFkLgotCQkgKi8KLQkJc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IG5ld19kb20gPQotCQkJbGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLSZndDtkb21haW4sIHJ1bGVzZXQpOwotCQlpZiAoSVNfRVJSKG5ld19kb20pKSB7Ci0JCQlhYm9ydF9jcmVkcyhuZXdfY3JlZCk7Ci0JCQlyZXR1cm4gUFRSX0VSUihuZXdfZG9tKTsKLQkJfQotCi0jaWZkZWYgQ09ORklHX0FVRElUCi0JCW5ld19kb20tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX3NhbWVfZXhlYyA9IGxvZ19zYW1lX2V4ZWM7Ci0JCW5ld19kb20tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX25ld19leGVjID0gbG9nX25ld19leGVjOwotCQlpZiAoKCFsb2dfc2FtZV9leGVjICZhbXA7JmFtcDsgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpCi0JCQluZXdfZG9tLSZndDtoaWVyYXJjaHktJmd0O2xvZ19zdGF0dXMgPSBMQU5ETE9DS19MT0dfRElTQUJMRUQ7Ci0jZW5kaWYgLyogQ09ORklHX0FVRElUICovCi0KLQkJLyogUmVwbGFjZXMgdGhlIG9sZCAocHJlcGFyZWQpIGRvbWFpbi4gKi8KLQkJbGFuZGxvY2tfcHV0X3J1bGVzZXQobmV3X2xsY3JlZC0mZ3Q7ZG9tYWluKTsKLQkJbmV3X2xsY3JlZC0mZ3Q7ZG9tYWluID0gbmV3X2RvbTsKLQotI2lmZGVmIENPTkZJR19BVURJVAotCQluZXdfbGxjcmVkLSZndDtkb21haW5fZXhlYyB8PSBCSVQobmV3X2RvbS0mZ3Q7bnVtX2xheWVycyAtIDEpOwotI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwomIzQzOwllcnIgPSBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBydWxlc2V0LAomIzQzOwkJCQkJICAgZmxhZ3MsICZhbXA7cmVzdHJpY3Rpb24pOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlhYm9ydF9jcmVkcyhuZXdfY3JlZCk7CiYjNDM7CQlyZXR1cm4gZXJyOwogCX0KIAomIzQzOwlsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihsYW5kbG9ja19jcmVkKG5ld19jcmVkKSwgJmFtcDtyZXN0cmljdGlvbik7CiYjNDM7CiAJaWYgKGZsYWdzICZhbXA7IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMpIHsKLQkJY29uc3QgaW50IGVyciA9IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcygKLQkJCWN1cnJlbnRfY3JlZCgpLCBuZXdfY3JlZCk7CiYjNDM7CQllcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY3VycmVudF9jcmVkKCksCiYjNDM7CQkJCQkJCW5ld19jcmVkKTsKIAkJaWYgKGVycikgewogCQkJYWJvcnRfY3JlZHMobmV3X2NyZWQpOwogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDIuLmU5ZDhjOTQ5MmJkYjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNTQ0MSw2ICYjNDM7NTQ0MSwxMTIgQEAgaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKQogCXJldHVybiBjYWxsX2ludF9ob29rKGJwZl90b2tlbl9jYXBhYmxlLCB0b2tlbiwgY2FwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKSAtIEdldCBhbiBMU00gcG9saWN5IG9iamVjdCBmcm9tIGEgZmQKJiM0MzsgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gYXNrZWQgdG8gaW50ZXJwcmV0IEBmZAomIzQzOyAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIHJlZmVycmluZyB0byBhIHBvbGljeSBvYmplY3QsIHJlc29sdmVkIGluIHRoZQomIzQzOyAqICAgICAgY2FsbGluZyB0YXNrJiMzOTtzIGZpbGUgZGVzY3JpcHRvciB0YWJsZQomIzQzOyAqIEBwb2xpY3k6IHJlY2VpdmVzIHRoZSByZWZlcmVuY2VkIHBvbGljeSBvYmplY3QgaW4gdGhlIG1lbWJlciBvZiB0aGUKJiM0MzsgKiAgICAgICAgICBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQKJiM0MzsgKgomIzQzOyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHRyYW5zbGF0ZSBAZmQgaW50byBhIHJlZmVyZW5jZQomIzQzOyAqIGNvdW50ZWQgcG9saWN5IG9iamVjdC4gIFRoZSBjYWxsZXIgbXVzdCBub3QgZGVyZWZlcmVuY2UgdGhlCiYjNDM7ICogcmV0dXJuZWQgaGFuZGxlLCBtdXN0IG9ubHkgaGFuZCBpdCBiYWNrIHRvIHRoZSBzYW1lIExTTSwgZS5nLgomIzQzOyAqIHRocm91Z2ggc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCksIGFuZCBtdXN0IHJlbGVhc2UgaXQKJiM0MzsgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpLiAgT25seSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbiBvZgomIzQzOyAqIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgaXMgY2FsbGVkLiAgVGhlIGhvb2sgaXMgb25seSBjYWxsZWQKJiM0MzsgKiBmcm9tIGEgY29udGV4dCB0aGF0IG1heSBzbGVlcC4KJiM0MzsgKgomIzQzOyAqIEFuIGltcGxlbWVudGF0aW9uIG11c3QgZmlsbCBpdHMgb3duIG1lbWJlciBvZiBAcG9saWN5IHdpdGggYQomIzQzOyAqIHJlZmVyZW5jZSB0aGF0IHJlbWFpbnMgdmFsaWQgdW50aWwgaXQgaXMgcmVsZWFzZWQgdGhyb3VnaCB0aGUKJiM0MzsgKiBwb2xpY3lfa3B0cl9wdXQgaG9vaywgYW5kIG11c3Qgbm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBAZmQgYmV5b25kCiYjNDM7ICogd2hhdCBpdHMgb3duIHVzZXJzcGFjZSBBUEkgY3JlYXRlZCBpdCB3aXRoLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgQHBvbGljeSBob2xkcyBhIHJlZmVyZW5jZSBjb3VudGVkIHBvbGljeQomIzQzOyAqIG9iamVjdCwgLUVPUE5PVFNVUFAgaWYgdGhlIExTTSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGhvb2ssIG5lZ2F0aXZlCiYjNDM7ICogdmFsdWVzIG9uIG90aGVyIGZhaWx1cmVzLgomIzQzOyAqLwomIzQzO2ludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLAomIzQzOwkJCQkgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDsKJiM0MzsKJiM0MzsJbHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX2Zyb21fZmQpIHsKJiM0MzsJCWlmIChzY2FsbC0mZ3Q7aGwtJmd0O2xzbWlkLSZndDtpZCAhPSBsc21pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJldHVybiBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2sucG9saWN5X2twdHJfZnJvbV9mZChmZCwgcG9saWN5KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTFNNX1JFVF9ERUZBVUxUKHBvbGljeV9rcHRyX2Zyb21fZmQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKSAtIFB1dCBhIHJlZmVyZW5jZSBvbiBhbiBMU00gcG9saWN5IG9iamVjdAomIzQzOyAqIEBsc21pZDogTFNNX0lEXyogdmFsdWUgb2YgdGhlIExTTSBvd25pbmcgQHBvbGljeQomIzQzOyAqIEBwb2xpY3k6IHRoZSBwb2xpY3kgb2JqZWN0LCBpbiB0aGUgbWVtYmVyIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieQomIzQzOyAqICAgICAgICAgIEBsc21pZAomIzQzOyAqCiYjNDM7ICogUmVsZWFzZSBhIHJlZmVyZW5jZSBwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKJiM0MzsgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCkuICBPbmx5IHRoZSBob29rIGltcGxlbWVudGF0aW9uCiYjNDM7ICogb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpcyBjYWxsZWQsIGFuZCBAcG9saWN5IG11c3QgaGF2ZQomIzQzOyAqIGJlZW4gb2J0YWluZWQgZnJvbSB0aGF0IHNhbWUgTFNNLiAgQW4gaW1wbGVtZW50YXRpb24gbXVzdCBzdXBwb3J0CiYjNDM7ICogYmVpbmcgY2FsbGVkIGZyb20gYSBjb250ZXh0IHRoYXQgY2Fubm90IHNsZWVwOiB0aGUgcmVsZWFzZSBvZiBCUEYKJiM0MzsgKiBtYW5hZ2VkIHJlZmVyZW5jZXMgbWF5IGJlIGRyaXZlbiBmcm9tIG9iamVjdCBkZXN0cnVjdG9ycy4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KQomIzQzO3sKJiM0MzsJc3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7CiYjNDM7CiYjNDM7CWxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBwb2xpY3lfa3B0cl9wdXQpIHsKJiM0MzsJCWlmIChzY2FsbC0mZ3Q7aGwtJmd0O2xzbWlkLSZndDtpZCAhPSBsc21pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXNjYWxsLSZndDtobC0mZ3Q7aG9vay5wb2xpY3lfa3B0cl9wdXQocG9saWN5KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwkvKiBBIGhlbGQgcmVmZXJlbmNlIGltcGxpZXMgdGhlIG1hdGNoaW5nIExTTSBpbXBsZW1lbnRzIHRoZSBob29rLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cigpIC0gRW5mb3JjZSBhIHBvbGljeSBvbiBleGVjIGNyZWRlbnRpYWxzCiYjNDM7ICogQGxzbWlkOiBMU01fSURfKiB2YWx1ZSBvZiB0aGUgTFNNIG93bmluZyBAcG9saWN5CiYjNDM7ICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QKJiM0MzsgKiBAcG9saWN5OiB0aGUgcG9saWN5IG9iamVjdCB0byBlbmZvcmNlLCBpbiB0aGUgbWVtYmVyIG9mIHRoZSBMU00KJiM0MzsgKiAgICAgICAgICBpZGVudGlmaWVkIGJ5IEBsc21pZAomIzQzOyAqIEBmbGFnczogTFNNLXNwZWNpZmljIGVuZm9yY2VtZW50IGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBBc2sgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCB0byByZXN0cmljdCB0aGUgY3JlZGVudGlhbHMKJiM0MzsgKiBwcmVwYXJlZCBpbiBAYnBybSB3aXRoIEBwb2xpY3ksIHNvIHRoYXQgdGhlIGV4ZWN1dGVkIHRhc2sgc3RhcnRzCiYjNDM7ICogY29uZmluZWQgYnkgaXQuICBAcG9saWN5IG11c3QgaGF2ZSBiZWVuIG9idGFpbmVkIGZyb20gdGhlIHNhbWUgTFNNCiYjNDM7ICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCk7IHRoZSBob29rIGJvcnJvd3MgdGhlCiYjNDM7ICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIHJlbWFpbnMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBpdC4KJiM0MzsgKiBPbmx5IHRoZSBob29rIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgaXMKJiM0MzsgKiBjYWxsZWQ6IGFuIExTTSBuZXZlciByZWNlaXZlcyBhIHBvbGljeSBvYmplY3QgbWVhbnQgZm9yIGFub3RoZXIgTFNNLgomIzQzOyAqCiYjNDM7ICogVGhpcyBob29rIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIGFuIGV4ZWMgc2VjdXJpdHkgY29udGV4dCB3aGVyZQomIzQzOyAqIEBicHJtJiMzOTtzIGNyZWRlbnRpYWxzIGFyZSBwcmVwYXJlZCBidXQgbm90IHlldCBjb21taXR0ZWQsIGkuZS4gZnJvbSBhCiYjNDM7ICogYnBybV9jcmVkc19mb3JfZXhlYygpIG9yIGJwcm1fY3JlZHNfZnJvbV9maWxlKCkgaG9vay4KJiM0MzsgKgomIzQzOyAqIEhvdyBAcG9saWN5IGNvbXBvc2VzIHdpdGggcmVzdHJpY3Rpb25zIHRoZSBjcmVkZW50aWFscyBhbHJlYWR5CiYjNDM7ICogY2FycnkgaXMgZGVmaW5lZCBieSB0aGUgaW1wbGVtZW50aW5nIExTTSwgYXMgaXMgdGhlIG1lYW5pbmcgb2YKJiM0MzsgKiBAZmxhZ3MsIHVuc3VwcG9ydGVkIHZhbHVlcyBvZiB3aGljaCBpdCBtdXN0IHJlamVjdCB3aXRoIC1FSU5WQUwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiB0aGUgTFNNIGRvZXMgbm90CiYjNDM7ICogaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZmFpbHVyZXMuCiYjNDM7ICovCiYjNDM7aW50IHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cih1NjQgbHNtaWQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiYjNDM7CQkJCSAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDsKJiM0MzsKJiM0MzsJbHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cikgewomIzQzOwkJaWYgKHNjYWxsLSZndDtobC0mZ3Q7bHNtaWQtJmd0O2lkICE9IGxzbWlkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmV0dXJuIHNjYWxsLSZndDtobC0mZ3Q7aG9vay5icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoYnBybSwgcG9saWN5LAomIzQzOwkJCQkJCQkJIGZsYWdzKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTFNNX1JFVF9ERUZBVUxUKGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZWN1cml0eV9icGZfbWFwX2ZyZWUoKSAtIEZyZWUgYSBicGYgbWFwJiMzOTtzIExTTSBibG9iCiAgKiBAbWFwOiBicGYgbWFwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwppbmRleCBlYTcwNDRmMzBhZGMzLi4yZmE3MzQ0OTc0NjEyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKQEAgLTEyMCw2ICYjNDM7MTIwLDcgQEAgQ09ORklHX1NBTVBMRVM9eQogQ09ORklHX1NBTVBMRV9MSVZFUEFUQ0g9bQogQ09ORklHX1NFQ1VSSVRZPXkKIENPTkZJR19TRUNVUklUWUZTPXkKJiM0MztDT05GSUdfU0VDVVJJVFlfTEFORExPQ0s9eQogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19URVNUX0JQRj1tCiBDT05GSUdfVURNQUJVRj15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0CmluZGV4IDUyM2UwZDI5YmJkNDMuLjJjNGQ4NTdmNjlmNTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0CkBAIC0xMjUsNyAmIzQzOzEyNSw3IEBAIENPTkZJR19MRUdBQ1lfVlNZU0NBTExfTk9ORT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMQogQ09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0wCiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTFNNPSYjMzQ7c2VsaW51eCxicGYsaW50ZWdyaXR5JiMzNDsKJiM0MztDT05GSUdfTFNNPSYjMzQ7bGFuZGxvY2ssc2VsaW51eCxicGYsaW50ZWdyaXR5JiMzNDsKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfTUNPUkUyPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5MTkyOWY5OGU4OGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jCkBAIC0wLDAgJiM0MzsxLDMyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzICZsdDt1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbSZndDsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sYW5kbG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7LyogRmFsbGJhY2tzIGZvciBvbGQgc3lzdGVtIGhlYWRlcnMuICovCiYjNDM7I2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTgomIzQzOyNkZWZpbmUgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT04gKDFVICZsdDsmbHQ7IDEpCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DCiYjNDM7I2RlZmluZSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DICgxVSAmbHQ7Jmx0OyAzKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3J1bGVzZXQodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5oYW5kbGVkX2FjY2Vzc19mcyA9IExBTkRMT0NLX0FDQ0VTU19GU19XUklURV9GSUxFLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LCAmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlc2V0X3Byb2dfc3RhdGUoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwpCiYjNDM7ewomIzQzOwlza2VsLSZndDtic3MtJmd0O2NhbGxlZCA9IGZhbHNlOwomIzQzOwlza2VsLSZndDtic3MtJmd0O25vX3J1bGVzZXQgPSBmYWxzZTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdF9lcnIgPSAtMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdDJfZXJyID0gLTE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7a2Z1bmNfZmxhZ3MgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2RvdWJsZV9jYWxsID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUnVucyB0aGUgc3lzY2FsbCBwcm9ncmFtIHRoYXQgYWNxdWlyZXMgdGhlIHJ1bGVzZXQgZnJvbQomIzQzOyAqIEBydWxlc2V0X2ZkLCBpbiB0aGUgcnVubmVyJiMzOTtzIGZkIHRhYmxlLCBhbmQgcGFya3MgaXQgaW4gdGhlIG1hcCBrcHRyCiYjNDM7ICogc2xvdCBmb3IgdGhlIExTTSBwcm9ncmFtLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbG9hZF9ydWxlc2V0X2ludG9fbWFwKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5sb2FkX3J1bGVzZXQpLAomIzQzOwkJCQkgICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb2FkX3J1bGVzZXRfcnVuJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtsb2FkX3J1bGVzZXRfcmV0dmFsJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O2dvdF9udWxsX2Zvcl9iYWRfZmQsICYjMzQ7YmFkX2ZkX251bGwmIzM0Oyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZvcmtzIGEgY2hpbGQgdGhhdCBleGVjcyAmIzM0O3NoIC1jICYjMzk7Jmx0O3NoZWxsX2NtZCZndDsmIzM5OyYjMzQ7LiAgVGhlIG1vbml0b3JlZCBwaWQKJiM0MzsgKiBpcyBvbmx5IGtub3duLCBhbmQgY2FuIG9ubHkgYmUgcHVibGlzaGVkIHRvIHRoZSBCUEYgcHJvZ3JhbSwgb25jZQomIzQzOyAqIHRoZSBjaGlsZCBleGlzdHM6IHRoZSBjaGlsZCB3YWl0cyBvbiBhIHBpcGUgdW50aWwgdGhlIHBhcmVudCBoYXMKJiM0MzsgKiB1cGRhdGVkIGl0LiAgUmV0dXJucyB0aGUgY2hpbGQmIzM5O3MgZXhpdCBzdGF0dXMsIG9yIC0xIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnVuX2V4ZWNfY2hpbGQoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwsCiYjNDM7CQkJICBib29sIG1vbml0b3JlZCwgY29uc3QgY2hhciAqc2hlbGxfY21kKQomIzQzO3sKJiM0MzsJaW50IHBpcGVfZmRzWzJdLCBzdGF0dXM7CiYjNDM7CWNoYXIgYnVmID0gMDsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKSB7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1swXSk7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1sxXSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQljaGFyICphcmd2W10gPSB7ICYjMzQ7c2gmIzM0OywgJiMzNDstYyYjMzQ7LCAoY2hhciAqKXNoZWxsX2NtZCwgTlVMTCB9OwomIzQzOwomIzQzOwkJY2xvc2UocGlwZV9mZHNbMV0pOwomIzQzOwkJcmVhZChwaXBlX2Zkc1swXSwgJmFtcDtidWYsIDEpOwomIzQzOwkJY2xvc2UocGlwZV9mZHNbMF0pOwomIzQzOwkJZXhlY3YoJiMzNDsvYmluL3NoJiMzNDssIGFyZ3YpOwomIzQzOwkJZXhpdCgxMjcpOwomIzQzOwl9CiYjNDM7CWNsb3NlKHBpcGVfZmRzWzBdKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gbW9uaXRvcmVkID8gcGlkIDogMDsKJiM0MzsJd3JpdGUocGlwZV9mZHNbMV0sICZhbXA7YnVmLCAxKTsKJiM0MzsJY2xvc2UocGlwZV9mZHNbMV0pOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIDApLCBwaWQsICYjMzQ7d2FpdHBpZCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgJiMzNDtjaGlsZF9leGl0ZWQmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEV4aXQgY29kZXM6IDQgPSB1bmV4cGVjdGVkIHdyaXRlIG91dGNvbWUsIDAgPSBldmVyeXRoaW5nIGFzCiYjNDM7ICogZXhwZWN0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZm9ybWF0X2NoaWxkX2NtZChjaGFyICpjbWQsIHNpemVfdCBsZW4sIGJvb2wgZXhwZWN0X3dyaXRlX29rLAomIzQzOwkJCSAgICAgY29uc3QgY2hhciAqdG1wX3BhdGgpCiYjNDM7ewomIzQzOwlpZiAoZXhwZWN0X3dyaXRlX29rKQomIzQzOwkJc25wcmludGYoY21kLCBsZW4sICYjMzQ7ZWNobyB4ICZndDsgJXMgfHwgZXhpdCA0OyBleGl0IDAmIzM0OywgdG1wX3BhdGgpOwomIzQzOwllbHNlCiYjNDM7CQlzbnByaW50ZihjbWQsIGxlbiwKJiM0MzsJCQkgJiMzNDtpZiBlY2hvIHggJmd0OyAlcyAyJmd0Oy9kZXYvbnVsbDsgdGhlbiBleGl0IDQ7IGZpOyBleGl0IDAmIzM0OywKJiM0MzsJCQkgdG1wX3BhdGgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3Jlc3RyaWN0X2JpbnBybSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwgPSBOVUxMOwomIzQzOwljaGFyIHRtcF9wYXRoW10gPSAmIzM0Oy90bXAvbHNtX3BvbGljeV9rZnVuY3NfWFhYWFhYJiMzNDs7CiYjNDM7CWNoYXIgY21kWzI1Nl07CiYjNDM7CWludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDsKJiM0MzsKJiM0MzsJdG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHRtcF9mZCwgMCwgJiMzNDtta3N0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwljbG9zZSh0bXBfZmQpOwomIzQzOwomIzQzOwlydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTsKJiM0MzsJaWYgKHJ1bGVzZXRfZmQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZWxzZQomIzQzOwkJCUFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCAmIzM0O2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0JiMzNDspOwomIzQzOwkJZ290byBvdXRfdW5saW5rOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlza2VsLSZndDtic3MtJmd0O3J1bGVzZXRfZmQgPSBydWxlc2V0X2ZkOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19hdHRhY2goc2tlbCksICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGxvYWRfcnVsZXNldF9pbnRvX21hcChza2VsKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBDb250cm9sOiBhbiB1bm1vbml0b3JlZCBleGVjdXRpb24gbWF5IHdyaXRlIHRvIHRoZSB0bXAgZmlsZS4gKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJZm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCB0cnVlLCB0bXBfcGF0aCk7CiYjNDM7CXJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIGZhbHNlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7Y29udHJvbF9jaGlsZF9leGl0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9GQUxTRShza2VsLSZndDtic3MtJmd0O2NhbGxlZCwgJiMzNDtjb250cm9sX25vdF9tb25pdG9yZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgbW9uaXRvcmVkIGV4ZWN1dGlvbiBzdGFydHMgbGFuZGxvY2tlZDogdGhlIHJ1bGVzZXQgaGFuZGxlcwomIzQzOwkgKiBMQU5ETE9DS19BQ0NFU1NfRlNfV1JJVEVfRklMRSB3aXRob3V0IGFueSBydWxlLCBzbyB0aGUgd3JpdGUKJiM0MzsJICogbXVzdCBmYWlsLgomIzQzOwkgKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJZm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCBmYWxzZSwgdG1wX3BhdGgpOwomIzQzOwlyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7cmVzdHJpY3RlZF9jaGlsZF9leGl0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbGVkLCAmIzM0O2xzbV9wcm9nX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0ZBTFNFKHNrZWwtJmd0O2Jzcy0mZ3Q7bm9fcnVsZXNldCwgJiMzNDtydWxlc2V0X2luX21hcCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3RfZXJyLCAwLCAmIzM0O3Jlc3RyaWN0X2JpbnBybSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIGF1ZGl0IGxvZyBmbGFncyBvZiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGFwcGx5IHRvby4gKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtrZnVuY19mbGFncyA9IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OOwomIzQzOwlmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIGZhbHNlLCB0bXBfcGF0aCk7CiYjNDM7CXJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIHRydWUsIGNtZCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtsb2dfZmxhZ3NfY2hpbGRfZXhpdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdF9lcnIsIDAsICYjMzQ7bG9nX2ZsYWdzX3Jlc3RyaWN0X2JpbnBybSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyB0YXJnZXRzIHRoZSBjYWxsaW5nIHRocmVhZHMsIG5vdAomIzQzOwkgKiBhbiBleGVjdXRpb246IHRoZSBrZnVuYyBtdXN0IHJlamVjdCBpdCBhbmQgdGhlIGV4ZWN1dGlvbiBtdXN0CiYjNDM7CSAqIHN0YXkgdW5yZXN0cmljdGVkLgomIzQzOwkgKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtrZnVuY19mbGFncyA9IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkM7CiYjNDM7CWZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgdHJ1ZSwgdG1wX3BhdGgpOwomIzQzOwlyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7dHN5bmNfY2hpbGRfZXhpdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O2NhbGxlZCwgJiMzNDt0c3luY19wcm9nX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3RfZXJyLCAtRUlOVkFMLCAmIzM0O3RzeW5jX3JlamVjdGVkJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHNlY29uZCBjYWxsIG9uIHRoZSBzYW1lIGV4ZWN1dGlvbiByZXBsYWNlcyB0aGUgc3RhZ2VkCiYjNDM7CSAqIGRvbWFpbiAoYW5kIHJlbGVhc2VzIHRoZSBmaXJzdCBvbmUpOiB0aGUgcmVzdWx0IGlzIGEgc2luZ2xlCiYjNDM7CSAqIHJlc3RyaWN0aW9uLCBub3QgYW4gZXJyb3IuCiYjNDM7CSAqLwomIzQzOwlyZXNldF9wcm9nX3N0YXRlKHNrZWwpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2RvdWJsZV9jYWxsID0gdHJ1ZTsKJiM0MzsJZm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCBmYWxzZSwgdG1wX3BhdGgpOwomIzQzOwlyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7ZG91YmxlX2NoaWxkX2V4aXQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3RfZXJyLCAwLCAmIzM0O2RvdWJsZV9yZXN0cmljdF9maXJzdCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3QyX2VyciwgMCwgJiMzNDtkb3VibGVfcmVzdHJpY3Rfc2Vjb25kJiMzNDspOwomIzQzO291dDoKJiM0MzsJbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTsKJiM0MzsJY2xvc2UocnVsZXNldF9mZCk7CiYjNDM7b3V0X3VubGluazoKJiM0MzsJdW5saW5rKHRtcF9wYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkCiYjNDM7ICogZG9tYWluIHJlbGVhc2VkLCB3aGVuIHRoZSBleGVjdXRpb24gZmFpbHMgYWZ0ZXIgdGhlIGJwcm0gaG9vazogdGhlCiYjNDM7ICogY2FsbGluZyB0YXNrIG11c3Qgbm90IGVuZCB1cCBsYW5kbG9ja2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcmVzdHJpY3RfYmlucHJtX2Rpc2NhcmQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsID0gTlVMTDsKJiM0MzsJY2hhciB0bXBfcGF0aFtdID0gJiMzNDsvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWCYjMzQ7OwomIzQzOwljaGFyIGdhcmJhZ2VfcGF0aFtdID0gJiMzNDsvdG1wL2xzbV9wb2xpY3lfZ2FyYmFnZV9YWFhYWFgmIzM0OzsKJiM0MzsJaW50IHJ1bGVzZXRfZmQgPSAtMSwgdG1wX2ZkLCBnYXJiYWdlX2ZkLCBwaXBlX2Zkc1syXSwgc3RhdHVzOwomIzQzOwljaGFyIGJ1ZiA9IDA7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsKJiM0MzsJdG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHRtcF9mZCwgMCwgJiMzNDtta3N0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwljbG9zZSh0bXBfZmQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbiBleGVjdXRhYmxlIGZpbGUgdGhhdCBubyBiaW5mbXQgaGFuZGxlciBhY2NlcHRzOiB0aGUgZXhlYwomIzQzOwkgKiBmYWlscyB3aXRoIEVOT0VYRUMgYWZ0ZXIgYnBybV9jcmVkc19mb3JfZXhlYygpIGhhcyBydW4uCiYjNDM7CSAqLwomIzQzOwlnYXJiYWdlX2ZkID0gbWtzdGVtcChnYXJiYWdlX3BhdGgpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShnYXJiYWdlX2ZkLCAwLCAmIzM0O21rc3RlbXBfZ2FyYmFnZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X3VubGluazsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod3JpdGUoZ2FyYmFnZV9mZCwgJiMzNDtqdW5rXG4mIzM0OywgNSksIDUsICYjMzQ7d3JpdGVfZ2FyYmFnZSYjMzQ7KSkgewomIzQzOwkJY2xvc2UoZ2FyYmFnZV9mZCk7CiYjNDM7CQlnb3RvIG91dF91bmxpbms7CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfT0soZmNobW9kKGdhcmJhZ2VfZmQsIDA3MDApLCAmIzM0O2NobW9kX2dhcmJhZ2UmIzM0OykpIHsKJiM0MzsJCWNsb3NlKGdhcmJhZ2VfZmQpOwomIzQzOwkJZ290byBvdXRfdW5saW5rOwomIzQzOwl9CiYjNDM7CWNsb3NlKGdhcmJhZ2VfZmQpOwomIzQzOwomIzQzOwlydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTsKJiM0MzsJaWYgKHJ1bGVzZXRfZmQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZWxzZQomIzQzOwkJCUFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCAmIzM0O2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0JiMzNDspOwomIzQzOwkJZ290byBvdXRfdW5saW5rOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlza2VsLSZndDtic3MtJmd0O3J1bGVzZXRfZmQgPSBydWxlc2V0X2ZkOwomIzQzOwlyZXNldF9wcm9nX3N0YXRlKHNrZWwpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19hdHRhY2goc2tlbCksICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGxvYWRfcnVsZXNldF9pbnRvX21hcChza2VsKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQljaGFyICphcmd2W10gPSB7ICYjMzQ7Z2FyYmFnZSYjMzQ7LCBOVUxMIH07CiYjNDM7CQlpbnQgZmQ7CiYjNDM7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1sxXSk7CiYjNDM7CQlyZWFkKHBpcGVfZmRzWzBdLCAmYW1wO2J1ZiwgMSk7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1swXSk7CiYjNDM7CQlleGVjdihnYXJiYWdlX3BhdGgsIGFyZ3YpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBmYWlsZWQgZXhlY3V0aW9uIG11c3QgbGVhdmUgbm8gdHJhY2U6IG5vCiYjNDM7CQkgKiBMYW5kbG9jayBkb21haW4sIGkuZS4gd3JpdGluZyBtdXN0IHN0aWxsIHdvcmsKJiM0MzsJCSAqIChleGl0IDYpLgomIzQzOwkJICovCiYjNDM7CQlmZCA9IG9wZW4odG1wX3BhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyk7CiYjNDM7CQlpZiAoZmQgJmx0OyAwKQomIzQzOwkJCWV4aXQoNik7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlleGl0KDApOwomIzQzOwl9CiYjNDM7CWNsb3NlKHBpcGVfZmRzWzBdKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gcGlkOwomIzQzOwl3cml0ZShwaXBlX2Zkc1sxXSwgJmFtcDtidWYsIDEpOwomIzQzOwljbG9zZShwaXBlX2Zkc1sxXSk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCksIHBpZCwgJiMzNDt3YWl0cGlkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksICYjMzQ7Y2hpbGRfZXhpdGVkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCAwLCAmIzM0O2Rpc2NhcmRfY2hpbGRfZXhpdCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtjYWxsZWQsICYjMzQ7bHNtX3Byb2dfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdF9lcnIsIDAsICYjMzQ7cmVzdHJpY3RfYmlucHJtJiMzNDspOwomIzQzO291dDoKJiM0MzsJbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTsKJiM0MzsJaWYgKHJ1bGVzZXRfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHJ1bGVzZXRfZmQpOwomIzQzO291dF91bmxpbms6CiYjNDM7CXVubGluayhnYXJiYWdlX3BhdGgpOwomIzQzOwl1bmxpbmsodG1wX3BhdGgpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfbHNtX3BvbGljeV9rZnVuY3Modm9pZCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7cmVzdHJpY3RfYmlucHJtJiMzNDspKQomIzQzOwkJdGVzdF9yZXN0cmljdF9iaW5wcm0oKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyZXN0cmljdF9iaW5wcm1fZGlzY2FyZCYjMzQ7KSkKJiM0MzsJCXRlc3RfcmVzdHJpY3RfYmlucHJtX2Rpc2NhcmQoKTsKJiM0MzsJUlVOX1RFU1RTKGxzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjAzMzVkYjU0NzA0MDAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jCkBAIC0wLDAgJiM0MzsxLDEwMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzICZsdDt1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbSZndDsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0OwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKgomIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkCiYjNDM7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCkgX19rc3ltOwomIzQzO2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAomIzQzOwkJCQkJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LAomIzQzOwkJCQkJdTMyIGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgTFNNIHBvbGljeSBrZnVuY3MgYXJlIGxpbWl0ZWQgdG8gTFNNIGFuZCBzeXNjYWxsIHByb2dyYW1zIGJ5CiYjNDM7ICogdGhlIEJQRi1zaWRlIGtmdW5jIGZpbHRlcjogYSB0cmFjaW5nIHByb2dyYW0gY2FsbGluZyBvbmUgbXVzdCBmYWlsCiYjNDM7ICogdmVyaWZpY2F0aW9uLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3RwX2J0Zi90YXNrX25ld3Rhc2smIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0OwomIzQzOwomIzQzOwlydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpOwomIzQzOwlpZiAocnVsZXNldCkKJiM0MzsJCWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChydWxlc2V0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBydWxlc2V0IGZkIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiB0aGUgZmQgdGFibGUgb2YgdGhlIHRhc2sgdGhhdAomIzQzOyAqIHNldCB0aGUgcnVsZXNldCB1cDogdGhlIGFjcXVpcmUga2Z1bmMgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGwKJiM0MzsgKiBwcm9ncmFtcyBhbmQgbXVzdCBiZSByZWplY3RlZCBpbiBhbiBMU00gcHJvZ3JhbSwgZXZlbiBvbiBhbgomIzQzOyAqIGFsbG93ZWQgaG9vay4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0cobHNtX2dldCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDsKJiM0MzsKJiM0MzsJcnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTsKJiM0MzsJaWYgKHJ1bGVzZXQpCiYjNDM7CQlicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVuZm9yY2VtZW50IG5lZWRzIGFuIGV4ZWN1dGlvbiB0byByZXN0cmljdDogdGhlIGVuZm9yY2VtZW50IGtmdW5jCiYjNDM7ICogaXMgZXhjbHVzaXZlIHRvIHRoZSBzbGVlcGFibGUgYnBybSBMU00gaG9va3MgYW5kIG11c3QgYmUgcmVqZWN0ZWQKJiM0MzsgKiBpbiBhIHN5c2NhbGwgcHJvZ3JhbS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSBpcyBub3QgYWxsb3dlZCYjMzQ7KQomIzQzO2ludCBzeXNjYWxsX3Jlc3RyaWN0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKE5VTEwsIE5VTEwsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFueSBMU00gYXR0YWNoIHBvaW50IG90aGVyIHRoYW4gdGhlIHNsZWVwYWJsZSBicHJtIGhvb2tzIG11c3QgYmUKJiM0MzsgKiByZWplY3RlZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtsc20ucy9maWxlX29wZW4mIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0cod3JvbmdfaG9vaywgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoTlVMTCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBrZnVuY3MgbWF5IHNsZWVwOiBhIG5vbi1zbGVlcGFibGUgcHJvZ3JhbSBvbiBhbiBhbGxvd2VkIGhvb2sKJiM0MzsgKiBtdXN0IGJlIHJlamVjdGVkLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O2xzbS9icHJtX2NyZWRzX2Zvcl9leGVjJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhub25zbGVlcGFibGVfcHJvZywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChOVUxMKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIGFjcXVpcmVkIHJ1bGVzZXQgcmVmZXJlbmNlIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHJldHVybmluZy4gKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UmIzM0OykKJiM0MztpbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEwNzIwNmFlMTQ0ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMKQEAgLTAsMCAmIzQzOzEsMTA3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgJmx0O3V0aWxpdHllbWFsNzdAZ21haWwuY29tJmd0OyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0OwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKgomIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkCiYjNDM7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCkgX19rc3ltOwomIzQzO2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAomIzQzOwkJCQkJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LAomIzQzOwkJCQkJdTMyIGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IHJ1bGVzZXRfc2xvdCB7CiYjNDM7CXN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCBfX2twdHIgKnJ1bGVzZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgcnVsZXNldF9zbG90KTsKJiM0Mzt9IHJ1bGVzZXRfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBydWxlc2V0X2ZkOwomIzQzO3UzMiBrZnVuY19mbGFnczsKJiM0Mztib29sIGRvdWJsZV9jYWxsOwomIzQzO2Jvb2wgZ290X251bGxfZm9yX2JhZF9mZDsKJiM0Mztib29sIG5vX3J1bGVzZXQ7CiYjNDM7aW50IHJlc3RyaWN0X2VycjsKJiM0MztpbnQgcmVzdHJpY3QyX2VycjsKJiM0Mztib29sIGNhbGxlZDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJ1bnMgaW4gdGhlIHRlc3QgcnVubmVyJiMzOTtzIGNvbnRleHQgdGhyb3VnaCBCUEZfUFJPR19SVU46CiYjNDM7ICogQHJ1bGVzZXRfZmQgaXMgcmVzb2x2ZWQgaW4gdGhlIHJ1bm5lciYjMzk7cyBmZCB0YWJsZSBhbmQgdGhlIGFjcXVpcmVkCiYjNDM7ICogcnVsZXNldCBpcyBoYW5kZWQgdG8gdGhlIExTTSBwcm9ncmFtIHRocm91Z2ggdGhlIG1hcCBrcHRyIHNsb3QuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBsb2FkX3J1bGVzZXQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkOwomIzQzOwlzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90OwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJc2xvdCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtydWxlc2V0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXNsb3QpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJLyogQSBmZCB0aGF0IGlzIG5vdCBhIExhbmRsb2NrIHJ1bGVzZXQgbXVzdCByZXNvbHZlIHRvIE5VTEwuICovCiYjNDM7CXJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7CiYjNDM7CWlmICghcnVsZXNldCkKJiM0MzsJCWdvdF9udWxsX2Zvcl9iYWRfZmQgPSB0cnVlOwomIzQzOwllbHNlCiYjNDM7CQlicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7CiYjNDM7CiYjNDM7CXJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkKTsKJiM0MzsJaWYgKCFydWxlc2V0KQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDtzbG90LSZndDtydWxlc2V0LCBydWxlc2V0KTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChvbGQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtLnMvYnBybV9jcmVkc19mb3JfZXhlYyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhyZXN0cmljdF9leGVjLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkOwomIzQzOwlzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90OwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKG1vbml0b3JlZF9waWQgIT0gKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljYWxsZWQgPSB0cnVlOwomIzQzOwomIzQzOwlzbG90ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3J1bGVzZXRfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghc2xvdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlydWxlc2V0ID0gYnBmX2twdHJfeGNoZygmYW1wO3Nsb3QtJmd0O3J1bGVzZXQsIE5VTEwpOwomIzQzOwlpZiAoIXJ1bGVzZXQpIHsKJiM0MzsJCW5vX3J1bGVzZXQgPSB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVzdHJpY3RfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LCBrZnVuY19mbGFncyk7CiYjNDM7CWlmIChkb3VibGVfY2FsbCkKJiM0MzsJCS8qIFJlcGxhY2VzIHRoZSBkb21haW4gc3RhZ2VkIGJ5IHRoZSBmaXJzdCBjYWxsLiAqLwomIzQzOwkJcmVzdHJpY3QyX2VyciA9IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oYnBybSwgcnVsZXNldCwKJiM0MzsJCQkJCQkJICAgICBrZnVuY19mbGFncyk7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIHJ1bGVzZXQgZm9yIHRoZSBuZXh0IG1vbml0b3JlZCBleGVjdXRpb24uICovCiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDtzbG90LSZndDtydWxlc2V0LCBydWxlc2V0KTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChvbGQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTQ3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgTGFuZGxvY2sgQlBGIEtmdW5jcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBCUEYga2Z1bmNzIGZvciBMYW5kbG9jayBMU00sIHdoaWNoIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFkZGl0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgbmVlZHMgZnV6emluZywgYW5kIGl0IG5lZWRzIGZ1enppbmcgKnRob3JvdWdobHkqLiYjMzQ7IEkgc2VlIHdlJiMzOTtyZSBhZGRpbmcgdGhlc2UgbmV3IEJQRiBrZnVuY3M6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGFuZCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgLiBQbHVzLCB0aGVyZSBhcmUgdGhlc2UgTFNNIGhvb2tzIG5vdzogYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYW5kIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLiBUaGVzZSBhbGwgbmVlZCB0byBiZSBhIHByaW9yaXR5IGZvciB0ZXN0aW5nLgoKVGhlIGZ1bmN0aW9uYWwgYXNwZWN0cyBvZiBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgYXJlIGtleSB0byB1bmRlcnN0YW5kIHdpdGggcmVnYXJkIHRvIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldyBrZnVuY3MgYW5kIGhvb2tzLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBGcm9tIGEgY29kZSBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5ldyBrZnVuY3MgYW5kIGhvb2tzLiBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBpbiB0aGUgZnV6emluZyBzY29wZS4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVgIHNvIGBsYW5kbG9jay0kKENPTkZJR19CUEZfTFNNKSAmIzQzOz0gYnBmLm9gLiBTbywgYENPTkZJR19CUEZfTFNNYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBJdCBhbHNvIG1ha2VzIHNlbnNlIHRoYXQgYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AgaXMgbmVlZGVkLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgZm9yIHRoZSBCUEYgZnVuY3Rpb25hbGl0eSBpdHNlbGYuIEdvdCBpdC4gTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0PTE1MD1leGNlcHRpb24gb2YgYGBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QtMTUyLS4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvYnBmL2JwZl9sc20uY1xuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3Q6MTUzOiAgICA6aWRlbnRpZmllcnM6IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdC0xNTQtICAgICAgICAgICAgICAgICAgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0XG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDU3PWludCBicGZfbHNtX2dldF9yZXR2YWxfcmFuZ2UoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQ4Mi0gKiBPcGFxdWUgaGFuZGxlIGZvciBhIExhbmRsb2NrIHJ1bGVzZXQuICBPbmx5XG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0ODM6ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBwcm9kdWNlcyBvbmUsIGFuZCBvbmx5IExhbmRsb2NrXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00ODQtICogcmVzb2x2ZXMgaXQuXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDk3PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00OTktLyoqXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo1MDA6ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgLSBHZXQgYSBMYW5kbG9jayBydWxlc2V0IGZyb20gYSBmZFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTAxLSAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIG9mIGEgTGFuZGxvY2sgcnVsZXNldCwgcmVzb2x2ZWQgaW4gdGhlIGZpbGVcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYz01MTU9X19icGZfa2Z1bmMgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUxNjpicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpXG5rZXJuZWwvYnBmL2JwZl9sc20uYy01MTcte1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTUyOC0gKlxua2VybmVsL2JwZi9icGZfbHNtLmM6NTI5OiAqIFJlbGVhc2UgYSByZWZlcmVuY2UgYWNxdWlyZWQgd2l0aCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpLlxua2VybmVsL2JwZi9icGZfbHNtLmMtNTMwLSAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTU4NT1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo1ODY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkLFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTg3LVx0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NTk2PUJURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfaWRzLCBmdW5jLFxua2VybmVsL2JwZi9icGZfbHNtLmM6NTk3Olx0XHQgICBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZClcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTU5OC1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHMsIGZ1bmMsXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmMtNjA1LSAqIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgc29cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjYwNjogKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIGlzIGV4Y2x1c2l2ZSB0byBzeXNjYWxsXG5rZXJuZWwvYnBmL2JwZl9sc20uYy02MDctICogcHJvZ3JhbXMsIHdoaWNoIHJ1biBpbiB0aGF0IHRhc2smIzM5O3MgY29udGV4dDsgYW4gTFNNIHByb2dyYW0gcnVucyBpblxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9MTM9ZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjE0OmJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0xNS1leHRlcm4gdm9pZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9MjY9U0VDKFwmIzM0O3RwX2J0Zi90YXNrX25ld3Rhc2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjI3Ol9fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMtMjgtaW50IEJQRl9QUk9HKHRyYWNpbmdfcHJvZywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6MzI6XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMy1cdGlmIChydWxlc2V0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9NDQ9U0VDKFwmIzM0O2xzbS5zL2Jwcm1fY3JlZHNfZm9yX2V4ZWNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjQ1Ol9fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMtNDYtaW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy00OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6NTA6XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy01MS1cdGlmIChydWxlc2V0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9OTY9aW50IGxlYWtfcnVsZXNldCh2b2lkICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk3LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6OTg6XHRicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk5LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYz0xMj1leHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM6MTM6YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTE0LWV4dGVybiB2b2lkXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYz00Nz1pbnQgbG9hZF9ydWxlc2V0KHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTU3LVx0LyogQSBmZCB0aGF0IGlzIG5vdCBhIExhbmRsb2NrIHJ1bGVzZXQgbXVzdCByZXNvbHZlIHRvIE5VTEwuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jOjU4Olx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMtNTktXHRpZiAoIXJ1bGVzZXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYy02My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM6NjQ6XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTY1LVx0aWYgKCFydWxlc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGFuZGxvY2sgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gTGFuZGxvY2ssIHNwZWNpZmljYWxseSB3aXRoIHRoZSBhZGRpdGlvbiBvZiBuZXcgQlBGIGtmdW5jcy4gSSBzZWUgd2UgaGF2ZToKCiogICBgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRgCiogICBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0YAoqICAgYGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1gCiogICBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgCgpUaGVzZSBhcmUga2V5LiBUaGF0IHNldCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBhaW1pbmcgZm9yIGRlZXBlciBpbnRlZ3JhdGlvbiB3aXRoIEJQRiBmb3IgTGFuZGxvY2sgcG9saWN5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXkgaW50ZW5kIHRvIHVzZSB0aGVzZSBpbiByZWxhdGlvbiB0byB0aGUgZXhpc3RpbmcgTGFuZGxvY2sgc3lzdGVtLgoKQmV5b25kIHRoZSBrZnVuY3MsIGl0IHNlZW1zIHdlIGFsc28gaGF2ZSB1cGRhdGVzIHRvIHRoZSBMU00gaG9va3MuIFRoZSBjb2RlIGlzIGltcGxlbWVudGluZyBob29rcyBmb3IgYm90aCBnZW5lcmljIExTTSAocHJlc3VtYWJseSB0aGUgQlBGIGJhc2VkIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIExhbmRsb2NrIHNwZWNpZmljIG9wZXJhdGlvbnM6CgoqICAgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAKKiAgIGBob29rX3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgaG9va19wb2xpY3lfa3B0cl9wdXRgLCBgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHNgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAKClRoaXMgY29uZmlybXMgdGhhdCBCUEYgaXMgbWVhbnQgdG8gYWxsb3cgTGFuZGxvY2sgdG8gYmUgZXZlbiBtb3JlIGZpbmUtZ3JhaW5lZCBpbiBpdHMgZW5mb3JjZW1lbnQsIGFuZCBwb3NzaWJseSB0byBwZXJtaXQgZm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIG9mIHBvbGljaWVzLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVjaGFuaWNzIG9mIGAqX2twdHJgIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgcG9saWN5IHN0cnVjdHVyZXMuCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGxldCYjMzk7cyBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHNvcnRlZC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgSSBrbm93IHRoYXQ6CgoqICAgYENPTkZJR19CUEZfTFNNYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBrZnVuY3MgdG8gYmUgcmVnaXN0ZXJlZCwgd2hpY2ggbWFrZXMgc2Vuc2UsIHNpbmNlIHRoZXkgYXJlIEJQRi4KKiAgIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgIGlzIG9idmlvdXNseSBuZWVkZWQgdG8gZW5hYmxlIExhbmRsb2NrIGl0c2VsZi4KKiAgIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQgZm9yIEJQRiBzeXNjYWxsIHN1cHBvcnQsIHNvIHByb2JhYmx5IHVzZWQgdG8gY2FsbCB0aGUga2Z1bmNzLgoqICAgYENPTkZJR19TRUNVUklUWWAgaXMgcmVxdWlyZWQgZm9yIExTTSBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY29uc3VsdCBgc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCBsaWtlIG1heWJlIHNvbWUgb3RoZXIgTGFuZGxvY2sgZmVhdHVyZXMgb3IgaGVscGVyIGNvZGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBCUEYgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMi1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6Mzpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7TGFuZGxvY2sgc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjMtXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19LVU5JVF9URVNUXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgTGFuZGxvY2tcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBMYW5kbG9jayBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZywgdGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBsb29rIGJleW9uZCB0aGUgb2J2aW91cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGFuZCBjb25zaWRlciBob3cgTGFuZGxvY2smIzM5O3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZS4gV2hhdCBmZWF0dXJlcyBpcyBpdCBjb250aW5nZW50IG9uPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzZWN1cml0eSBzdWJzeXN0ZW1zLCBtYXliZSBTRUxpbnV4IG9yIEFwcEFybW9yLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgcHJvcGVyIGNvLWV4aXN0ZW5jZSBhbmQgYXZvaWQgYW55IGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzPyBJdCYjMzk7cyBjcnVjaWFsIEkgZ3Jhc3AgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IExhbmRsb2NrIGlzIGludGVncmF0ZWQgYW5kIHdoZXJlIGl0cyBjb25maWd1cmF0aW9uIGtub2JzIGNhbiBwb3RlbnRpYWxseSBpbmZsdWVuY2UgdGhlIHJlc3Qgb2YgdGhlIHNlY3VyaXR5IGxhbmRzY2FwZS4gVGhpcyBLY29uZmlnIGZpbGUgaG9sZHMgdGhlIGtleSB0byBjb25maWd1cmluZyBMYW5kbG9jayBjb3JyZWN0bHksIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudCBpcyBwYXJhbW91bnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xuICAgNDpcdFx0Ym9vbCBcJiMzNDtMYW5kbG9jayBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gICA2Olx0XHRzZWxlY3QgU0VDVVJJVFlfTkVUV09SS1xuICAgNzpcdFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTGFuZGxvY2sgaXMgYSBzYW5kYm94aW5nIG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgcHJvY2Vzc2VzIHRvIHJlc3RyaWN0XG4gIDEwOlx0XHQgIHRoZW1zZWx2ZXMgKGFuZCB0aGVpciBmdXR1cmUgY2hpbGRyZW4pIGJ5IGdyYWR1YWxseSBlbmZvcmNpbmdcbiAgMTE6XHRcdCAgdGFpbG9yZWQgYWNjZXNzIGNvbnRyb2wgcG9saWNpZXMuICBBIExhbmRsb2NrIHNlY3VyaXR5IHBvbGljeSBpcyBhXG4gIDEyOlx0XHQgIHNldCBvZiBhY2Nlc3MgcmlnaHRzIChlLmcuIG9wZW4gYSBmaWxlIGluIHJlYWQtb25seSwgbWFrZSBhXG4gIDEzOlx0XHQgIGRpcmVjdG9yeSwgZXRjLikgdGllZCB0byBhIGZpbGUgaGllcmFyY2h5LiAgU3VjaCBwb2xpY3kgY2FuIGJlXG4gIDE0Olx0XHQgIGNvbmZpZ3VyZWQgYW5kIGVuZm9yY2VkIGJ5IGFueSBwcm9jZXNzZXMgZm9yIHRoZW1zZWx2ZXMgdXNpbmcgdGhlXG4gIDE1Olx0XHQgIGRlZGljYXRlZCBzeXN0ZW0gY2FsbHM6IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KCksXG4gIDE2Olx0XHQgIGxhbmRsb2NrX2FkZF9ydWxlKCksIGFuZCBsYW5kbG9ja19yZXN0cmljdF9zZWxmKCkuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbGFuZGxvY2sucnN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuICAxOTpcdFxuICAyMDpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLiAgT3RoZXJ3aXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBzZWN1cml0eToKCioqVGhpbmtpbmcgQWJvdXQgTGFuZGxvY2sgYW5kIEJQRiBMU00qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBvbiBteSBtaW5kIHJpZ2h0IG5vdyBpcyB0aGUgYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZm9jdXMsIHRoZSBjZW50cmFsIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBJdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBnZXQgcmlnaHQuIEJ1dCBvZiBjb3Vyc2UsIHlvdSBjYW4mIzM5O3QganVzdCBlbmFibGUgTGFuZGxvY2sgaW4gaXNvbGF0aW9uLiBJIGFsc28ga25vdyB0aGF0IGBDT05GSUdfQlBGX0xTTWAgaXMgYSBwcmVyZXF1aXNpdGUsIHRoYXQmIzM5O3MgY3JpdGljYWwgdG8gbWFrZSBMYW5kbG9jayB3b3JrIGFzIGV4cGVjdGVkLiBTbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19CUEZfTFNNYCBpcyBlbmFibGVkIGFsb25nc2lkZSBgQ09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLYCwgdGhlc2UgdHdvIGNvbXBvbmVudHMgYXJlIGNsb3NlbHkgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGIExTTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQlBGIExTTS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIHNpbmNlIGl0IHNlZW1zIHRvIGJlIHdoZXJlIGFsbCB0aGluZ3MgQlBGLXJlbGF0ZWQgYXJlIGRlZmluZWQuIEkgZXhwZWN0IGBCUEZfTFNNYCBzaG91bGQgYmUgZGVmaW5lZCBvciByZWZlcmVuY2VkIGluIHRoZXJlIGlmIGl0JiMzOTtzIGEgY29uZmlndXJhYmxlIG9wdGlvbiBmb3IgdXNpbmcgQlBGIHdpdGggTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGVzKS4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGFueSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBCUEZfTFNNYCBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBCUEYgYW5kIGtlcm5lbCBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJQRl9MU01cbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAgOTU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgOTY6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTc6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuICA5ODpcdFx0aGVscFxuICA5OTpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTAwOlx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gMTAzOlx0XG4gMTA0Olx0ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQlBGIExTTSBhbmQgTGFuZGxvY2sgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGRlcGVuZGVuY3kgbGFuZHNjYXBlIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBDT05GSUdfQlBGX0xTTWAgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBHb29kIHRvIGtub3cuIE1vdmluZyBmb3J3YXJkLCBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IEkgZW5hYmxlIGBCUEZfTFNNYCwgYFNFQ1VSSVRZX0xBTkRMT0NLYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBTRUNVUklUWWAgaW4gbXkgY29uZmlndXJhdGlvbnMuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCB0aGUgcmVhbCBmb2N1cyDigJMgaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIHByaW1lIGNhbmRpZGF0ZXMgc2VlbSB0byBiZTogYGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGAsIGBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtYCwgYW5kIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGFsb25nIHdpdGggYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCwgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgdGVzdGluZyB0aGUgQlBGIGludGVncmF0aW9uIHdpdGggTGFuZGxvY2sgYW5kIHRoZSBzZWN1cml0eSBwb2xpY2llcy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIGFsc28gcGVyZm9ybSBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBlbnRpcmUgYHNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jYCBmaWxlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGNhbmRpZGF0ZXMuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIGFuZCBpZGVudGlmeSBhbGwgcmVsZXZhbnQgYXR0YWNrIHN1cmZhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLipob29rXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTI1LVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MjY6c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTI3LXtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0zNy1cbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jOjM4OnN0YXRpYyB2b2lkIGhvb2tfcG9saWN5X2twdHJfcHV0KHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMzkte1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jPTUyPXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTYwLVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6NjE6c3RhdGljIGludCBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtNjItXHRcdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSxcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0xMDQtXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYzoxMDU6c3RhdGljIHZvaWQgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHMoY29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTEwNi17XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTE4LVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MTE5OnN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGxhbmRsb2NrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTIwLVx0TFNNX0hPT0tfSU5JVChwb2xpY3lfa3B0cl9mcm9tX2ZkLCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTGFuZGxvY2sgQlBGIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIExhbmRsb2NrIEJQRiBmdW5jdGlvbnMuIEkmIzM5O20gbG9va2luZyBhdCBgc2VjdXJpdHkvbGFuZGxvY2svYnBmLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9uczogYGhvb2tfcG9saWN5X2twdHJfZnJvbV9mZGAsIGBob29rX3BvbGljeV9rcHRyX3B1dGAsIGBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGFuZCBgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHNgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYyAqY291bGQqIG1lYW4gdGhleSYjMzk7cmUgaW5saW5lZCwgb3IgbGFjayBkaXN0aW5jdCBzeW1ib2xzLiBIb3dldmVyLCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhleSYjMzk7cmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBMU01fSE9PS19JTklUYCwgd2hpY2ggbWVhbnMgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBUaGV5JiMzOTtsbCBoYXZlIHRoZWlyIG93biB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4KCk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZmF2b3JzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIFNvLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhvc2UgZW50cnlwb2ludHMuIE9rYXksIGhlcmUgdGhleSBhcmU6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkYCwgYHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dGAsIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGFuZCBgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25gLgoKSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGxhdHRlciB0d28sIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCwgc28gSSYjMzk7bGwgZ28gb3ZlciB0byBgc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jYCB0byBjb25maXJtIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtNDEtICovXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmM6NDI6aW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtNDMtXHRjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipBbmFseXppbmcgdGhlIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdpdGggYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBpcyB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGVuZm9yY2luZyBzZWN1cml0eSBib3VuZGFyaWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBmaWxlIHN5c3RlbSBhY2Nlc3MuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHRoZSBjb3JlIG9mIExhbmRsb2NrJiMzOTtzIHJlc3RyaWN0aW9uIG1lY2hhbmlzbXMuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgdmFyaW91cyBMYW5kbG9jayBydWxlcy4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzLCBleHBlY3Rpbmcgc29tZXRoaW5nIGxpa2UgYSByZXN0cmljdGlvbiB0eXBlLCBwZXJoYXBzIGEgZmlsZSBkZXNjcmlwdG9yIG9yIHBhdGgsIGFuZCBzb21lIGtpbmQgb2YgYWNjZXNzIHBlcm1pc3Npb25zIGJpdG1hc2sgb3IgZmxhZy4gSeKAmW0gYWxzbyBnb2luZyB0byBiZSBleGFtaW5pbmcgdGhlIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCwgc3VjaCBhcyB3aGF0IGhhcHBlbnMgaWYgdGhlIHJlc3RyaWN0aW9uIGZhaWxzLCBvciBpZiB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4gSSYjMzk7bGwgZXhwZWN0IHRvIHNlZSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIG91dGxpbmluZyBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBhbnkgY2F2ZWF0cyBhc3NvY2lhdGVkIHdpdGggaXRzIHVzZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJhY2UgY29uZGl0aW9ucyBvciBzaWRlLWNoYW5uZWwgYXR0YWNrcy4gVW5kZXJzdGFuZGluZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgTGFuZGxvY2sgZnVuY3Rpb25zIGlzIGFsc28gZXNzZW50aWFsLCBjb25zaWRlcmluZyBpdOKAmXMgYSBrZXkgcGllY2Ugb2YgdGhlIExhbmRsb2NrIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay9jcmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jPTQyPWludCBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYy05OC0gKi9cbnNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYzo5OTp2b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtMTAwLVx0XHRcdFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0OTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgdGhhdCAqYXJlbiYjMzk7dCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZCBpbiBhIHdheSB0aGF0IHN0YXRpYyBvbmVzIGFyZW4mIzM5O3QsIG1ha2luZyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGFuYWx5c2lzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kLCBzcGVjaWZpY2FsbHksIGlmIHRoZXkmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggYW55dGhpbmcgc2VjdXJpdHktc2Vuc2l0aXZlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGdvaW5nIHRvIGh1bnQgZm9yIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGludm9sdmVkIGluIGRlcml2aW5nIGtlcm5lbCBwb2ludGVycyBmcm9tIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoLCBpZiBtaXNoYW5kbGVkLCBjb3VsZCBiZSBhIHNlcmlvdXMgdnVsbmVyYWJpbGl0eS4gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBub3cgbXkgcHJpbWFyeSBmb2N1cy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMgYW55IHBhdGh3YXlzIGZvciB1bmludGVuZGVkIGtlcm5lbCBtZW1vcnkgYWNjZXNzIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaGlzIGludmVzdGlnYXRpb24gaXMgbm93IHRvcCBwcmlvcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTU0Mzk9aW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTQ2OC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTQ2OTppbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTQ3MC1cdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRlZXAgRGl2ZSBvbiBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dGAsIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwgcG9pbnRlciBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjbGVhbnVwIGNvdW50ZXJwYXJ0IHRvIHNvbWV0aGluZyBsaWtlIGEgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2dldGAsIHNvIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCByaWdodD8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUga2VybmVsIHBvaW50ZXJzIGhlcmUsIGxpa2VseSBhc3NvY2lhdGVkIHdpdGggc29tZSBzZWN1cml0eSBjb250ZXh0IG9yIHBvbGljeSBkYXRhLgoKVGhlIGRlc2lnbiBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhci4gVGhlIHByZXNlbmNlIG9mIGBfcHV0YCBpbXBsaWVzIGEgY29ycmVzcG9uZGluZyBgX2dldGAsIGFuZCB0aGF0IHRoZSBrZXJuZWwgcG9pbnRlciBpcyBwcm90ZWN0ZWQgYnkgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGlzIGlzIHRoZSBjb21tb24gcGF0dGVybi4gVGhlIGdvYWwgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGxlYWsgdGhpcyBpbmZvcm1hdGlvbi4gSXQgYWxzbyBwcmV2ZW50cyBkYW5nbGluZyBwb2ludGVycywgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBldmVuIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy4gU28sIHdoYXQgc3BlY2lmaWMgc2VjdXJpdHkgcG9saWNpZXMgaXMgdGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGg/IFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEga2VybmVsLWludGVybmFsIGRhdGEgc3RydWN0dXJlIHNvIHRoZSBwb2xpY2llcyBoYXZlIHRvIGJlIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGRhdGEgc3RheXMgd2l0aGluIHRoZSBzeXN0ZW0sIHdpdGhvdXQgbGVha2FnZSBvciBtaXN1c2UuCgpOb3csIEkmIzM5O20gYWxyZWFkeSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zLiBXaGF0IGhhcHBlbnMgaWYgdGhpcyBgX3B1dGAgaXMgY2FsbGVkIHByZW1hdHVyZWx5LCBvciBpbiB0aGUgd3Jvbmcgc2VxdWVuY2U/IElzIHRoZXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXM/IEFyZSB3ZSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnQgc2FmZWx5PyBJJiMzOTttIG1lbnRhbGx5IHRyYWNpbmcgdGhlIHBvc3NpYmxlIGNvZGUgcGF0aHMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpbmsgYWJvdXQgaXQgLSBhIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBiZSBhIGdvbGRtaW5lIGZvciBhbiBhdHRhY2tlciEKCkJleW9uZCBzaW1wbGUgcmVmZXJlbmNlIGNvdW50IGlzc3VlcywgSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUga2VybmVsIHBvaW50ZXIuIFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgZGF0YSBzdHJ1Y3R1cmU/IElzIGl0IHNlbnNpdGl2ZT8gSXMgaXQgc3RydWN0dXJlZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gY2xlYXJseSBhYm91dCBob3cgdG8gcHJvdGVjdCBpdD8gV2UmIzM5O3JlIGxvb2tpbmcgYXQgcG9saWN5IGRhdGEsIHNvIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgaW4gYm90aCBpbnN0YW5jZXMuIFNvLCB0aGUgaW1wbGljYXRpb25zIG9mIGEgdnVsbmVyYWJpbGl0eSBpbiB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJ5IHNlcmlvdXMuCgpGaW5hbGx5LCBJJiMzOTttIHBvbmRlcmluZyB0aGUgY29udGV4dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHksIGZyb20gYSBzaW5nbGUgdGhyZWFkLCBvciBpcyBpdCBpbnZva2VkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCBvciBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBncmVhdGx5IGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBzYWZldHkgYW5kIHJlc2lsaWVuY2UuIFRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkIHdpbGwgYmUgb2YgZ3JlYXQgaW50ZXJlc3QgdG8gbWUgYXMgd2VsbC4gQW5kIEkgYmV0IHRoZXJlIGFyZSBhdWRpdCBwb2ludHMsIHRvbywgc29tZXdoZXJlIGRvd24gdGhlIGxpbmUuLi4gbGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTU0Njk9aW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy01NDk0LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo1NDk1OnZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG5zZWN1cml0eS9zZWN1cml0eS5jLTU0OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IHJlZmxlY3Rpbmcgb24gdGhlIHRob3VnaHQgcHJvY2VzcyByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb246CgoqKkFuYWx5emluZyBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCoqCgpSaWdodCwgbGV0IG1lIHRoaW5rIGFib3V0IHRoaXMgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAgZnVuY3Rpb24uIEl0cyB2ZXJ5IG5hbWUgc2NyZWFtcyAmIzM0O3NlY3VyaXR5JiMzNDsgYW5kICYjMzQ7cG9saWN5IGVuZm9yY2VtZW50JiMzNDsgcmVsYXRlZCB0byB0aGUgYGJwcm1gIHN0cnVjdHVyZSwgd2hpY2ggSSBrbm93IGludGltYXRlbHkuIEl04oCZcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSB3aGVuIHdlIGNvbnNpZGVyIGhvdyBhIG5ldyBwcm9jZXNzIGNvbWVzIHRvIGxpZmUgaW4gdGhlIGtlcm5lbCwgYW5kIGhvdyB3ZSBrZWVwIGl0IGNvbXBsaWFudCB3aXRoIG91ciBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUuIFRoZSBga3B0cmAgc3VmZml4IGxpa2VseSBpbmRpY2F0ZXMgdGhpcyBpc24mIzM5O3QgdGhlIHJhdyBmdW5jdGlvbiBidXQgc29tZXRoaW5nIHVzZWQgdmlhIGtlcm5lbCBwb2ludGVyLCBpbmRpY2F0aW5nIGEgY2VydGFpbiBkZWdyZWUgb2YgaW5kaXJlY3Rpb24gYW5kIHBvdGVudGlhbCBmb3Igc2VjdXJpdHkgY2hlY2tzIG9yIGR5bmFtaWMgZGlzcGF0Y2guCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB3aGF0IGl0IGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGluIHZhbGlkYXRpbmcgdGhlIGV4ZWN1dGFibGUmIzM5O3MgbGVnaXRpbWFjeSBhbmQgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGFjdHVhbGx5ICpzdGFydCogdGhhdCBwcm9jZXNzLiBUaGUgJiMzNDtwb2xpY3kmIzM0OyBwYXJ0IHN1Z2dlc3RzIGl0IGludGVncmF0ZXMgd2l0aCwgb3IgaXMgdGhlIGVudHJ5IHBvaW50IGZvciwgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXgsIEFwcEFybW9yLCBvciBtYXliZSBldmVuIGN1c3RvbSBMU01zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IGl0IHJlY2VpdmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0YWJsZSwgaXRzIGNvbnRleHQsIGFuZCB0aGUgcmVxdWVzdGluZyBwcm9jZXNzLiBJIGV4cGVjdCBpdCYjMzk7cyBnaXZlbiBhY2Nlc3MgdG8gdGhlIGBicHJtYCBzdHJ1Y3R1cmUsIGJ1dCB3aGF0IHNwZWNpZmljIGRhdGEgZmllbGRzIGlzIGl0IGFjY2Vzc2luZyB3aXRoaW4gdGhlcmU/IElzIGl0IGNoZWNraW5nIHRoZSBmaWxlIHBhdGgsIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgZXhlY3V0YWJsZSBmaWxlLCBhbnkgZXh0ZW5kZWQgYXR0cmlidXRlcyAobGlrZSBzZWN1cml0eSBsYWJlbHMpPyBXaGF0IGFib3V0IHRoZSBjYWxsaW5nIHByb2Nlc3MmIzM5O3MgY3JlZGVudGlhbHMgYW5kIGNhcGFiaWxpdGllcz8gRG9lcyB0aGlzIGZ1bmN0aW9uIG1hbmFnZSBhbnkgc3RhdGU/IEZvciBleGFtcGxlLCBkb2VzIGl0IGNhY2hlIG9yIHByZS1jYWxjdWxhdGUgaW5mb3JtYXRpb24gZm9yIHN1YnNlcXVlbnQgY2hlY2tzPwoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gQSBzdWJ0bGUgYnVnIGhlcmUgY291bGQgYWxsb3cgYSBtYWxpY2lvdXMgYWN0b3IgdG8gYnlwYXNzIHNlY3VyaXR5IHJlc3RyaWN0aW9ucywgYnkgZXhwbG9pdGluZyBhIHJhY2UgY29uZGl0aW9uLCBhIGZhdWx0eSBkYXRhIGNoZWNrLCBvciBieSBwcm92aWRpbmcgY3JhZnRlZCBpbnB1dC4gVGhlIGltcGFjdCBjb3VsZCBiZSBkZXZhc3RhdGluZywgbGVhZGluZyB0byBwcml2aWxlZ2UgZXNjYWxhdGlvbiBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24uIEkgbmVlZCB0byBiZSB0aGlua2luZyBhYm91dCB3YXlzIHRoZSBmdW5jdGlvbiBjb3VsZCBiZSB0cmlja2VkLCBzdWNoIGFzIGhhbmRsaW5nIHBhdGhzIHdpdGggc3ltYm9saWMgbGlua3MsIG9yIGV2ZW4gbWVtb3J5IGNvcnJ1cHRpb24gcG9zc2liaWxpdGllcy4KCkkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJcyBpdCBjYWxsZWQgZWFybHkgaW4gdGhlIGBleGVjdmVgIHBhdGgsIG9yIGxhdGVyIG9uPyBBcmUgdGhlcmUgb3RoZXIgc2VjdXJpdHkgY2hlY2tzIHRoYXQgaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGlzPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBIb3cgZG9lcyBpdCBzaWduYWwgYSBwb2xpY3kgdmlvbGF0aW9uIOKAkyBkb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCBsb2cgYSBtZXNzYWdlLCBvciB0cmlnZ2VyIGEga2VybmVsIHBhbmljPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoIG90aGVyIHN1YnN5c3RlbXMgaXMga2V5LgoKTXkgZm9jdXMgaGFzIHRvIGJlOiBkYXRhIGl0IHVzZXMsIGFuZCBob3cgdGhhdCBkYXRhIGlzIGNoZWNrZWQsIGFuZCBob3cgdGhlIGNhbGwgaXMgbWFuYWdlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgcHJvY2VzcyBjcmVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlY3VyaXR5LmM9NTQ5NT12b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTUzNS0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTUzNjppbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTUzNy1cdFx0XHRcdCAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzMxCgkJCQkJCQlvdXRwdXQ6IDI0NAoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMYW5kbG9jayBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBMYW5kbG9jayBCUEYgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgQlBGIGtmdW5jcyB0aGF0IGludGVyZmFjZSB3aXRoIHRoZSBMYW5kbG9jayBMU00uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbiwgYXMgaXQgZW5hYmxlcyBCUEYgcHJvZ3JhbXMgdG8gYWN0aXZlbHkgZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBkdXJpbmcgcHJvY2VzcyBleGVjdXRpb24uIFRoaXMgbWVhbnMgd2UgaGF2ZSAqbmV3KiByZWFjaGFibGUgY29kZSBwYXRocyB3aXRoaW4gYm90aCB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLiBUaGF0JiMzOTtzIGEgY2xlYXIgc2lnbmFsIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cywgaW4gdGVybXMgb2Ygc3ltYm9sIGNvdmVyYWdlLCBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZnVuY3M6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkYCwgYHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dGAsIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGFuZCBgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgY29udHJvbCBmbG93IHBhdGhzIHJlbGF0ZWQgdG8gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKT2YgY291cnNlLCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBpbXBvcnRhbnQ6IGBCUEZfTFNNYCwgYFNFQ1VSSVRZX0xBTkRMT0NLYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBTRUNVUklUWWAuIEhvd2V2ZXIsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9MU01gLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWdzIHRvIGVuc3VyZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlLiBBaCwgeWVzLCBgQ09ORklHX0JQRl9MU01gIGRlcGVuZHMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBUaHVzLCBgQlBGX0VWRU5UU2AsIGBCUEZfSklUYCBhcmUgdmVyeSBpbXBvcnRhbnQsIGFuZCBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIGFueSBmdXp6aW5nIHNldHVwLgoKSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvdmVyZWQgYW5kIGhvdyB0byBzdHJ1Y3R1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTEFORExPQ0smIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0JiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0mIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3ImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyJiMzNDssCiAgICAmIzM0O2xhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24mIzM0OywKICAgICYjMzQ7bGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBMYW5kbG9jayBMU00sIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBlbmZvcmNlIExhbmRsb2NrIHJ1bGVzZXRzIG9uIGV4ZWN1dGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIEJQRiBhbmQgTGFuZGxvY2sgc3Vic3lzdGVtcywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9MQU5ETE9DSyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQmIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSYjMzQ7LAogICAgJiMzNDticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHImIzM0OywKICAgICYjMzQ7bGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbiYjMzQ7LAogICAgJiMzNDtsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIExhbmRsb2NrIExTTSwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgb24gZXhlY3V0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6MjcuOTA2NTE1ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY5NTU3Nzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9MQU5ETE9DS1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybVwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dFwiLFxuICAgIFwic2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyXCIsXG4gICAgXCJsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uXCIsXG4gICAgXCJsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBvbiBleGVjdXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBCUEYgYW5kIExhbmRsb2NrIHN1YnN5c3RlbXMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA3OjI3LjkwNjUyMDc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgwNjUwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZWI2ZGE5NGViYzUxNWE2ZWQ0MmY4OTJmMTkyYTBiYzFlZmRlNTc5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTE6MDc6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxcbmluZGV4IGM1MTg2NTI2ZTc2ZjYuLjAxMTk3Yzc1ODBlYzAgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxcbkBAIC0xMjksNiArMTI5LDMxIEBAIFRoZSByZWFzb25pbmcgaXM6XFxuICAgcmVzdHJpY3Rpb25zLCBiZWNhdXNlIGFjY2VzcyB3aXRoaW4gdGhlIHNhbWUgc2NvcGUgaXMgYWxyZWFkeVxcbiAgIGFsbG93ZWQgYmFzZWQgb24gYGBMQU5ETE9DS19BQ0NFU1NfRlNfUkVTT0xWRV9VTklYYGAuXFxuIFxcbitCUEYga2Z1bmNzXFxuKz09PT09PT09PT1cXG4rXFxuK0JQRiBwcm9ncmFtcyBjYW4gYXBwbHkgYSB1c2Vyc3BhY2UtY3JlYXRlZCBMYW5kbG9jayBydWxlc2V0IHRvIGFuXFxuK2V4ZWN1dGlvbi4gIEEgc3lzY2FsbCBwcm9ncmFtIChgYEJQRl9QUk9HX1RZUEVfU1lTQ0FMTGBgKSwgcnVubmluZyBpblxcbit0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgYWNxdWlyZXMgdGhlXFxuK3J1bGVzZXQgZnJvbSBpdHMgZmlsZSBkZXNjcmlwdG9yIGFuZCB0eXBpY2FsbHkgaGFuZHMgaXQgb3ZlciB0aHJvdWdoXFxuK2EgbWFwIGtwdHIgZmllbGQ7IGEgc2xlZXBhYmxlIExTTSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byB0aGVcXG4rYGBicHJtX2NyZWRzX2Zvcl9leGVjYGAgb3IgYGBicHJtX2NyZWRzX2Zyb21fZmlsZWBgIGhvb2tzIHRoZW5cXG4rZW5mb3JjZXMgaXQgb24gYW4gZXhlY3V0aW9uLlxcbitcXG4rVGhpcyBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBydW50aW1lIGNvbnRleHQgb2YgYSBwZW5kaW5nIGV4ZWN1dGlvbixcXG4rYW5kIGVuZm9yY2UgYSBMYW5kbG9jayBwb2xpY3kgdGhyb3VnaCBCUEYuXFxuK1xcbitUaGUgcmVzdHJpY3Rpb24gaXMgc3RhZ2VkIGluIHRoZSBMYW5kbG9jayBibG9iIG9mIHRoZVxcbitjcmVkZW50aWFscyBwcmVwYXJlZCBmb3IgdGhlIGV4ZWN1dGlvbiBhbmQgY29tbWl0dGVkIHBhc3QgdGhlIGV4ZWNcXG4rcG9pbnQgb2Ygbm8gcmV0dXJuLCBzbyBhIGZhaWxlZCBleGVjdXRpb24gbGVhdmVzIHRoZSBjYWxsaW5nIHRhc2tcXG4rdW50b3VjaGVkLiAgVGhlIGBgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKWBgIGZsYWdzIGFwcGx5LCB3aXRoIHRoZVxcbitleGNlcHRpb24gb2YgYGBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DYGAuXFxuK1xcbisuLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmNcXG4rICAgIDppZGVudGlmaWVyczogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcXG4rICAgICAgICAgICAgICAgICAgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0XFxuKyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cXG4rXFxuIFRlc3RzXFxuID09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcXG5pbmRleCA1ODk1ZTUyOWRhN2ZmLi5mYzNhZjIwNmU3OTUwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdFxcbkBAIC0xNSwzICsxNSwzMCBAQCBzZWUgYGBzZWN1cml0eS9zZWN1cml0eS5jYGAgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlczpcXG4gXFxuIC4uIGtlcm5lbC1kb2M6OiBzZWN1cml0eS9zZWN1cml0eS5jXFxuICAgIDpleHBvcnQ6XFxuK1xcbitMU00gcG9saWN5IGtwdHIgaG9va3MgYW5kIEJQRiBrZnVuY3NcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitUaGUgTFNNIGZyYW1ld29yayBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3IgaW5kaXZpZHVhbCBMU01zIHRvXFxuK2V4cG9zZSB0aGVpciBjb25maWd1cmF0aW9uIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQga3B0cnMuIEFuIExTTVxcbittYXkgbm90IGV4cG9ydCBhbnkga2Z1bmMgb3Igb3RoZXIgQlBGIGludGVyZmFjZSBkaXJlY3RseS5cXG4rXFxuK0FuIExTTSB3aXNoaW5nIHRvIGV4cG9zZSBhIEJQRiBrZnVuYyBtdXN0IHJldXNlIGFuIGV4aXN0aW5nIHNlY3VyaXR5XFxuK2hvb2sgb3IgaW1wbGVtZW50IGEgbmV3IHN1ZmZpY2llbnRseSBnZW5lcmljIExTTSBob29rIGZvciB0aGUgZGVzaXJlZFxcbitpbnRlcmZhY2UuIFRoZSBob29rcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSBrZnVuYyBkZWZpbml0aW9ucyBpblxcbitgYGtlcm5lbC9icGZgYC4gVGhpcyBhbGxvd3MgTFNNIGhvb2tzIHRvIHJlbWFpbiBzdWZmaWNpZW50bHkgZ2VuZXJpY1xcbit3aGlsZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN0cm9uZyB0eXBpbmdcXG4rYW5kIHJ1bnRpbWUgY2hlY2tpbmcgb2ZmZXJlZCBieSB0aGUgQlBGIHZlcmlmaWVyLlxcbitcXG4rVGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGltcGxlbWVudHMgdGhlIG9wZXJhdGlvbidzIGhvb2sgd2l0aFxcbitgYExTTV9IT09LX0lOSVQoKWBgIGxpa2UgYW55IG90aGVyIGhvb2suIEEgQlBGIHByb2dyYW0gY2FsbGluZyBhblxcbitMU00ga2Z1bmMgdGhlcmVmb3JlIHJlYWNoZXMgdGhlIExTTSB0aGUgc2FtZSB3YXkgZXZlcnkgb3RoZXJcXG4ra2VybmVsIGNhbGxlciBkb2VzOiB0aHJvdWdoIGFuIExTTSBob29rLiBUaGUgaG9va3MgYmFja2luZyBrZnVuY3NcXG4rZm9sbG93IHRoZSB1c3VhbCBydWxlcyBmb3IgbmV3IExTTSBob29rczogdGhlaXIgY29udHJhY3QgbXVzdCBiZVxcbitMU00gYWdub3N0aWMgc28gdGhhdCBvdGhlciBMU01zIGNvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsXFxuK2ltcGxlbWVudGF0aW9uIG9mIHRoZSBzYW1lIG9wZXJhdGlvbi5cXG4rXFxuK1doZXRoZXIgdGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGlzIGJ1aWx0IGluIGFuZCBhY3RpdmUgaXMgYVxcbitydW50aW1lIHByb3BlcnR5OiB0aGUga2Z1bmNzIGFyZSBhbHdheXMgcmVnaXN0ZXJlZCB3aGVuXFxuK2BgQ09ORklHX0JQRl9MU01gYCBpcyBlbmFibGVkLiBCUEYgcHJvZ3JhbSBsb2FkaW5nIGlzIHRodXNcXG4raW5kZXBlbmRlbnQgb2YgdGhlIGJvb3QtdGltZSBMU00gY29uZmlndXJhdGlvbi5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcuLmE3MGVkYmQ3Yjc2MWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC00NTIsNiArNDUyLDExIEBAIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NyZWF0ZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIHVuaW9uIGJwZl9hdHRyICphdHRyXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgYnBmX3Rva2VuX2ZyZWUsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuKVxcbiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jbWQsIGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBlbnVtIGJwZl9jbWQgY21kKVxcbiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jYXBhYmxlLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcXG4rTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgcG9saWN5X2twdHJfZnJvbV9mZCwgaW50IGZkLFxcbitcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuK0xTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgcG9saWN5X2twdHJfcHV0LCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG4rTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG4gTFNNX0hPT0soaW50LCAwLCBsb2NrZWRfZG93biwgZW51bSBsb2NrZG93bl9yZWFzb24gd2hhdClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmOC4uNDBkZmE5NmI2YTcxOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5AQCAtMTY4LDYgKzE2OCwyMyBAQCBzdHJ1Y3QgbHNtX3Byb3Age1xcbiBcXHRzdHJ1Y3QgbHNtX3Byb3BfYnBmIGJwZjtcXG4gfTtcXG4gXFxuK3N0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldDtcXG4rXFxuK3N0cnVjdCBsc21fcG9saWN5X2xhbmRsb2NrIHtcXG4rXFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xcbit9O1xcbitcXG4rLypcXG4rICogQSByZWZlcmVuY2UgdG8gYW4gTFNNIHBvbGljeSBvYmplY3QsIHRhZ2dlZCBieSB0aGUgTFNNX0lEXyogdmFsdWVcXG4rICogcGFzc2VkIGFsb25nc2lkZTogb25seSB0aGUgbWF0Y2hpbmcgTFNNJ3MgbWVtYmVyIGlzIHZhbGlkLiAgVGhlXFxuKyAqIG1lbWJlcnMgYXJlIG5vdCBndWFyZGVkIGJ5IHRoZSBMU01zJyBDT05GSUcgb3B0aW9uczogdGhlIGNhbGxlcnNcXG4rICogYXJlIGJ1aWx0IGluZGVwZW5kZW50bHkgb2YgYW55IGluZGl2aWR1YWwgTFNNIGFuZCBhIGNhbGwgZm9yIGFcXG4rICogbWlzc2luZyBMU00gbXVzdCBmYWlsIGF0IHJ1bnRpbWUsIG5vdCBhdCBidWlsZCB0aW1lLlxcbisgKi9cXG4rdW5pb24gbHNtX3BvbGljeV9rcHRyIHtcXG4rXFx0c3RydWN0IGxzbV9wb2xpY3lfbGFuZGxvY2sgbGFuZGxvY2s7XFxuK307XFxuK1xcbiBleHRlcm4gY29uc3QgY2hhciAqY29uc3QgbG9ja2Rvd25fcmVhc29uc1tMT0NLRE9XTl9DT05GSURFTlRJQUxJVFlfTUFYKzFdO1xcbiBcXG4gLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBzZWN1cml0eS9jb21tb25jYXAuYyAqL1xcbkBAIC0yMzEyLDYgKzIzMjksMTMgQEAgZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY3JlYXRlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXRcXG4gZXh0ZXJuIHZvaWQgc2VjdXJpdHlfYnBmX3Rva2VuX2ZyZWUoc3RydWN0IGJwZl90b2tlbiAqdG9rZW4pO1xcbiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jbWQoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGVudW0gYnBmX2NtZCBjbWQpO1xcbiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKTtcXG4rZXh0ZXJuIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxcbitcXHRcXHRcXHRcXHRcXHR1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7XFxuK2V4dGVybiB2b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KTtcXG4rZXh0ZXJuIGludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmKGludCBjbWQsIHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHNpemUsIGJvb2wga2VybmVsKVxcbkBAIC0yMzY1LDYgKzIzODksMjUgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludFxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cih1NjQgbHNtaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbmluZGV4IDM5ODNiNGNlNzNjODEuLjY3YWE5MDJmMTI1NzAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbkBAIC0xNCw4ICsxNCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbG9jYWxfc3RvcmFnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2ZpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi1jZ3JvdXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbHNtLmhcXHUwMDNlXFxuIFxcbiAvKiBGb3IgZXZlcnkgTFNNIGhvb2sgdGhhdCBhbGxvd3MgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMsIGRlY2xhcmUgYSBub3BcXG4gICogZnVuY3Rpb24gd2hlcmUgYSBCUEYgcHJvZ3JhbSBjYW4gYmUgYXR0YWNoZWQuIE5vdGFibHksIHdlIHF1YWxpZnkgZWFjaCB3aXRoXFxuQEAgLTU2LDYgKzU4LDkgQEAgQlRGX0lEKGZ1bmMsIGJwZl9sc21feGZybV9kZWNvZGVfc2Vzc2lvbilcXG4gI2VuZGlmXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lzbWFjbGFiZWwpXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2ZpbGVfYWxsb2Nfc2VjdXJpdHkpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX2Zyb21fZmQpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX3B1dClcXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21fYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKVxcbiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKVxcbiBcXG4gLyogTGlzdCBvZiBMU00gaG9va3MgdGhhdCBzaG91bGQgb3BlcmF0ZSBvbiAnY3VycmVudCcgY2dyb3VwIHJlZ2FyZGxlc3NcXG5AQCAtNDcwLDMgKzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuKy8qIExTTSBwb2xpY3kga2Z1bmNzICovXFxuK1xcbisvKlxcbisgKiBPcGFxdWUgaGFuZGxlIGZvciBhIExhbmRsb2NrIHJ1bGVzZXQuICBPbmx5XFxuKyAqIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKCkgcHJvZHVjZXMgb25lLCBhbmQgb25seSBMYW5kbG9ja1xcbisgKiByZXNvbHZlcyBpdC5cXG4rICovXFxuK3N0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCB7fTtcXG4rXFxuKy8qXFxuKyAqIFRoZSBzbGVlcGFibGUgTFNNIGhvb2tzIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oKSBhbmRcXG4rICogYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KCkgbWF5IGJlIGNhbGxlZCBmcm9tLlxcbisgKi9cXG4rQlRGX1NFVF9TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaG9va3MpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZm9yX2V4ZWMpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZnJvbV9maWxlKVxcbitCVEZfU0VUX0VORChicGZfbGFuZGxvY2tfa2Z1bmNfaG9va3MpXFxuK1xcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuK1xcbisvKipcXG4rICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgLSBHZXQgYSBMYW5kbG9jayBydWxlc2V0IGZyb20gYSBmZFxcbisgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciBvZiBhIExhbmRsb2NrIHJ1bGVzZXQsIHJlc29sdmVkIGluIHRoZSBmaWxlXFxuKyAqICAgICAgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgdGFzayBydW5uaW5nIHRoZSBwcm9ncmFtXFxuKyAqXFxuKyAqIEFjcXVpcmUgYSByZWZlcmVuY2Ugb24gdGhlIExhbmRsb2NrIHJ1bGVzZXQgcmVmZXJyZWQgdG8gYnkgQGZkLCBhc1xcbisgKiBjcmVhdGVkIGJ5IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KDIpIGFuZCBwb3B1bGF0ZWQgd2l0aFxcbisgKiBsYW5kbG9ja19hZGRfcnVsZSgyKS4gIE9ubHkgc3lzY2FsbCBwcm9ncmFtcyBtYXkgY2FsbCB0aGlzIGtmdW5jOlxcbisgKiB0aGV5IHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgdGFzayBpbnZva2luZyB0aGVtLCB3aGVyZSB0aGVcXG4rICogcnVsZXNldCBmZCBpcyBtZWFuaW5nZnVsLiAgVGhlIGFjcXVpcmVkIHJ1bGVzZXQgY2FuIGJlIGhhbmRlZCB0byBhblxcbisgKiBlbmZvcmNlbWVudCBwcm9ncmFtIHRocm91Z2ggYSBtYXAga3B0ciBmaWVsZC4gIFRoZSByZWZlcmVuY2UgbXVzdFxcbisgKiBiZSByZWxlYXNlZCB3aXRoIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCgpLlxcbisgKlxcbisgKiBSZXR1cm46IEEgcmVmZXJlbmNlZCBydWxlc2V0IGhhbmRsZSwgb3IgTlVMTCBpZiBAZmQgaXMgbm90IGFcXG4rICogcmVhZGFibGUgTGFuZGxvY2sgcnVsZXNldCBmZCBvciB0aGUgTGFuZGxvY2sgTFNNIGlzIG5vdCBlbmFibGVkLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcXG4rYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKVxcbit7XFxuK1xcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3k7XFxuK1xcbitcXHRpZiAoc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZChMU01fSURfTEFORExPQ0ssIGZkLCBcXHUwMDI2cG9saWN5KSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBwb2xpY3kubGFuZGxvY2sucnVsZXNldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCAtIFB1dCBhIExhbmRsb2NrIHJ1bGVzZXRcXG4rICogQHJ1bGVzZXQ6IExhbmRsb2NrIHJ1bGVzZXQgdG8gcHV0XFxuKyAqXFxuKyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgYWNxdWlyZWQgd2l0aCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KVxcbit7XFxuK1xcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9O1xcbitcXG4rXFx0c2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KExTTV9JRF9MQU5ETE9DSywgXFx1MDAyNnBvbGljeSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtIC0gRW5mb3JjZSBhIExhbmRsb2NrIHJ1bGVzZXQgb24gZXhlY1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHNcXG4rICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG9cXG4rICogICAgICAgIHJlc3RyaWN0XFxuKyAqIEBydWxlc2V0OiBMYW5kbG9jayBydWxlc2V0IHRvIGVuZm9yY2VcXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLCBleGNlcHRcXG4rICogICAgICAgICAlTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xcbisgKlxcbisgKiBSZXN0cmljdCB0aGUgY3JlZGVudGlhbHMgcHJlcGFyZWQgaW4gQGJwcm0gd2l0aCBAcnVsZXNldCwgc28gdGhhdFxcbisgKiB0aGUgZXhlY3V0ZWQgdGFzayBzdGFydHMgY29uZmluZWQgYnkgaXQsIGZvbGxvd2luZyB0aGUgc2FtZSBkb21haW5cXG4rICogY29tcG9zaXRpb24gcnVsZXMgYXMgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKS4gIFRoZSByZXN0cmljdGlvbiBpc1xcbisgKiBzdGFnZWQgYW5kIG9ubHkgY29tbWl0dGVkIGF0IHRoZSBleGVjdXRpb24ncyBwb2ludCBvZiBubyByZXR1cm46IGFuXFxuKyAqIGV4ZWN1dGlvbiB0aGF0IGZhaWxzIGJlZm9yZSB0aGF0IHBvaW50IGlzIHVuYWZmZWN0ZWQsIGFuZCBhIGxhdGVyXFxuKyAqIGNhbGwgb24gdGhlIHNhbWUgZXhlY3V0aW9uIHJlcGxhY2VzIGEgcHJldmlvdXNseSBzdGFnZWRcXG4rICogcmVzdHJpY3Rpb24uICBAcnVsZXNldCBpcyBvbmx5IGJvcnJvd2VkOiB0aGUgY2FsbGVyIGtlZXBzIGl0c1xcbisgKiByZWZlcmVuY2UuXFxuKyAqXFxuKyAqIFRoZSBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzIGFwcGx5IHdpdGggdGhlaXIgdXN1YWxcXG4rICogc2VtYW50aWNzLiAgT25seSAlTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyBpcyByZWplY3RlZCwgYXMgaXRcXG4rICogdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzIHJhdGhlciB0aGFuIHRoZSBleGVjdXRpb24uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiB0aGUgTGFuZGxvY2sgTFNNIGlzIG5vdFxcbisgKiBlbmFibGVkLCAtRUlOVkFMIGlmIEBmbGFncyBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBmbGFnLCBvdGhlclxcbisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZSBhcyBmb3IgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKS5cXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncylcXG4re1xcbitcXHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTtcXG4rXFxuK1xcdHJldHVybiBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoTFNNX0lEX0xBTkRMT0NLLCBicHJtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBvbGljeSwgZmxhZ3MpO1xcbit9XFxuK1xcbisvKiBEZXN0cnVjdG9yIGZvciByZWZlcmVuY2VkIGJwZl9sYW5kbG9ja19ydWxlc2V0IGtwdHJzLiAqL1xcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yKHZvaWQgKnJ1bGVzZXQpXFxuK3tcXG4rXFx0dW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07XFxuK1xcbitcXHRzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoTFNNX0lEX0xBTkRMT0NLLCBcXHUwMDI2cG9saWN5KTtcXG4rfVxcbitDRklfTk9TRUFMKGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yKTtcXG4rXFxuK19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuK1xcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCxcXG4rXFx0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQsIEtGX1JFTEVBU0UgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXFxuK1xcbitCVEZfSURfTElTVChicGZfbGFuZGxvY2tfZHRvcl9pZHMpXFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KVxcbitCVEZfSUQoZnVuYywgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3IpXFxuK1xcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYyxcXG4rXFx0XFx0ICAgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQpXFxuK0JURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtX2lkcywgZnVuYyxcXG4rXFx0XFx0ICAgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSlcXG4rXFxuKy8qXFxuKyAqIEJQRl9QUk9HX1RZUEVfTFNNIGFuZCBCUEZfUFJPR19UWVBFX1NZU0NBTEwgc2hhcmUgdGhlaXIga2Z1bmNcXG4rICogbG9va3VwIGJ1Y2tldHMgd2l0aCBvdGhlciBwcm9ncmFtIHR5cGVzLCBzbyByZXN0cmljdGluZyB0aGUgTFNNXFxuKyAqIHBvbGljeSBrZnVuY3MgcmVxdWlyZXMgYSBmaWx0ZXIuICBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsXFxuKyAqIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgc29cXG4rICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBpcyBleGNsdXNpdmUgdG8gc3lzY2FsbFxcbisgKiBwcm9ncmFtcywgd2hpY2ggcnVuIGluIHRoYXQgdGFzaydzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cXG4rICogdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaXQgbWVkaWF0ZXMuICBFbmZvcmNlbWVudCBpcyBleGNsdXNpdmUgdG9cXG4rICogdGhlIHNsZWVwYWJsZSBicHJtIExTTSBob29rcyB0aGUgcG9saWN5IG9wZXJhdGlvbiBpcyBzcGVjaWZpZWRcXG4rICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmVcXG4rICogaGVsZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4re1xcbitcXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfbGFuZGxvY2tfa2Z1bmNfaWRzLCBrZnVuY19pZCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0c3dpdGNoIChwcm9nLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgQlBGX1BST0dfVFlQRV9TWVNDQUxMOlxcbitcXHRcXHRpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHNbMF0pXFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcXG4rXFx0XFx0aWYgKGtmdW5jX2lkID09IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9pZHNbMF0pXFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQlBGX0xTTV9DR1JPVVAgcHJvZ3JhbXMgcnVuIHVuZGVyIGNsYXNzaWMgUkNVIGFuZFxcbitcXHRcXHQgKiBjYW5ub3Qgc2xlZXAuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX0xTTV9DR1JPVVApXFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXG4rXFx0XFx0aWYgKCFidGZfaWRfc2V0X2NvbnRhaW5zKFxcdTAwMjZicGZfbGFuZGxvY2tfa2Z1bmNfaG9va3MsXFxuK1xcdFxcdFxcdFxcdFxcdCBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2xhbmRsb2NrX2tmdW5jX3NldCA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5zZXQgPSBcXHUwMDI2YnBmX2xhbmRsb2NrX2tmdW5jX2lkcyxcXG4rXFx0LmZpbHRlciA9IGJwZl9sYW5kbG9ja19rZnVuY19maWx0ZXIsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX3BvbGljeV9rZnVuY19pbml0KHZvaWQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jIGJwZl9sYW5kbG9ja19kdG9yc1tdID0ge1xcbitcXHRcXHR7XFxuK1xcdFxcdFxcdC5idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMF0sXFxuK1xcdFxcdFxcdC5rZnVuY19idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMV0sXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX2xhbmRsb2NrX2tmdW5jX3NldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfbGFuZGxvY2tfZHRvcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFSUkFZX1NJWkUoYnBmX2xhbmRsb2NrX2R0b3JzKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgVEhJU19NT0RVTEUpO1xcbit9XFxuK2xhdGVfaW5pdGNhbGwoYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlIGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcXG5pbmRleCBmZmE3NjQ2ZDk5ZjNlLi45YmEyOGMwNmI1YWMyIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlXFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcXG5AQCAtMTYsMyArMTYsNSBAQCBsYW5kbG9jay0kKENPTkZJR19BVURJVCkgKz0gXFxcXFxcbiBcXHRpZC5vIFxcXFxcXG4gXFx0YXVkaXQubyBcXFxcXFxuIFxcdGRvbWFpbi5vXFxuK1xcbitsYW5kbG9jay0kKENPTkZJR19CUEZfTFNNKSArPSBicGYub1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9icGYuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZjg5MDYyZDM1YTcwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXFxuQEAgLTAsMCArMSwxMzAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rc1xcbisgKlxcbisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGhvb2tzIGJhY2tpbmcgdGhlIExhbmRsb2NrIGtmdW5jc1xcbisgKlxcbisgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sYW5kbG9jay5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJwZi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY3JlZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGltaXRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJydWxlc2V0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzZXR1cC5oXFxcIlxcbitcXG4rc3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG4re1xcbitcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcXG4rXFxuK1xcdHJ1bGVzZXQgPSBsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGZkLCBGTU9ERV9DQU5fUkVBRCk7XFxuK1xcdGlmIChJU19FUlIocnVsZXNldCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xcbitcXG4rXFx0cG9saWN5LVxcdTAwM2VsYW5kbG9jay5ydWxlc2V0ID0gKHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqKXJ1bGVzZXQ7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBob29rX3BvbGljeV9rcHRyX3B1dCh1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG4re1xcbitcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9XFxuK1xcdFxcdChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqKXBvbGljeS1cXHUwMDNlbGFuZGxvY2sucnVsZXNldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1heSBiZSBjYWxsZWQgZnJvbSBhIEJQRiBvYmplY3QgZGVzdHJ1Y3RvciB0aGF0IGNhbm5vdCBzbGVlcCxcXG4rXFx0ICogd2hlcmVhcyBkcm9wcGluZyB0aGUgbGFzdCBydWxlc2V0IHJlZmVyZW5jZSBmcmVlcyBpdCBhbmQgbWF5XFxuK1xcdCAqIHNsZWVwOiBhbHdheXMgZGVmZXIgdGhlIGZyZWUuXFxuK1xcdCAqL1xcbitcXHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChydWxlc2V0KTtcXG4rfVxcbitcXG4rLyogQ2hhcmdpbmcgc2NvcGUgZm9yIHRoZSBCUEYtZHJpdmVuIGRvbWFpbiBhbGxvY2F0aW9uczogcm9vdCwgaS5lLiBub2JvZHkuICovXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rXFx0cmV0dXJuIHJvb3RfbWVtX2Nncm91cDtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIE5VTEw7XFxuKyNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG4rfVxcbitcXG4rc3RhdGljIGludCBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmJwcm1fbGxjcmVkID0gbGFuZGxvY2tfY3JlZChicHJtLVxcdTAwM2VjcmVkKTtcXG4rXFx0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQgPVxcbitcXHRcXHQoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktXFx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQ7XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm9sZF9tZW1jZztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNhbWUgZmxhZ3MgYXMgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSwgZXhjZXB0XFxuK1xcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkM6IHRoZSByZXN0cmljdGlvbiB0YXJnZXRzIHRoZVxcbitcXHQgKiBleGVjdXRpb24sIG5vdCB0aGUgY2FsbGluZyB0aHJlYWRzLlxcbitcXHQgKi9cXG4rXFx0aWYgKChmbGFncyB8IExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNKSAhPVxcbitcXHQgICAgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRvbWFpbiBjb25maW5lcyB0aGUgZXhlY3V0aW9uIG9uIGJlaGFsZiBvZiB0aGUgQlBGXFxuK1xcdCAqIHByb2dyYW0sIG5vdCBvZiB0aGUgbWVkaWF0ZWQgdGFzazogZG8gbm90IGNoYXJnZSB0aGUgdGFzaydzXFxuK1xcdCAqIG1lbWNnIGZvciBpdC5cXG4rXFx0ICovXFxuK1xcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ2V0X2JwZl9tZW1jZygpKTtcXG4rXFx0ZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZXN0cmljdGlvbik7XFxuK1xcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0YWdlcyB0aGUgcmVzdHJpY3Rpb24gdW50aWwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZiB0aGVcXG4rXFx0ICogZXhlY3V0aW9uLCByZXBsYWNpbmcgKGFuZCByZWxlYXNpbmcpIGFueSBwcmV2aW91c2x5IHN0YWdlZFxcbitcXHQgKiBvbmUuICBOb3RoaW5nIGlzIGVuZm9yY2VkIHlldDogYW4gZXhlY3V0aW9uIHRoYXQgZmFpbHMgYmVmb3JlXFxuK1xcdCAqIGNvbW1pdHRpbmcgaXRzIGNyZWRlbnRpYWxzIGRyb3BzIHRoZSBzdGFnZWQgcmVzdHJpY3Rpb24gaW5cXG4rXFx0ICogaG9va19jcmVkX2ZyZWUoKSB3aXRoIG5vIGVmZmVjdCBvbiB0aGUgY2FsbGluZyB0YXNrLlxcbitcXHQgKi9cXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXQoYnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZC5kb21haW4pO1xcbitcXHRicHJtX2xsY3JlZC1cXHUwMDNlc3RhZ2VkID0gcmVzdHJpY3Rpb247XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBob29rX2Jwcm1fY29tbWl0dGluZ19jcmVkcyhjb25zdCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpicHJtX2xsY3JlZCA9IGxhbmRsb2NrX2NyZWQoYnBybS1cXHUwMDNlY3JlZCk7XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjtcXG4rXFxuK1xcdGlmICghYnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZC5kb21haW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJlc3RyaWN0aW9uID0gYnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZDtcXG4rXFx0YnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XFxuK1xcbitcXHRsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgXFx1MDAyNnJlc3RyaWN0aW9uKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgbGFuZGxvY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuK1xcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcXG4rXFx0TFNNX0hPT0tfSU5JVChwb2xpY3lfa3B0cl9wdXQsIGhvb2tfcG9saWN5X2twdHJfcHV0KSxcXG4rXFx0TFNNX0hPT0tfSU5JVChicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIGhvb2tfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKSxcXG4rXFx0TFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSxcXG4rfTtcXG4rXFxuK19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcXG4re1xcbitcXHRzZWN1cml0eV9hZGRfaG9va3MobGFuZGxvY2tfaG9va3MsIEFSUkFZX1NJWkUobGFuZGxvY2tfaG9va3MpLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2bGFuZGxvY2tfbHNtaWQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5oIGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU1NzcyOWU2YTU2NDRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmhcXG5AQCAtMCwwICsxLDIxIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLypcXG4rICogTGFuZGxvY2sgLSBMU00gcG9saWN5IGtwdHIgaG9va3NcXG4rICpcXG4rICogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFxcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaWZuZGVmIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxcbisjZGVmaW5lIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rXFxuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbitfX2luaXQgdm9pZCBsYW5kbG9ja19hZGRfYnBmX2hvb2tzKHZvaWQpO1xcbisjZWxzZSAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbGFuZGxvY2tfYWRkX2JwZl9ob29rcyh2b2lkKVxcbit7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXFxuK1xcbisjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0JQRl9IICovXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xcbmluZGV4IGNjNDE5ZGU3NWNkNmIuLmVmYmZkMGMyMDQ3NTMgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jXFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jXFxuQEAgLTgsMTQgKzgsMTE0IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpbmZtdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sYW5kbG9jay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiY3JlZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZG9tYWluLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJydWxlc2V0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzZXR1cC5oXFxcIlxcbiBcXG4rLyoqXFxuKyAqIGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24gLSBDb21wdXRlIGEgY3JlZGVudGlhbCByZXN0cmljdGlvblxcbisgKlxcbisgKiBAbGxjcmVkOiBMYW5kbG9jayBjcmVkZW50aWFscyB0byByZXN0cmljdDogcHJvdmlkZXMgdGhlIHBhcmVudCBkb21haW4gYW5kXFxuKyAqICAgICAgICAgIHRoZSBwcmV2aW91cyBsb2cgY29uZmlndXJhdGlvbi4gIE5vdCBtb2RpZmllZC5cXG4rICogQHJ1bGVzZXQ6IFJ1bGVzZXQgdG8gZW5mb3JjZSwgb3IgTlVMTCBmb3IgYSBsb2ctY29uZmlndXJhdGlvbi1vbmx5IGNoYW5nZS5cXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3JcXG4rICogICAgICAgICB2YWxpZGF0aW5nIHRoZW0gYWdhaW5zdCB0aGUgc2V0IG9mIGZsYWdzIGl0IHN1cHBvcnRzLlxcbisgKiBAcmVzdHJpY3Rpb246IENvbXB1dGVkIHJlc3RyaWN0aW9uLiAgT24gc3VjY2VzcywgaG9sZHMgYSByZWZlcmVuY2Ugb25cXG4rICogICAgICAgICAgICAgICBAcmVzdHJpY3Rpb24tXFx1MDAzZWRvbWFpbiAoaWYgYW55KSwgd2hpY2hcXG4rICogICAgICAgICAgICAgICBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpIHRyYW5zZmVycyB0byB0aGUgcmVzdHJpY3RlZFxcbisgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLlxcbisgKlxcbisgKiBUaGUgcmVzdHJpY3Rpb24gYnVpbGRzIG9uIEBsbGNyZWQncyBjdXJyZW50IHN0YXRlOiB0aGUgY2FsbGVyIG11c3QgYXBwbHlcXG4rICogaXQgdG8gKG9yIHN0YWdlIGl0IGZvcikgdGhlc2Ugc2FtZSBjcmVkZW50aWFscy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXFxuK1xcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pXFxuK3tcXG4rI2lmZGVmIENPTkZJR19BVURJVFxcbitcXHQvKiBUcmFuc2xhdGVzIFxcXCJvZmZcXFwiIGFuZCBcXFwib25cXFwiIGZsYWdzIHRvIGJvb2xlYW5zLiAqL1xcbitcXHRjb25zdCBib29sIGxvZ19zYW1lX2V4ZWMgPVxcbitcXHRcXHQhKGZsYWdzIFxcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU0FNRV9FWEVDX09GRik7XFxuK1xcdGNvbnN0IGJvb2wgbG9nX25ld19leGVjID1cXG4rXFx0XFx0ISEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XFxuK1xcdGNvbnN0IGJvb2wgbG9nX3N1YmRvbWFpbnMgPVxcbitcXHRcXHQhKGZsYWdzIFxcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpO1xcbitcXHRjb25zdCBib29sIHByZXZfbG9nX3N1YmRvbWFpbnMgPSAhbGxjcmVkLVxcdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XFxuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4rXFxuK1xcdCpyZXN0cmljdGlvbiA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XFxuK1xcbisjaWZkZWYgQ09ORklHX0FVRElUXFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxcbitcXHRcXHRcXHRcXHRcXHQgICFsb2dfc3ViZG9tYWlucztcXG4rI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbitcXG4rXFx0aWYgKCFydWxlc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4gPSBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KGxsY3JlZC1cXHUwMDNlZG9tYWluLCBydWxlc2V0KTtcXG4rXFx0aWYgKElTX0VSUihyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluKSkge1xcbitcXHRcXHRjb25zdCBpbnQgZXJyID0gUFRSX0VSUihyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluKTtcXG4rXFxuK1xcdFxcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbisjaWZkZWYgQ09ORklHX0FVRElUXFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4tXFx1MDAzZWhpZXJhcmNoeS1cXHUwMDNlbG9nX3NhbWVfZXhlYyA9IGxvZ19zYW1lX2V4ZWM7XFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4tXFx1MDAzZWhpZXJhcmNoeS1cXHUwMDNlbG9nX25ld19leGVjID0gbG9nX25ld19leGVjO1xcbitcXHRpZiAoKCFsb2dfc2FtZV9leGVjIFxcdTAwMjZcXHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxcbitcXHRcXHRyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluLVxcdTAwM2VoaWVyYXJjaHktXFx1MDAzZWxvZ19zdGF0dXMgPVxcbitcXHRcXHRcXHRMQU5ETE9DS19MT0dfRElTQUJMRUQ7XFxuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24gLSBFbmZvcmNlIGEgY29tcHV0ZWQgcmVzdHJpY3Rpb24gb24gY3JlZGVudGlhbHNcXG4rICpcXG4rICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXJcXG4rICogICAgICAgICAgKHByZXBhcmVkIGFuZCBub3QgeWV0IGNvbW1pdHRlZCkuXFxuKyAqIEByZXN0cmljdGlvbjogUmVzdHJpY3Rpb24gY29tcHV0ZWQgYnkgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpXFxuKyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpc1xcbisgKiAgICAgICAgICAgICAgIHRyYW5zZmVycmVkIHRvIEBsbGNyZWQuXFxuKyAqXFxuKyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnRcXG4rICogb2YgZmFpbHVyZSwgZS5nLiBhbiBleGVjIHBvaW50IG9mIG5vIHJldHVybi5cXG4rICovXFxuK3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbilcXG4re1xcbisjaWZkZWYgQ09ORklHX0FVRElUXFxuK1xcdGxsY3JlZC1cXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmID0gcmVzdHJpY3Rpb24tXFx1MDAzZWxvZ19zdWJkb21haW5zX29mZjtcXG4rI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbitcXG4rXFx0aWYgKCFyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBSZXBsYWNlcyB0aGUgb2xkIGRvbWFpbi4gKi9cXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXQobGxjcmVkLVxcdTAwM2Vkb21haW4pO1xcbitcXHRsbGNyZWQtXFx1MDAzZWRvbWFpbiA9IHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW47XFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4gPSBOVUxMO1xcbitcXG4rI2lmZGVmIENPTkZJR19BVURJVFxcbitcXHRsbGNyZWQtXFx1MDAzZWRvbWFpbl9leGVjIHw9IEJJVChsbGNyZWQtXFx1MDAzZWRvbWFpbi1cXHUwMDNlbnVtX2xheWVycyAtIDEpO1xcbisjZW5kaWYgLyogQ09ORklHX0FVRElUICovXFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNvbnN0IG9sZClcXG4ge1xcbkBAIC0yNCw2ICsxMjQsMTIgQEAgc3RhdGljIHZvaWQgaG9va19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpjb25zdCBuZXcsXFxuIFxcbiBcXHRsYW5kbG9ja19nZXRfcnVsZXNldChvbGRfbGxjcmVkLVxcdTAwM2Vkb21haW4pO1xcbiBcXHQqbGFuZGxvY2tfY3JlZChuZXcpID0gKm9sZF9sbGNyZWQ7XFxuK1xcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rXFx0LyogT25seSBicHJtIGNyZWRlbnRpYWxzIG93biBhIHN0YWdlZCByZXN0cmljdGlvbjogbmV2ZXIgY29waWVkLiAqL1xcbitcXHRXQVJOX09OX09OQ0UobGFuZGxvY2tfY3JlZChuZXcpLVxcdTAwM2VzdGFnZWQuZG9tYWluKTtcXG4rXFx0bGFuZGxvY2tfY3JlZChuZXcpLVxcdTAwM2VzdGFnZWQgPSAoc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uKXt9O1xcbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cXG4gfVxcbiBcXG4gc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxcbkBAIC0zNSwxMCArMTQxLDE0IEBAIHN0YXRpYyBpbnQgaG9va19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKmNvbnN0IG5ldyxcXG4gXFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjb25zdCBjcmVkKVxcbiB7XFxuLVxcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBkb20gPSBsYW5kbG9ja19jcmVkKGNyZWQpLVxcdTAwM2Vkb21haW47XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQgPSBsYW5kbG9ja19jcmVkKGNyZWQpO1xcbitcXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVxcdTAwM2Vkb21haW4pO1xcbiBcXG4tXFx0aWYgKGRvbSlcXG4tXFx0XFx0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQoZG9tKTtcXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXFxuK1xcdC8qIFJlbGVhc2VzIGEgcmVzdHJpY3Rpb24gc3RhZ2VkIGZvciBhbiBhYm9ydGVkIGV4ZWN1dGlvbi4gKi9cXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVxcdTAwM2VzdGFnZWQuZG9tYWluKTtcXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfQVVESVRcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXFxuaW5kZXggZjI4N2M1NmI1ZmQ0Yi4uNzRmOGM5ODA4ZGM0YyAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmhcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmhcXG5AQCAtMjAsNiArMjAsMzEgQEBcXG4gI2luY2x1ZGUgXFxcInJ1bGVzZXQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNldHVwLmhcXFwiXFxuIFxcbisvKipcXG4rICogc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZWQgY3JlZGVudGlhbCByZXN0cmljdGlvblxcbisgKlxcbisgKiBUaGUgcmVzdWx0IG9mIGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKTogdGhlIG5ldyBzdGF0ZSB0aGF0XFxuKyAqIGVuZm9yY2luZyBhIHJ1bGVzZXQgd2l0aCBhIHNldCBvZiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzXFxuKyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXNcXG4rICogZW5mb3JjZWQgd2l0aCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpLCBlaXRoZXIgcmlnaHQgYXdheVxcbisgKiAobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSkgb3IgYWZ0ZXIgYSBzdGFnaW5nIHBlcmlvZCAocmVzdHJpY3Rpb25cXG4rICogb2YgYW4gZXhlY3V0aW9uKS5cXG4rICovXFxuK3N0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiB7XFxuK1xcdC8qKlxcbitcXHQgKiBAZG9tYWluOiBOZXcgZG9tYWluIHRvIGVuZm9yY2UsIG93bmluZyBhIHJlZmVyZW5jZS4gIE5VTEwgaWYgdGhlXFxuK1xcdCAqIHJlc3RyaWN0aW9uIG9ubHkgY2FycmllcyBhIGxvZyBjb25maWd1cmF0aW9uIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XFxuKyNpZmRlZiBDT05GSUdfQVVESVRcXG4rXFx0LyoqXFxuK1xcdCAqIEBsb2dfc3ViZG9tYWluc19vZmY6IE5ldyB2YWx1ZSBvZiB0aGUgY3JlZGVudGlhbHMnXFxuK1xcdCAqIEBsYW5kbG9ja19jcmVkX3NlY3VyaXR5LmxvZ19zdWJkb21haW5zX29mZi5cXG4rXFx0ICovXFxuK1xcdHU4IGxvZ19zdWJkb21haW5zX29mZiA6IDE7XFxuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAtIENyZWRlbnRpYWwgc2VjdXJpdHkgYmxvYlxcbiAgKlxcbkBAIC0zNSw2ICs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7XFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqZG9tYWluO1xcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXFxuK1xcdC8qKlxcbitcXHQgKiBAc3RhZ2VkOiBSZXN0cmljdGlvbiBzdGFnZWQgYnkgdGhlIGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cigpIGhvb2ssXFxuK1xcdCAqIG93bmluZyBpdHMgZG9tYWluIHJlZmVyZW5jZSBhbmQgYXBwbGllZCBhdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mXFxuK1xcdCAqIHRoZSBleGVjdXRpb24gKGJwcm1fY29tbWl0dGluZ19jcmVkcykuICBPbmx5IGV2ZXIgc2V0IG9uIHRoZVxcbitcXHQgKiBjcmVkZW50aWFscyBwcmVwYXJlZCBmb3IgYW4gZXhlY3V0aW9uLCBiZXR3ZWVuIHRoZSBzdGFnaW5nIGFuZFxcbitcXHQgKiBlaXRoZXIgdGhlIGFwcGxpY2F0aW9uIG9yIHRoZSByZWxlYXNlIG9mIHRoZSBhYm9ydGVkIGNyZWRlbnRpYWxzO1xcbitcXHQgKiBjb21taXR0ZWQgdGFzayBjcmVkZW50aWFscyBuZXZlciBjYXJyeSBhIHN0YWdlZCByZXN0cmljdGlvbi5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiBzdGFnZWQ7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitcXG4gI2lmZGVmIENPTkZJR19BVURJVFxcbiBcXHQvKipcXG4gXFx0ICogQGRvbWFpbl9leGVjOiBCaXRtYXNrIGlkZW50aWZ5aW5nIHRoZSBkb21haW4gbGF5ZXJzIHRoYXQgd2VyZSBlbmZvcmNlZCBieVxcbkBAIC03NSw2ICsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2NyZWRfY29weShzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqZHN0LFxcbiBcXHQqZHN0ID0gKnNyYztcXG4gXFxuIFxcdGxhbmRsb2NrX2dldF9ydWxlc2V0KHNyYy1cXHUwMDNlZG9tYWluKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbitcXHQvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovXFxuK1xcdFdBUk5fT05fT05DRShzcmMtXFx1MDAzZXN0YWdlZC5kb21haW4pO1xcbitcXHRkc3QtXFx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfY3VycmVudF9kb21haW4odm9pZClcXG5AQCAtMTUzLDYgKzE5NiwxNCBAQCBsYW5kbG9ja19nZXRfYXBwbGljYWJsZV9zdWJqZWN0KGNvbnN0IHN0cnVjdCBjcmVkICpjb25zdCBjcmVkLFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4raW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXFxuK1xcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pO1xcbitcXG4rdm9pZCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKTtcXG4rXFxuIF9faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9jcmVkX2hvb2tzKHZvaWQpO1xcbiBcXG4gI2VuZGlmIC8qIF9TRUNVUklUWV9MQU5ETE9DS19DUkVEX0ggKi9cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmggYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxcbmluZGV4IDA4ZDVmMmY2ZDMyMWEuLjBiZWRmZTY1MGVhMDUgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmhcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxcbkBAIC0zNyw2ICszNywxMCBAQFxcbiAjZGVmaW5lIExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRlxcdExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNcXG4gI2RlZmluZSBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEZcXHQoKExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRiBcXHUwMDNjXFx1MDAzYyAxKSAtIDEpXFxuIFxcbisvKiBTdWJzZXQgb2YgdGhlIHJlc3RyaWN0LXNlbGYgZmxhZ3MgYXBwbGljYWJsZSB0byBhbiBleGVjdXRpb24uICovXFxuKyNkZWZpbmUgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0gXFxcXFxcbitcXHQoTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGIFxcdTAwMjYgfkxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMpXFxuK1xcbiAvKiBjbGFuZy1mb3JtYXQgb24gKi9cXG4gXFxuICNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfTElNSVRTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXFxuaW5kZXggNGRkMDllYTIyYzg0NC4uMTc2YzYyNmY5ZjEwNSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcXG5AQCAtNTIwLDcgKzUyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcnVsZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqY29uc3Qgd29yaylcXG4gXFx0ZnJlZV9ydWxlc2V0KHJ1bGVzZXQpO1xcbiB9XFxuIFxcbi0vKiBPbmx5IGNhbGxlZCBieSBob29rX2NyZWRfZnJlZSgpLiAqL1xcbisvKiBGb3IgY29udGV4dHMgdGhhdCBjYW5ub3Qgc2xlZXAsIGUuZy4gaG9va19jcmVkX2ZyZWUoKS4gKi9cXG4gdm9pZCBsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldClcXG4ge1xcbiBcXHRpZiAocnVsZXNldCBcXHUwMDI2XFx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnJ1bGVzZXQtXFx1MDAzZXVzYWdlKSkge1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmggYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmhcXG5pbmRleCAwNDM3YWRmMTc0Mjg3Li5iNjVkMWMwN2UxOTJkIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxcbkBAIC0yMjUsNiArMjI1LDkgQEAgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKlxcbiBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBwYXJlbnQsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCk7XFxuIFxcbitzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChjb25zdCBpbnQgZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSk7XFxuK1xcbiBjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZSAqXFxuIGxhbmRsb2NrX2ZpbmRfcnVsZShjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCxcXG4gXFx0XFx0ICAgY29uc3Qgc3RydWN0IGxhbmRsb2NrX2lkIGlkKTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcXG5pbmRleCA0N2RhYzE3MzZmMTAwLi4zYjdlMThlZGFkZmJjIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sc20uaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJicGYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiY3JlZC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZXJyYXRhLmhcXFwiXFxuQEAgLTY4LDYgKzY5LDcgQEAgc3RhdGljIGludCBfX2luaXQgbGFuZGxvY2tfaW5pdCh2b2lkKVxcbiBcXHRsYW5kbG9ja19hZGRfdGFza19ob29rcygpO1xcbiBcXHRsYW5kbG9ja19hZGRfZnNfaG9va3MoKTtcXG4gXFx0bGFuZGxvY2tfYWRkX25ldF9ob29rcygpO1xcbitcXHRsYW5kbG9ja19hZGRfYnBmX2hvb2tzKCk7XFxuIFxcdGxhbmRsb2NrX2luaXRfaWQoKTtcXG4gXFx0bGFuZGxvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbiBcXHRwcl9pbmZvKFxcXCJVcCBhbmQgcnVubmluZy5cXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xcbmluZGV4IDM2YjAyODkyYzYyZjUuLjg5OTYwMWFmN2M0ZTEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmNcXG5AQCAtMjkzLDggKzI5Myw4IEBAIFNZU0NBTExfREVGSU5FMyhsYW5kbG9ja19jcmVhdGVfcnVsZXNldCxcXG4gICogUmV0dXJucyBhbiBvd25lZCBydWxlc2V0IGZyb20gYSBGRC4gSXQgaXMgdGh1cyBuZWVkZWQgdG8gY2FsbFxcbiAgKiBsYW5kbG9ja19wdXRfcnVsZXNldCgpIG9uIHRoZSByZXR1cm4gdmFsdWUuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmdldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgZm1vZGVfdCBtb2RlKVxcbitzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChjb25zdCBpbnQgZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRDTEFTUyhmZCwgcnVsZXNldF9mKShmZCk7XFxuIFxcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xcbkBAIC00NzYsNyArNDc2LDcgQEAgU1lTQ0FMTF9ERUZJTkU0KGxhbmRsb2NrX2FkZF9ydWxlLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogR2V0cyBhbmQgY2hlY2tzIHRoZSBydWxlc2V0LiAqL1xcbi1cXHRydWxlc2V0ID0gZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpO1xcbitcXHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpO1xcbiBcXHRpZiAoSVNfRVJSKHJ1bGVzZXQpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihydWxlc2V0KTtcXG4gXFxuQEAgLTUyOCw5ICs1MjgsOCBAQCBTWVNDQUxMX0RFRklORTIobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZiwgY29uc3QgaW50LCBydWxlc2V0X2ZkLCBjb25zdCBfX3UzMixcXG4ge1xcbiBcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCBfX2ZyZWUobGFuZGxvY2tfcHV0X3J1bGVzZXQpID0gTlVMTDtcXG4gXFx0c3RydWN0IGNyZWQgKm5ld19jcmVkO1xcbi1cXHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqbmV3X2xsY3JlZDtcXG4tXFx0Ym9vbCBfX21heWJlX3VudXNlZCBsb2dfc2FtZV9leGVjLCBsb2dfbmV3X2V4ZWMsIGxvZ19zdWJkb21haW5zLFxcbi1cXHRcXHRwcmV2X2xvZ19zdWJkb21haW5zO1xcbitcXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIWlzX2luaXRpYWxpemVkKCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtNTQ3LDEzICs1NDYsNiBAQCBTWVNDQUxMX0RFRklORTIobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZiwgY29uc3QgaW50LCBydWxlc2V0X2ZkLCBjb25zdCBfX3UzMixcXG4gXFx0ICAgIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHQvKiBUcmFuc2xhdGVzIFxcXCJvZmZcXFwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cXG4tXFx0bG9nX3NhbWVfZXhlYyA9ICEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TQU1FX0VYRUNfT0ZGKTtcXG4tXFx0LyogVHJhbnNsYXRlcyBcXFwib25cXFwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cXG4tXFx0bG9nX25ld19leGVjID0gISEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XFxuLVxcdC8qIFRyYW5zbGF0ZXMgXFxcIm9mZlxcXCIgZmxhZyB0byBib29sZWFuLiAqL1xcbi1cXHRsb2dfc3ViZG9tYWlucyA9ICEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJdCBpcyBhbGxvd2VkIHRvIHNldCBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiB3aXRoXFxuIFxcdCAqIC0xIGFzIHJ1bGVzZXRfZmQsIG9wdGlvbmFsbHkgY29tYmluZWQgd2l0aFxcbkBAIC01NjQsNyArNTU2LDggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXFxuIFxcdCAgICAgIChmbGFncyBcXHUwMDI2IH5MQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DKSA9PVxcbiBcXHRcXHQgICAgICBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRikpIHtcXG4gXFx0XFx0LyogR2V0cyBhbmQgY2hlY2tzIHRoZSBydWxlc2V0LiAqL1xcbi1cXHRcXHRydWxlc2V0ID0gZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fUkVBRCk7XFxuK1xcdFxcdHJ1bGVzZXQgPSBsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBGTU9ERV9DQU5fUkVBRCk7XFxuIFxcdFxcdGlmIChJU19FUlIocnVsZXNldCkpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xcbiBcXHR9XFxuQEAgLTU3NCw1MyArNTY3LDI4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxcbiBcXHRpZiAoIW5ld19jcmVkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG5ld19sbGNyZWQgPSBsYW5kbG9ja19jcmVkKG5ld19jcmVkKTtcXG4tXFxuLSNpZmRlZiBDT05GSUdfQVVESVRcXG4tXFx0cHJldl9sb2dfc3ViZG9tYWlucyA9ICFuZXdfbGxjcmVkLVxcdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XFxuLVxcdG5ld19sbGNyZWQtXFx1MDAzZWxvZ19zdWJkb21haW5zX29mZiA9ICFwcmV2X2xvZ19zdWJkb21haW5zIHx8XFxuLVxcdFxcdFxcdFxcdFxcdCAhbG9nX3N1YmRvbWFpbnM7XFxuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBvbmx5IGNhc2Ugd2hlbiBhIHJ1bGVzZXQgbWF5IG5vdCBiZSBzZXQgaXMgaWZcXG4gXFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYgaXMgc2V0IChvcHRpb25hbGx5IHdpdGhcXG4gXFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZFxcbiBcXHQgKiBvcHRpbWl6ZSB0aGlzIGNhc2UgYnkgbm90IGNhbGxpbmcgY29tbWl0X2NyZWRzKCkgaWYgdGhpcyBmbGFnIHdhc1xcbiBcXHQgKiBhbHJlYWR5IHNldCwgYnV0IGl0IGlzIG5vdCB3b3J0aCB0aGUgY29tcGxleGl0eS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmQgbWFuaXB1bGF0aW5nXFxuK1xcdCAqIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGJlY2F1c2UgdGhleSBhcmUgZGVkaWNhdGVkIHBlciB0aHJlYWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAocnVsZXNldCkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBUaGVyZSBpcyBubyBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiB3aGlsZSBjb3B5aW5nIGFuZFxcbi1cXHRcXHQgKiBtYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYmVjYXVzZSB0aGV5IGFyZVxcbi1cXHRcXHQgKiBkZWRpY2F0ZWQgcGVyIHRocmVhZC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBuZXdfZG9tID1cXG4tXFx0XFx0XFx0bGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLVxcdTAwM2Vkb21haW4sIHJ1bGVzZXQpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKG5ld19kb20pKSB7XFxuLVxcdFxcdFxcdGFib3J0X2NyZWRzKG5ld19jcmVkKTtcXG4tXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmV3X2RvbSk7XFxuLVxcdFxcdH1cXG4tXFxuLSNpZmRlZiBDT05GSUdfQVVESVRcXG4tXFx0XFx0bmV3X2RvbS1cXHUwMDNlaGllcmFyY2h5LVxcdTAwM2Vsb2dfc2FtZV9leGVjID0gbG9nX3NhbWVfZXhlYztcXG4tXFx0XFx0bmV3X2RvbS1cXHUwMDNlaGllcmFyY2h5LVxcdTAwM2Vsb2dfbmV3X2V4ZWMgPSBsb2dfbmV3X2V4ZWM7XFxuLVxcdFxcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXFx1MDAyNlxcdTAwMjYgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpXFxuLVxcdFxcdFxcdG5ld19kb20tXFx1MDAzZWhpZXJhcmNoeS1cXHUwMDNlbG9nX3N0YXR1cyA9IExBTkRMT0NLX0xPR19ESVNBQkxFRDtcXG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbi1cXG4tXFx0XFx0LyogUmVwbGFjZXMgdGhlIG9sZCAocHJlcGFyZWQpIGRvbWFpbi4gKi9cXG4tXFx0XFx0bGFuZGxvY2tfcHV0X3J1bGVzZXQobmV3X2xsY3JlZC1cXHUwMDNlZG9tYWluKTtcXG4tXFx0XFx0bmV3X2xsY3JlZC1cXHUwMDNlZG9tYWluID0gbmV3X2RvbTtcXG4tXFxuLSNpZmRlZiBDT05GSUdfQVVESVRcXG4tXFx0XFx0bmV3X2xsY3JlZC1cXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKG5ld19kb20tXFx1MDAzZW51bV9sYXllcnMgLSAxKTtcXG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbitcXHRlcnIgPSBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBydWxlc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBmbGFncywgXFx1MDAyNnJlc3RyaWN0aW9uKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuK1xcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBcXHUwMDI2cmVzdHJpY3Rpb24pO1xcbitcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykge1xcbi1cXHRcXHRjb25zdCBpbnQgZXJyID0gbGFuZGxvY2tfcmVzdHJpY3Rfc2libGluZ190aHJlYWRzKFxcbi1cXHRcXHRcXHRjdXJyZW50X2NyZWQoKSwgbmV3X2NyZWQpO1xcbitcXHRcXHRlcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG5ld19jcmVkKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZTlkOGM5NDkyYmRiMiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC01NDQxLDYgKzU0NDEsMTEyIEBAIGludCBzZWN1cml0eV9icGZfdG9rZW5fY2FwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcXG4gXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soYnBmX3Rva2VuX2NhcGFibGUsIHRva2VuLCBjYXApO1xcbiB9XFxuIFxcbisvKipcXG4rICogc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCgpIC0gR2V0IGFuIExTTSBwb2xpY3kgb2JqZWN0IGZyb20gYSBmZFxcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gYXNrZWQgdG8gaW50ZXJwcmV0IEBmZFxcbisgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciByZWZlcnJpbmcgdG8gYSBwb2xpY3kgb2JqZWN0LCByZXNvbHZlZCBpbiB0aGVcXG4rICogICAgICBjYWxsaW5nIHRhc2sncyBmaWxlIGRlc2NyaXB0b3IgdGFibGVcXG4rICogQHBvbGljeTogcmVjZWl2ZXMgdGhlIHJlZmVyZW5jZWQgcG9saWN5IG9iamVjdCBpbiB0aGUgbWVtYmVyIG9mIHRoZVxcbisgKiAgICAgICAgICBMU00gaWRlbnRpZmllZCBieSBAbHNtaWRcXG4rICpcXG4rICogQXNrIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgdG8gdHJhbnNsYXRlIEBmZCBpbnRvIGEgcmVmZXJlbmNlXFxuKyAqIGNvdW50ZWQgcG9saWN5IG9iamVjdC4gIFRoZSBjYWxsZXIgbXVzdCBub3QgZGVyZWZlcmVuY2UgdGhlXFxuKyAqIHJldHVybmVkIGhhbmRsZSwgbXVzdCBvbmx5IGhhbmQgaXQgYmFjayB0byB0aGUgc2FtZSBMU00sIGUuZy5cXG4rICogdGhyb3VnaCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoKSwgYW5kIG11c3QgcmVsZWFzZSBpdFxcbisgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpLiAgT25seSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbiBvZlxcbisgKiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzIGNhbGxlZC4gIFRoZSBob29rIGlzIG9ubHkgY2FsbGVkXFxuKyAqIGZyb20gYSBjb250ZXh0IHRoYXQgbWF5IHNsZWVwLlxcbisgKlxcbisgKiBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IGZpbGwgaXRzIG93biBtZW1iZXIgb2YgQHBvbGljeSB3aXRoIGFcXG4rICogcmVmZXJlbmNlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBpdCBpcyByZWxlYXNlZCB0aHJvdWdoIHRoZVxcbisgKiBwb2xpY3lfa3B0cl9wdXQgaG9vaywgYW5kIG11c3Qgbm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBAZmQgYmV5b25kXFxuKyAqIHdoYXQgaXRzIG93biB1c2Vyc3BhY2UgQVBJIGNyZWF0ZWQgaXQgd2l0aC5cXG4rICpcXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgQHBvbGljeSBob2xkcyBhIHJlZmVyZW5jZSBjb3VudGVkIHBvbGljeVxcbisgKiBvYmplY3QsIC1FT1BOT1RTVVBQIGlmIHRoZSBMU00gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZVxcbisgKiB2YWx1ZXMgb24gb3RoZXIgZmFpbHVyZXMuXFxuKyAqL1xcbitpbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcXG4rXFx0XFx0XFx0XFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcbit7XFxuK1xcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbitcXG4rXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX2Zyb21fZmQpIHtcXG4rXFx0XFx0aWYgKHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlbHNtaWQtXFx1MDAzZWlkICE9IGxzbWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmV0dXJuIHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlaG9vay5wb2xpY3lfa3B0cl9mcm9tX2ZkKGZkLCBwb2xpY3kpO1xcbitcXHR9XFxuK1xcdHJldHVybiBMU01fUkVUX0RFRkFVTFQocG9saWN5X2twdHJfZnJvbV9mZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKSAtIFB1dCBhIHJlZmVyZW5jZSBvbiBhbiBMU00gcG9saWN5IG9iamVjdFxcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gb3duaW5nIEBwb2xpY3lcXG4rICogQHBvbGljeTogdGhlIHBvbGljeSBvYmplY3QsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XFxuKyAqICAgICAgICAgIEBsc21pZFxcbisgKlxcbisgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIHByZXZpb3VzbHkgb2J0YWluZWQgd2l0aFxcbisgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCkuICBPbmx5IHRoZSBob29rIGltcGxlbWVudGF0aW9uXFxuKyAqIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgaXMgY2FsbGVkLCBhbmQgQHBvbGljeSBtdXN0IGhhdmVcXG4rICogYmVlbiBvYnRhaW5lZCBmcm9tIHRoYXQgc2FtZSBMU00uICBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHN1cHBvcnRcXG4rICogYmVpbmcgY2FsbGVkIGZyb20gYSBjb250ZXh0IHRoYXQgY2Fubm90IHNsZWVwOiB0aGUgcmVsZWFzZSBvZiBCUEZcXG4rICogbWFuYWdlZCByZWZlcmVuY2VzIG1heSBiZSBkcml2ZW4gZnJvbSBvYmplY3QgZGVzdHJ1Y3RvcnMuXFxuKyAqL1xcbit2b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcbit7XFxuK1xcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbitcXG4rXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX3B1dCkge1xcbitcXHRcXHRpZiAoc2NhbGwtXFx1MDAzZWhsLVxcdTAwM2Vsc21pZC1cXHUwMDNlaWQgIT0gbHNtaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2sucG9saWN5X2twdHJfcHV0KHBvbGljeSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHQvKiBBIGhlbGQgcmVmZXJlbmNlIGltcGxpZXMgdGhlIG1hdGNoaW5nIExTTSBpbXBsZW1lbnRzIHRoZSBob29rLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoMSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoKSAtIEVuZm9yY2UgYSBwb2xpY3kgb24gZXhlYyBjcmVkZW50aWFsc1xcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gb3duaW5nIEBwb2xpY3lcXG4rICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3RcXG4rICogQHBvbGljeTogdGhlIHBvbGljeSBvYmplY3QgdG8gZW5mb3JjZSwgaW4gdGhlIG1lbWJlciBvZiB0aGUgTFNNXFxuKyAqICAgICAgICAgIGlkZW50aWZpZWQgYnkgQGxzbWlkXFxuKyAqIEBmbGFnczogTFNNLXNwZWNpZmljIGVuZm9yY2VtZW50IGZsYWdzXFxuKyAqXFxuKyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHJlc3RyaWN0IHRoZSBjcmVkZW50aWFsc1xcbisgKiBwcmVwYXJlZCBpbiBAYnBybSB3aXRoIEBwb2xpY3ksIHNvIHRoYXQgdGhlIGV4ZWN1dGVkIHRhc2sgc3RhcnRzXFxuKyAqIGNvbmZpbmVkIGJ5IGl0LiAgQHBvbGljeSBtdXN0IGhhdmUgYmVlbiBvYnRhaW5lZCBmcm9tIHRoZSBzYW1lIExTTVxcbisgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKTsgdGhlIGhvb2sgYm9ycm93cyB0aGVcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIHJlbWFpbnMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBpdC5cXG4rICogT25seSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzXFxuKyAqIGNhbGxlZDogYW4gTFNNIG5ldmVyIHJlY2VpdmVzIGEgcG9saWN5IG9iamVjdCBtZWFudCBmb3IgYW5vdGhlciBMU00uXFxuKyAqXFxuKyAqIFRoaXMgaG9vayBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSBhbiBleGVjIHNlY3VyaXR5IGNvbnRleHQgd2hlcmVcXG4rICogQGJwcm0ncyBjcmVkZW50aWFscyBhcmUgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgY29tbWl0dGVkLCBpLmUuIGZyb20gYVxcbisgKiBicHJtX2NyZWRzX2Zvcl9leGVjKCkgb3IgYnBybV9jcmVkc19mcm9tX2ZpbGUoKSBob29rLlxcbisgKlxcbisgKiBIb3cgQHBvbGljeSBjb21wb3NlcyB3aXRoIHJlc3RyaWN0aW9ucyB0aGUgY3JlZGVudGlhbHMgYWxyZWFkeVxcbisgKiBjYXJyeSBpcyBkZWZpbmVkIGJ5IHRoZSBpbXBsZW1lbnRpbmcgTFNNLCBhcyBpcyB0aGUgbWVhbmluZyBvZlxcbisgKiBAZmxhZ3MsIHVuc3VwcG9ydGVkIHZhbHVlcyBvZiB3aGljaCBpdCBtdXN0IHJlamVjdCB3aXRoIC1FSU5WQUwuXFxuKyAqXFxuKyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBMU00gZG9lcyBub3RcXG4rICogaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZmFpbHVyZXMuXFxuKyAqL1xcbitpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcXG4rXFxuK1xcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIpIHtcXG4rXFx0XFx0aWYgKHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlbHNtaWQtXFx1MDAzZWlkICE9IGxzbWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmV0dXJuIHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlaG9vay5icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoYnBybSwgcG9saWN5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZmxhZ3MpO1xcbitcXHR9XFxuK1xcdHJldHVybiBMU01fUkVUX0RFRkFVTFQoYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2JwZl9tYXBfZnJlZSgpIC0gRnJlZSBhIGJwZiBtYXAncyBMU00gYmxvYlxcbiAgKiBAbWFwOiBicGYgbWFwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuaW5kZXggZWE3MDQ0ZjMwYWRjMy4uMmZhNzM0NDk3NDYxMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xcbkBAIC0xMjAsNiArMTIwLDcgQEAgQ09ORklHX1NBTVBMRVM9eVxcbiBDT05GSUdfU0FNUExFX0xJVkVQQVRDSD1tXFxuIENPTkZJR19TRUNVUklUWT15XFxuIENPTkZJR19TRUNVUklUWUZTPXlcXG4rQ09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLPXlcXG4gQ09ORklHX1NZTl9DT09LSUVTPXlcXG4gQ09ORklHX1RFU1RfQlBGPW1cXG4gQ09ORklHX1VETUFCVUY9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XFxuaW5kZXggNTIzZTBkMjliYmQ0My4uMmM0ZDg1N2Y2OWY1NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XFxuQEAgLTEyNSw3ICsxMjUsNyBAQCBDT05GSUdfTEVHQUNZX1ZTWVNDQUxMX05PTkU9eVxcbiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMVxcbiBDT05GSUdfTE9HX0NQVV9NQVhfQlVGX1NISUZUPTBcXG4gQ09ORklHX0xPR089eVxcbi1DT05GSUdfTFNNPVxcXCJzZWxpbnV4LGJwZixpbnRlZ3JpdHlcXFwiXFxuK0NPTkZJR19MU009XFxcImxhbmRsb2NrLHNlbGludXgsYnBmLGludGVncml0eVxcXCJcXG4gQ09ORklHX01BQ19QQVJUSVRJT049eVxcbiBDT05GSUdfTUFHSUNfU1lTUlE9eVxcbiBDT05GSUdfTUNPUkUyPXlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5MTkyOWY5OGU4OGVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuY1xcbkBAIC0wLDAgKzEsMzI5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cXHUwMDNlICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xhbmRsb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuc2tlbC5oXFxcIlxcbitcXG4rLyogRmFsbGJhY2tzIGZvciBvbGQgc3lzdGVtIGhlYWRlcnMuICovXFxuKyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT05cXG4rI2RlZmluZSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTiAoMVUgXFx1MDAzY1xcdTAwM2MgMSlcXG4rI2VuZGlmXFxuKyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xcbisjZGVmaW5lIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgKDFVIFxcdTAwM2NcXHUwMDNjIDMpXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfcnVsZXNldCh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHtcXG4rXFx0XFx0LmhhbmRsZWRfYWNjZXNzX2ZzID0gTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gc3lzY2FsbChfX05SX2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LCBcXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVzZXRfcHJvZ19zdGF0ZShzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcXG4re1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxlZCA9IGZhbHNlO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW5vX3J1bGVzZXQgPSBmYWxzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdF9lcnIgPSAtMTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdDJfZXJyID0gLTE7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNla2Z1bmNfZmxhZ3MgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWRvdWJsZV9jYWxsID0gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJ1bnMgdGhlIHN5c2NhbGwgcHJvZ3JhbSB0aGF0IGFjcXVpcmVzIHRoZSBydWxlc2V0IGZyb21cXG4rICogQHJ1bGVzZXRfZmQsIGluIHRoZSBydW5uZXIncyBmZCB0YWJsZSwgYW5kIHBhcmtzIGl0IGluIHRoZSBtYXAga3B0clxcbisgKiBzbG90IGZvciB0aGUgTFNNIHByb2dyYW0uXFxuKyAqL1xcbitzdGF0aWMgaW50IGxvYWRfcnVsZXNldF9pbnRvX21hcChzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5sb2FkX3J1bGVzZXQpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwibG9hZF9ydWxlc2V0X3J1blxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwibG9hZF9ydWxlc2V0X3JldHZhbFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdEFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZ290X251bGxfZm9yX2JhZF9mZCwgXFxcImJhZF9mZF9udWxsXFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBGb3JrcyBhIGNoaWxkIHRoYXQgZXhlY3MgXFxcInNoIC1jICdcXHUwMDNjc2hlbGxfY21kXFx1MDAzZSdcXFwiLiAgVGhlIG1vbml0b3JlZCBwaWRcXG4rICogaXMgb25seSBrbm93biwgYW5kIGNhbiBvbmx5IGJlIHB1Ymxpc2hlZCB0byB0aGUgQlBGIHByb2dyYW0sIG9uY2VcXG4rICogdGhlIGNoaWxkIGV4aXN0czogdGhlIGNoaWxkIHdhaXRzIG9uIGEgcGlwZSB1bnRpbCB0aGUgcGFyZW50IGhhc1xcbisgKiB1cGRhdGVkIGl0LiAgUmV0dXJucyB0aGUgY2hpbGQncyBleGl0IHN0YXR1cywgb3IgLTEgb24gZXJyb3IuXFxuKyAqL1xcbitzdGF0aWMgaW50IHJ1bl9leGVjX2NoaWxkKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsLFxcbitcXHRcXHRcXHQgIGJvb2wgbW9uaXRvcmVkLCBjb25zdCBjaGFyICpzaGVsbF9jbWQpXFxuK3tcXG4rXFx0aW50IHBpcGVfZmRzWzJdLCBzdGF0dXM7XFxuK1xcdGNoYXIgYnVmID0gMDtcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2ZkcyksIFxcXCJwaXBlXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcXFwiZm9ya1xcXCIpKSB7XFxuK1xcdFxcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9mZHNbMV0pO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdGNoYXIgKmFyZ3ZbXSA9IHsgXFxcInNoXFxcIiwgXFxcIi1jXFxcIiwgKGNoYXIgKilzaGVsbF9jbWQsIE5VTEwgfTtcXG4rXFxuK1xcdFxcdGNsb3NlKHBpcGVfZmRzWzFdKTtcXG4rXFx0XFx0cmVhZChwaXBlX2Zkc1swXSwgXFx1MDAyNmJ1ZiwgMSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0XFx0ZXhlY3YoXFxcIi9iaW4vc2hcXFwiLCBhcmd2KTtcXG4rXFx0XFx0ZXhpdCgxMjcpO1xcbitcXHR9XFxuK1xcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gbW9uaXRvcmVkID8gcGlkIDogMDtcXG4rXFx0d3JpdGUocGlwZV9mZHNbMV0sIFxcdTAwMjZidWYsIDEpO1xcbitcXHRjbG9zZShwaXBlX2Zkc1sxXSk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXFxcIndhaXRwaWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcXFwiY2hpbGRfZXhpdGVkXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEV4aXQgY29kZXM6IDQgPSB1bmV4cGVjdGVkIHdyaXRlIG91dGNvbWUsIDAgPSBldmVyeXRoaW5nIGFzXFxuKyAqIGV4cGVjdGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZm9ybWF0X2NoaWxkX2NtZChjaGFyICpjbWQsIHNpemVfdCBsZW4sIGJvb2wgZXhwZWN0X3dyaXRlX29rLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnRtcF9wYXRoKVxcbit7XFxuK1xcdGlmIChleHBlY3Rfd3JpdGVfb2spXFxuK1xcdFxcdHNucHJpbnRmKGNtZCwgbGVuLCBcXFwiZWNobyB4IFxcdTAwM2UgJXMgfHwgZXhpdCA0OyBleGl0IDBcXFwiLCB0bXBfcGF0aCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c25wcmludGYoY21kLCBsZW4sXFxuK1xcdFxcdFxcdCBcXFwiaWYgZWNobyB4IFxcdTAwM2UgJXMgMlxcdTAwM2UvZGV2L251bGw7IHRoZW4gZXhpdCA0OyBmaTsgZXhpdCAwXFxcIixcXG4rXFx0XFx0XFx0IHRtcF9wYXRoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9yZXN0cmljdF9iaW5wcm0odm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbCA9IE5VTEw7XFxuK1xcdGNoYXIgdG1wX3BhdGhbXSA9IFxcXCIvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWFxcXCI7XFxuK1xcdGNoYXIgY21kWzI1Nl07XFxuK1xcdGludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDtcXG4rXFxuK1xcdHRtcF9mZCA9IG1rc3RlbXAodG1wX3BhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9HRSh0bXBfZmQsIDAsIFxcXCJta3N0ZW1wXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Y2xvc2UodG1wX2ZkKTtcXG4rXFxuK1xcdHJ1bGVzZXRfZmQgPSBjcmVhdGVfcnVsZXNldCgpO1xcbitcXHRpZiAocnVsZXNldF9mZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PU1lTKVxcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0QVNTRVJUX0dFKHJ1bGVzZXRfZmQsIDAsIFxcXCJsYW5kbG9ja19jcmVhdGVfcnVsZXNldFxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF91bmxpbms7XFxuK1xcdH1cXG4rXFxuK1xcdHNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJ1bGVzZXRfZmQgPSBydWxlc2V0X2ZkO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sobHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fYXR0YWNoKHNrZWwpLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAobG9hZF9ydWxlc2V0X2ludG9fbWFwKHNrZWwpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIENvbnRyb2w6IGFuIHVubW9uaXRvcmVkIGV4ZWN1dGlvbiBtYXkgd3JpdGUgdG8gdGhlIHRtcCBmaWxlLiAqL1xcbitcXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xcbitcXHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgZmFsc2UsIGNtZCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXFxcImNvbnRyb2xfY2hpbGRfZXhpdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0ZBTFNFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbGVkLCBcXFwiY29udHJvbF9ub3RfbW9uaXRvcmVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIG1vbml0b3JlZCBleGVjdXRpb24gc3RhcnRzIGxhbmRsb2NrZWQ6IHRoZSBydWxlc2V0IGhhbmRsZXNcXG4rXFx0ICogTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUgd2l0aG91dCBhbnkgcnVsZSwgc28gdGhlIHdyaXRlXFxuK1xcdCAqIG11c3QgZmFpbC5cXG4rXFx0ICovXFxuK1xcdHJlc2V0X3Byb2dfc3RhdGUoc2tlbCk7XFxuK1xcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwicmVzdHJpY3RlZF9jaGlsZF9leGl0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxlZCwgXFxcImxzbV9wcm9nX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vub19ydWxlc2V0LCBcXFwicnVsZXNldF9pbl9tYXBcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVzdHJpY3RfZXJyLCAwLCBcXFwicmVzdHJpY3RfYmlucHJtXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgYXVkaXQgbG9nIGZsYWdzIG9mIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgYXBwbHkgdG9vLiAqL1xcbitcXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWtmdW5jX2ZsYWdzID0gTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT047XFxuK1xcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwibG9nX2ZsYWdzX2NoaWxkX2V4aXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXFxcImxvZ19mbGFnc19yZXN0cmljdF9iaW5wcm1cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzLCBub3RcXG4rXFx0ICogYW4gZXhlY3V0aW9uOiB0aGUga2Z1bmMgbXVzdCByZWplY3QgaXQgYW5kIHRoZSBleGVjdXRpb24gbXVzdFxcbitcXHQgKiBzdGF5IHVucmVzdHJpY3RlZC5cXG4rXFx0ICovXFxuK1xcdHJlc2V0X3Byb2dfc3RhdGUoc2tlbCk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNla2Z1bmNfZmxhZ3MgPSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DO1xcbitcXHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwidHN5bmNfY2hpbGRfZXhpdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VjYWxsZWQsIFxcXCJ0c3luY19wcm9nX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdF9lcnIsIC1FSU5WQUwsIFxcXCJ0c3luY19yZWplY3RlZFxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBzZWNvbmQgY2FsbCBvbiB0aGUgc2FtZSBleGVjdXRpb24gcmVwbGFjZXMgdGhlIHN0YWdlZFxcbitcXHQgKiBkb21haW4gKGFuZCByZWxlYXNlcyB0aGUgZmlyc3Qgb25lKTogdGhlIHJlc3VsdCBpcyBhIHNpbmdsZVxcbitcXHQgKiByZXN0cmljdGlvbiwgbm90IGFuIGVycm9yLlxcbitcXHQgKi9cXG4rXFx0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vkb3VibGVfY2FsbCA9IHRydWU7XFxuK1xcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwiZG91YmxlX2NoaWxkX2V4aXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXFxcImRvdWJsZV9yZXN0cmljdF9maXJzdFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdDJfZXJyLCAwLCBcXFwiZG91YmxlX3Jlc3RyaWN0X3NlY29uZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGNsb3NlKHJ1bGVzZXRfZmQpO1xcbitvdXRfdW5saW5rOlxcbitcXHR1bmxpbmsodG1wX3BhdGgpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkXFxuKyAqIGRvbWFpbiByZWxlYXNlZCwgd2hlbiB0aGUgZXhlY3V0aW9uIGZhaWxzIGFmdGVyIHRoZSBicHJtIGhvb2s6IHRoZVxcbisgKiBjYWxsaW5nIHRhc2sgbXVzdCBub3QgZW5kIHVwIGxhbmRsb2NrZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X3Jlc3RyaWN0X2JpbnBybV9kaXNjYXJkKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwgPSBOVUxMO1xcbitcXHRjaGFyIHRtcF9wYXRoW10gPSBcXFwiL3RtcC9sc21fcG9saWN5X2tmdW5jc19YWFhYWFhcXFwiO1xcbitcXHRjaGFyIGdhcmJhZ2VfcGF0aFtdID0gXFxcIi90bXAvbHNtX3BvbGljeV9nYXJiYWdlX1hYWFhYWFxcXCI7XFxuK1xcdGludCBydWxlc2V0X2ZkID0gLTEsIHRtcF9mZCwgZ2FyYmFnZV9mZCwgcGlwZV9mZHNbMl0sIHN0YXR1cztcXG4rXFx0Y2hhciBidWYgPSAwO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHR0bXBfZmQgPSBta3N0ZW1wKHRtcF9wYXRoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcXFwibWtzdGVtcFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGNsb3NlKHRtcF9mZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbiBleGVjdXRhYmxlIGZpbGUgdGhhdCBubyBiaW5mbXQgaGFuZGxlciBhY2NlcHRzOiB0aGUgZXhlY1xcbitcXHQgKiBmYWlscyB3aXRoIEVOT0VYRUMgYWZ0ZXIgYnBybV9jcmVkc19mb3JfZXhlYygpIGhhcyBydW4uXFxuK1xcdCAqL1xcbitcXHRnYXJiYWdlX2ZkID0gbWtzdGVtcChnYXJiYWdlX3BhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShnYXJiYWdlX2ZkLCAwLCBcXFwibWtzdGVtcF9nYXJiYWdlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X3VubGluaztcXG4rXFx0aWYgKCFBU1NFUlRfRVEod3JpdGUoZ2FyYmFnZV9mZCwgXFxcImp1bmtcXFxcblxcXCIsIDUpLCA1LCBcXFwid3JpdGVfZ2FyYmFnZVxcXCIpKSB7XFxuK1xcdFxcdGNsb3NlKGdhcmJhZ2VfZmQpO1xcbitcXHRcXHRnb3RvIG91dF91bmxpbms7XFxuK1xcdH1cXG4rXFx0aWYgKCFBU1NFUlRfT0soZmNobW9kKGdhcmJhZ2VfZmQsIDA3MDApLCBcXFwiY2htb2RfZ2FyYmFnZVxcXCIpKSB7XFxuK1xcdFxcdGNsb3NlKGdhcmJhZ2VfZmQpO1xcbitcXHRcXHRnb3RvIG91dF91bmxpbms7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZ2FyYmFnZV9mZCk7XFxuK1xcbitcXHRydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTtcXG4rXFx0aWYgKHJ1bGVzZXRfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1NZUylcXG4rXFx0XFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdEFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCBcXFwibGFuZGxvY2tfY3JlYXRlX3J1bGVzZXRcXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfdW5saW5rO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VydWxlc2V0X2ZkID0gcnVsZXNldF9mZDtcXG4rXFx0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2F0dGFjaChza2VsKSwgXFxcInNrZWxfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGxvYWRfcnVsZXNldF9pbnRvX21hcChza2VsKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgXFxcInBpcGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXFxcImZvcmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRjaGFyICphcmd2W10gPSB7IFxcXCJnYXJiYWdlXFxcIiwgTlVMTCB9O1xcbitcXHRcXHRpbnQgZmQ7XFxuK1xcbitcXHRcXHRjbG9zZShwaXBlX2Zkc1sxXSk7XFxuK1xcdFxcdHJlYWQocGlwZV9mZHNbMF0sIFxcdTAwMjZidWYsIDEpO1xcbitcXHRcXHRjbG9zZShwaXBlX2Zkc1swXSk7XFxuK1xcdFxcdGV4ZWN2KGdhcmJhZ2VfcGF0aCwgYXJndik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBmYWlsZWQgZXhlY3V0aW9uIG11c3QgbGVhdmUgbm8gdHJhY2U6IG5vXFxuK1xcdFxcdCAqIExhbmRsb2NrIGRvbWFpbiwgaS5lLiB3cml0aW5nIG11c3Qgc3RpbGwgd29ya1xcbitcXHRcXHQgKiAoZXhpdCA2KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGZkID0gb3Blbih0bXBfcGF0aCwgT19XUk9OTFkgfCBPX1RSVU5DKTtcXG4rXFx0XFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZXhpdCg2KTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRleGl0KDApO1xcbitcXHR9XFxuK1xcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gcGlkO1xcbitcXHR3cml0ZShwaXBlX2Zkc1sxXSwgXFx1MDAyNmJ1ZiwgMSk7XFxuK1xcdGNsb3NlKHBpcGVfZmRzWzFdKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcXFwid2FpdHBpZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXFxcImNoaWxkX2V4aXRlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIDAsIFxcXCJkaXNjYXJkX2NoaWxkX2V4aXRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VjYWxsZWQsIFxcXCJsc21fcHJvZ19jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVzdHJpY3RfZXJyLCAwLCBcXFwicmVzdHJpY3RfYmlucHJtXFxcIik7XFxuK291dDpcXG4rXFx0bHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTtcXG4rXFx0aWYgKHJ1bGVzZXRfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocnVsZXNldF9mZCk7XFxuK291dF91bmxpbms6XFxuK1xcdHVubGluayhnYXJiYWdlX3BhdGgpO1xcbitcXHR1bmxpbmsodG1wX3BhdGgpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfbHNtX3BvbGljeV9rZnVuY3Modm9pZClcXG4re1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmVzdHJpY3RfYmlucHJtXFxcIikpXFxuK1xcdFxcdHRlc3RfcmVzdHJpY3RfYmlucHJtKCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJyZXN0cmljdF9iaW5wcm1fZGlzY2FyZFxcXCIpKVxcbitcXHRcXHR0ZXN0X3Jlc3RyaWN0X2JpbnBybV9kaXNjYXJkKCk7XFxuK1xcdFJVTl9URVNUUyhsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDMzNWRiNTQ3MDQwMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jXFxuQEAgLTAsMCArMSwxMDAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFxcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVxcdTAwM2UgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xcbitcXG4rZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXFxuK2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xcbitleHRlcm4gdm9pZFxcbiticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KSBfX2tzeW07XFxuK2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdHUzMiBmbGFncykgX19rc3ltO1xcbitcXG4rLypcXG4rICogVGhlIExTTSBwb2xpY3kga2Z1bmNzIGFyZSBsaW1pdGVkIHRvIExTTSBhbmQgc3lzY2FsbCBwcm9ncmFtcyBieVxcbisgKiB0aGUgQlBGLXNpZGUga2Z1bmMgZmlsdGVyOiBhIHRyYWNpbmcgcHJvZ3JhbSBjYWxsaW5nIG9uZSBtdXN0IGZhaWxcXG4rICogdmVyaWZpY2F0aW9uLlxcbisgKi9cXG4rU0VDKFxcXCJ0cF9idGYvdGFza19uZXd0YXNrXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcXG4rXFxuK1xcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxuK1xcdGlmIChydWxlc2V0KVxcbitcXHRcXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0XFxuKyAqIHNldCB0aGUgcnVsZXNldCB1cDogdGhlIGFjcXVpcmUga2Z1bmMgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGxcXG4rICogcHJvZ3JhbXMgYW5kIG11c3QgYmUgcmVqZWN0ZWQgaW4gYW4gTFNNIHByb2dyYW0sIGV2ZW4gb24gYW5cXG4rICogYWxsb3dlZCBob29rLlxcbisgKi9cXG4rU0VDKFxcXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFxcXCIpXFxuK2ludCBCUEZfUFJPRyhsc21fZ2V0LCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcXG4rXFxuK1xcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxuK1xcdGlmIChydWxlc2V0KVxcbitcXHRcXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBFbmZvcmNlbWVudCBuZWVkcyBhbiBleGVjdXRpb24gdG8gcmVzdHJpY3Q6IHRoZSBlbmZvcmNlbWVudCBrZnVuY1xcbisgKiBpcyBleGNsdXNpdmUgdG8gdGhlIHNsZWVwYWJsZSBicHJtIExTTSBob29rcyBhbmQgbXVzdCBiZSByZWplY3RlZFxcbisgKiBpbiBhIHN5c2NhbGwgcHJvZ3JhbS5cXG4rICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSBpcyBub3QgYWxsb3dlZFxcXCIpXFxuK2ludCBzeXNjYWxsX3Jlc3RyaWN0KHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShOVUxMLCBOVUxMLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogQW55IExTTSBhdHRhY2ggcG9pbnQgb3RoZXIgdGhhbiB0aGUgc2xlZXBhYmxlIGJwcm0gaG9va3MgbXVzdCBiZVxcbisgKiByZWplY3RlZC5cXG4rICovXFxuK1NFQyhcXFwibHNtLnMvZmlsZV9vcGVuXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgaXMgbm90IGFsbG93ZWRcXFwiKVxcbitpbnQgQlBGX1BST0cod3JvbmdfaG9vaywgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KE5VTEwpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIGtmdW5jcyBtYXkgc2xlZXA6IGEgbm9uLXNsZWVwYWJsZSBwcm9ncmFtIG9uIGFuIGFsbG93ZWQgaG9va1xcbisgKiBtdXN0IGJlIHJlamVjdGVkLlxcbisgKi9cXG4rU0VDKFxcXCJsc20vYnBybV9jcmVkc19mb3JfZXhlY1xcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwicHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcXFwiKVxcbitpbnQgQlBGX1BST0cobm9uc2xlZXBhYmxlX3Byb2csIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK3tcXG4rXFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KE5VTEwpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQW4gYWNxdWlyZWQgcnVsZXNldCByZWZlcmVuY2UgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgcmV0dXJuaW5nLiAqL1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlXFxcIilcXG4raW50IGxlYWtfcnVsZXNldCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEwNzIwNmFlMTQ0ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jXFxuQEAgLTAsMCArMSwxMDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFxcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVxcdTAwM2UgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQ7XFxuK1xcbitleHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcXG4rYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XFxuK2V4dGVybiB2b2lkXFxuK2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQpIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCxcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIGZsYWdzKSBfX2tzeW07XFxuK1xcbitzdHJ1Y3QgcnVsZXNldF9zbG90IHtcXG4rXFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0IF9fa3B0ciAqcnVsZXNldDtcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBydWxlc2V0X3Nsb3QpO1xcbit9IHJ1bGVzZXRfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2ludCBtb25pdG9yZWRfcGlkO1xcbitpbnQgcnVsZXNldF9mZDtcXG4rdTMyIGtmdW5jX2ZsYWdzO1xcbitib29sIGRvdWJsZV9jYWxsO1xcbitib29sIGdvdF9udWxsX2Zvcl9iYWRfZmQ7XFxuK2Jvb2wgbm9fcnVsZXNldDtcXG4raW50IHJlc3RyaWN0X2VycjtcXG4raW50IHJlc3RyaWN0Ml9lcnI7XFxuK2Jvb2wgY2FsbGVkO1xcbitcXG4rLypcXG4rICogUnVucyBpbiB0aGUgdGVzdCBydW5uZXIncyBjb250ZXh0IHRocm91Z2ggQlBGX1BST0dfUlVOOlxcbisgKiBAcnVsZXNldF9mZCBpcyByZXNvbHZlZCBpbiB0aGUgcnVubmVyJ3MgZmQgdGFibGUgYW5kIHRoZSBhY3F1aXJlZFxcbisgKiBydWxlc2V0IGlzIGhhbmRlZCB0byB0aGUgTFNNIHByb2dyYW0gdGhyb3VnaCB0aGUgbWFwIGtwdHIgc2xvdC5cXG4rICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBsb2FkX3J1bGVzZXQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwgKm9sZDtcXG4rXFx0c3RydWN0IHJ1bGVzZXRfc2xvdCAqc2xvdDtcXG4rXFx0aW50IGtleSA9IDA7XFxuK1xcbitcXHRzbG90ID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2cnVsZXNldF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXNsb3QpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0LyogQSBmZCB0aGF0IGlzIG5vdCBhIExhbmRsb2NrIHJ1bGVzZXQgbXVzdCByZXNvbHZlIHRvIE5VTEwuICovXFxuK1xcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxuK1xcdGlmICghcnVsZXNldClcXG4rXFx0XFx0Z290X251bGxfZm9yX2JhZF9mZCA9IHRydWU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHJ1bGVzZXQpO1xcbitcXG4rXFx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQpO1xcbitcXHRpZiAoIXJ1bGVzZXQpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2c2xvdC1cXHUwMDNlcnVsZXNldCwgcnVsZXNldCk7XFxuK1xcdGlmIChvbGQpXFxuK1xcdFxcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChvbGQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXFxcIilcXG4raW50IEJQRl9QUk9HKHJlc3RyaWN0X2V4ZWMsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkO1xcbitcXHRzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90O1xcbitcXHRpbnQga2V5ID0gMDtcXG4rXFxuK1xcdGlmIChtb25pdG9yZWRfcGlkICE9IChicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y2FsbGVkID0gdHJ1ZTtcXG4rXFxuK1xcdHNsb3QgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZydWxlc2V0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghc2xvdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRydWxlc2V0ID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2c2xvdC1cXHUwMDNlcnVsZXNldCwgTlVMTCk7XFxuK1xcdGlmICghcnVsZXNldCkge1xcbitcXHRcXHRub19ydWxlc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJlc3RyaWN0X2VyciA9IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oYnBybSwgcnVsZXNldCwga2Z1bmNfZmxhZ3MpO1xcbitcXHRpZiAoZG91YmxlX2NhbGwpXFxuK1xcdFxcdC8qIFJlcGxhY2VzIHRoZSBkb21haW4gc3RhZ2VkIGJ5IHRoZSBmaXJzdCBjYWxsLiAqL1xcbitcXHRcXHRyZXN0cmljdDJfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGtmdW5jX2ZsYWdzKTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIHJ1bGVzZXQgZm9yIHRoZSBuZXh0IG1vbml0b3JlZCBleGVjdXRpb24uICovXFxuK1xcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXFx1MDAyNnNsb3QtXFx1MDAzZXJ1bGVzZXQsIHJ1bGVzZXQpO1xcbitcXHRpZiAob2xkKVxcbitcXHRcXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQob2xkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6MjguNDM1NTM3NjYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjExNjY1NDY5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXCIsXG4gICAgXCJicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcIixcbiAgICBcImJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRcIixcbiAgICBcInNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0clwiLFxuICAgIFwibGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvblwiLFxuICAgIFwibGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIExhbmRsb2NrIExTTSwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgb24gZXhlY3V0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZWI2ZGE5NGViYzUxNWE2ZWQ0MmY4OTJmMTkyYTBiYzFlZmRlNTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMTowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbmluZGV4IGM1MTg2NTI2ZTc2ZjYuLjAxMTk3Yzc1ODBlYzAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbkBAIC0xMjksNiArMTI5LDMxIEBAIFRoZSByZWFzb25pbmcgaXM6XG4gICByZXN0cmljdGlvbnMsIGJlY2F1c2UgYWNjZXNzIHdpdGhpbiB0aGUgc2FtZSBzY29wZSBpcyBhbHJlYWR5XG4gICBhbGxvd2VkIGJhc2VkIG9uIGBgTEFORExPQ0tfQUNDRVNTX0ZTX1JFU09MVkVfVU5JWGBgLlxuIFxuK0JQRiBrZnVuY3Ncbis9PT09PT09PT09XG4rXG4rQlBGIHByb2dyYW1zIGNhbiBhcHBseSBhIHVzZXJzcGFjZS1jcmVhdGVkIExhbmRsb2NrIHJ1bGVzZXQgdG8gYW5cbitleGVjdXRpb24uICBBIHN5c2NhbGwgcHJvZ3JhbSAoYGBCUEZfUFJPR19UWVBFX1NZU0NBTExgYCksIHJ1bm5pbmcgaW5cbit0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgYWNxdWlyZXMgdGhlXG4rcnVsZXNldCBmcm9tIGl0cyBmaWxlIGRlc2NyaXB0b3IgYW5kIHR5cGljYWxseSBoYW5kcyBpdCBvdmVyIHRocm91Z2hcbithIG1hcCBrcHRyIGZpZWxkOyBhIHNsZWVwYWJsZSBMU00gQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4rYGBicHJtX2NyZWRzX2Zvcl9leGVjYGAgb3IgYGBicHJtX2NyZWRzX2Zyb21fZmlsZWBgIGhvb2tzIHRoZW5cbitlbmZvcmNlcyBpdCBvbiBhbiBleGVjdXRpb24uXG4rXG4rVGhpcyBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBydW50aW1lIGNvbnRleHQgb2YgYSBwZW5kaW5nIGV4ZWN1dGlvbixcbithbmQgZW5mb3JjZSBhIExhbmRsb2NrIHBvbGljeSB0aHJvdWdoIEJQRi5cbitcbitUaGUgcmVzdHJpY3Rpb24gaXMgc3RhZ2VkIGluIHRoZSBMYW5kbG9jayBibG9iIG9mIHRoZVxuK2NyZWRlbnRpYWxzIHByZXBhcmVkIGZvciB0aGUgZXhlY3V0aW9uIGFuZCBjb21taXR0ZWQgcGFzdCB0aGUgZXhlY1xuK3BvaW50IG9mIG5vIHJldHVybiwgc28gYSBmYWlsZWQgZXhlY3V0aW9uIGxlYXZlcyB0aGUgY2FsbGluZyB0YXNrXG4rdW50b3VjaGVkLiAgVGhlIGBgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKWBgIGZsYWdzIGFwcGx5LCB3aXRoIHRoZVxuK2V4Y2VwdGlvbiBvZiBgYExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNgYC5cbitcbisuLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmNcbisgICAgOmlkZW50aWZpZXJzOiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZFxuKyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFxuKyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cbitcbiBUZXN0c1xuID09PT09XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0XG5pbmRleCA1ODk1ZTUyOWRhN2ZmLi5mYzNhZjIwNmU3OTUwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcbkBAIC0xNSwzICsxNSwzMCBAQCBzZWUgYGBzZWN1cml0eS9zZWN1cml0eS5jYGAgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlczpcbiBcbiAuLiBrZXJuZWwtZG9jOjogc2VjdXJpdHkvc2VjdXJpdHkuY1xuICAgIDpleHBvcnQ6XG4rXG4rTFNNIHBvbGljeSBrcHRyIGhvb2tzIGFuZCBCUEYga2Z1bmNzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rVGhlIExTTSBmcmFtZXdvcmsgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgZm9yIGluZGl2aWR1YWwgTFNNcyB0b1xuK2V4cG9zZSB0aGVpciBjb25maWd1cmF0aW9uIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQga3B0cnMuIEFuIExTTVxuK21heSBub3QgZXhwb3J0IGFueSBrZnVuYyBvciBvdGhlciBCUEYgaW50ZXJmYWNlIGRpcmVjdGx5LlxuK1xuK0FuIExTTSB3aXNoaW5nIHRvIGV4cG9zZSBhIEJQRiBrZnVuYyBtdXN0IHJldXNlIGFuIGV4aXN0aW5nIHNlY3VyaXR5XG4raG9vayBvciBpbXBsZW1lbnQgYSBuZXcgc3VmZmljaWVudGx5IGdlbmVyaWMgTFNNIGhvb2sgZm9yIHRoZSBkZXNpcmVkXG4raW50ZXJmYWNlLiBUaGUgaG9va3MgYXJlIHRoZW4gY2FsbGVkIGZyb20ga2Z1bmMgZGVmaW5pdGlvbnMgaW5cbitgYGtlcm5lbC9icGZgYC4gVGhpcyBhbGxvd3MgTFNNIGhvb2tzIHRvIHJlbWFpbiBzdWZmaWNpZW50bHkgZ2VuZXJpY1xuK3doaWxlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgc3Ryb25nIHR5cGluZ1xuK2FuZCBydW50aW1lIGNoZWNraW5nIG9mZmVyZWQgYnkgdGhlIEJQRiB2ZXJpZmllci5cbitcbitUaGUgTFNNIHByb3ZpZGluZyBhbiBvcGVyYXRpb24gaW1wbGVtZW50cyB0aGUgb3BlcmF0aW9uJ3MgaG9vayB3aXRoXG4rYGBMU01fSE9PS19JTklUKClgYCBsaWtlIGFueSBvdGhlciBob29rLiBBIEJQRiBwcm9ncmFtIGNhbGxpbmcgYW5cbitMU00ga2Z1bmMgdGhlcmVmb3JlIHJlYWNoZXMgdGhlIExTTSB0aGUgc2FtZSB3YXkgZXZlcnkgb3RoZXJcbitrZXJuZWwgY2FsbGVyIGRvZXM6IHRocm91Z2ggYW4gTFNNIGhvb2suIFRoZSBob29rcyBiYWNraW5nIGtmdW5jc1xuK2ZvbGxvdyB0aGUgdXN1YWwgcnVsZXMgZm9yIG5ldyBMU00gaG9va3M6IHRoZWlyIGNvbnRyYWN0IG11c3QgYmVcbitMU00gYWdub3N0aWMgc28gdGhhdCBvdGhlciBMU01zIGNvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsXG4raW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbWUgb3BlcmF0aW9uLlxuK1xuK1doZXRoZXIgdGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGlzIGJ1aWx0IGluIGFuZCBhY3RpdmUgaXMgYVxuK3J1bnRpbWUgcHJvcGVydHk6IHRoZSBrZnVuY3MgYXJlIGFsd2F5cyByZWdpc3RlcmVkIHdoZW5cbitgYENPTkZJR19CUEZfTFNNYGAgaXMgZW5hYmxlZC4gQlBGIHByb2dyYW0gbG9hZGluZyBpcyB0aHVzXG4raW5kZXBlbmRlbnQgb2YgdGhlIGJvb3QtdGltZSBMU00gY29uZmlndXJhdGlvbi5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li5hNzBlZGJkN2I3NjFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtNDUyLDYgKzQ1MiwxMSBAQCBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jcmVhdGUsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXR0clxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgYnBmX3Rva2VuX2ZyZWUsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuKVxuIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NtZCwgY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGVudW0gYnBmX2NtZCBjbWQpXG4gTFNNX0hPT0soaW50LCAwLCBicGZfdG9rZW5fY2FwYWJsZSwgY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludCBjYXApXG4rTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgcG9saWN5X2twdHJfZnJvbV9mZCwgaW50IGZkLFxuK1x0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuK0xTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgcG9saWN5X2twdHJfcHV0LCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbitMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gTFNNX0hPT0soaW50LCAwLCBsb2NrZWRfZG93biwgZW51bSBsb2NrZG93bl9yZWFzb24gd2hhdClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjQwZGZhOTZiNmE3MTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTE2OCw2ICsxNjgsMjMgQEAgc3RydWN0IGxzbV9wcm9wIHtcbiBcdHN0cnVjdCBsc21fcHJvcF9icGYgYnBmO1xuIH07XG4gXG4rc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuK1xuK3N0cnVjdCBsc21fcG9saWN5X2xhbmRsb2NrIHtcbitcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcbit9O1xuK1xuKy8qXG4rICogQSByZWZlcmVuY2UgdG8gYW4gTFNNIHBvbGljeSBvYmplY3QsIHRhZ2dlZCBieSB0aGUgTFNNX0lEXyogdmFsdWVcbisgKiBwYXNzZWQgYWxvbmdzaWRlOiBvbmx5IHRoZSBtYXRjaGluZyBMU00ncyBtZW1iZXIgaXMgdmFsaWQuICBUaGVcbisgKiBtZW1iZXJzIGFyZSBub3QgZ3VhcmRlZCBieSB0aGUgTFNNcycgQ09ORklHIG9wdGlvbnM6IHRoZSBjYWxsZXJzXG4rICogYXJlIGJ1aWx0IGluZGVwZW5kZW50bHkgb2YgYW55IGluZGl2aWR1YWwgTFNNIGFuZCBhIGNhbGwgZm9yIGFcbisgKiBtaXNzaW5nIExTTSBtdXN0IGZhaWwgYXQgcnVudGltZSwgbm90IGF0IGJ1aWxkIHRpbWUuXG4rICovXG4rdW5pb24gbHNtX3BvbGljeV9rcHRyIHtcbitcdHN0cnVjdCBsc21fcG9saWN5X2xhbmRsb2NrIGxhbmRsb2NrO1xuK307XG4rXG4gZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2tkb3duX3JlYXNvbnNbTE9DS0RPV05fQ09ORklERU5USUFMSVRZX01BWCsxXTtcbiBcbiAvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGluIHNlY3VyaXR5L2NvbW1vbmNhcC5jICovXG5AQCAtMjMxMiw2ICsyMzI5LDEzIEBAIGV4dGVybiBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NyZWF0ZShzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgdW5pb24gYnBmX2F0dHIgKmF0XG4gZXh0ZXJuIHZvaWQgc2VjdXJpdHlfYnBmX3Rva2VuX2ZyZWUoc3RydWN0IGJwZl90b2tlbiAqdG9rZW4pO1xuIGV4dGVybiBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NtZChjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgZW51bSBicGZfY21kIGNtZCk7XG4gZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY2FwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcCk7XG4rZXh0ZXJuIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuK1x0XHRcdFx0XHR1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7XG4rZXh0ZXJuIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpO1xuK2V4dGVybiBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0XHQgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LFxuK1x0XHRcdFx0XHQgICAgIHUzMiBmbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icGYoaW50IGNtZCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBib29sIGtlcm5lbClcbkBAIC0yMzY1LDYgKzIzODksMjUgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludFxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuK1x0XHRcdFx0XHQgICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCxcbitcdFx0XHRcdFx0ICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbitcdFx0XHRcdFx0XHQgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXG4rXHRcdFx0XHRcdFx0ICAgIHUzMiBmbGFncylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuaW5kZXggMzk4M2I0Y2U3M2M4MS4uNjdhYTkwMmYxMjU3MCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuQEAgLTE0LDggKzE0LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbG9jYWxfc3RvcmFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2ZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi1jZ3JvdXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiAvKiBGb3IgZXZlcnkgTFNNIGhvb2sgdGhhdCBhbGxvd3MgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMsIGRlY2xhcmUgYSBub3BcbiAgKiBmdW5jdGlvbiB3aGVyZSBhIEJQRiBwcm9ncmFtIGNhbiBiZSBhdHRhY2hlZC4gTm90YWJseSwgd2UgcXVhbGlmeSBlYWNoIHdpdGhcbkBAIC01Niw2ICs1OCw5IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX3hmcm1fZGVjb2RlX3Nlc3Npb24pXG4gI2VuZGlmXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faXNtYWNsYWJlbClcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9maWxlX2FsbG9jX3NlY3VyaXR5KVxuK0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX2Zyb21fZmQpXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21fcG9saWN5X2twdHJfcHV0KVxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cilcbiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKVxuIFxuIC8qIExpc3Qgb2YgTFNNIGhvb2tzIHRoYXQgc2hvdWxkIG9wZXJhdGUgb24gJ2N1cnJlbnQnIGNncm91cCByZWdhcmRsZXNzXG5AQCAtNDcwLDMgKzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rLyogTFNNIHBvbGljeSBrZnVuY3MgKi9cbitcbisvKlxuKyAqIE9wYXF1ZSBoYW5kbGUgZm9yIGEgTGFuZGxvY2sgcnVsZXNldC4gIE9ubHlcbisgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIHByb2R1Y2VzIG9uZSwgYW5kIG9ubHkgTGFuZGxvY2tcbisgKiByZXNvbHZlcyBpdC5cbisgKi9cbitzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQge307XG4rXG4rLypcbisgKiBUaGUgc2xlZXBhYmxlIExTTSBob29rcyBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKCkgYW5kXG4rICogYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KCkgbWF5IGJlIGNhbGxlZCBmcm9tLlxuKyAqL1xuK0JURl9TRVRfU1RBUlQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZm9yX2V4ZWMpXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21fYnBybV9jcmVkc19mcm9tX2ZpbGUpXG4rQlRGX1NFVF9FTkQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuK1xuK19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbitcbisvKipcbisgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCAtIEdldCBhIExhbmRsb2NrIHJ1bGVzZXQgZnJvbSBhIGZkXG4rICogQGZkOiBmaWxlIGRlc2NyaXB0b3Igb2YgYSBMYW5kbG9jayBydWxlc2V0LCByZXNvbHZlZCBpbiB0aGUgZmlsZVxuKyAqICAgICAgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgdGFzayBydW5uaW5nIHRoZSBwcm9ncmFtXG4rICpcbisgKiBBY3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZSBMYW5kbG9jayBydWxlc2V0IHJlZmVycmVkIHRvIGJ5IEBmZCwgYXNcbisgKiBjcmVhdGVkIGJ5IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KDIpIGFuZCBwb3B1bGF0ZWQgd2l0aFxuKyAqIGxhbmRsb2NrX2FkZF9ydWxlKDIpLiAgT25seSBzeXNjYWxsIHByb2dyYW1zIG1heSBjYWxsIHRoaXMga2Z1bmM6XG4rICogdGhleSBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaW52b2tpbmcgdGhlbSwgd2hlcmUgdGhlXG4rICogcnVsZXNldCBmZCBpcyBtZWFuaW5nZnVsLiAgVGhlIGFjcXVpcmVkIHJ1bGVzZXQgY2FuIGJlIGhhbmRlZCB0byBhblxuKyAqIGVuZm9yY2VtZW50IHByb2dyYW0gdGhyb3VnaCBhIG1hcCBrcHRyIGZpZWxkLiAgVGhlIHJlZmVyZW5jZSBtdXN0XG4rICogYmUgcmVsZWFzZWQgd2l0aCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoKS5cbisgKlxuKyAqIFJldHVybjogQSByZWZlcmVuY2VkIHJ1bGVzZXQgaGFuZGxlLCBvciBOVUxMIGlmIEBmZCBpcyBub3QgYVxuKyAqIHJlYWRhYmxlIExhbmRsb2NrIHJ1bGVzZXQgZmQgb3IgdGhlIExhbmRsb2NrIExTTSBpcyBub3QgZW5hYmxlZC5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKlxuK2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZClcbit7XG4rXHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5O1xuK1xuK1x0aWYgKHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoTFNNX0lEX0xBTkRMT0NLLCBmZCwgXHUwMDI2cG9saWN5KSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gcG9saWN5LmxhbmRsb2NrLnJ1bGVzZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCAtIFB1dCBhIExhbmRsb2NrIHJ1bGVzZXRcbisgKiBAcnVsZXNldDogTGFuZGxvY2sgcnVsZXNldCB0byBwdXRcbisgKlxuKyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgYWNxdWlyZWQgd2l0aCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpLlxuKyAqL1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldClcbit7XG4rXHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTtcbitcbitcdHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dChMU01fSURfTEFORExPQ0ssIFx1MDAyNnBvbGljeSk7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0gLSBFbmZvcmNlIGEgTGFuZGxvY2sgcnVsZXNldCBvbiBleGVjXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzXG4rICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG9cbisgKiAgICAgICAgcmVzdHJpY3RcbisgKiBAcnVsZXNldDogTGFuZGxvY2sgcnVsZXNldCB0byBlbmZvcmNlXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLCBleGNlcHRcbisgKiAgICAgICAgICVMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DXG4rICpcbisgKiBSZXN0cmljdCB0aGUgY3JlZGVudGlhbHMgcHJlcGFyZWQgaW4gQGJwcm0gd2l0aCBAcnVsZXNldCwgc28gdGhhdFxuKyAqIHRoZSBleGVjdXRlZCB0YXNrIHN0YXJ0cyBjb25maW5lZCBieSBpdCwgZm9sbG93aW5nIHRoZSBzYW1lIGRvbWFpblxuKyAqIGNvbXBvc2l0aW9uIHJ1bGVzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikuICBUaGUgcmVzdHJpY3Rpb24gaXNcbisgKiBzdGFnZWQgYW5kIG9ubHkgY29tbWl0dGVkIGF0IHRoZSBleGVjdXRpb24ncyBwb2ludCBvZiBubyByZXR1cm46IGFuXG4rICogZXhlY3V0aW9uIHRoYXQgZmFpbHMgYmVmb3JlIHRoYXQgcG9pbnQgaXMgdW5hZmZlY3RlZCwgYW5kIGEgbGF0ZXJcbisgKiBjYWxsIG9uIHRoZSBzYW1lIGV4ZWN1dGlvbiByZXBsYWNlcyBhIHByZXZpb3VzbHkgc3RhZ2VkXG4rICogcmVzdHJpY3Rpb24uICBAcnVsZXNldCBpcyBvbmx5IGJvcnJvd2VkOiB0aGUgY2FsbGVyIGtlZXBzIGl0c1xuKyAqIHJlZmVyZW5jZS5cbisgKlxuKyAqIFRoZSBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzIGFwcGx5IHdpdGggdGhlaXIgdXN1YWxcbisgKiBzZW1hbnRpY3MuICBPbmx5ICVMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DIGlzIHJlamVjdGVkLCBhcyBpdFxuKyAqIHRhcmdldHMgdGhlIGNhbGxpbmcgdGhyZWFkcyByYXRoZXIgdGhhbiB0aGUgZXhlY3V0aW9uLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBMYW5kbG9jayBMU00gaXMgbm90XG4rICogZW5hYmxlZCwgLUVJTlZBTCBpZiBAZmxhZ3MgY29udGFpbnMgYW4gdW5zdXBwb3J0ZWQgZmxhZywgb3RoZXJcbisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZSBhcyBmb3IgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKS5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCxcbitcdFx0XHRcdFx0ICAgICB1MzIgZmxhZ3MpXG4re1xuK1x0dW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07XG4rXG4rXHRyZXR1cm4gc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKExTTV9JRF9MQU5ETE9DSywgYnBybSxcbitcdFx0XHRcdFx0XHQgXHUwMDI2cG9saWN5LCBmbGFncyk7XG4rfVxuK1xuKy8qIERlc3RydWN0b3IgZm9yIHJlZmVyZW5jZWQgYnBmX2xhbmRsb2NrX3J1bGVzZXQga3B0cnMuICovXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcih2b2lkICpydWxlc2V0KVxuK3tcbitcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9O1xuK1xuK1x0c2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KExTTV9JRF9MQU5ETE9DSywgXHUwMDI2cG9saWN5KTtcbit9XG4rQ0ZJX05PU0VBTChicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcik7XG4rXG4rX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbitcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkLFxuK1x0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCwgS0ZfUkVMRUFTRSB8IEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSwgS0ZfU0xFRVBBQkxFKVxuK0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG4rXG4rQlRGX0lEX0xJU1QoYnBmX2xhbmRsb2NrX2R0b3JfaWRzKVxuK0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KVxuK0JURl9JRChmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcilcbitcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYyxcbitcdFx0ICAgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQpXG4rQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1faWRzLCBmdW5jLFxuK1x0XHQgICBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKVxuK1xuKy8qXG4rICogQlBGX1BST0dfVFlQRV9MU00gYW5kIEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCBzaGFyZSB0aGVpciBrZnVuY1xuKyAqIGxvb2t1cCBidWNrZXRzIHdpdGggb3RoZXIgcHJvZ3JhbSB0eXBlcywgc28gcmVzdHJpY3RpbmcgdGhlIExTTVxuKyAqIHBvbGljeSBrZnVuY3MgcmVxdWlyZXMgYSBmaWx0ZXIuICBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsXG4rICogaW4gdGhlIGZkIHRhYmxlIG9mIHRoZSB0YXNrIHRoYXQgc2V0IHRoZSBydWxlc2V0IHVwLCBzb1xuKyAqIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKCkgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGxcbisgKiBwcm9ncmFtcywgd2hpY2ggcnVuIGluIHRoYXQgdGFzaydzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cbisgKiB0aGUgY29udGV4dCBvZiB0aGUgdGFzayBpdCBtZWRpYXRlcy4gIEVuZm9yY2VtZW50IGlzIGV4Y2x1c2l2ZSB0b1xuKyAqIHRoZSBzbGVlcGFibGUgYnBybSBMU00gaG9va3MgdGhlIHBvbGljeSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkXG4rICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmVcbisgKiBoZWxkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbit7XG4rXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19pZHMsIGtmdW5jX2lkKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzd2l0Y2ggKHByb2ctXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBCUEZfUFJPR19UWVBFX1NZU0NBTEw6XG4rXHRcdGlmIChrZnVuY19pZCA9PSBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtX2lkc1swXSlcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxuK1x0XHRpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkc1swXSlcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcbitcdFx0LypcbitcdFx0ICogQlBGX0xTTV9DR1JPVVAgcHJvZ3JhbXMgcnVuIHVuZGVyIGNsYXNzaWMgUkNVIGFuZFxuK1x0XHQgKiBjYW5ub3Qgc2xlZXAuXG4rXHRcdCAqL1xuK1x0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcbitcdFx0aWYgKCFidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19ob29rcyxcbitcdFx0XHRcdFx0IHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpKVxuK1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1xuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2xhbmRsb2NrX2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19pZHMsXG4rXHQuZmlsdGVyID0gYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcixcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9sc21fcG9saWN5X2tmdW5jX2luaXQodm9pZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2xhbmRsb2NrX2R0b3JzW10gPSB7XG4rXHRcdHtcbitcdFx0XHQuYnRmX2lkID0gYnBmX2xhbmRsb2NrX2R0b3JfaWRzWzBdLFxuK1x0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMV0sXG4rXHRcdH0sXG4rXHR9O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4rXHRcdFx0XHRcdFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHRcdTAwMjZicGZfbGFuZGxvY2tfa2Z1bmNfc2V0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9sYW5kbG9ja19kdG9ycyxcbitcdFx0XHRcdFx0ICAgQVJSQVlfU0laRShicGZfbGFuZGxvY2tfZHRvcnMpLFxuK1x0XHRcdFx0XHQgICBUSElTX01PRFVMRSk7XG4rfVxuK2xhdGVfaW5pdGNhbGwoYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGUgYi9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZVxuaW5kZXggZmZhNzY0NmQ5OWYzZS4uOWJhMjhjMDZiNWFjMiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZVxuQEAgLTE2LDMgKzE2LDUgQEAgbGFuZGxvY2stJChDT05GSUdfQVVESVQpICs9IFxcXG4gXHRpZC5vIFxcXG4gXHRhdWRpdC5vIFxcXG4gXHRkb21haW4ub1xuK1xuK2xhbmRsb2NrLSQoQ09ORklHX0JQRl9MU00pICs9IGJwZi5vXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNmODkwNjJkMzVhNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXG5AQCAtMCwwICsxLDEzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIExhbmRsb2NrIC0gTFNNIHBvbGljeSBrcHRyIGhvb2tzXG4rICpcbisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGhvb2tzIGJhY2tpbmcgdGhlIExhbmRsb2NrIGtmdW5jc1xuKyAqXG4rICogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbGFuZGxvY2suaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYnBmLmhcIlxuKyNpbmNsdWRlIFwiY3JlZC5oXCJcbisjaW5jbHVkZSBcImxpbWl0cy5oXCJcbisjaW5jbHVkZSBcInJ1bGVzZXQuaFwiXG4rI2luY2x1ZGUgXCJzZXR1cC5oXCJcbitcbitzdGF0aWMgaW50IGhvb2tfcG9saWN5X2twdHJfZnJvbV9mZChpbnQgZmQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuK3tcbitcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuK1xuK1x0cnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoZmQsIEZNT0RFX0NBTl9SRUFEKTtcbitcdGlmIChJU19FUlIocnVsZXNldCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xuK1xuK1x0cG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQgPSAoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICopcnVsZXNldDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBob29rX3BvbGljeV9rcHRyX3B1dCh1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbit7XG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9XG4rXHRcdChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqKXBvbGljeS1cdTAwM2VsYW5kbG9jay5ydWxlc2V0O1xuK1xuK1x0LypcbitcdCAqIE1heSBiZSBjYWxsZWQgZnJvbSBhIEJQRiBvYmplY3QgZGVzdHJ1Y3RvciB0aGF0IGNhbm5vdCBzbGVlcCxcbitcdCAqIHdoZXJlYXMgZHJvcHBpbmcgdGhlIGxhc3QgcnVsZXNldCByZWZlcmVuY2UgZnJlZXMgaXQgYW5kIG1heVxuK1x0ICogc2xlZXA6IGFsd2F5cyBkZWZlciB0aGUgZnJlZS5cbitcdCAqL1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQocnVsZXNldCk7XG4rfVxuK1xuKy8qIENoYXJnaW5nIHNjb3BlIGZvciB0aGUgQlBGLWRyaXZlbiBkb21haW4gYWxsb2NhdGlvbnM6IHJvb3QsIGkuZS4gbm9ib2R5LiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxuK3tcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xuKyNlbHNlXG4rXHRyZXR1cm4gTlVMTDtcbisjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4rfVxuK1xuK3N0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbitcdFx0XHRcdFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LFxuK1x0XHRcdFx0XHQgdTMyIGZsYWdzKVxuK3tcbitcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpicHJtX2xsY3JlZCA9IGxhbmRsb2NrX2NyZWQoYnBybS1cdTAwM2VjcmVkKTtcbitcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0ID1cbitcdFx0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICopcG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQ7XG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqb2xkX21lbWNnO1xuK1x0aW50IGVycjtcbitcbitcdC8qXG4rXHQgKiBTYW1lIGZsYWdzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMiksIGV4Y2VwdFxuK1x0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQzogdGhlIHJlc3RyaWN0aW9uIHRhcmdldHMgdGhlXG4rXHQgKiBleGVjdXRpb24sIG5vdCB0aGUgY2FsbGluZyB0aHJlYWRzLlxuK1x0ICovXG4rXHRpZiAoKGZsYWdzIHwgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pICE9XG4rXHQgICAgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkb21haW4gY29uZmluZXMgdGhlIGV4ZWN1dGlvbiBvbiBiZWhhbGYgb2YgdGhlIEJQRlxuK1x0ICogcHJvZ3JhbSwgbm90IG9mIHRoZSBtZWRpYXRlZCB0YXNrOiBkbyBub3QgY2hhcmdlIHRoZSB0YXNrJ3NcbitcdCAqIG1lbWNnIGZvciBpdC5cbitcdCAqL1xuK1x0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhnZXRfYnBmX21lbWNnKCkpO1xuK1x0ZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNnJlc3RyaWN0aW9uKTtcbitcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHQvKlxuK1x0ICogU3RhZ2VzIHRoZSByZXN0cmljdGlvbiB1bnRpbCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mIHRoZVxuK1x0ICogZXhlY3V0aW9uLCByZXBsYWNpbmcgKGFuZCByZWxlYXNpbmcpIGFueSBwcmV2aW91c2x5IHN0YWdlZFxuK1x0ICogb25lLiAgTm90aGluZyBpcyBlbmZvcmNlZCB5ZXQ6IGFuIGV4ZWN1dGlvbiB0aGF0IGZhaWxzIGJlZm9yZVxuK1x0ICogY29tbWl0dGluZyBpdHMgY3JlZGVudGlhbHMgZHJvcHMgdGhlIHN0YWdlZCByZXN0cmljdGlvbiBpblxuK1x0ICogaG9va19jcmVkX2ZyZWUoKSB3aXRoIG5vIGVmZmVjdCBvbiB0aGUgY2FsbGluZyB0YXNrLlxuK1x0ICovXG4rXHRsYW5kbG9ja19wdXRfcnVsZXNldChicHJtX2xsY3JlZC1cdTAwM2VzdGFnZWQuZG9tYWluKTtcbitcdGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZCA9IHJlc3RyaWN0aW9uO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0c3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmJwcm1fbGxjcmVkID0gbGFuZGxvY2tfY3JlZChicHJtLVx1MDAzZWNyZWQpO1xuK1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIHJlc3RyaWN0aW9uO1xuK1xuK1x0aWYgKCFicHJtX2xsY3JlZC1cdTAwM2VzdGFnZWQuZG9tYWluKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXN0cmljdGlvbiA9IGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZDtcbitcdGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4rXG4rXHRsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgXHUwMDI2cmVzdHJpY3Rpb24pO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBsYW5kbG9ja19ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbitcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcbitcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfcHV0LCBob29rX3BvbGljeV9rcHRyX3B1dCksXG4rXHRMU01fSE9PS19JTklUKGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0ciwgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIpLFxuK1x0TFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSxcbit9O1xuK1xuK19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbit7XG4rXHRzZWN1cml0eV9hZGRfaG9va3MobGFuZGxvY2tfaG9va3MsIEFSUkFZX1NJWkUobGFuZGxvY2tfaG9va3MpLFxuK1x0XHRcdCAgIFx1MDAyNmxhbmRsb2NrX2xzbWlkKTtcbit9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmggYi9zZWN1cml0eS9sYW5kbG9jay9icGYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU1NzcyOWU2YTU2NDRcbi0tLSAvZGV2L251bGxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5oXG5AQCAtMCwwICsxLDIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogTGFuZGxvY2sgLSBMU00gcG9saWN5IGtwdHIgaG9va3NcbisgKlxuKyAqIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpZm5kZWYgX1NFQ1VSSVRZX0xBTkRMT0NLX0JQRl9IXG4rI2RlZmluZSBfU0VDVVJJVFlfTEFORExPQ0tfQlBGX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitfX2luaXQgdm9pZCBsYW5kbG9ja19hZGRfYnBmX2hvb2tzKHZvaWQpO1xuKyNlbHNlIC8qIENPTkZJR19CUEZfTFNNICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbit7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuK1xuKyNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQlBGX0ggKi9cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmNcbmluZGV4IGNjNDE5ZGU3NWNkNmIuLmVmYmZkMGMyMDQ3NTMgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmNcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xuQEAgLTgsMTQgKzgsMTE0IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2xhbmRsb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNvbW1vbi5oXCJcbiAjaW5jbHVkZSBcImNyZWQuaFwiXG4rI2luY2x1ZGUgXCJkb21haW4uaFwiXG4gI2luY2x1ZGUgXCJydWxlc2V0LmhcIlxuICNpbmNsdWRlIFwic2V0dXAuaFwiXG4gXG4rLyoqXG4rICogbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbiAtIENvbXB1dGUgYSBjcmVkZW50aWFsIHJlc3RyaWN0aW9uXG4rICpcbisgKiBAbGxjcmVkOiBMYW5kbG9jayBjcmVkZW50aWFscyB0byByZXN0cmljdDogcHJvdmlkZXMgdGhlIHBhcmVudCBkb21haW4gYW5kXG4rICogICAgICAgICAgdGhlIHByZXZpb3VzIGxvZyBjb25maWd1cmF0aW9uLiAgTm90IG1vZGlmaWVkLlxuKyAqIEBydWxlc2V0OiBSdWxlc2V0IHRvIGVuZm9yY2UsIG9yIE5VTEwgZm9yIGEgbG9nLWNvbmZpZ3VyYXRpb24tb25seSBjaGFuZ2UuXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3JcbisgKiAgICAgICAgIHZhbGlkYXRpbmcgdGhlbSBhZ2FpbnN0IHRoZSBzZXQgb2YgZmxhZ3MgaXQgc3VwcG9ydHMuXG4rICogQHJlc3RyaWN0aW9uOiBDb21wdXRlZCByZXN0cmljdGlvbi4gIE9uIHN1Y2Nlc3MsIGhvbGRzIGEgcmVmZXJlbmNlIG9uXG4rICogICAgICAgICAgICAgICBAcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluIChpZiBhbnkpLCB3aGljaFxuKyAqICAgICAgICAgICAgICAgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oKSB0cmFuc2ZlcnMgdG8gdGhlIHJlc3RyaWN0ZWRcbisgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLlxuKyAqXG4rICogVGhlIHJlc3RyaWN0aW9uIGJ1aWxkcyBvbiBAbGxjcmVkJ3MgY3VycmVudCBzdGF0ZTogdGhlIGNhbGxlciBtdXN0IGFwcGx5XG4rICogaXQgdG8gKG9yIHN0YWdlIGl0IGZvcikgdGhlc2Ugc2FtZSBjcmVkZW50aWFscy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcbitcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCwgY29uc3QgdTMyIGZsYWdzLFxuK1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbilcbit7XG4rI2lmZGVmIENPTkZJR19BVURJVFxuK1x0LyogVHJhbnNsYXRlcyBcIm9mZlwiIGFuZCBcIm9uXCIgZmxhZ3MgdG8gYm9vbGVhbnMuICovXG4rXHRjb25zdCBib29sIGxvZ19zYW1lX2V4ZWMgPVxuK1x0XHQhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TQU1FX0VYRUNfT0ZGKTtcbitcdGNvbnN0IGJvb2wgbG9nX25ld19leGVjID1cbitcdFx0ISEoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OKTtcbitcdGNvbnN0IGJvb2wgbG9nX3N1YmRvbWFpbnMgPVxuK1x0XHQhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XG4rXHRjb25zdCBib29sIHByZXZfbG9nX3N1YmRvbWFpbnMgPSAhbGxjcmVkLVx1MDAzZWxvZ19zdWJkb21haW5zX29mZjtcbisjZW5kaWYgLyogQ09ORklHX0FVRElUICovXG4rXG4rXHQqcmVzdHJpY3Rpb24gPSAoc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uKXt9O1xuK1xuKyNpZmRlZiBDT05GSUdfQVVESVRcbitcdHJlc3RyaWN0aW9uLVx1MDAzZWxvZ19zdWJkb21haW5zX29mZiA9ICFwcmV2X2xvZ19zdWJkb21haW5zIHx8XG4rXHRcdFx0XHRcdCAgIWxvZ19zdWJkb21haW5zO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbitcbitcdGlmICghcnVsZXNldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4gPSBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KGxsY3JlZC1cdTAwM2Vkb21haW4sIHJ1bGVzZXQpO1xuK1x0aWYgKElTX0VSUihyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pKSB7XG4rXHRcdGNvbnN0IGludCBlcnIgPSBQVFJfRVJSKHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbik7XG4rXG4rXHRcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IE5VTEw7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rI2lmZGVmIENPTkZJR19BVURJVFxuK1x0cmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfc2FtZV9leGVjID0gbG9nX3NhbWVfZXhlYztcbitcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbi1cdTAwM2VoaWVyYXJjaHktXHUwMDNlbG9nX25ld19leGVjID0gbG9nX25ld19leGVjO1xuK1x0aWYgKCghbG9nX3NhbWVfZXhlYyBcdTAwMjZcdTAwMjYgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpXG4rXHRcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbi1cdTAwM2VoaWVyYXJjaHktXHUwMDNlbG9nX3N0YXR1cyA9XG4rXHRcdFx0TEFORExPQ0tfTE9HX0RJU0FCTEVEO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbiAtIEVuZm9yY2UgYSBjb21wdXRlZCByZXN0cmljdGlvbiBvbiBjcmVkZW50aWFsc1xuKyAqXG4rICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXJcbisgKiAgICAgICAgICAocHJlcGFyZWQgYW5kIG5vdCB5ZXQgY29tbWl0dGVkKS5cbisgKiBAcmVzdHJpY3Rpb246IFJlc3RyaWN0aW9uIGNvbXB1dGVkIGJ5IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKVxuKyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpc1xuKyAqICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQgdG8gQGxsY3JlZC5cbisgKlxuKyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnRcbisgKiBvZiBmYWlsdXJlLCBlLmcuIGFuIGV4ZWMgcG9pbnQgb2Ygbm8gcmV0dXJuLlxuKyAqL1xuK3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcbitcdFx0XHRcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pXG4re1xuKyNpZmRlZiBDT05GSUdfQVVESVRcbitcdGxsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSByZXN0cmljdGlvbi1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XG4rI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuK1xuK1x0aWYgKCFyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFJlcGxhY2VzIHRoZSBvbGQgZG9tYWluLiAqL1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXQobGxjcmVkLVx1MDAzZWRvbWFpbik7XG4rXHRsbGNyZWQtXHUwMDNlZG9tYWluID0gcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluO1xuK1x0cmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluID0gTlVMTDtcbitcbisjaWZkZWYgQ09ORklHX0FVRElUXG4rXHRsbGNyZWQtXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKGxsY3JlZC1cdTAwM2Vkb21haW4tXHUwMDNlbnVtX2xheWVycyAtIDEpO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbit9XG4rXG4gc3RhdGljIHZvaWQgaG9va19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpjb25zdCBuZXcsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjb25zdCBvbGQpXG4ge1xuQEAgLTI0LDYgKzEyNCwxMiBAQCBzdGF0aWMgdm9pZCBob29rX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKmNvbnN0IG5ldyxcbiBcbiBcdGxhbmRsb2NrX2dldF9ydWxlc2V0KG9sZF9sbGNyZWQtXHUwMDNlZG9tYWluKTtcbiBcdCpsYW5kbG9ja19jcmVkKG5ldykgPSAqb2xkX2xsY3JlZDtcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitcdC8qIE9ubHkgYnBybSBjcmVkZW50aWFscyBvd24gYSBzdGFnZWQgcmVzdHJpY3Rpb246IG5ldmVyIGNvcGllZC4gKi9cbitcdFdBUk5fT05fT05DRShsYW5kbG9ja19jcmVkKG5ldyktXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4rXHRsYW5kbG9ja19jcmVkKG5ldyktXHUwMDNlc3RhZ2VkID0gKHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbil7fTtcbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbiB9XG4gXG4gc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuQEAgLTM1LDEwICsxNDEsMTQgQEAgc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjb25zdCBjcmVkKVxuIHtcbi1cdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBkb20gPSBsYW5kbG9ja19jcmVkKGNyZWQpLVx1MDAzZWRvbWFpbjtcbitcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQgPSBsYW5kbG9ja19jcmVkKGNyZWQpO1xuK1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZWRvbWFpbik7XG4gXG4tXHRpZiAoZG9tKVxuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChkb20pO1xuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuK1x0LyogUmVsZWFzZXMgYSByZXN0cmljdGlvbiBzdGFnZWQgZm9yIGFuIGFib3J0ZWQgZXhlY3V0aW9uLiAqL1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZXN0YWdlZC5kb21haW4pO1xuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0FVRElUXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXG5pbmRleCBmMjg3YzU2YjVmZDRiLi43NGY4Yzk4MDhkYzRjIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmhcbkBAIC0yMCw2ICsyMCwzMSBAQFxuICNpbmNsdWRlIFwicnVsZXNldC5oXCJcbiAjaW5jbHVkZSBcInNldHVwLmhcIlxuIFxuKy8qKlxuKyAqIHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAtIENvbXB1dGVkIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb25cbisgKlxuKyAqIFRoZSByZXN1bHQgb2YgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpOiB0aGUgbmV3IHN0YXRlIHRoYXRcbisgKiBlbmZvcmNpbmcgYSBydWxlc2V0IHdpdGggYSBzZXQgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFnc1xuKyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXNcbisgKiBlbmZvcmNlZCB3aXRoIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKCksIGVpdGhlciByaWdodCBhd2F5XG4rICogKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikpIG9yIGFmdGVyIGEgc3RhZ2luZyBwZXJpb2QgKHJlc3RyaWN0aW9uXG4rICogb2YgYW4gZXhlY3V0aW9uKS5cbisgKi9cbitzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24ge1xuK1x0LyoqXG4rXHQgKiBAZG9tYWluOiBOZXcgZG9tYWluIHRvIGVuZm9yY2UsIG93bmluZyBhIHJlZmVyZW5jZS4gIE5VTEwgaWYgdGhlXG4rXHQgKiByZXN0cmljdGlvbiBvbmx5IGNhcnJpZXMgYSBsb2cgY29uZmlndXJhdGlvbiBjaGFuZ2UuXG4rXHQgKi9cbitcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XG4rI2lmZGVmIENPTkZJR19BVURJVFxuK1x0LyoqXG4rXHQgKiBAbG9nX3N1YmRvbWFpbnNfb2ZmOiBOZXcgdmFsdWUgb2YgdGhlIGNyZWRlbnRpYWxzJ1xuK1x0ICogQGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkubG9nX3N1YmRvbWFpbnNfb2ZmLlxuK1x0ICovXG4rXHR1OCBsb2dfc3ViZG9tYWluc19vZmYgOiAxO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5IC0gQ3JlZGVudGlhbCBzZWN1cml0eSBibG9iXG4gICpcbkBAIC0zNSw2ICs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7XG4gXHQgKi9cbiBcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXG4rXHQvKipcbitcdCAqIEBzdGFnZWQ6IFJlc3RyaWN0aW9uIHN0YWdlZCBieSB0aGUgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgaG9vayxcbitcdCAqIG93bmluZyBpdHMgZG9tYWluIHJlZmVyZW5jZSBhbmQgYXBwbGllZCBhdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mXG4rXHQgKiB0aGUgZXhlY3V0aW9uIChicHJtX2NvbW1pdHRpbmdfY3JlZHMpLiAgT25seSBldmVyIHNldCBvbiB0aGVcbitcdCAqIGNyZWRlbnRpYWxzIHByZXBhcmVkIGZvciBhbiBleGVjdXRpb24sIGJldHdlZW4gdGhlIHN0YWdpbmcgYW5kXG4rXHQgKiBlaXRoZXIgdGhlIGFwcGxpY2F0aW9uIG9yIHRoZSByZWxlYXNlIG9mIHRoZSBhYm9ydGVkIGNyZWRlbnRpYWxzO1xuK1x0ICogY29tbWl0dGVkIHRhc2sgY3JlZGVudGlhbHMgbmV2ZXIgY2FycnkgYSBzdGFnZWQgcmVzdHJpY3Rpb24uXG4rXHQgKi9cbitcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiBzdGFnZWQ7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4rXG4gI2lmZGVmIENPTkZJR19BVURJVFxuIFx0LyoqXG4gXHQgKiBAZG9tYWluX2V4ZWM6IEJpdG1hc2sgaWRlbnRpZnlpbmcgdGhlIGRvbWFpbiBsYXllcnMgdGhhdCB3ZXJlIGVuZm9yY2VkIGJ5XG5AQCAtNzUsNiArMTEyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsYW5kbG9ja19jcmVkX2NvcHkoc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmRzdCxcbiBcdCpkc3QgPSAqc3JjO1xuIFxuIFx0bGFuZGxvY2tfZ2V0X3J1bGVzZXQoc3JjLVx1MDAzZWRvbWFpbik7XG4rXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXG4rXHQvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovXG4rXHRXQVJOX09OX09OQ0Uoc3JjLVx1MDAzZXN0YWdlZC5kb21haW4pO1xuK1x0ZHN0LVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9jdXJyZW50X2RvbWFpbih2b2lkKVxuQEAgLTE1Myw2ICsxOTYsMTQgQEAgbGFuZGxvY2tfZ2V0X2FwcGxpY2FibGVfc3ViamVjdChjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3QgY3JlZCxcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitpbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcbitcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCwgY29uc3QgdTMyIGZsYWdzLFxuK1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4rXG4rdm9pZCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxuK1x0XHRcdFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4rXG4gX19pbml0IHZvaWQgbGFuZGxvY2tfYWRkX2NyZWRfaG9va3Modm9pZCk7XG4gXG4gI2VuZGlmIC8qIF9TRUNVUklUWV9MQU5ETE9DS19DUkVEX0ggKi9cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oXG5pbmRleCAwOGQ1ZjJmNmQzMjFhLi4wYmVkZmU2NTBlYTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmhcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oXG5AQCAtMzcsNiArMzcsMTAgQEBcbiAjZGVmaW5lIExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRlx0TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xuICNkZWZpbmUgTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGXHQoKExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRiBcdTAwM2NcdTAwM2MgMSkgLSAxKVxuIFxuKy8qIFN1YnNldCBvZiB0aGUgcmVzdHJpY3Qtc2VsZiBmbGFncyBhcHBsaWNhYmxlIHRvIGFuIGV4ZWN1dGlvbi4gKi9cbisjZGVmaW5lIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNIFxcXG4rXHQoTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGIFx1MDAyNiB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQylcbitcbiAvKiBjbGFuZy1mb3JtYXQgb24gKi9cbiBcbiAjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0xJTUlUU19IICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG5pbmRleCA0ZGQwOWVhMjJjODQ0Li4xNzZjNjI2ZjlmMTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcbkBAIC01MjAsNyArNTIwLDcgQEAgc3RhdGljIHZvaWQgZnJlZV9ydWxlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpjb25zdCB3b3JrKVxuIFx0ZnJlZV9ydWxlc2V0KHJ1bGVzZXQpO1xuIH1cbiBcbi0vKiBPbmx5IGNhbGxlZCBieSBob29rX2NyZWRfZnJlZSgpLiAqL1xuKy8qIEZvciBjb250ZXh0cyB0aGF0IGNhbm5vdCBzbGVlcCwgZS5nLiBob29rX2NyZWRfZnJlZSgpLiAqL1xuIHZvaWQgbGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQpXG4ge1xuIFx0aWYgKHJ1bGVzZXQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZydWxlc2V0LVx1MDAzZXVzYWdlKSkge1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxuaW5kZXggMDQzN2FkZjE3NDI4Ny4uYjY1ZDFjMDdlMTkyZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oXG5AQCAtMjI1LDYgKzIyNSw5IEBAIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpcbiBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBwYXJlbnQsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCk7XG4gXG4rc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLFxuK1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSk7XG4rXG4gY29uc3Qgc3RydWN0IGxhbmRsb2NrX3J1bGUgKlxuIGxhbmRsb2NrX2ZpbmRfcnVsZShjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCxcbiBcdFx0ICAgY29uc3Qgc3RydWN0IGxhbmRsb2NrX2lkIGlkKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuY1xuaW5kZXggNDdkYWMxNzM2ZjEwMC4uM2I3ZTE4ZWRhZGZiYyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2xzbS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJicGYuaFwiXG4gI2luY2x1ZGUgXCJjb21tb24uaFwiXG4gI2luY2x1ZGUgXCJjcmVkLmhcIlxuICNpbmNsdWRlIFwiZXJyYXRhLmhcIlxuQEAgLTY4LDYgKzY5LDcgQEAgc3RhdGljIGludCBfX2luaXQgbGFuZGxvY2tfaW5pdCh2b2lkKVxuIFx0bGFuZGxvY2tfYWRkX3Rhc2tfaG9va3MoKTtcbiBcdGxhbmRsb2NrX2FkZF9mc19ob29rcygpO1xuIFx0bGFuZGxvY2tfYWRkX25ldF9ob29rcygpO1xuK1x0bGFuZGxvY2tfYWRkX2JwZl9ob29rcygpO1xuIFx0bGFuZGxvY2tfaW5pdF9pZCgpO1xuIFx0bGFuZGxvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFx0cHJfaW5mbyhcIlVwIGFuZCBydW5uaW5nLlxcblwiKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xuaW5kZXggMzZiMDI4OTJjNjJmNS4uODk5NjAxYWY3YzRlMSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmNcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmNcbkBAIC0yOTMsOCArMjkzLDggQEAgU1lTQ0FMTF9ERUZJTkUzKGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LFxuICAqIFJldHVybnMgYW4gb3duZWQgcnVsZXNldCBmcm9tIGEgRkQuIEl0IGlzIHRodXMgbmVlZGVkIHRvIGNhbGxcbiAgKiBsYW5kbG9ja19wdXRfcnVsZXNldCgpIG9uIHRoZSByZXR1cm4gdmFsdWUuXG4gICovXG4tc3RhdGljIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpnZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbi1cdFx0XHRcdFx0XHQgICAgY29uc3QgZm1vZGVfdCBtb2RlKVxuK3N0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbitcdFx0XHRcdFx0XHQgICAgICBjb25zdCBmbW9kZV90IG1vZGUpXG4ge1xuIFx0Q0xBU1MoZmQsIHJ1bGVzZXRfZikoZmQpO1xuIFx0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7XG5AQCAtNDc2LDcgKzQ3Niw3IEBAIFNZU0NBTExfREVGSU5FNChsYW5kbG9ja19hZGRfcnVsZSwgY29uc3QgaW50LCBydWxlc2V0X2ZkLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdHJ1bGVzZXQgPSBnZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQsIEZNT0RFX0NBTl9XUklURSk7XG4rXHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpO1xuIFx0aWYgKElTX0VSUihydWxlc2V0KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnVsZXNldCk7XG4gXG5AQCAtNTI4LDkgKzUyOCw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIHtcbiBcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0IF9fZnJlZShsYW5kbG9ja19wdXRfcnVsZXNldCkgPSBOVUxMO1xuIFx0c3RydWN0IGNyZWQgKm5ld19jcmVkO1xuLVx0c3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKm5ld19sbGNyZWQ7XG4tXHRib29sIF9fbWF5YmVfdW51c2VkIGxvZ19zYW1lX2V4ZWMsIGxvZ19uZXdfZXhlYywgbG9nX3N1YmRvbWFpbnMsXG4tXHRcdHByZXZfbG9nX3N1YmRvbWFpbnM7XG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFpc19pbml0aWFsaXplZCgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtNTQ3LDEzICs1NDYsNiBAQCBTWVNDQUxMX0RFRklORTIobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZiwgY29uc3QgaW50LCBydWxlc2V0X2ZkLCBjb25zdCBfX3UzMixcbiBcdCAgICBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogVHJhbnNsYXRlcyBcIm9mZlwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cbi1cdGxvZ19zYW1lX2V4ZWMgPSAhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TQU1FX0VYRUNfT0ZGKTtcbi1cdC8qIFRyYW5zbGF0ZXMgXCJvblwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cbi1cdGxvZ19uZXdfZXhlYyA9ICEhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XG4tXHQvKiBUcmFuc2xhdGVzIFwib2ZmXCIgZmxhZyB0byBib29sZWFuLiAqL1xuLVx0bG9nX3N1YmRvbWFpbnMgPSAhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XG4tXG4gXHQvKlxuIFx0ICogSXQgaXMgYWxsb3dlZCB0byBzZXQgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYgd2l0aFxuIFx0ICogLTEgYXMgcnVsZXNldF9mZCwgb3B0aW9uYWxseSBjb21iaW5lZCB3aXRoXG5AQCAtNTY0LDcgKzU1Niw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIFx0ICAgICAgKGZsYWdzIFx1MDAyNiB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgPT1cbiBcdFx0ICAgICAgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpKSB7XG4gXHRcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdFx0cnVsZXNldCA9IGdldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1JFQUQpO1xuK1x0XHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLFxuK1x0XHRcdFx0XHRcdCAgICAgICBGTU9ERV9DQU5fUkVBRCk7XG4gXHRcdGlmIChJU19FUlIocnVsZXNldCkpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocnVsZXNldCk7XG4gXHR9XG5AQCAtNTc0LDUzICs1NjcsMjggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXG4gXHRpZiAoIW5ld19jcmVkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG5ld19sbGNyZWQgPSBsYW5kbG9ja19jcmVkKG5ld19jcmVkKTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRwcmV2X2xvZ19zdWJkb21haW5zID0gIW5ld19sbGNyZWQtXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmO1xuLVx0bmV3X2xsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxuLVx0XHRcdFx0XHQgIWxvZ19zdWJkb21haW5zO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbi1cbiBcdC8qXG4gXHQgKiBUaGUgb25seSBjYXNlIHdoZW4gYSBydWxlc2V0IG1heSBub3QgYmUgc2V0IGlzIGlmXG4gXHQgKiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiBpcyBzZXQgKG9wdGlvbmFsbHkgd2l0aFxuIFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZFxuIFx0ICogb3B0aW1pemUgdGhpcyBjYXNlIGJ5IG5vdCBjYWxsaW5nIGNvbW1pdF9jcmVkcygpIGlmIHRoaXMgZmxhZyB3YXNcbiBcdCAqIGFscmVhZHkgc2V0LCBidXQgaXQgaXMgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuK1x0ICpcbitcdCAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWxlIGNvcHlpbmcgYW5kIG1hbmlwdWxhdGluZ1xuK1x0ICogdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYmVjYXVzZSB0aGV5IGFyZSBkZWRpY2F0ZWQgcGVyIHRocmVhZC5cbiBcdCAqL1xuLVx0aWYgKHJ1bGVzZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmRcbi1cdFx0ICogbWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGJlY2F1c2UgdGhleSBhcmVcbi1cdFx0ICogZGVkaWNhdGVkIHBlciB0aHJlYWQuXG4tXHRcdCAqL1xuLVx0XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgbmV3X2RvbSA9XG4tXHRcdFx0bGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbiwgcnVsZXNldCk7XG4tXHRcdGlmIChJU19FUlIobmV3X2RvbSkpIHtcbi1cdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIobmV3X2RvbSk7XG4tXHRcdH1cbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zYW1lX2V4ZWMgPSBsb2dfc2FtZV9leGVjO1xuLVx0XHRuZXdfZG9tLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfbmV3X2V4ZWMgPSBsb2dfbmV3X2V4ZWM7XG4tXHRcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXHUwMDI2XHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxuLVx0XHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zdGF0dXMgPSBMQU5ETE9DS19MT0dfRElTQUJMRUQ7XG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuLVxuLVx0XHQvKiBSZXBsYWNlcyB0aGUgb2xkIChwcmVwYXJlZCkgZG9tYWluLiAqL1xuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbik7XG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluID0gbmV3X2RvbTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKG5ld19kb20tXHUwMDNlbnVtX2xheWVycyAtIDEpO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbitcdGVyciA9IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24obGFuZGxvY2tfY3JlZChuZXdfY3JlZCksIHJ1bGVzZXQsXG4rXHRcdFx0XHRcdCAgIGZsYWdzLCBcdTAwMjZyZXN0cmljdGlvbik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGFib3J0X2NyZWRzKG5ld19jcmVkKTtcbitcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbitcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBcdTAwMjZyZXN0cmljdGlvbik7XG4rXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMpIHtcbi1cdFx0Y29uc3QgaW50IGVyciA9IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcyhcbi1cdFx0XHRjdXJyZW50X2NyZWQoKSwgbmV3X2NyZWQpO1xuK1x0XHRlcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY3VycmVudF9jcmVkKCksXG4rXHRcdFx0XHRcdFx0XHRuZXdfY3JlZCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZTlkOGM5NDkyYmRiMiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01NDQxLDYgKzU0NDEsMTEyIEBAIGludCBzZWN1cml0eV9icGZfdG9rZW5fY2FwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKGJwZl90b2tlbl9jYXBhYmxlLCB0b2tlbiwgY2FwKTtcbiB9XG4gXG4rLyoqXG4rICogc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCgpIC0gR2V0IGFuIExTTSBwb2xpY3kgb2JqZWN0IGZyb20gYSBmZFxuKyAqIEBsc21pZDogTFNNX0lEXyogdmFsdWUgb2YgdGhlIExTTSBhc2tlZCB0byBpbnRlcnByZXQgQGZkXG4rICogQGZkOiBmaWxlIGRlc2NyaXB0b3IgcmVmZXJyaW5nIHRvIGEgcG9saWN5IG9iamVjdCwgcmVzb2x2ZWQgaW4gdGhlXG4rICogICAgICBjYWxsaW5nIHRhc2sncyBmaWxlIGRlc2NyaXB0b3IgdGFibGVcbisgKiBAcG9saWN5OiByZWNlaXZlcyB0aGUgcmVmZXJlbmNlZCBwb2xpY3kgb2JqZWN0IGluIHRoZSBtZW1iZXIgb2YgdGhlXG4rICogICAgICAgICAgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkXG4rICpcbisgKiBBc2sgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCB0byB0cmFuc2xhdGUgQGZkIGludG8gYSByZWZlcmVuY2VcbisgKiBjb3VudGVkIHBvbGljeSBvYmplY3QuICBUaGUgY2FsbGVyIG11c3Qgbm90IGRlcmVmZXJlbmNlIHRoZVxuKyAqIHJldHVybmVkIGhhbmRsZSwgbXVzdCBvbmx5IGhhbmQgaXQgYmFjayB0byB0aGUgc2FtZSBMU00sIGUuZy5cbisgKiB0aHJvdWdoIHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cigpLCBhbmQgbXVzdCByZWxlYXNlIGl0XG4rICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2ZcbisgKiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzIGNhbGxlZC4gIFRoZSBob29rIGlzIG9ubHkgY2FsbGVkXG4rICogZnJvbSBhIGNvbnRleHQgdGhhdCBtYXkgc2xlZXAuXG4rICpcbisgKiBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IGZpbGwgaXRzIG93biBtZW1iZXIgb2YgQHBvbGljeSB3aXRoIGFcbisgKiByZWZlcmVuY2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGl0IGlzIHJlbGVhc2VkIHRocm91Z2ggdGhlXG4rICogcG9saWN5X2twdHJfcHV0IGhvb2ssIGFuZCBtdXN0IG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgQGZkIGJleW9uZFxuKyAqIHdoYXQgaXRzIG93biB1c2Vyc3BhY2UgQVBJIGNyZWF0ZWQgaXQgd2l0aC5cbisgKlxuKyAqIFJldHVybjogUmV0dXJucyAwIGlmIEBwb2xpY3kgaG9sZHMgYSByZWZlcmVuY2UgY291bnRlZCBwb2xpY3lcbisgKiBvYmplY3QsIC1FT1BOT1RTVVBQIGlmIHRoZSBMU00gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZVxuKyAqIHZhbHVlcyBvbiBvdGhlciBmYWlsdXJlcy5cbisgKi9cbitpbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcbitcdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbit7XG4rXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbitcbitcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBwb2xpY3lfa3B0cl9mcm9tX2ZkKSB7XG4rXHRcdGlmIChzY2FsbC1cdTAwM2VobC1cdTAwM2Vsc21pZC1cdTAwM2VpZCAhPSBsc21pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmV0dXJuIHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2sucG9saWN5X2twdHJfZnJvbV9mZChmZCwgcG9saWN5KTtcbitcdH1cbitcdHJldHVybiBMU01fUkVUX0RFRkFVTFQocG9saWN5X2twdHJfZnJvbV9mZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpIC0gUHV0IGEgcmVmZXJlbmNlIG9uIGFuIExTTSBwb2xpY3kgb2JqZWN0XG4rICogQGxzbWlkOiBMU01fSURfKiB2YWx1ZSBvZiB0aGUgTFNNIG93bmluZyBAcG9saWN5XG4rICogQHBvbGljeTogdGhlIHBvbGljeSBvYmplY3QsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XG4rICogICAgICAgICAgQGxzbWlkXG4rICpcbisgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIHByZXZpb3VzbHkgb2J0YWluZWQgd2l0aFxuKyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb25cbisgKiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzIGNhbGxlZCwgYW5kIEBwb2xpY3kgbXVzdCBoYXZlXG4rICogYmVlbiBvYnRhaW5lZCBmcm9tIHRoYXQgc2FtZSBMU00uICBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHN1cHBvcnRcbisgKiBiZWluZyBjYWxsZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBjYW5ub3Qgc2xlZXA6IHRoZSByZWxlYXNlIG9mIEJQRlxuKyAqIG1hbmFnZWQgcmVmZXJlbmNlcyBtYXkgYmUgZHJpdmVuIGZyb20gb2JqZWN0IGRlc3RydWN0b3JzLlxuKyAqL1xuK3ZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4re1xuK1x0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4rXG4rXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgcG9saWN5X2twdHJfcHV0KSB7XG4rXHRcdGlmIChzY2FsbC1cdTAwM2VobC1cdTAwM2Vsc21pZC1cdTAwM2VpZCAhPSBsc21pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5wb2xpY3lfa3B0cl9wdXQocG9saWN5KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0LyogQSBoZWxkIHJlZmVyZW5jZSBpbXBsaWVzIHRoZSBtYXRjaGluZyBMU00gaW1wbGVtZW50cyB0aGUgaG9vay4gKi9cbitcdFdBUk5fT05fT05DRSgxKTtcbit9XG4rXG4rLyoqXG4rICogc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgLSBFbmZvcmNlIGEgcG9saWN5IG9uIGV4ZWMgY3JlZGVudGlhbHNcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gb3duaW5nIEBwb2xpY3lcbisgKiBAYnBybTogZXhlY3V0aW9uIGNvbnRleHQgcHJvdmlkaW5nIHRoZSBwcmVwYXJlZCBjcmVkZW50aWFscyB0byByZXN0cmljdFxuKyAqIEBwb2xpY3k6IHRoZSBwb2xpY3kgb2JqZWN0IHRvIGVuZm9yY2UsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTVxuKyAqICAgICAgICAgIGlkZW50aWZpZWQgYnkgQGxzbWlkXG4rICogQGZsYWdzOiBMU00tc3BlY2lmaWMgZW5mb3JjZW1lbnQgZmxhZ3NcbisgKlxuKyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHJlc3RyaWN0IHRoZSBjcmVkZW50aWFsc1xuKyAqIHByZXBhcmVkIGluIEBicHJtIHdpdGggQHBvbGljeSwgc28gdGhhdCB0aGUgZXhlY3V0ZWQgdGFzayBzdGFydHNcbisgKiBjb25maW5lZCBieSBpdC4gIEBwb2xpY3kgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgZnJvbSB0aGUgc2FtZSBMU01cbisgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKTsgdGhlIGhvb2sgYm9ycm93cyB0aGVcbisgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgcmVtYWlucyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIGl0LlxuKyAqIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpc1xuKyAqIGNhbGxlZDogYW4gTFNNIG5ldmVyIHJlY2VpdmVzIGEgcG9saWN5IG9iamVjdCBtZWFudCBmb3IgYW5vdGhlciBMU00uXG4rICpcbisgKiBUaGlzIGhvb2sgbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYW4gZXhlYyBzZWN1cml0eSBjb250ZXh0IHdoZXJlXG4rICogQGJwcm0ncyBjcmVkZW50aWFscyBhcmUgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgY29tbWl0dGVkLCBpLmUuIGZyb20gYVxuKyAqIGJwcm1fY3JlZHNfZm9yX2V4ZWMoKSBvciBicHJtX2NyZWRzX2Zyb21fZmlsZSgpIGhvb2suXG4rICpcbisgKiBIb3cgQHBvbGljeSBjb21wb3NlcyB3aXRoIHJlc3RyaWN0aW9ucyB0aGUgY3JlZGVudGlhbHMgYWxyZWFkeVxuKyAqIGNhcnJ5IGlzIGRlZmluZWQgYnkgdGhlIGltcGxlbWVudGluZyBMU00sIGFzIGlzIHRoZSBtZWFuaW5nIG9mXG4rICogQGZsYWdzLCB1bnN1cHBvcnRlZCB2YWx1ZXMgb2Ygd2hpY2ggaXQgbXVzdCByZWplY3Qgd2l0aCAtRUlOVkFMLlxuKyAqXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIExTTSBkb2VzIG5vdFxuKyAqIGltcGxlbWVudCB0aGUgaG9vaywgbmVnYXRpdmUgdmFsdWVzIG9uIG90aGVyIGZhaWx1cmVzLlxuKyAqL1xuK2ludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0ICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcbit7XG4rXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbitcbitcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIpIHtcbitcdFx0aWYgKHNjYWxsLVx1MDAzZWhsLVx1MDAzZWxzbWlkLVx1MDAzZWlkICE9IGxzbWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZXR1cm4gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoYnBybSwgcG9saWN5LFxuK1x0XHRcdFx0XHRcdFx0XHQgZmxhZ3MpO1xuK1x0fVxuK1x0cmV0dXJuIExTTV9SRVRfREVGQVVMVChicHJtX2VuZm9yY2VfcG9saWN5X2twdHIpO1xuK31cbitcbiAvKipcbiAgKiBzZWN1cml0eV9icGZfbWFwX2ZyZWUoKSAtIEZyZWUgYSBicGYgbWFwJ3MgTFNNIGJsb2JcbiAgKiBAbWFwOiBicGYgbWFwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IGVhNzA0NGYzMGFkYzMuLjJmYTczNDQ5NzQ2MTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTIwLDYgKzEyMCw3IEBAIENPTkZJR19TQU1QTEVTPXlcbiBDT05GSUdfU0FNUExFX0xJVkVQQVRDSD1tXG4gQ09ORklHX1NFQ1VSSVRZPXlcbiBDT05GSUdfU0VDVVJJVFlGUz15XG4rQ09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLPXlcbiBDT05GSUdfU1lOX0NPT0tJRVM9eVxuIENPTkZJR19URVNUX0JQRj1tXG4gQ09ORklHX1VETUFCVUY9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjRcbmluZGV4IDUyM2UwZDI5YmJkNDMuLjJjNGQ4NTdmNjlmNTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjRcbkBAIC0xMjUsNyArMTI1LDcgQEAgQ09ORklHX0xFR0FDWV9WU1lTQ0FMTF9OT05FPXlcbiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMVxuIENPTkZJR19MT0dfQ1BVX01BWF9CVUZfU0hJRlQ9MFxuIENPTkZJR19MT0dPPXlcbi1DT05GSUdfTFNNPVwic2VsaW51eCxicGYsaW50ZWdyaXR5XCJcbitDT05GSUdfTFNNPVwibGFuZGxvY2ssc2VsaW51eCxicGYsaW50ZWdyaXR5XCJcbiBDT05GSUdfTUFDX1BBUlRJVElPTj15XG4gQ09ORklHX01BR0lDX1NZU1JRPXlcbiBDT05GSUdfTUNPUkUyPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5MTkyOWY5OGU4OGVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmNcbkBAIC0wLDAgKzEsMzI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2UgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGFuZGxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLnNrZWwuaFwiXG4rXG4rLyogRmFsbGJhY2tzIGZvciBvbGQgc3lzdGVtIGhlYWRlcnMuICovXG4rI2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTlxuKyNkZWZpbmUgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT04gKDFVIFx1MDAzY1x1MDAzYyAxKVxuKyNlbmRpZlxuKyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xuKyNkZWZpbmUgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyAoMVUgXHUwMDNjXHUwMDNjIDMpXG4rI2VuZGlmXG4rXG4rc3RhdGljIGludCBjcmVhdGVfcnVsZXNldCh2b2lkKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHtcbitcdFx0LmhhbmRsZWRfYWNjZXNzX2ZzID0gTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHN5c2NhbGwoX19OUl9sYW5kbG9ja19jcmVhdGVfcnVsZXNldCwgXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVzZXRfcHJvZ19zdGF0ZShzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcbit7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQgPSBmYWxzZTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vX3J1bGVzZXQgPSBmYWxzZTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3QyX2VyciA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNla2Z1bmNfZmxhZ3MgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZG91YmxlX2NhbGwgPSBmYWxzZTtcbit9XG4rXG4rLypcbisgKiBSdW5zIHRoZSBzeXNjYWxsIHByb2dyYW0gdGhhdCBhY3F1aXJlcyB0aGUgcnVsZXNldCBmcm9tXG4rICogQHJ1bGVzZXRfZmQsIGluIHRoZSBydW5uZXIncyBmZCB0YWJsZSwgYW5kIHBhcmtzIGl0IGluIHRoZSBtYXAga3B0clxuKyAqIHNsb3QgZm9yIHRoZSBMU00gcHJvZ3JhbS5cbisgKi9cbitzdGF0aWMgaW50IGxvYWRfcnVsZXNldF9pbnRvX21hcChzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5sb2FkX3J1bGVzZXQpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb2FkX3J1bGVzZXRfcnVuXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJsb2FkX3J1bGVzZXRfcmV0dmFsXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vnb3RfbnVsbF9mb3JfYmFkX2ZkLCBcImJhZF9mZF9udWxsXCIpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogRm9ya3MgYSBjaGlsZCB0aGF0IGV4ZWNzIFwic2ggLWMgJ1x1MDAzY3NoZWxsX2NtZFx1MDAzZSdcIi4gIFRoZSBtb25pdG9yZWQgcGlkXG4rICogaXMgb25seSBrbm93biwgYW5kIGNhbiBvbmx5IGJlIHB1Ymxpc2hlZCB0byB0aGUgQlBGIHByb2dyYW0sIG9uY2VcbisgKiB0aGUgY2hpbGQgZXhpc3RzOiB0aGUgY2hpbGQgd2FpdHMgb24gYSBwaXBlIHVudGlsIHRoZSBwYXJlbnQgaGFzXG4rICogdXBkYXRlZCBpdC4gIFJldHVybnMgdGhlIGNoaWxkJ3MgZXhpdCBzdGF0dXMsIG9yIC0xIG9uIGVycm9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgcnVuX2V4ZWNfY2hpbGQoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwsXG4rXHRcdFx0ICBib29sIG1vbml0b3JlZCwgY29uc3QgY2hhciAqc2hlbGxfY21kKVxuK3tcbitcdGludCBwaXBlX2Zkc1syXSwgc3RhdHVzO1xuK1x0Y2hhciBidWYgPSAwO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2ZkcyksIFwicGlwZVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcImZvcmtcIikpIHtcbitcdFx0Y2xvc2UocGlwZV9mZHNbMF0pO1xuK1x0XHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRjaGFyICphcmd2W10gPSB7IFwic2hcIiwgXCItY1wiLCAoY2hhciAqKXNoZWxsX2NtZCwgTlVMTCB9O1xuK1xuK1x0XHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4rXHRcdHJlYWQocGlwZV9mZHNbMF0sIFx1MDAyNmJ1ZiwgMSk7XG4rXHRcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbitcdFx0ZXhlY3YoXCIvYmluL3NoXCIsIGFyZ3YpO1xuK1x0XHRleGl0KDEyNyk7XG4rXHR9XG4rXHRjbG9zZShwaXBlX2Zkc1swXSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gbW9uaXRvcmVkID8gcGlkIDogMDtcbitcdHdyaXRlKHBpcGVfZmRzWzFdLCBcdTAwMjZidWYsIDEpO1xuK1x0Y2xvc2UocGlwZV9mZHNbMV0pO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcImNoaWxkX2V4aXRlZFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XG4rfVxuK1xuKy8qXG4rICogRXhpdCBjb2RlczogNCA9IHVuZXhwZWN0ZWQgd3JpdGUgb3V0Y29tZSwgMCA9IGV2ZXJ5dGhpbmcgYXNcbisgKiBleHBlY3RlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBmb3JtYXRfY2hpbGRfY21kKGNoYXIgKmNtZCwgc2l6ZV90IGxlbiwgYm9vbCBleHBlY3Rfd3JpdGVfb2ssXG4rXHRcdFx0ICAgICBjb25zdCBjaGFyICp0bXBfcGF0aClcbit7XG4rXHRpZiAoZXhwZWN0X3dyaXRlX29rKVxuK1x0XHRzbnByaW50ZihjbWQsIGxlbiwgXCJlY2hvIHggXHUwMDNlICVzIHx8IGV4aXQgNDsgZXhpdCAwXCIsIHRtcF9wYXRoKTtcbitcdGVsc2VcbitcdFx0c25wcmludGYoY21kLCBsZW4sXG4rXHRcdFx0IFwiaWYgZWNobyB4IFx1MDAzZSAlcyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuIGV4aXQgNDsgZmk7IGV4aXQgMFwiLFxuK1x0XHRcdCB0bXBfcGF0aCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfcmVzdHJpY3RfYmlucHJtKHZvaWQpXG4re1xuK1x0c3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwgPSBOVUxMO1xuK1x0Y2hhciB0bXBfcGF0aFtdID0gXCIvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWFwiO1xuK1x0Y2hhciBjbWRbMjU2XTtcbitcdGludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDtcbitcbitcdHRtcF9mZCA9IG1rc3RlbXAodG1wX3BhdGgpO1xuK1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcIm1rc3RlbXBcIikpXG4rXHRcdHJldHVybjtcbitcdGNsb3NlKHRtcF9mZCk7XG4rXG4rXHRydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTtcbitcdGlmIChydWxlc2V0X2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1NZUylcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGVsc2VcbitcdFx0XHRBU1NFUlRfR0UocnVsZXNldF9mZCwgMCwgXCJsYW5kbG9ja19jcmVhdGVfcnVsZXNldFwiKTtcbitcdFx0Z290byBvdXRfdW5saW5rO1xuK1x0fVxuK1xuK1x0c2tlbCA9IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VydWxlc2V0X2ZkID0gcnVsZXNldF9mZDtcbitcbitcdGlmICghQVNTRVJUX09LKGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2F0dGFjaChza2VsKSwgXCJza2VsX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAobG9hZF9ydWxlc2V0X2ludG9fbWFwKHNrZWwpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIENvbnRyb2w6IGFuIHVubW9uaXRvcmVkIGV4ZWN1dGlvbiBtYXkgd3JpdGUgdG8gdGhlIHRtcCBmaWxlLiAqL1xuK1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbitcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgdHJ1ZSwgdG1wX3BhdGgpO1xuK1x0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgZmFsc2UsIGNtZCk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwiY29udHJvbF9jaGlsZF9leGl0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQsIFwiY29udHJvbF9ub3RfbW9uaXRvcmVkXCIpO1xuK1xuK1x0LypcbitcdCAqIEEgbW9uaXRvcmVkIGV4ZWN1dGlvbiBzdGFydHMgbGFuZGxvY2tlZDogdGhlIHJ1bGVzZXQgaGFuZGxlc1xuK1x0ICogTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUgd2l0aG91dCBhbnkgcnVsZSwgc28gdGhlIHdyaXRlXG4rXHQgKiBtdXN0IGZhaWwuXG4rXHQgKi9cbitcdHJlc2V0X3Byb2dfc3RhdGUoc2tlbCk7XG4rXHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIGZhbHNlLCB0bXBfcGF0aCk7XG4rXHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcInJlc3RyaWN0ZWRfY2hpbGRfZXhpdFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQsIFwibHNtX3Byb2dfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vX3J1bGVzZXQsIFwicnVsZXNldF9pbl9tYXBcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3RfZXJyLCAwLCBcInJlc3RyaWN0X2JpbnBybVwiKTtcbitcbitcdC8qIFRoZSBhdWRpdCBsb2cgZmxhZ3Mgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBhcHBseSB0b28uICovXG4rXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNla2Z1bmNfZmxhZ3MgPSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTjtcbitcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbitcdHJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIHRydWUsIGNtZCk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwibG9nX2ZsYWdzX2NoaWxkX2V4aXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXCJsb2dfZmxhZ3NfcmVzdHJpY3RfYmlucHJtXCIpO1xuK1xuK1x0LypcbitcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzLCBub3RcbitcdCAqIGFuIGV4ZWN1dGlvbjogdGhlIGtmdW5jIG11c3QgcmVqZWN0IGl0IGFuZCB0aGUgZXhlY3V0aW9uIG11c3RcbitcdCAqIHN0YXkgdW5yZXN0cmljdGVkLlxuK1x0ICovXG4rXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNla2Z1bmNfZmxhZ3MgPSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DO1xuK1x0Zm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCB0cnVlLCB0bXBfcGF0aCk7XG4rXHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcInRzeW5jX2NoaWxkX2V4aXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcInRzeW5jX3Byb2dfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgLUVJTlZBTCwgXCJ0c3luY19yZWplY3RlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBBIHNlY29uZCBjYWxsIG9uIHRoZSBzYW1lIGV4ZWN1dGlvbiByZXBsYWNlcyB0aGUgc3RhZ2VkXG4rXHQgKiBkb21haW4gKGFuZCByZWxlYXNlcyB0aGUgZmlyc3Qgb25lKTogdGhlIHJlc3VsdCBpcyBhIHNpbmdsZVxuK1x0ICogcmVzdHJpY3Rpb24sIG5vdCBhbiBlcnJvci5cbitcdCAqL1xuK1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRvdWJsZV9jYWxsID0gdHJ1ZTtcbitcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbitcdHJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIHRydWUsIGNtZCk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwiZG91YmxlX2NoaWxkX2V4aXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXCJkb3VibGVfcmVzdHJpY3RfZmlyc3RcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3QyX2VyciwgMCwgXCJkb3VibGVfcmVzdHJpY3Rfc2Vjb25kXCIpO1xuK291dDpcbitcdGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2Rlc3Ryb3koc2tlbCk7XG4rXHRjbG9zZShydWxlc2V0X2ZkKTtcbitvdXRfdW5saW5rOlxuK1x0dW5saW5rKHRtcF9wYXRoKTtcbit9XG4rXG4rLypcbisgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkXG4rICogZG9tYWluIHJlbGVhc2VkLCB3aGVuIHRoZSBleGVjdXRpb24gZmFpbHMgYWZ0ZXIgdGhlIGJwcm0gaG9vazogdGhlXG4rICogY2FsbGluZyB0YXNrIG11c3Qgbm90IGVuZCB1cCBsYW5kbG9ja2VkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfcmVzdHJpY3RfYmlucHJtX2Rpc2NhcmQodm9pZClcbit7XG4rXHRzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbCA9IE5VTEw7XG4rXHRjaGFyIHRtcF9wYXRoW10gPSBcIi90bXAvbHNtX3BvbGljeV9rZnVuY3NfWFhYWFhYXCI7XG4rXHRjaGFyIGdhcmJhZ2VfcGF0aFtdID0gXCIvdG1wL2xzbV9wb2xpY3lfZ2FyYmFnZV9YWFhYWFhcIjtcbitcdGludCBydWxlc2V0X2ZkID0gLTEsIHRtcF9mZCwgZ2FyYmFnZV9mZCwgcGlwZV9mZHNbMl0sIHN0YXR1cztcbitcdGNoYXIgYnVmID0gMDtcbitcdHBpZF90IHBpZDtcbitcbitcdHRtcF9mZCA9IG1rc3RlbXAodG1wX3BhdGgpO1xuK1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcIm1rc3RlbXBcIikpXG4rXHRcdHJldHVybjtcbitcdGNsb3NlKHRtcF9mZCk7XG4rXG4rXHQvKlxuK1x0ICogQW4gZXhlY3V0YWJsZSBmaWxlIHRoYXQgbm8gYmluZm10IGhhbmRsZXIgYWNjZXB0czogdGhlIGV4ZWNcbitcdCAqIGZhaWxzIHdpdGggRU5PRVhFQyBhZnRlciBicHJtX2NyZWRzX2Zvcl9leGVjKCkgaGFzIHJ1bi5cbitcdCAqL1xuK1x0Z2FyYmFnZV9mZCA9IG1rc3RlbXAoZ2FyYmFnZV9wYXRoKTtcbitcdGlmICghQVNTRVJUX0dFKGdhcmJhZ2VfZmQsIDAsIFwibWtzdGVtcF9nYXJiYWdlXCIpKVxuK1x0XHRnb3RvIG91dF91bmxpbms7XG4rXHRpZiAoIUFTU0VSVF9FUSh3cml0ZShnYXJiYWdlX2ZkLCBcImp1bmtcXG5cIiwgNSksIDUsIFwid3JpdGVfZ2FyYmFnZVwiKSkge1xuK1x0XHRjbG9zZShnYXJiYWdlX2ZkKTtcbitcdFx0Z290byBvdXRfdW5saW5rO1xuK1x0fVxuK1x0aWYgKCFBU1NFUlRfT0soZmNobW9kKGdhcmJhZ2VfZmQsIDA3MDApLCBcImNobW9kX2dhcmJhZ2VcIikpIHtcbitcdFx0Y2xvc2UoZ2FyYmFnZV9mZCk7XG4rXHRcdGdvdG8gb3V0X3VubGluaztcbitcdH1cbitcdGNsb3NlKGdhcmJhZ2VfZmQpO1xuK1xuK1x0cnVsZXNldF9mZCA9IGNyZWF0ZV9ydWxlc2V0KCk7XG4rXHRpZiAocnVsZXNldF9mZCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpXG4rXHRcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRlbHNlXG4rXHRcdFx0QVNTRVJUX0dFKHJ1bGVzZXRfZmQsIDAsIFwibGFuZGxvY2tfY3JlYXRlX3J1bGVzZXRcIik7XG4rXHRcdGdvdG8gb3V0X3VubGluaztcbitcdH1cbitcbitcdHNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVsZXNldF9mZCA9IHJ1bGVzZXRfZmQ7XG4rXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fYXR0YWNoKHNrZWwpLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChsb2FkX3J1bGVzZXRfaW50b19tYXAoc2tlbCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2ZkcyksIFwicGlwZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0Y2hhciAqYXJndltdID0geyBcImdhcmJhZ2VcIiwgTlVMTCB9O1xuK1x0XHRpbnQgZmQ7XG4rXG4rXHRcdGNsb3NlKHBpcGVfZmRzWzFdKTtcbitcdFx0cmVhZChwaXBlX2Zkc1swXSwgXHUwMDI2YnVmLCAxKTtcbitcdFx0Y2xvc2UocGlwZV9mZHNbMF0pO1xuK1x0XHRleGVjdihnYXJiYWdlX3BhdGgsIGFyZ3YpO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgZmFpbGVkIGV4ZWN1dGlvbiBtdXN0IGxlYXZlIG5vIHRyYWNlOiBub1xuK1x0XHQgKiBMYW5kbG9jayBkb21haW4sIGkuZS4gd3JpdGluZyBtdXN0IHN0aWxsIHdvcmtcbitcdFx0ICogKGV4aXQgNikuXG4rXHRcdCAqL1xuK1x0XHRmZCA9IG9wZW4odG1wX3BhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyk7XG4rXHRcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0XHRleGl0KDYpO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdGV4aXQoMCk7XG4rXHR9XG4rXHRjbG9zZShwaXBlX2Zkc1swXSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gcGlkO1xuK1x0d3JpdGUocGlwZV9mZHNbMV0sIFx1MDAyNmJ1ZiwgMSk7XG4rXHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcIndhaXRwaWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXCJjaGlsZF9leGl0ZWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIDAsIFwiZGlzY2FyZF9jaGlsZF9leGl0XCIpO1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcImxzbV9wcm9nX2NhbGxlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwicmVzdHJpY3RfYmlucHJtXCIpO1xuK291dDpcbitcdGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2Rlc3Ryb3koc2tlbCk7XG4rXHRpZiAocnVsZXNldF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHJ1bGVzZXRfZmQpO1xuK291dF91bmxpbms6XG4rXHR1bmxpbmsoZ2FyYmFnZV9wYXRoKTtcbitcdHVubGluayh0bXBfcGF0aCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9sc21fcG9saWN5X2tmdW5jcyh2b2lkKVxuK3tcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmVzdHJpY3RfYmlucHJtXCIpKVxuK1x0XHR0ZXN0X3Jlc3RyaWN0X2JpbnBybSgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJyZXN0cmljdF9iaW5wcm1fZGlzY2FyZFwiKSlcbitcdFx0dGVzdF9yZXN0cmljdF9iaW5wcm1fZGlzY2FyZCgpO1xuK1x0UlVOX1RFU1RTKGxzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjAzMzVkYjU0NzA0MDBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmNcbkBAIC0wLDAgKzEsMTAwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2UgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuK1xuK2V4dGVybiBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKlxuK2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xuK2V4dGVybiB2b2lkXG4rYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCkgX19rc3ltO1xuK2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsXG4rXHRcdFx0XHRcdHUzMiBmbGFncykgX19rc3ltO1xuK1xuKy8qXG4rICogVGhlIExTTSBwb2xpY3kga2Z1bmNzIGFyZSBsaW1pdGVkIHRvIExTTSBhbmQgc3lzY2FsbCBwcm9ncmFtcyBieVxuKyAqIHRoZSBCUEYtc2lkZSBrZnVuYyBmaWx0ZXI6IGEgdHJhY2luZyBwcm9ncmFtIGNhbGxpbmcgb25lIG11c3QgZmFpbFxuKyAqIHZlcmlmaWNhdGlvbi5cbisgKi9cbitTRUMoXCJ0cF9idGYvdGFza19uZXd0YXNrXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWRcIilcbitpbnQgQlBGX1BST0codHJhY2luZ19wcm9nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbit7XG4rXHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7XG4rXG4rXHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xuK1x0aWYgKHJ1bGVzZXQpXG4rXHRcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChydWxlc2V0KTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEEgcnVsZXNldCBmZCBpcyBvbmx5IG1lYW5pbmdmdWwgaW4gdGhlIGZkIHRhYmxlIG9mIHRoZSB0YXNrIHRoYXRcbisgKiBzZXQgdGhlIHJ1bGVzZXQgdXA6IHRoZSBhY3F1aXJlIGtmdW5jIGlzIGV4Y2x1c2l2ZSB0byBzeXNjYWxsXG4rICogcHJvZ3JhbXMgYW5kIG11c3QgYmUgcmVqZWN0ZWQgaW4gYW4gTFNNIHByb2dyYW0sIGV2ZW4gb24gYW5cbisgKiBhbGxvd2VkIGhvb2suXG4rICovXG4rU0VDKFwibHNtLnMvYnBybV9jcmVkc19mb3JfZXhlY1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkIGlzIG5vdCBhbGxvd2VkXCIpXG4raW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuK1xuK1x0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbitcdGlmIChydWxlc2V0KVxuK1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBFbmZvcmNlbWVudCBuZWVkcyBhbiBleGVjdXRpb24gdG8gcmVzdHJpY3Q6IHRoZSBlbmZvcmNlbWVudCBrZnVuY1xuKyAqIGlzIGV4Y2x1c2l2ZSB0byB0aGUgc2xlZXBhYmxlIGJwcm0gTFNNIGhvb2tzIGFuZCBtdXN0IGJlIHJlamVjdGVkXG4rICogaW4gYSBzeXNjYWxsIHByb2dyYW0uXG4rICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0gaXMgbm90IGFsbG93ZWRcIilcbitpbnQgc3lzY2FsbF9yZXN0cmljdCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oTlVMTCwgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogQW55IExTTSBhdHRhY2ggcG9pbnQgb3RoZXIgdGhhbiB0aGUgc2xlZXBhYmxlIGJwcm0gaG9va3MgbXVzdCBiZVxuKyAqIHJlamVjdGVkLlxuKyAqL1xuK1NFQyhcImxzbS5zL2ZpbGVfb3BlblwiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCBpcyBub3QgYWxsb3dlZFwiKVxuK2ludCBCUEZfUFJPRyh3cm9uZ19ob29rLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoTlVMTCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGUga2Z1bmNzIG1heSBzbGVlcDogYSBub24tc2xlZXBhYmxlIHByb2dyYW0gb24gYW4gYWxsb3dlZCBob29rXG4rICogbXVzdCBiZSByZWplY3RlZC5cbisgKi9cbitTRUMoXCJsc20vYnBybV9jcmVkc19mb3JfZXhlY1wiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwicHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcIilcbitpbnQgQlBGX1BST0cobm9uc2xlZXBhYmxlX3Byb2csIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KE5VTEwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEFuIGFjcXVpcmVkIHJ1bGVzZXQgcmVmZXJlbmNlIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHJldHVybmluZy4gKi9cbitTRUMoXCJzeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2VcIilcbitpbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eClcbit7XG4rXHRicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMTA3MjA2YWUxNDRkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jXG5AQCAtMCwwICsxLDEwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXHUwMDNlICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQ7XG4rXG4rZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG4rYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XG4rZXh0ZXJuIHZvaWRcbiticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KSBfX2tzeW07XG4rZXh0ZXJuIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHRcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCxcbitcdFx0XHRcdFx0dTMyIGZsYWdzKSBfX2tzeW07XG4rXG4rc3RydWN0IHJ1bGVzZXRfc2xvdCB7XG4rXHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgX19rcHRyICpydWxlc2V0O1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBydWxlc2V0X3Nsb3QpO1xuK30gcnVsZXNldF9tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4raW50IG1vbml0b3JlZF9waWQ7XG4raW50IHJ1bGVzZXRfZmQ7XG4rdTMyIGtmdW5jX2ZsYWdzO1xuK2Jvb2wgZG91YmxlX2NhbGw7XG4rYm9vbCBnb3RfbnVsbF9mb3JfYmFkX2ZkO1xuK2Jvb2wgbm9fcnVsZXNldDtcbitpbnQgcmVzdHJpY3RfZXJyO1xuK2ludCByZXN0cmljdDJfZXJyO1xuK2Jvb2wgY2FsbGVkO1xuK1xuKy8qXG4rICogUnVucyBpbiB0aGUgdGVzdCBydW5uZXIncyBjb250ZXh0IHRocm91Z2ggQlBGX1BST0dfUlVOOlxuKyAqIEBydWxlc2V0X2ZkIGlzIHJlc29sdmVkIGluIHRoZSBydW5uZXIncyBmZCB0YWJsZSBhbmQgdGhlIGFjcXVpcmVkXG4rICogcnVsZXNldCBpcyBoYW5kZWQgdG8gdGhlIExTTSBwcm9ncmFtIHRocm91Z2ggdGhlIG1hcCBrcHRyIHNsb3QuXG4rICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBsb2FkX3J1bGVzZXQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwgKm9sZDtcbitcdHN0cnVjdCBydWxlc2V0X3Nsb3QgKnNsb3Q7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdHNsb3QgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJ1bGVzZXRfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCFzbG90KVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEEgZmQgdGhhdCBpcyBub3QgYSBMYW5kbG9jayBydWxlc2V0IG11c3QgcmVzb2x2ZSB0byBOVUxMLiAqL1xuK1x0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbitcdGlmICghcnVsZXNldClcbitcdFx0Z290X251bGxfZm9yX2JhZF9mZCA9IHRydWU7XG4rXHRlbHNlXG4rXHRcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChydWxlc2V0KTtcbitcbitcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkKTtcbitcdGlmICghcnVsZXNldClcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnNsb3QtXHUwMDNlcnVsZXNldCwgcnVsZXNldCk7XG4rXHRpZiAob2xkKVxuK1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQob2xkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXCIpXG4raW50IEJQRl9QUk9HKHJlc3RyaWN0X2V4ZWMsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkO1xuK1x0c3RydWN0IHJ1bGVzZXRfc2xvdCAqc2xvdDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0aWYgKG1vbml0b3JlZF9waWQgIT0gKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y2FsbGVkID0gdHJ1ZTtcbitcbitcdHNsb3QgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJ1bGVzZXRfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCFzbG90KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJ1bGVzZXQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnNsb3QtXHUwMDNlcnVsZXNldCwgTlVMTCk7XG4rXHRpZiAoIXJ1bGVzZXQpIHtcbitcdFx0bm9fcnVsZXNldCA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmVzdHJpY3RfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LCBrZnVuY19mbGFncyk7XG4rXHRpZiAoZG91YmxlX2NhbGwpXG4rXHRcdC8qIFJlcGxhY2VzIHRoZSBkb21haW4gc3RhZ2VkIGJ5IHRoZSBmaXJzdCBjYWxsLiAqL1xuK1x0XHRyZXN0cmljdDJfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBrZnVuY19mbGFncyk7XG4rXG4rXHQvKiBLZWVwIHRoZSBydWxlc2V0IGZvciB0aGUgbmV4dCBtb25pdG9yZWQgZXhlY3V0aW9uLiAqL1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZzbG90LVx1MDAzZXJ1bGVzZXQsIHJ1bGVzZXQpO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KG9sZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzoyOC40MzU1Mzk0MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg2Nzk2Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgTGFuZGxvY2sgQlBGIEtmdW5jcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCB3aGljaCBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhZGRpdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcywgXCJUaGlzIG5lZWRzIGZ1enppbmcsIGFuZCBpdCBuZWVkcyBmdXp6aW5nICp0aG9yb3VnaGx5Ki5cIiBJIHNlZSB3ZSdyZSBhZGRpbmcgdGhlc2UgbmV3IEJQRiBrZnVuY3M6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGFuZCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgLiBQbHVzLCB0aGVyZSBhcmUgdGhlc2UgTFNNIGhvb2tzIG5vdzogYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYW5kIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLiBUaGVzZSBhbGwgbmVlZCB0byBiZSBhIHByaW9yaXR5IGZvciB0ZXN0aW5nLlxuXG5UaGUgZnVuY3Rpb25hbCBhc3BlY3RzIG9mIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBhcmUga2V5IHRvIHVuZGVyc3RhbmQgd2l0aCByZWdhcmQgdG8gaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV3IGtmdW5jcyBhbmQgaG9va3MuXG5cbkxldCdzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBGcm9tIGEgY29kZSBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5ldyBrZnVuY3MgYW5kIGhvb2tzLiBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZWAgc28gYGxhbmRsb2NrLSQoQ09ORklHX0JQRl9MU00pICs9IGJwZi5vYC4gU28sIGBDT05GSUdfQlBGX0xTTWAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gSXQgYWxzbyBtYWtlcyBzZW5zZSB0aGF0IGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgIGlzIG5lZWRlZCwgYW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX1NZU0NBTExgIGZvciB0aGUgQlBGIGZ1bmN0aW9uYWxpdHkgaXRzZWxmLiBHb3QgaXQuIE5vdywgbGV0J3MgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk0NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA3OjM0LjgyMjM1NDY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTIxMDk3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3Q9MTUwPWV4Y2VwdGlvbiBvZiBgYExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0LTE1Mi0uLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmNcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdDoxNTM6ICAgIDppZGVudGlmaWVyczogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdC0xNTQtICAgICAgICAgICAgICAgICAgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00NTc9aW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00ODItICogT3BhcXVlIGhhbmRsZSBmb3IgYSBMYW5kbG9jayBydWxlc2V0LiAgT25seVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQ4MzogKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIHByb2R1Y2VzIG9uZSwgYW5kIG9ubHkgTGFuZGxvY2tcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00ODQtICogcmVzb2x2ZXMgaXQuXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00OTc9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDk5LS8qKlxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUwMDogKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCAtIEdldCBhIExhbmRsb2NrIHJ1bGVzZXQgZnJvbSBhIGZkXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTAxLSAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIG9mIGEgTGFuZGxvY2sgcnVsZXNldCwgcmVzb2x2ZWQgaW4gdGhlIGZpbGVcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTUxNT1fX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKlxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUxNjpicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTE3LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTUyOC0gKlxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUyOTogKiBSZWxlYXNlIGEgcmVmZXJlbmNlIGFjcXVpcmVkIHdpdGggYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKS5cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy01MzAtICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz01ODU9QlRGX0tGVU5DU19TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaWRzKVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjU4NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQsXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTg3LVxcdCAgICAgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9NTk2PUJURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfaWRzLCBmdW5jLFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjU5NzpcXHRcXHQgICBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZClcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy01OTgtQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1faWRzLCBmdW5jLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNjA1LSAqIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgc29cXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo2MDY6ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBpcyBleGNsdXNpdmUgdG8gc3lzY2FsbFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTYwNy0gKiBwcm9ncmFtcywgd2hpY2ggcnVuIGluIHRoYXQgdGFzaydzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9MTM9ZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYzoxNDpicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTE1LWV4dGVybiB2b2lkXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jPTI2PVNFQyhcXFwidHBfYnRmL3Rhc2tfbmV3dGFza1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYzoyNzpfX2ZhaWx1cmUgX19tc2coXFxcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkIGlzIG5vdCBhbGxvd2VkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTI4LWludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjMyOlxcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMy1cXHRpZiAocnVsZXNldClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9NDQ9U0VDKFxcXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjQ1Ol9fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWRcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMtNDYtaW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTQ5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6NTA6XFx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTUxLVxcdGlmIChydWxlc2V0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYz05Nj1pbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjk4OlxcdGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk5LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYz0xMj1leHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jOjEzOmJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMtMTQtZXh0ZXJuIHZvaWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM9NDc9aW50IGxvYWRfcnVsZXNldCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTU3LVxcdC8qIEEgZmQgdGhhdCBpcyBub3QgYSBMYW5kbG9jayBydWxlc2V0IG11c3QgcmVzb2x2ZSB0byBOVUxMLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM6NTg6XFx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTU5LVxcdGlmICghcnVsZXNldClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMtNjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYzo2NDpcXHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYy02NS1cXHRpZiAoIXJ1bGVzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA3OjM3LjI3NDQ3MTQ1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTMxNDY4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMYW5kbG9jayBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIExhbmRsb2NrLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYWRkaXRpb24gb2YgbmV3IEJQRiBrZnVuY3MuIEkgc2VlIHdlIGhhdmU6XG5cbiogICBgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRgXG4qICAgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGBcbiogICBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWBcbiogICBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgXG5cblRoZXNlIGFyZSBrZXkuIFRoYXQgc2V0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXkncmUgYWltaW5nIGZvciBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCBCUEYgZm9yIExhbmRsb2NrIHBvbGljeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGV5IGludGVuZCB0byB1c2UgdGhlc2UgaW4gcmVsYXRpb24gdG8gdGhlIGV4aXN0aW5nIExhbmRsb2NrIHN5c3RlbS5cblxuQmV5b25kIHRoZSBrZnVuY3MsIGl0IHNlZW1zIHdlIGFsc28gaGF2ZSB1cGRhdGVzIHRvIHRoZSBMU00gaG9va3MuIFRoZSBjb2RlIGlzIGltcGxlbWVudGluZyBob29rcyBmb3IgYm90aCBnZW5lcmljIExTTSAocHJlc3VtYWJseSB0aGUgQlBGIGJhc2VkIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIExhbmRsb2NrIHNwZWNpZmljIG9wZXJhdGlvbnM6XG5cbiogICBgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZGAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRgLCBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYFxuKiAgIGBob29rX3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgaG9va19wb2xpY3lfa3B0cl9wdXRgLCBgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHNgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmBcblxuVGhpcyBjb25maXJtcyB0aGF0IEJQRiBpcyBtZWFudCB0byBhbGxvdyBMYW5kbG9jayB0byBiZSBldmVuIG1vcmUgZmluZS1ncmFpbmVkIGluIGl0cyBlbmZvcmNlbWVudCwgYW5kIHBvc3NpYmx5IHRvIHBlcm1pdCBmb3IgZHluYW1pYyBtb2RpZmljYXRpb24gb2YgcG9saWNpZXMuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZWNoYW5pY3Mgb2YgYCpfa3B0cmAgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwb2xpY3kgc3RydWN0dXJlcy5cblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBsZXQncyBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHNvcnRlZC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgSSBrbm93IHRoYXQ6XG5cbiogICBgQ09ORklHX0JQRl9MU01gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGtmdW5jcyB0byBiZSByZWdpc3RlcmVkLCB3aGljaCBtYWtlcyBzZW5zZSwgc2luY2UgdGhleSBhcmUgQlBGLlxuKiAgIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgIGlzIG9idmlvdXNseSBuZWVkZWQgdG8gZW5hYmxlIExhbmRsb2NrIGl0c2VsZi5cbiogICBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHJlcXVpcmVtZW50IGZvciBCUEYgc3lzY2FsbCBzdXBwb3J0LCBzbyBwcm9iYWJseSB1c2VkIHRvIGNhbGwgdGhlIGtmdW5jcy5cbiogICBgQ09ORklHX1NFQ1VSSVRZYCBpcyByZXF1aXJlZCBmb3IgTFNNIGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbC5cblxuTm93LCBJJ20gZ29pbmcgdG8gY29uc3VsdCBgc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCBsaWtlIG1heWJlIHNvbWUgb3RoZXIgTGFuZGxvY2sgZmVhdHVyZXMgb3IgaGVscGVyIGNvZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIEJQRiBpbnRlZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6NDMuMTY3NjIyMjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjY2OTMxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMi1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjM6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy00LVxcdGJvb2wgXFxcIkxhbmRsb2NrIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTIzLVxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6MjQ6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLX0tVTklUX1RFU1RcXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIktVbml0IHRlc3RzIGZvciBMYW5kbG9ja1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo0NS40MzQzMjE2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE2NTk1MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIExhbmRsb2NrIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYHNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZywgdGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGNoZWNrLiBJJ20gZ29pbmcgdG8gbG9vayBiZXlvbmQgdGhlIG9idmlvdXMgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBhbmQgY29uc2lkZXIgaG93IExhbmRsb2NrJ3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3Mgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlLiBXaGF0IGZlYXR1cmVzIGlzIGl0IGNvbnRpbmdlbnQgb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHNlY3VyaXR5IHN1YnN5c3RlbXMsIG1heWJlIFNFTGludXggb3IgQXBwQXJtb3IsIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRvIGVuc3VyZSBwcm9wZXIgY28tZXhpc3RlbmNlIGFuZCBhdm9pZCBhbnkgY29uZmlndXJhdGlvbiBjb25mbGljdHM/IEl0J3MgY3J1Y2lhbCBJIGdyYXNwIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyBMYW5kbG9jayBpcyBpbnRlZ3JhdGVkIGFuZCB3aGVyZSBpdHMgY29uZmlndXJhdGlvbiBrbm9icyBjYW4gcG90ZW50aWFsbHkgaW5mbHVlbmNlIHRoZSByZXN0IG9mIHRoZSBzZWN1cml0eSBsYW5kc2NhcGUuIFRoaXMgS2NvbmZpZyBmaWxlIGhvbGRzIHRoZSBrZXkgdG8gY29uZmlndXJpbmcgTGFuZGxvY2sgY29ycmVjdGx5LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgaXMgcGFyYW1vdW50LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo0OC41NTA5MjA0NjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9sYW5kbG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbiAgIDQ6XFx0XFx0Ym9vbCBcXFwiTGFuZGxvY2sgc3VwcG9ydFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gICA2OlxcdFxcdHNlbGVjdCBTRUNVUklUWV9ORVRXT1JLXFxuICAgNzpcXHRcXHRzZWxlY3QgU0VDVVJJVFlfUEFUSFxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBMYW5kbG9jayBpcyBhIHNhbmRib3hpbmcgbWVjaGFuaXNtIHRoYXQgZW5hYmxlcyBwcm9jZXNzZXMgdG8gcmVzdHJpY3RcXG4gIDEwOlxcdFxcdCAgdGhlbXNlbHZlcyAoYW5kIHRoZWlyIGZ1dHVyZSBjaGlsZHJlbikgYnkgZ3JhZHVhbGx5IGVuZm9yY2luZ1xcbiAgMTE6XFx0XFx0ICB0YWlsb3JlZCBhY2Nlc3MgY29udHJvbCBwb2xpY2llcy4gIEEgTGFuZGxvY2sgc2VjdXJpdHkgcG9saWN5IGlzIGFcXG4gIDEyOlxcdFxcdCAgc2V0IG9mIGFjY2VzcyByaWdodHMgKGUuZy4gb3BlbiBhIGZpbGUgaW4gcmVhZC1vbmx5LCBtYWtlIGFcXG4gIDEzOlxcdFxcdCAgZGlyZWN0b3J5LCBldGMuKSB0aWVkIHRvIGEgZmlsZSBoaWVyYXJjaHkuICBTdWNoIHBvbGljeSBjYW4gYmVcXG4gIDE0OlxcdFxcdCAgY29uZmlndXJlZCBhbmQgZW5mb3JjZWQgYnkgYW55IHByb2Nlc3NlcyBmb3IgdGhlbXNlbHZlcyB1c2luZyB0aGVcXG4gIDE1OlxcdFxcdCAgZGVkaWNhdGVkIHN5c3RlbSBjYWxsczogbGFuZGxvY2tfY3JlYXRlX3J1bGVzZXQoKSxcXG4gIDE2OlxcdFxcdCAgbGFuZGxvY2tfYWRkX3J1bGUoKSwgYW5kIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoKS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2xhbmRsb2NrLnJzdCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLiAgT3RoZXJ3aXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo0OC41NTEwMTY5NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE5MTQxMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBzZWN1cml0eTpcblxuKipUaGlua2luZyBBYm91dCBMYW5kbG9jayBhbmQgQlBGIExTTSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQncyBvbiBteSBtaW5kIHJpZ2h0IG5vdyBpcyB0aGUgYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyB0aGUgcHJpbWFyeSBmb2N1cywgdGhlIGNlbnRyYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuIEl0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZ2V0IHJpZ2h0LiBCdXQgb2YgY291cnNlLCB5b3UgY2FuJ3QganVzdCBlbmFibGUgTGFuZGxvY2sgaW4gaXNvbGF0aW9uLiBJIGFsc28ga25vdyB0aGF0IGBDT05GSUdfQlBGX0xTTWAgaXMgYSBwcmVyZXF1aXNpdGUsIHRoYXQncyBjcml0aWNhbCB0byBtYWtlIExhbmRsb2NrIHdvcmsgYXMgZXhwZWN0ZWQuIFNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0JQRl9MU01gIGlzIGVuYWJsZWQgYWxvbmdzaWRlIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgLCB0aGVzZSB0d28gY29tcG9uZW50cyBhcmUgY2xvc2VseSByZWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6NTEuNDcwMTYwOTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkxODQ0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo1My42NjIwMTQ0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA4NzM1MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBMU00gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQlBGIExTTS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBzaW5jZSBpdCBzZWVtcyB0byBiZSB3aGVyZSBhbGwgdGhpbmdzIEJQRi1yZWxhdGVkIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCBgQlBGX0xTTWAgc2hvdWxkIGJlIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBpbiB0aGVyZSBpZiBpdCdzIGEgY29uZmlndXJhYmxlIG9wdGlvbiBmb3IgdXNpbmcgQlBGIHdpdGggTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGVzKS4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGFueSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBCUEZfTFNNYCBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBCUEYgYW5kIGtlcm5lbCBzZWN1cml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo1Ni40NzA3NTIzMzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdHNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo1Ni40NzA4NDM2OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODM0NDE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgTFNNIGFuZCBMYW5kbG9jayBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGRlcGVuZGVuY3kgbGFuZHNjYXBlIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBDT05GSUdfQlBGX0xTTWAgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBHb29kIHRvIGtub3cuIE1vdmluZyBmb3J3YXJkLCBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQgSSBlbmFibGUgYEJQRl9MU01gLCBgU0VDVVJJVFlfTEFORExPQ0tgLCBgQlBGX1NZU0NBTExgLCBhbmQgYFNFQ1VSSVRZYCBpbiBteSBjb25maWd1cmF0aW9ucy4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCB0aGUgcmVhbCBmb2N1cyDigJMgaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIHByaW1lIGNhbmRpZGF0ZXMgc2VlbSB0byBiZTogYGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGAsIGBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtYCwgYW5kIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGFsb25nIHdpdGggYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCwgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgdGVzdGluZyB0aGUgQlBGIGludGVncmF0aW9uIHdpdGggTGFuZGxvY2sgYW5kIHRoZSBzZWN1cml0eSBwb2xpY2llcy5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgYWxzbyBwZXJmb3JtIGEgcXVpY2sgc3dlZXAgb2YgdGhlIGVudGlyZSBgc2VjdXJpdHkvbGFuZGxvY2svYnBmLmNgIGZpbGUgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIGFuZCBpZGVudGlmeSBhbGwgcmVsZXZhbnQgYXR0YWNrIHN1cmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA4OjAxLjA5OTE5MDc2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyOTE2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qaG9va19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMjUtXFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MjY6c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0yNy17XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0zNy1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYzozODpzdGF0aWMgdm9pZCBob29rX3BvbGljeV9rcHRyX3B1dCh1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0zOS17XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYz01Mj1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9icGZfbWVtY2codm9pZClcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTYwLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jOjYxOnN0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy02Mi1cXHRcXHRcXHRcXHRcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0xMDQtXFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MTA1OnN0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTA2LXtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTExOC1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYzoxMTk6c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgbGFuZGxvY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTIwLVxcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MDEuMTU3NDg3NjkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjg5MjYwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIExhbmRsb2NrIEJQRiBGdW5jdGlvbiBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgTGFuZGxvY2sgQlBGIGZ1bmN0aW9ucy4gSSdtIGxvb2tpbmcgYXQgYHNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM6IGBob29rX3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgaG9va19wb2xpY3lfa3B0cl9wdXRgLCBgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBhbmQgYGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzYC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIHN0YXRpYyAqY291bGQqIG1lYW4gdGhleSdyZSBpbmxpbmVkLCBvciBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGV5J3JlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgTFNNX0hPT0tfSU5JVGAsIHdoaWNoIG1lYW5zIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLiBUaGV5J2xsIGhhdmUgdGhlaXIgb3duIHVuaXF1ZSBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGZhdm9ycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXJzLiBTbywgSSBuZWVkIHRvIGlkZW50aWZ5IHRob3NlIGVudHJ5cG9pbnRzLiBPa2F5LCBoZXJlIHRoZXkgYXJlOiBgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRgLCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0YCwgYGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1gLCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZGAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRgLCBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCwgYGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb25gLCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYC5cblxuSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgbGF0dGVyIHR3bywgYGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb25gIGFuZCBgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25gLCBzbyBJJ2xsIGdvIG92ZXIgdG8gYHNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY2AgdG8gY29uZmlybSB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTMxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODowNi40MjY0MTcxNTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzI4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9sYW5kbG9jay9jcmVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jLTQxLSAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYzo0MjppbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtNDMtXFx0Y29uc3Qgc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MDYuNTEyMTQ5NzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mzc1ODI0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipBbmFseXppbmcgdGhlIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3aXRoIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBlbmZvcmNpbmcgc2VjdXJpdHkgYm91bmRhcmllcywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgZmlsZSBzeXN0ZW0gYWNjZXNzLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IGl0J3MgcHJvYmFibHkgdGhlIGNvcmUgb2YgTGFuZGxvY2sncyByZXN0cmljdGlvbiBtZWNoYW5pc21zLiBJJ20ga2VlbiB0byBkaXNzZWN0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgdmFyaW91cyBMYW5kbG9jayBydWxlcy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMsIGV4cGVjdGluZyBzb21ldGhpbmcgbGlrZSBhIHJlc3RyaWN0aW9uIHR5cGUsIHBlcmhhcHMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgcGF0aCwgYW5kIHNvbWUga2luZCBvZiBhY2Nlc3MgcGVybWlzc2lvbnMgYml0bWFzayBvciBmbGFnLiBJ4oCZbSBhbHNvIGdvaW5nIHRvIGJlIGV4YW1pbmluZyB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBzdWNoIGFzIHdoYXQgaGFwcGVucyBpZiB0aGUgcmVzdHJpY3Rpb24gZmFpbHMsIG9yIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLiBJJ2xsIGV4cGVjdCB0byBzZWUgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBvdXRsaW5pbmcgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgYW55IGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2UsIGVzcGVjaWFsbHkgY29uY2VybmluZyByYWNlIGNvbmRpdGlvbnMgb3Igc2lkZS1jaGFubmVsIGF0dGFja3MuIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIExhbmRsb2NrIGZ1bmN0aW9ucyBpcyBhbHNvIGVzc2VudGlhbCwgY29uc2lkZXJpbmcgaXTigJlzIGEga2V5IHBpZWNlIG9mIHRoZSBMYW5kbG9jayBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODowOS45NDk3MzU0OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjE2NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9sYW5kbG9jay9jcmVkLmM9NDI9aW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtOTgtICovXFxuc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jOjk5OnZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtMTAwLVxcdFxcdFxcdFxcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA4OjEwLjAxMTk1ODk3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc2MTI3NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRoYXQgKmFyZW4ndCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZCBpbiBhIHdheSB0aGF0IHN0YXRpYyBvbmVzIGFyZW4ndCwgbWFraW5nIHRoZW0gaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgYW5hbHlzaXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSB1c2VkIGFuZCwgc3BlY2lmaWNhbGx5LCBpZiB0aGV5J3JlIGludGVyYWN0aW5nIHdpdGggYW55dGhpbmcgc2VjdXJpdHktc2Vuc2l0aXZlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBzZWN1cml0eS9zZWN1cml0eS5jYC4gSSdtIHNwZWNpZmljYWxseSBnb2luZyB0byBodW50IGZvciBgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZGAuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBkZXJpdmluZyBrZXJuZWwgcG9pbnRlcnMgZnJvbSBmaWxlIGRlc2NyaXB0b3JzLCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgYmUgYSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHkuIFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMgbm93IG15IHByaW1hcnkgZm9jdXMuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2VzIGFueSBwYXRod2F5cyBmb3IgdW5pbnRlbmRlZCBrZXJuZWwgbWVtb3J5IGFjY2VzcyBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIG5vdyB0b3AgcHJpb3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MTMuMTg4MDkwMjU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1MDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTU0Mzk9aW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy01NDY4LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTQ2OTppbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTU0NzAtXFx0XFx0XFx0XFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODoxMy4yMzgwNDY1NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5NTAzNDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRlZXAgRGl2ZSBvbiBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRgLCBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwgcG9pbnRlciBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjbGVhbnVwIGNvdW50ZXJwYXJ0IHRvIHNvbWV0aGluZyBsaWtlIGEgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2dldGAsIHNvIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCByaWdodD8gV2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBrZXJuZWwgcG9pbnRlcnMgaGVyZSwgbGlrZWx5IGFzc29jaWF0ZWQgd2l0aCBzb21lIHNlY3VyaXR5IGNvbnRleHQgb3IgcG9saWN5IGRhdGEuXG5cblRoZSBkZXNpZ24gaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIFRoZSBwcmVzZW5jZSBvZiBgX3B1dGAgaW1wbGllcyBhIGNvcnJlc3BvbmRpbmcgYF9nZXRgLCBhbmQgdGhhdCB0aGUga2VybmVsIHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyB0aGUgY29tbW9uIHBhdHRlcm4uIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgdGhpcyBpbmZvcm1hdGlvbi4gSXQgYWxzbyBwcmV2ZW50cyBkYW5nbGluZyBwb2ludGVycywgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBldmVuIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy4gU28sIHdoYXQgc3BlY2lmaWMgc2VjdXJpdHkgcG9saWNpZXMgaXMgdGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGg/IFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBrZXJuZWwtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgc28gdGhlIHBvbGljaWVzIGhhdmUgdG8gYmUgYWJvdXQgbWFraW5nIHN1cmUgdGhhdCB0aGUgZGF0YSBzdGF5cyB3aXRoaW4gdGhlIHN5c3RlbSwgd2l0aG91dCBsZWFrYWdlIG9yIG1pc3VzZS5cblxuTm93LCBJJ20gYWxyZWFkeSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zLiBXaGF0IGhhcHBlbnMgaWYgdGhpcyBgX3B1dGAgaXMgY2FsbGVkIHByZW1hdHVyZWx5LCBvciBpbiB0aGUgd3Jvbmcgc2VxdWVuY2U/IElzIHRoZXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXM/IEFyZSB3ZSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnQgc2FmZWx5PyBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgcG9zc2libGUgY29kZSBwYXRocyB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGluayBhYm91dCBpdCAtIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGJlIGEgZ29sZG1pbmUgZm9yIGFuIGF0dGFja2VyIVxuXG5CZXlvbmQgc2ltcGxlIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMsIEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUga2VybmVsIHBvaW50ZXIuIFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgZGF0YSBzdHJ1Y3R1cmU/IElzIGl0IHNlbnNpdGl2ZT8gSXMgaXQgc3RydWN0dXJlZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gY2xlYXJseSBhYm91dCBob3cgdG8gcHJvdGVjdCBpdD8gV2UncmUgbG9va2luZyBhdCBwb2xpY3kgZGF0YSwgc28gdGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLCBpbiBib3RoIGluc3RhbmNlcy4gU28sIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB2dWxuZXJhYmlsaXR5IGluIHRoaXMgZnVuY3Rpb24gYXJlIHZlcnkgc2VyaW91cy5cblxuRmluYWxseSwgSSdtIHBvbmRlcmluZyB0aGUgY29udGV4dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHksIGZyb20gYSBzaW5nbGUgdGhyZWFkLCBvciBpcyBpdCBpbnZva2VkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCBvciBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBncmVhdGx5IGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50IG9mIHRoZSBmdW5jdGlvbidzIHNhZmV0eSBhbmQgcmVzaWxpZW5jZS4gVGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCB0byBtZSBhcyB3ZWxsLiBBbmQgSSBiZXQgdGhlcmUgYXJlIGF1ZGl0IHBvaW50cywgdG9vLCBzb21ld2hlcmUgZG93biB0aGUgbGluZS4uLiBsZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MTcuODMzMDgzOTEzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg3Njg0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTU0Njk9aW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTU0OTQtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo1NDk1OnZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy01NDk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MTcuOTA4OTY0NDgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDk4OTA1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCByZWZsZWN0aW5nIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MgcmVsYXRlZCB0byB0aGF0IGZ1bmN0aW9uOlxuXG4qKkFuYWx5emluZyBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsgYWJvdXQgdGhpcyBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCBmdW5jdGlvbi4gSXRzIHZlcnkgbmFtZSBzY3JlYW1zIFwic2VjdXJpdHlcIiBhbmQgXCJwb2xpY3kgZW5mb3JjZW1lbnRcIiByZWxhdGVkIHRvIHRoZSBgYnBybWAgc3RydWN0dXJlLCB3aGljaCBJIGtub3cgaW50aW1hdGVseS4gSXTigJlzIGRlZmluaXRlbHkgYSBjcnVjaWFsIHBpZWNlIHdoZW4gd2UgY29uc2lkZXIgaG93IGEgbmV3IHByb2Nlc3MgY29tZXMgdG8gbGlmZSBpbiB0aGUga2VybmVsLCBhbmQgaG93IHdlIGtlZXAgaXQgY29tcGxpYW50IHdpdGggb3VyIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZS4gVGhlIGBrcHRyYCBzdWZmaXggbGlrZWx5IGluZGljYXRlcyB0aGlzIGlzbid0IHRoZSByYXcgZnVuY3Rpb24gYnV0IHNvbWV0aGluZyB1c2VkIHZpYSBrZXJuZWwgcG9pbnRlciwgaW5kaWNhdGluZyBhIGNlcnRhaW4gZGVncmVlIG9mIGluZGlyZWN0aW9uIGFuZCBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGNoZWNrcyBvciBkeW5hbWljIGRpc3BhdGNoLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB3aGF0IGl0IGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQgaW4gdmFsaWRhdGluZyB0aGUgZXhlY3V0YWJsZSdzIGxlZ2l0aW1hY3kgYW5kIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBhY3R1YWxseSAqc3RhcnQqIHRoYXQgcHJvY2Vzcy4gVGhlIFwicG9saWN5XCIgcGFydCBzdWdnZXN0cyBpdCBpbnRlZ3JhdGVzIHdpdGgsIG9yIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IsIHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LCBBcHBBcm1vciwgb3IgbWF5YmUgZXZlbiBjdXN0b20gTFNNcy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IGl0IHJlY2VpdmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0YWJsZSwgaXRzIGNvbnRleHQsIGFuZCB0aGUgcmVxdWVzdGluZyBwcm9jZXNzLiBJIGV4cGVjdCBpdCdzIGdpdmVuIGFjY2VzcyB0byB0aGUgYGJwcm1gIHN0cnVjdHVyZSwgYnV0IHdoYXQgc3BlY2lmaWMgZGF0YSBmaWVsZHMgaXMgaXQgYWNjZXNzaW5nIHdpdGhpbiB0aGVyZT8gSXMgaXQgY2hlY2tpbmcgdGhlIGZpbGUgcGF0aCwgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBleGVjdXRhYmxlIGZpbGUsIGFueSBleHRlbmRlZCBhdHRyaWJ1dGVzIChsaWtlIHNlY3VyaXR5IGxhYmVscyk/IFdoYXQgYWJvdXQgdGhlIGNhbGxpbmcgcHJvY2VzcydzIGNyZWRlbnRpYWxzIGFuZCBjYXBhYmlsaXRpZXM/IERvZXMgdGhpcyBmdW5jdGlvbiBtYW5hZ2UgYW55IHN0YXRlPyBGb3IgZXhhbXBsZSwgZG9lcyBpdCBjYWNoZSBvciBwcmUtY2FsY3VsYXRlIGluZm9ybWF0aW9uIGZvciBzdWJzZXF1ZW50IGNoZWNrcz9cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBBIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBhbGxvdyBhIG1hbGljaW91cyBhY3RvciB0byBieXBhc3Mgc2VjdXJpdHkgcmVzdHJpY3Rpb25zLCBieSBleHBsb2l0aW5nIGEgcmFjZSBjb25kaXRpb24sIGEgZmF1bHR5IGRhdGEgY2hlY2ssIG9yIGJ5IHByb3ZpZGluZyBjcmFmdGVkIGlucHV0LiBUaGUgaW1wYWN0IGNvdWxkIGJlIGRldmFzdGF0aW5nLCBsZWFkaW5nIHRvIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IHdheXMgdGhlIGZ1bmN0aW9uIGNvdWxkIGJlIHRyaWNrZWQsIHN1Y2ggYXMgaGFuZGxpbmcgcGF0aHMgd2l0aCBzeW1ib2xpYyBsaW5rcywgb3IgZXZlbiBtZW1vcnkgY29ycnVwdGlvbiBwb3NzaWJpbGl0aWVzLlxuXG5JJ20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJcyBpdCBjYWxsZWQgZWFybHkgaW4gdGhlIGBleGVjdmVgIHBhdGgsIG9yIGxhdGVyIG9uPyBBcmUgdGhlcmUgb3RoZXIgc2VjdXJpdHkgY2hlY2tzIHRoYXQgaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGlzPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEhvdyBkb2VzIGl0IHNpZ25hbCBhIHBvbGljeSB2aW9sYXRpb24g4oCTIGRvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGUsIGxvZyBhIG1lc3NhZ2UsIG9yIHRyaWdnZXIgYSBrZXJuZWwgcGFuaWM/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVncmF0aW9uIHBvaW50IHdpdGggb3RoZXIgc3Vic3lzdGVtcyBpcyBrZXkuXG5cbk15IGZvY3VzIGhhcyB0byBiZTogZGF0YSBpdCB1c2VzLCBhbmQgaG93IHRoYXQgZGF0YSBpcyBjaGVja2VkLCBhbmQgaG93IHRoZSBjYWxsIGlzIG1hbmFnZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIHByb2Nlc3MgY3JlYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTg0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MjIuODU4ODY2MDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTUwMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuYz01NDk1PXZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTU1MzUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo1NTM2OmludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTUzNy1cXHRcXHRcXHRcXHQgICAgICB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODoyMi45MTk4MjI2M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTYxMjQ0NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIExhbmRsb2NrIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgTGFuZGxvY2sgQlBGIHBhdGNoIGlzIGludGVyZXN0aW5nLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUgTGFuZGxvY2sgTFNNLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIGFzIGl0IGVuYWJsZXMgQlBGIHByb2dyYW1zIHRvIGFjdGl2ZWx5IGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uLiBUaGlzIG1lYW5zIHdlIGhhdmUgKm5ldyogcmVhY2hhYmxlIGNvZGUgcGF0aHMgd2l0aGluIGJvdGggdGhlIEJQRiBhbmQgTGFuZGxvY2sgc3Vic3lzdGVtcy4gVGhhdCdzIGEgY2xlYXIgc2lnbmFsIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzLCBpbiB0ZXJtcyBvZiBzeW1ib2wgY292ZXJhZ2UsIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtmdW5jczogYGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGAsIGBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yYCwgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCwgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIGZsb3cgcGF0aHMgcmVsYXRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbk9mIGNvdXJzZSwgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGFsc28gaW1wb3J0YW50OiBgQlBGX0xTTWAsIGBTRUNVUklUWV9MQU5ETE9DS2AsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgU0VDVVJJVFlgLiBIb3dldmVyLCBnaXZlbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCUEZfTFNNYCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0byBlbnN1cmUgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZS4gQWgsIHllcywgYENPTkZJR19CUEZfTFNNYCBkZXBlbmRzIG9uIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYFNFQ1VSSVRZYCwgYW5kIGBCUEZfSklUYC4gVGh1cywgYEJQRl9FVkVOVFNgLCBgQlBGX0pJVGAgYXJlIHZlcnkgaW1wb3J0YW50LCBhbmQgbmVlZCB0byBiZSBpbmNsdWRlZCBpbiBhbnkgZnV6emluZyBzZXR1cC5cblxuSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvdmVyZWQgYW5kIGhvdyB0byBzdHJ1Y3R1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEknbSBnb2luZyB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMzMSwiT3V0cHV0VG9rZW5zIjoyNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MjkuNDgxMDcxNDI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDEwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9MQU5ETE9DS1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybVwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dFwiLFxuICAgIFwic2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyXCIsXG4gICAgXCJsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uXCIsXG4gICAgXCJsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBvbiBleGVjdXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBCUEYgYW5kIExhbmRsb2NrIHN1YnN5c3RlbXMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXCIsXG4gICAgXCJicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcIixcbiAgICBcImJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRcIixcbiAgICBcInNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0clwiLFxuICAgIFwibGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvblwiLFxuICAgIFwibGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIExhbmRsb2NrIExTTSwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgb24gZXhlY3V0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 11:05:42 +0000 UTC FinishedAt: 2026-08-01 11:08:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_LANDLOCK", "BPF_SYSCALL", "SECURITY", "BPF_EVENTS", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_LANDLOCK", "BPF_SYSCALL", "SECURITY", "BPF_EVENTS", "BPF_JIT" ], "series_id": "158492be-10e7-4e70-a5a1-24bbff65c3c0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_landlock_get_ruleset_from_fd", "bpf_landlock_put_ruleset", "bpf_landlock_restrict_binprm", "bpf_landlock_put_ruleset_dtor", "security_policy_kptr_from_fd", "security_policy_kptr_put", "security_bprm_enforce_policy_kptr", "landlock_prepare_restriction", "landlock_apply_restriction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTEFORExPQ0smIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0JiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0mIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3ImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyJiMzNDssCiAgICAmIzM0O2xhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24mIzM0OywKICAgICYjMzQ7bGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBMYW5kbG9jayBMU00sIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBlbmZvcmNlIExhbmRsb2NrIHJ1bGVzZXRzIG9uIGV4ZWN1dGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIEJQRiBhbmQgTGFuZGxvY2sgc3Vic3lzdGVtcywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRlYjZkYTk0ZWJjNTE1YTZlZDQyZjg5MmYxOTJhMGJjMWVmZGU1NzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDExOjA3OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbmluZGV4IGM1MTg2NTI2ZTc2ZjYuLjAxMTk3Yzc1ODBlYzAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbkBAIC0xMjksNiAmIzQzOzEyOSwzMSBAQCBUaGUgcmVhc29uaW5nIGlzOlxuICAgcmVzdHJpY3Rpb25zLCBiZWNhdXNlIGFjY2VzcyB3aXRoaW4gdGhlIHNhbWUgc2NvcGUgaXMgYWxyZWFkeVxuICAgYWxsb3dlZCBiYXNlZCBvbiBgYExBTkRMT0NLX0FDQ0VTU19GU19SRVNPTFZFX1VOSVhgYC5cbiBcbiYjNDM7QlBGIGtmdW5jc1xuJiM0Mzs9PT09PT09PT09XG4mIzQzO1xuJiM0MztCUEYgcHJvZ3JhbXMgY2FuIGFwcGx5IGEgdXNlcnNwYWNlLWNyZWF0ZWQgTGFuZGxvY2sgcnVsZXNldCB0byBhblxuJiM0MztleGVjdXRpb24uICBBIHN5c2NhbGwgcHJvZ3JhbSAoYGBCUEZfUFJPR19UWVBFX1NZU0NBTExgYCksIHJ1bm5pbmcgaW5cbiYjNDM7dGhlIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgdGhhdCBzZXQgdGhlIHJ1bGVzZXQgdXAsIGFjcXVpcmVzIHRoZVxuJiM0MztydWxlc2V0IGZyb20gaXRzIGZpbGUgZGVzY3JpcHRvciBhbmQgdHlwaWNhbGx5IGhhbmRzIGl0IG92ZXIgdGhyb3VnaFxuJiM0MzthIG1hcCBrcHRyIGZpZWxkOyBhIHNsZWVwYWJsZSBMU00gQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4mIzQzO2BgYnBybV9jcmVkc19mb3JfZXhlY2BgIG9yIGBgYnBybV9jcmVkc19mcm9tX2ZpbGVgYCBob29rcyB0aGVuXG4mIzQzO2VuZm9yY2VzIGl0IG9uIGFuIGV4ZWN1dGlvbi5cbiYjNDM7XG4mIzQzO1RoaXMgY2FuIGJlIHVzZWQgdG8gaW5zcGVjdCB0aGUgcnVudGltZSBjb250ZXh0IG9mIGEgcGVuZGluZyBleGVjdXRpb24sXG4mIzQzO2FuZCBlbmZvcmNlIGEgTGFuZGxvY2sgcG9saWN5IHRocm91Z2ggQlBGLlxuJiM0MztcbiYjNDM7VGhlIHJlc3RyaWN0aW9uIGlzIHN0YWdlZCBpbiB0aGUgTGFuZGxvY2sgYmxvYiBvZiB0aGVcbiYjNDM7Y3JlZGVudGlhbHMgcHJlcGFyZWQgZm9yIHRoZSBleGVjdXRpb24gYW5kIGNvbW1pdHRlZCBwYXN0IHRoZSBleGVjXG4mIzQzO3BvaW50IG9mIG5vIHJldHVybiwgc28gYSBmYWlsZWQgZXhlY3V0aW9uIGxlYXZlcyB0aGUgY2FsbGluZyB0YXNrXG4mIzQzO3VudG91Y2hlZC4gIFRoZSBgYGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMilgYCBmbGFncyBhcHBseSwgd2l0aCB0aGVcbiYjNDM7ZXhjZXB0aW9uIG9mIGBgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ2BgLlxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGtlcm5lbC9icGYvYnBmX2xzbS5jXG4mIzQzOyAgICA6aWRlbnRpZmllcnM6IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXG4mIzQzOyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFxuJiM0MzsgICAgICAgICAgICAgICAgICBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtXG4mIzQzO1xuIFRlc3RzXG4gPT09PT1cbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcbmluZGV4IDU4OTVlNTI5ZGE3ZmYuLmZjM2FmMjA2ZTc5NTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdFxuQEAgLTE1LDMgJiM0MzsxNSwzMCBAQCBzZWUgYGBzZWN1cml0eS9zZWN1cml0eS5jYGAgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlczpcbiBcbiAuLiBrZXJuZWwtZG9jOjogc2VjdXJpdHkvc2VjdXJpdHkuY1xuICAgIDpleHBvcnQ6XG4mIzQzO1xuJiM0MztMU00gcG9saWN5IGtwdHIgaG9va3MgYW5kIEJQRiBrZnVuY3NcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgTFNNIGZyYW1ld29yayBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3IgaW5kaXZpZHVhbCBMU01zIHRvXG4mIzQzO2V4cG9zZSB0aGVpciBjb25maWd1cmF0aW9uIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQga3B0cnMuIEFuIExTTVxuJiM0MzttYXkgbm90IGV4cG9ydCBhbnkga2Z1bmMgb3Igb3RoZXIgQlBGIGludGVyZmFjZSBkaXJlY3RseS5cbiYjNDM7XG4mIzQzO0FuIExTTSB3aXNoaW5nIHRvIGV4cG9zZSBhIEJQRiBrZnVuYyBtdXN0IHJldXNlIGFuIGV4aXN0aW5nIHNlY3VyaXR5XG4mIzQzO2hvb2sgb3IgaW1wbGVtZW50IGEgbmV3IHN1ZmZpY2llbnRseSBnZW5lcmljIExTTSBob29rIGZvciB0aGUgZGVzaXJlZFxuJiM0MztpbnRlcmZhY2UuIFRoZSBob29rcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSBrZnVuYyBkZWZpbml0aW9ucyBpblxuJiM0MztgYGtlcm5lbC9icGZgYC4gVGhpcyBhbGxvd3MgTFNNIGhvb2tzIHRvIHJlbWFpbiBzdWZmaWNpZW50bHkgZ2VuZXJpY1xuJiM0Mzt3aGlsZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN0cm9uZyB0eXBpbmdcbiYjNDM7YW5kIHJ1bnRpbWUgY2hlY2tpbmcgb2ZmZXJlZCBieSB0aGUgQlBGIHZlcmlmaWVyLlxuJiM0MztcbiYjNDM7VGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGltcGxlbWVudHMgdGhlIG9wZXJhdGlvbiYjMzk7cyBob29rIHdpdGhcbiYjNDM7YGBMU01fSE9PS19JTklUKClgYCBsaWtlIGFueSBvdGhlciBob29rLiBBIEJQRiBwcm9ncmFtIGNhbGxpbmcgYW5cbiYjNDM7TFNNIGtmdW5jIHRoZXJlZm9yZSByZWFjaGVzIHRoZSBMU00gdGhlIHNhbWUgd2F5IGV2ZXJ5IG90aGVyXG4mIzQzO2tlcm5lbCBjYWxsZXIgZG9lczogdGhyb3VnaCBhbiBMU00gaG9vay4gVGhlIGhvb2tzIGJhY2tpbmcga2Z1bmNzXG4mIzQzO2ZvbGxvdyB0aGUgdXN1YWwgcnVsZXMgZm9yIG5ldyBMU00gaG9va3M6IHRoZWlyIGNvbnRyYWN0IG11c3QgYmVcbiYjNDM7TFNNIGFnbm9zdGljIHNvIHRoYXQgb3RoZXIgTFNNcyBjb3VsZCBwcm92aWRlIGEgbWVhbmluZ2Z1bFxuJiM0MztpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2FtZSBvcGVyYXRpb24uXG4mIzQzO1xuJiM0MztXaGV0aGVyIHRoZSBMU00gcHJvdmlkaW5nIGFuIG9wZXJhdGlvbiBpcyBidWlsdCBpbiBhbmQgYWN0aXZlIGlzIGFcbiYjNDM7cnVudGltZSBwcm9wZXJ0eTogdGhlIGtmdW5jcyBhcmUgYWx3YXlzIHJlZ2lzdGVyZWQgd2hlblxuJiM0MztgYENPTkZJR19CUEZfTFNNYGAgaXMgZW5hYmxlZC4gQlBGIHByb2dyYW0gbG9hZGluZyBpcyB0aHVzXG4mIzQzO2luZGVwZW5kZW50IG9mIHRoZSBib290LXRpbWUgTFNNIGNvbmZpZ3VyYXRpb24uXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uYTcwZWRiZDdiNzYxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTQ1Miw2ICYjNDM7NDUyLDExIEBAIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NyZWF0ZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIHVuaW9uIGJwZl9hdHRyICphdHRyXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBicGZfdG9rZW5fZnJlZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4pXG4gTFNNX0hPT0soaW50LCAwLCBicGZfdG9rZW5fY21kLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgZW51bSBicGZfY21kIGNtZClcbiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jYXBhYmxlLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcbiYjNDM7TFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgcG9saWN5X2twdHJfZnJvbV9mZCwgaW50IGZkLFxuJiM0MztcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjNDM7TFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBwb2xpY3lfa3B0cl9wdXQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuJiM0MztMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIExTTV9IT09LKGludCwgMCwgbG9ja2VkX2Rvd24sIGVudW0gbG9ja2Rvd25fcmVhc29uIHdoYXQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li40MGRmYTk2YjZhNzE5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC0xNjgsNiAmIzQzOzE2OCwyMyBAQCBzdHJ1Y3QgbHNtX3Byb3Age1xuIFx0c3RydWN0IGxzbV9wcm9wX2JwZiBicGY7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuJiM0MztcbiYjNDM7c3RydWN0IGxzbV9wb2xpY3lfbGFuZGxvY2sge1xuJiM0MztcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgcmVmZXJlbmNlIHRvIGFuIExTTSBwb2xpY3kgb2JqZWN0LCB0YWdnZWQgYnkgdGhlIExTTV9JRF8qIHZhbHVlXG4mIzQzOyAqIHBhc3NlZCBhbG9uZ3NpZGU6IG9ubHkgdGhlIG1hdGNoaW5nIExTTSYjMzk7cyBtZW1iZXIgaXMgdmFsaWQuICBUaGVcbiYjNDM7ICogbWVtYmVycyBhcmUgbm90IGd1YXJkZWQgYnkgdGhlIExTTXMmIzM5OyBDT05GSUcgb3B0aW9uczogdGhlIGNhbGxlcnNcbiYjNDM7ICogYXJlIGJ1aWx0IGluZGVwZW5kZW50bHkgb2YgYW55IGluZGl2aWR1YWwgTFNNIGFuZCBhIGNhbGwgZm9yIGFcbiYjNDM7ICogbWlzc2luZyBMU00gbXVzdCBmYWlsIGF0IHJ1bnRpbWUsIG5vdCBhdCBidWlsZCB0aW1lLlxuJiM0MzsgKi9cbiYjNDM7dW5pb24gbHNtX3BvbGljeV9rcHRyIHtcbiYjNDM7XHRzdHJ1Y3QgbHNtX3BvbGljeV9sYW5kbG9jayBsYW5kbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2tkb3duX3JlYXNvbnNbTE9DS0RPV05fQ09ORklERU5USUFMSVRZX01BWCYjNDM7MV07XG4gXG4gLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBzZWN1cml0eS9jb21tb25jYXAuYyAqL1xuQEAgLTIzMTIsNiAmIzQzOzIzMjksMTMgQEAgZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY3JlYXRlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXRcbiBleHRlcm4gdm9pZCBzZWN1cml0eV9icGZfdG9rZW5fZnJlZShzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbik7XG4gZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY21kKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBlbnVtIGJwZl9jbWQgY21kKTtcbiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKTtcbiYjNDM7ZXh0ZXJuIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuJiM0MztcdFx0XHRcdFx0dW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpO1xuJiM0MztleHRlcm4gdm9pZCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQodTY0IGxzbWlkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7XG4mIzQzO2V4dGVybiBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBmbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icGYoaW50IGNtZCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBib29sIGtlcm5lbClcbkBAIC0yMzY1LDYgJiM0MzsyMzg5LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnRcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgdTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4gI2VuZGlmIC8qIENPTkZJR19TRUNVUklUWSAqL1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9sc20uYyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5pbmRleCAzOTgzYjRjZTczYzgxLi42N2FhOTAyZjEyNTcwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5AQCAtMTQsOCAmIzQzOzE0LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbG9jYWxfc3RvcmFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYtY2dyb3VwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sc20uaFx1MDAzZVxuIFxuIC8qIEZvciBldmVyeSBMU00gaG9vayB0aGF0IGFsbG93cyBhdHRhY2htZW50IG9mIEJQRiBwcm9ncmFtcywgZGVjbGFyZSBhIG5vcFxuICAqIGZ1bmN0aW9uIHdoZXJlIGEgQlBGIHByb2dyYW0gY2FuIGJlIGF0dGFjaGVkLiBOb3RhYmx5LCB3ZSBxdWFsaWZ5IGVhY2ggd2l0aFxuQEAgLTU2LDYgJiM0Mzs1OCw5IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX3hmcm1fZGVjb2RlX3Nlc3Npb24pXG4gI2VuZGlmXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faXNtYWNsYWJlbClcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9maWxlX2FsbG9jX3NlY3VyaXR5KVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9wb2xpY3lfa3B0cl9mcm9tX2ZkKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9wb2xpY3lfa3B0cl9wdXQpXG4mIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cilcbiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKVxuIFxuIC8qIExpc3Qgb2YgTFNNIGhvb2tzIHRoYXQgc2hvdWxkIG9wZXJhdGUgb24gJiMzOTtjdXJyZW50JiMzOTsgY2dyb3VwIHJlZ2FyZGxlc3NcbkBAIC00NzAsMyAmIzQzOzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MzsvKiBMU00gcG9saWN5IGtmdW5jcyAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogT3BhcXVlIGhhbmRsZSBmb3IgYSBMYW5kbG9jayBydWxlc2V0LiAgT25seVxuJiM0MzsgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIHByb2R1Y2VzIG9uZSwgYW5kIG9ubHkgTGFuZGxvY2tcbiYjNDM7ICogcmVzb2x2ZXMgaXQuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQge307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgc2xlZXBhYmxlIExTTSBob29rcyBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKCkgYW5kXG4mIzQzOyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCgpIG1heSBiZSBjYWxsZWQgZnJvbS5cbiYjNDM7ICovXG4mIzQzO0JURl9TRVRfU1RBUlQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2NyZWRzX2Zvcl9leGVjKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2NyZWRzX2Zyb21fZmlsZSlcbiYjNDM7QlRGX1NFVF9FTkQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkIC0gR2V0IGEgTGFuZGxvY2sgcnVsZXNldCBmcm9tIGEgZmRcbiYjNDM7ICogQGZkOiBmaWxlIGRlc2NyaXB0b3Igb2YgYSBMYW5kbG9jayBydWxlc2V0LCByZXNvbHZlZCBpbiB0aGUgZmlsZVxuJiM0MzsgKiAgICAgIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIHRhc2sgcnVubmluZyB0aGUgcHJvZ3JhbVxuJiM0MzsgKlxuJiM0MzsgKiBBY3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZSBMYW5kbG9jayBydWxlc2V0IHJlZmVycmVkIHRvIGJ5IEBmZCwgYXNcbiYjNDM7ICogY3JlYXRlZCBieSBsYW5kbG9ja19jcmVhdGVfcnVsZXNldCgyKSBhbmQgcG9wdWxhdGVkIHdpdGhcbiYjNDM7ICogbGFuZGxvY2tfYWRkX3J1bGUoMikuICBPbmx5IHN5c2NhbGwgcHJvZ3JhbXMgbWF5IGNhbGwgdGhpcyBrZnVuYzpcbiYjNDM7ICogdGhleSBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaW52b2tpbmcgdGhlbSwgd2hlcmUgdGhlXG4mIzQzOyAqIHJ1bGVzZXQgZmQgaXMgbWVhbmluZ2Z1bC4gIFRoZSBhY3F1aXJlZCBydWxlc2V0IGNhbiBiZSBoYW5kZWQgdG8gYW5cbiYjNDM7ICogZW5mb3JjZW1lbnQgcHJvZ3JhbSB0aHJvdWdoIGEgbWFwIGtwdHIgZmllbGQuICBUaGUgcmVmZXJlbmNlIG11c3RcbiYjNDM7ICogYmUgcmVsZWFzZWQgd2l0aCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBBIHJlZmVyZW5jZWQgcnVsZXNldCBoYW5kbGUsIG9yIE5VTEwgaWYgQGZkIGlzIG5vdCBhXG4mIzQzOyAqIHJlYWRhYmxlIExhbmRsb2NrIHJ1bGVzZXQgZmQgb3IgdGhlIExhbmRsb2NrIExTTSBpcyBub3QgZW5hYmxlZC5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG4mIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZClcbiYjNDM7e1xuJiM0MztcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3k7XG4mIzQzO1xuJiM0MztcdGlmIChzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKExTTV9JRF9MQU5ETE9DSywgZmQsIFx1MDAyNnBvbGljeSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcG9saWN5LmxhbmRsb2NrLnJ1bGVzZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgLSBQdXQgYSBMYW5kbG9jayBydWxlc2V0XG4mIzQzOyAqIEBydWxlc2V0OiBMYW5kbG9jayBydWxlc2V0IHRvIHB1dFxuJiM0MzsgKlxuJiM0MzsgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIGFjcXVpcmVkIHdpdGggYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldClcbiYjNDM7e1xuJiM0MztcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9O1xuJiM0MztcbiYjNDM7XHRzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoTFNNX0lEX0xBTkRMT0NLLCBcdTAwMjZwb2xpY3kpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSAtIEVuZm9yY2UgYSBMYW5kbG9jayBydWxlc2V0IG9uIGV4ZWNcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzXG4mIzQzOyAqIEBicHJtOiBleGVjdXRpb24gY29udGV4dCBwcm92aWRpbmcgdGhlIHByZXBhcmVkIGNyZWRlbnRpYWxzIHRvXG4mIzQzOyAqICAgICAgICByZXN0cmljdFxuJiM0MzsgKiBAcnVsZXNldDogTGFuZGxvY2sgcnVsZXNldCB0byBlbmZvcmNlXG4mIzQzOyAqIEBmbGFnczogbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncywgZXhjZXB0XG4mIzQzOyAqICAgICAgICAgJUxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNcbiYjNDM7ICpcbiYjNDM7ICogUmVzdHJpY3QgdGhlIGNyZWRlbnRpYWxzIHByZXBhcmVkIGluIEBicHJtIHdpdGggQHJ1bGVzZXQsIHNvIHRoYXRcbiYjNDM7ICogdGhlIGV4ZWN1dGVkIHRhc2sgc3RhcnRzIGNvbmZpbmVkIGJ5IGl0LCBmb2xsb3dpbmcgdGhlIHNhbWUgZG9tYWluXG4mIzQzOyAqIGNvbXBvc2l0aW9uIHJ1bGVzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikuICBUaGUgcmVzdHJpY3Rpb24gaXNcbiYjNDM7ICogc3RhZ2VkIGFuZCBvbmx5IGNvbW1pdHRlZCBhdCB0aGUgZXhlY3V0aW9uJiMzOTtzIHBvaW50IG9mIG5vIHJldHVybjogYW5cbiYjNDM7ICogZXhlY3V0aW9uIHRoYXQgZmFpbHMgYmVmb3JlIHRoYXQgcG9pbnQgaXMgdW5hZmZlY3RlZCwgYW5kIGEgbGF0ZXJcbiYjNDM7ICogY2FsbCBvbiB0aGUgc2FtZSBleGVjdXRpb24gcmVwbGFjZXMgYSBwcmV2aW91c2x5IHN0YWdlZFxuJiM0MzsgKiByZXN0cmljdGlvbi4gIEBydWxlc2V0IGlzIG9ubHkgYm9ycm93ZWQ6IHRoZSBjYWxsZXIga2VlcHMgaXRzXG4mIzQzOyAqIHJlZmVyZW5jZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgZmxhZ3MgYXBwbHkgd2l0aCB0aGVpciB1c3VhbFxuJiM0MzsgKiBzZW1hbnRpY3MuICBPbmx5ICVMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DIGlzIHJlamVjdGVkLCBhcyBpdFxuJiM0MzsgKiB0YXJnZXRzIHRoZSBjYWxsaW5nIHRocmVhZHMgcmF0aGVyIHRoYW4gdGhlIGV4ZWN1dGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBMYW5kbG9jayBMU00gaXMgbm90XG4mIzQzOyAqIGVuYWJsZWQsIC1FSU5WQUwgaWYgQGZsYWdzIGNvbnRhaW5zIGFuIHVuc3VwcG9ydGVkIGZsYWcsIG90aGVyXG4mIzQzOyAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlIGFzIGZvciBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihMU01fSURfTEFORExPQ0ssIGJwcm0sXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZwb2xpY3ksIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRGVzdHJ1Y3RvciBmb3IgcmVmZXJlbmNlZCBicGZfbGFuZGxvY2tfcnVsZXNldCBrcHRycy4gKi9cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcih2b2lkICpydWxlc2V0KVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07XG4mIzQzO1xuJiM0MztcdHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dChMU01fSURfTEFORExPQ0ssIFx1MDAyNnBvbGljeSk7XG4mIzQzO31cbiYjNDM7Q0ZJX05PU0VBTChicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcik7XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaWRzKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQsXG4mIzQzO1x0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQsIEtGX1JFTEVBU0UgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG4mIzQzO1xuJiM0MztCVEZfSURfTElTVChicGZfbGFuZGxvY2tfZHRvcl9pZHMpXG4mIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3IpXG4mIzQzO1xuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYyxcbiYjNDM7XHRcdCAgIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKVxuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHMsIGZ1bmMsXG4mIzQzO1x0XHQgICBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQlBGX1BST0dfVFlQRV9MU00gYW5kIEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCBzaGFyZSB0aGVpciBrZnVuY1xuJiM0MzsgKiBsb29rdXAgYnVja2V0cyB3aXRoIG90aGVyIHByb2dyYW0gdHlwZXMsIHNvIHJlc3RyaWN0aW5nIHRoZSBMU01cbiYjNDM7ICogcG9saWN5IGtmdW5jcyByZXF1aXJlcyBhIGZpbHRlci4gIEEgcnVsZXNldCBmZCBpcyBvbmx5IG1lYW5pbmdmdWxcbiYjNDM7ICogaW4gdGhlIGZkIHRhYmxlIG9mIHRoZSB0YXNrIHRoYXQgc2V0IHRoZSBydWxlc2V0IHVwLCBzb1xuJiM0MzsgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIGlzIGV4Y2x1c2l2ZSB0byBzeXNjYWxsXG4mIzQzOyAqIHByb2dyYW1zLCB3aGljaCBydW4gaW4gdGhhdCB0YXNrJiMzOTtzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cbiYjNDM7ICogdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaXQgbWVkaWF0ZXMuICBFbmZvcmNlbWVudCBpcyBleGNsdXNpdmUgdG9cbiYjNDM7ICogdGhlIHNsZWVwYWJsZSBicHJtIExTTSBob29rcyB0aGUgcG9saWN5IG9wZXJhdGlvbiBpcyBzcGVjaWZpZWRcbiYjNDM7ICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmVcbiYjNDM7ICogaGVsZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiYjNDM7e1xuJiM0MztcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2YnBmX2xhbmRsb2NrX2tmdW5jX2lkcywga2Z1bmNfaWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJvZy1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19UWVBFX1NZU0NBTEw6XG4mIzQzO1x0XHRpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHNbMF0pXG4mIzQzO1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbiYjNDM7XHRcdGlmIChrZnVuY19pZCA9PSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfaWRzWzBdKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQlBGX0xTTV9DR1JPVVAgcHJvZ3JhbXMgcnVuIHVuZGVyIGNsYXNzaWMgUkNVIGFuZFxuJiM0MztcdFx0ICogY2Fubm90IHNsZWVwLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19ob29rcyxcbiYjNDM7XHRcdFx0XHRcdCBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9sYW5kbG9ja19rZnVuY19zZXQgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LnNldCA9IFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19pZHMsXG4mIzQzO1x0LmZpbHRlciA9IGJwZl9sYW5kbG9ja19rZnVuY19maWx0ZXIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX3BvbGljeV9rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2xhbmRsb2NrX2R0b3JzW10gPSB7XG4mIzQzO1x0XHR7XG4mIzQzO1x0XHRcdC5idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMF0sXG4mIzQzO1x0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMV0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9sYW5kbG9ja19kdG9ycyxcbiYjNDM7XHRcdFx0XHRcdCAgIEFSUkFZX1NJWkUoYnBmX2xhbmRsb2NrX2R0b3JzKSxcbiYjNDM7XHRcdFx0XHRcdCAgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztsYXRlX2luaXRjYWxsKGJwZl9sc21fcG9saWN5X2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlIGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcbmluZGV4IGZmYTc2NDZkOTlmM2UuLjliYTI4YzA2YjVhYzIgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcbkBAIC0xNiwzICYjNDM7MTYsNSBAQCBsYW5kbG9jay0kKENPTkZJR19BVURJVCkgJiM0Mzs9IFxcXG4gXHRpZC5vIFxcXG4gXHRhdWRpdC5vIFxcXG4gXHRkb21haW4ub1xuJiM0MztcbiYjNDM7bGFuZGxvY2stJChDT05GSUdfQlBGX0xTTSkgJiM0Mzs9IGJwZi5vXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNmODkwNjJkMzVhNzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rc1xuJiM0MzsgKlxuJiM0MzsgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGhvb2tzIGJhY2tpbmcgdGhlIExhbmRsb2NrIGtmdW5jc1xuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sc21faG9va3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2xhbmRsb2NrLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NyZWQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsaW1pdHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtydWxlc2V0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c2V0dXAuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuJiM0MztcbiYjNDM7XHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChmZCwgRk1PREVfQ0FOX1JFQUQpO1xuJiM0MztcdGlmIChJU19FUlIocnVsZXNldCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihydWxlc2V0KTtcbiYjNDM7XG4mIzQzO1x0cG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQgPSAoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICopcnVsZXNldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaG9va19wb2xpY3lfa3B0cl9wdXQodW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9XG4mIzQzO1x0XHQoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktXHUwMDNlbGFuZGxvY2sucnVsZXNldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXkgYmUgY2FsbGVkIGZyb20gYSBCUEYgb2JqZWN0IGRlc3RydWN0b3IgdGhhdCBjYW5ub3Qgc2xlZXAsXG4mIzQzO1x0ICogd2hlcmVhcyBkcm9wcGluZyB0aGUgbGFzdCBydWxlc2V0IHJlZmVyZW5jZSBmcmVlcyBpdCBhbmQgbWF5XG4mIzQzO1x0ICogc2xlZXA6IGFsd2F5cyBkZWZlciB0aGUgZnJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChydWxlc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ2hhcmdpbmcgc2NvcGUgZm9yIHRoZSBCUEYtZHJpdmVuIGRvbWFpbiBhbGxvY2F0aW9uczogcm9vdCwgaS5lLiBub2JvZHkuICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7XHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiYjNDM7XHRcdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSxcbiYjNDM7XHRcdFx0XHRcdCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tXHUwMDNlY3JlZCk7XG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQgPVxuJiM0MztcdFx0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICopcG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQ7XG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIHJlc3RyaWN0aW9uO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICpvbGRfbWVtY2c7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTYW1lIGZsYWdzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMiksIGV4Y2VwdFxuJiM0MztcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkM6IHRoZSByZXN0cmljdGlvbiB0YXJnZXRzIHRoZVxuJiM0MztcdCAqIGV4ZWN1dGlvbiwgbm90IHRoZSBjYWxsaW5nIHRocmVhZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKChmbGFncyB8IExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNKSAhPVxuJiM0MztcdCAgICBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX0JJTlBSTSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBkb21haW4gY29uZmluZXMgdGhlIGV4ZWN1dGlvbiBvbiBiZWhhbGYgb2YgdGhlIEJQRlxuJiM0MztcdCAqIHByb2dyYW0sIG5vdCBvZiB0aGUgbWVkaWF0ZWQgdGFzazogZG8gbm90IGNoYXJnZSB0aGUgdGFzayYjMzk7c1xuJiM0MztcdCAqIG1lbWNnIGZvciBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKGdldF9icGZfbWVtY2coKSk7XG4mIzQzO1x0ZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZyZXN0cmljdGlvbik7XG4mIzQzO1x0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN0YWdlcyB0aGUgcmVzdHJpY3Rpb24gdW50aWwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZiB0aGVcbiYjNDM7XHQgKiBleGVjdXRpb24sIHJlcGxhY2luZyAoYW5kIHJlbGVhc2luZykgYW55IHByZXZpb3VzbHkgc3RhZ2VkXG4mIzQzO1x0ICogb25lLiAgTm90aGluZyBpcyBlbmZvcmNlZCB5ZXQ6IGFuIGV4ZWN1dGlvbiB0aGF0IGZhaWxzIGJlZm9yZVxuJiM0MztcdCAqIGNvbW1pdHRpbmcgaXRzIGNyZWRlbnRpYWxzIGRyb3BzIHRoZSBzdGFnZWQgcmVzdHJpY3Rpb24gaW5cbiYjNDM7XHQgKiBob29rX2NyZWRfZnJlZSgpIHdpdGggbm8gZWZmZWN0IG9uIHRoZSBjYWxsaW5nIHRhc2suXG4mIzQzO1x0ICovXG4mIzQzO1x0bGFuZGxvY2tfcHV0X3J1bGVzZXQoYnBybV9sbGNyZWQtXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4mIzQzO1x0YnBybV9sbGNyZWQtXHUwMDNlc3RhZ2VkID0gcmVzdHJpY3Rpb247XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tXHUwMDNlY3JlZCk7XG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIHJlc3RyaWN0aW9uO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZC5kb21haW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJlc3RyaWN0aW9uID0gYnBybV9sbGNyZWQtXHUwMDNlc3RhZ2VkO1xuJiM0MztcdGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4mIzQzO1xuJiM0MztcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGJwcm1fbGxjcmVkLCBcdTAwMjZyZXN0cmljdGlvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGxhbmRsb2NrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuJiM0MztcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKHBvbGljeV9rcHRyX3B1dCwgaG9va19wb2xpY3lfa3B0cl9wdXQpLFxuJiM0MztcdExTTV9IT09LX0lOSVQoYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyLCBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0ciksXG4mIzQzO1x0TFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHNlY3VyaXR5X2FkZF9ob29rcyhsYW5kbG9ja19ob29rcywgQVJSQVlfU0laRShsYW5kbG9ja19ob29rcyksXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmxhbmRsb2NrX2xzbWlkKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5oIGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lNTc3MjllNmE1NjQ0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuaFxuQEAgLTAsMCAmIzQzOzEsMjEgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rc1xuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxuJiM0MzsjZGVmaW5lIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9MU01cbiYjNDM7X19pbml0IHZvaWQgbGFuZGxvY2tfYWRkX2JwZl9ob29rcyh2b2lkKTtcbiYjNDM7I2Vsc2UgLyogQ09ORklHX0JQRl9MU00gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSCAqL1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xuaW5kZXggY2M0MTlkZTc1Y2Q2Yi4uZWZiZmQwYzIwNDc1MyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jXG5AQCAtOCwxNCAmIzQzOzgsMTE0IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sYW5kbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtjcmVkLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZG9tYWluLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtydWxlc2V0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzZXR1cC5oXCYjMzQ7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZSBhIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb25cbiYjNDM7ICpcbiYjNDM7ICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3Q6IHByb3ZpZGVzIHRoZSBwYXJlbnQgZG9tYWluIGFuZFxuJiM0MzsgKiAgICAgICAgICB0aGUgcHJldmlvdXMgbG9nIGNvbmZpZ3VyYXRpb24uICBOb3QgbW9kaWZpZWQuXG4mIzQzOyAqIEBydWxlc2V0OiBSdWxlc2V0IHRvIGVuZm9yY2UsIG9yIE5VTEwgZm9yIGEgbG9nLWNvbmZpZ3VyYXRpb24tb25seSBjaGFuZ2UuXG4mIzQzOyAqIEBmbGFnczogbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4mIzQzOyAqICAgICAgICAgdmFsaWRhdGluZyB0aGVtIGFnYWluc3QgdGhlIHNldCBvZiBmbGFncyBpdCBzdXBwb3J0cy5cbiYjNDM7ICogQHJlc3RyaWN0aW9uOiBDb21wdXRlZCByZXN0cmljdGlvbi4gIE9uIHN1Y2Nlc3MsIGhvbGRzIGEgcmVmZXJlbmNlIG9uXG4mIzQzOyAqICAgICAgICAgICAgICAgQHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiAoaWYgYW55KSwgd2hpY2hcbiYjNDM7ICogICAgICAgICAgICAgICBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpIHRyYW5zZmVycyB0byB0aGUgcmVzdHJpY3RlZFxuJiM0MzsgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmVzdHJpY3Rpb24gYnVpbGRzIG9uIEBsbGNyZWQmIzM5O3MgY3VycmVudCBzdGF0ZTogdGhlIGNhbGxlciBtdXN0IGFwcGx5XG4mIzQzOyAqIGl0IHRvIChvciBzdGFnZSBpdCBmb3IpIHRoZXNlIHNhbWUgY3JlZGVudGlhbHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKFxuJiM0MztcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQsIGNvbnN0IHUzMiBmbGFncyxcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHQvKiBUcmFuc2xhdGVzIFwmIzM0O29mZlwmIzM0OyBhbmQgXCYjMzQ7b25cJiMzNDsgZmxhZ3MgdG8gYm9vbGVhbnMuICovXG4mIzQzO1x0Y29uc3QgYm9vbCBsb2dfc2FtZV9leGVjID1cbiYjNDM7XHRcdCEoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NBTUVfRVhFQ19PRkYpO1xuJiM0MztcdGNvbnN0IGJvb2wgbG9nX25ld19leGVjID1cbiYjNDM7XHRcdCEhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XG4mIzQzO1x0Y29uc3QgYm9vbCBsb2dfc3ViZG9tYWlucyA9XG4mIzQzO1x0XHQhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XG4mIzQzO1x0Y29uc3QgYm9vbCBwcmV2X2xvZ19zdWJkb21haW5zID0gIWxsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7XG4mIzQzO1x0KnJlc3RyaWN0aW9uID0gKHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbil7fTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHRyZXN0cmljdGlvbi1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxuJiM0MztcdFx0XHRcdFx0ICAhbG9nX3N1YmRvbWFpbnM7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKCFydWxlc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IGxhbmRsb2NrX21lcmdlX3J1bGVzZXQobGxjcmVkLVx1MDAzZWRvbWFpbiwgcnVsZXNldCk7XG4mIzQzO1x0aWYgKElTX0VSUihyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pKSB7XG4mIzQzO1x0XHRjb25zdCBpbnQgZXJyID0gUFRSX0VSUihyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pO1xuJiM0MztcbiYjNDM7XHRcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHRyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zYW1lX2V4ZWMgPSBsb2dfc2FtZV9leGVjO1xuJiM0MztcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbi1cdTAwM2VoaWVyYXJjaHktXHUwMDNlbG9nX25ld19leGVjID0gbG9nX25ld19leGVjO1xuJiM0MztcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXHUwMDI2XHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxuJiM0MztcdFx0cmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfc3RhdHVzID1cbiYjNDM7XHRcdFx0TEFORExPQ0tfTE9HX0RJU0FCTEVEO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovXG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24gLSBFbmZvcmNlIGEgY29tcHV0ZWQgcmVzdHJpY3Rpb24gb24gY3JlZGVudGlhbHNcbiYjNDM7ICpcbiYjNDM7ICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXJcbiYjNDM7ICogICAgICAgICAgKHByZXBhcmVkIGFuZCBub3QgeWV0IGNvbW1pdHRlZCkuXG4mIzQzOyAqIEByZXN0cmljdGlvbjogUmVzdHJpY3Rpb24gY29tcHV0ZWQgYnkgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpXG4mIzQzOyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpc1xuJiM0MzsgKiAgICAgICAgICAgICAgIHRyYW5zZmVycmVkIHRvIEBsbGNyZWQuXG4mIzQzOyAqXG4mIzQzOyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnRcbiYjNDM7ICogb2YgZmFpbHVyZSwgZS5nLiBhbiBleGVjIHBvaW50IG9mIG5vIHJldHVybi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVVESVRcbiYjNDM7XHRsbGNyZWQtXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmID0gcmVzdHJpY3Rpb24tXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovXG4mIzQzO1xuJiM0MztcdGlmICghcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBSZXBsYWNlcyB0aGUgb2xkIGRvbWFpbi4gKi9cbiYjNDM7XHRsYW5kbG9ja19wdXRfcnVsZXNldChsbGNyZWQtXHUwMDNlZG9tYWluKTtcbiYjNDM7XHRsbGNyZWQtXHUwMDNlZG9tYWluID0gcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluO1xuJiM0MztcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IE5VTEw7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0FVRElUXG4mIzQzO1x0bGxjcmVkLVx1MDAzZWRvbWFpbl9leGVjIHw9IEJJVChsbGNyZWQtXHUwMDNlZG9tYWluLVx1MDAzZW51bV9sYXllcnMgLSAxKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3Qgb2xkKVxuIHtcbkBAIC0yNCw2ICYjNDM7MTI0LDEyIEBAIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFxuIFx0bGFuZGxvY2tfZ2V0X3J1bGVzZXQob2xkX2xsY3JlZC1cdTAwM2Vkb21haW4pO1xuIFx0KmxhbmRsb2NrX2NyZWQobmV3KSA9ICpvbGRfbGxjcmVkO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0LyogT25seSBicHJtIGNyZWRlbnRpYWxzIG93biBhIHN0YWdlZCByZXN0cmljdGlvbjogbmV2ZXIgY29waWVkLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShsYW5kbG9ja19jcmVkKG5ldyktXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4mIzQzO1x0bGFuZGxvY2tfY3JlZChuZXcpLVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuIH1cbiBcbiBzdGF0aWMgaW50IGhvb2tfY3JlZF9wcmVwYXJlKHN0cnVjdCBjcmVkICpjb25zdCBuZXcsXG5AQCAtMzUsMTAgJiM0MzsxNDEsMTQgQEAgc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjb25zdCBjcmVkKVxuIHtcbi1cdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBkb20gPSBsYW5kbG9ja19jcmVkKGNyZWQpLVx1MDAzZWRvbWFpbjtcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkID0gbGFuZGxvY2tfY3JlZChjcmVkKTtcbiYjNDM7XG4mIzQzO1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZWRvbWFpbik7XG4gXG4tXHRpZiAoZG9tKVxuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChkb20pO1xuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9MU01cbiYjNDM7XHQvKiBSZWxlYXNlcyBhIHJlc3RyaWN0aW9uIHN0YWdlZCBmb3IgYW4gYWJvcnRlZCBleGVjdXRpb24uICovXG4mIzQzO1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZXN0YWdlZC5kb21haW4pO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BVURJVFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaFxuaW5kZXggZjI4N2M1NmI1ZmQ0Yi4uNzRmOGM5ODA4ZGM0YyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXG5AQCAtMjAsNiAmIzQzOzIwLDMxIEBAXG4gI2luY2x1ZGUgXCYjMzQ7cnVsZXNldC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2V0dXAuaFwmIzM0O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZWQgY3JlZGVudGlhbCByZXN0cmljdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmVzdWx0IG9mIGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKTogdGhlIG5ldyBzdGF0ZSB0aGF0XG4mIzQzOyAqIGVuZm9yY2luZyBhIHJ1bGVzZXQgd2l0aCBhIHNldCBvZiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzXG4mIzQzOyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXNcbiYjNDM7ICogZW5mb3JjZWQgd2l0aCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpLCBlaXRoZXIgcmlnaHQgYXdheVxuJiM0MzsgKiAobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSkgb3IgYWZ0ZXIgYSBzdGFnaW5nIHBlcmlvZCAocmVzdHJpY3Rpb25cbiYjNDM7ICogb2YgYW4gZXhlY3V0aW9uKS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiB7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQGRvbWFpbjogTmV3IGRvbWFpbiB0byBlbmZvcmNlLCBvd25pbmcgYSByZWZlcmVuY2UuICBOVUxMIGlmIHRoZVxuJiM0MztcdCAqIHJlc3RyaWN0aW9uIG9ubHkgY2FycmllcyBhIGxvZyBjb25maWd1cmF0aW9uIGNoYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqZG9tYWluO1xuJiM0MzsjaWZkZWYgQ09ORklHX0FVRElUXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQGxvZ19zdWJkb21haW5zX29mZjogTmV3IHZhbHVlIG9mIHRoZSBjcmVkZW50aWFscyYjMzk7XG4mIzQzO1x0ICogQGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkubG9nX3N1YmRvbWFpbnNfb2ZmLlxuJiM0MztcdCAqL1xuJiM0MztcdHU4IGxvZ19zdWJkb21haW5zX29mZiA6IDE7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgLSBDcmVkZW50aWFsIHNlY3VyaXR5IGJsb2JcbiAgKlxuQEAgLTM1LDYgJiM0Mzs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7XG4gXHQgKi9cbiBcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBzdGFnZWQ6IFJlc3RyaWN0aW9uIHN0YWdlZCBieSB0aGUgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgaG9vayxcbiYjNDM7XHQgKiBvd25pbmcgaXRzIGRvbWFpbiByZWZlcmVuY2UgYW5kIGFwcGxpZWQgYXQgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZlxuJiM0MztcdCAqIHRoZSBleGVjdXRpb24gKGJwcm1fY29tbWl0dGluZ19jcmVkcykuICBPbmx5IGV2ZXIgc2V0IG9uIHRoZVxuJiM0MztcdCAqIGNyZWRlbnRpYWxzIHByZXBhcmVkIGZvciBhbiBleGVjdXRpb24sIGJldHdlZW4gdGhlIHN0YWdpbmcgYW5kXG4mIzQzO1x0ICogZWl0aGVyIHRoZSBhcHBsaWNhdGlvbiBvciB0aGUgcmVsZWFzZSBvZiB0aGUgYWJvcnRlZCBjcmVkZW50aWFscztcbiYjNDM7XHQgKiBjb21taXR0ZWQgdGFzayBjcmVkZW50aWFscyBuZXZlciBjYXJyeSBhIHN0YWdlZCByZXN0cmljdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gc3RhZ2VkO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19BVURJVFxuIFx0LyoqXG4gXHQgKiBAZG9tYWluX2V4ZWM6IEJpdG1hc2sgaWRlbnRpZnlpbmcgdGhlIGRvbWFpbiBsYXllcnMgdGhhdCB3ZXJlIGVuZm9yY2VkIGJ5XG5AQCAtNzUsNiAmIzQzOzExMiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGFuZGxvY2tfY3JlZF9jb3B5KHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpkc3QsXG4gXHQqZHN0ID0gKnNyYztcbiBcbiBcdGxhbmRsb2NrX2dldF9ydWxlc2V0KHNyYy1cdTAwM2Vkb21haW4pO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0LyogT25seSBicHJtIGNyZWRlbnRpYWxzIG93biBhIHN0YWdlZCByZXN0cmljdGlvbjogbmV2ZXIgY29waWVkLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShzcmMtXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4mIzQzO1x0ZHN0LVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfY3VycmVudF9kb21haW4odm9pZClcbkBAIC0xNTMsNiAmIzQzOzE5NiwxNCBAQCBsYW5kbG9ja19nZXRfYXBwbGljYWJsZV9zdWJqZWN0KGNvbnN0IHN0cnVjdCBjcmVkICpjb25zdCBjcmVkLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztpbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxuJiM0MztcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4mIzQzO1xuJiM0Mzt2b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4mIzQzO1xuIF9faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9jcmVkX2hvb2tzKHZvaWQpO1xuIFxuICNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQ1JFRF9IICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmggYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxuaW5kZXggMDhkNWYyZjZkMzIxYS4uMGJlZGZlNjUwZWEwNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxuQEAgLTM3LDYgJiM0MzszNywxMCBAQFxuICNkZWZpbmUgTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGXHRMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DXG4gI2RlZmluZSBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEZcdCgoTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGIFx1MDAzY1x1MDAzYyAxKSAtIDEpXG4gXG4mIzQzOy8qIFN1YnNldCBvZiB0aGUgcmVzdHJpY3Qtc2VsZiBmbGFncyBhcHBsaWNhYmxlIHRvIGFuIGV4ZWN1dGlvbi4gKi9cbiYjNDM7I2RlZmluZSBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX0JJTlBSTSBcXFxuJiM0MztcdChMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEYgXHUwMDI2IH5MQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DKVxuJiM0MztcbiAvKiBjbGFuZy1mb3JtYXQgb24gKi9cbiBcbiAjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0xJTUlUU19IICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG5pbmRleCA0ZGQwOWVhMjJjODQ0Li4xNzZjNjI2ZjlmMTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcbkBAIC01MjAsNyAmIzQzOzUyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcnVsZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqY29uc3Qgd29yaylcbiBcdGZyZWVfcnVsZXNldChydWxlc2V0KTtcbiB9XG4gXG4tLyogT25seSBjYWxsZWQgYnkgaG9va19jcmVkX2ZyZWUoKS4gKi9cbiYjNDM7LyogRm9yIGNvbnRleHRzIHRoYXQgY2Fubm90IHNsZWVwLCBlLmcuIGhvb2tfY3JlZF9mcmVlKCkuICovXG4gdm9pZCBsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldClcbiB7XG4gXHRpZiAocnVsZXNldCBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnJ1bGVzZXQtXHUwMDNldXNhZ2UpKSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oXG5pbmRleCAwNDM3YWRmMTc0Mjg3Li5iNjVkMWMwN2UxOTJkIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmhcbkBAIC0yMjUsNiAmIzQzOzIyNSw5IEBAIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpcbiBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBwYXJlbnQsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCk7XG4gXG4mIzQzO3N0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgY29uc3QgZm1vZGVfdCBtb2RlKTtcbiYjNDM7XG4gY29uc3Qgc3RydWN0IGxhbmRsb2NrX3J1bGUgKlxuIGxhbmRsb2NrX2ZpbmRfcnVsZShjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCxcbiBcdFx0ICAgY29uc3Qgc3RydWN0IGxhbmRsb2NrX2lkIGlkKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuY1xuaW5kZXggNDdkYWMxNzM2ZjEwMC4uM2I3ZTE4ZWRhZGZiYyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sc20uaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGYuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NvbW1vbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Y3JlZC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZXJyYXRhLmhcJiMzNDtcbkBAIC02OCw2ICYjNDM7NjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBsYW5kbG9ja19pbml0KHZvaWQpXG4gXHRsYW5kbG9ja19hZGRfdGFza19ob29rcygpO1xuIFx0bGFuZGxvY2tfYWRkX2ZzX2hvb2tzKCk7XG4gXHRsYW5kbG9ja19hZGRfbmV0X2hvb2tzKCk7XG4mIzQzO1x0bGFuZGxvY2tfYWRkX2JwZl9ob29rcygpO1xuIFx0bGFuZGxvY2tfaW5pdF9pZCgpO1xuIFx0bGFuZGxvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFx0cHJfaW5mbyhcJiMzNDtVcCBhbmQgcnVubmluZy5cXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmMgYi9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jXG5pbmRleCAzNmIwMjg5MmM2MmY1Li44OTk2MDFhZjdjNGUxIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xuQEAgLTI5Myw4ICYjNDM7MjkzLDggQEAgU1lTQ0FMTF9ERUZJTkUzKGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LFxuICAqIFJldHVybnMgYW4gb3duZWQgcnVsZXNldCBmcm9tIGEgRkQuIEl0IGlzIHRodXMgbmVlZGVkIHRvIGNhbGxcbiAgKiBsYW5kbG9ja19wdXRfcnVsZXNldCgpIG9uIHRoZSByZXR1cm4gdmFsdWUuXG4gICovXG4tc3RhdGljIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpnZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbi1cdFx0XHRcdFx0XHQgICAgY29uc3QgZm1vZGVfdCBtb2RlKVxuJiM0MztzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChjb25zdCBpbnQgZmQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSlcbiB7XG4gXHRDTEFTUyhmZCwgcnVsZXNldF9mKShmZCk7XG4gXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcbkBAIC00NzYsNyAmIzQzOzQ3Niw3IEBAIFNZU0NBTExfREVGSU5FNChsYW5kbG9ja19hZGRfcnVsZSwgY29uc3QgaW50LCBydWxlc2V0X2ZkLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdHJ1bGVzZXQgPSBnZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQsIEZNT0RFX0NBTl9XUklURSk7XG4mIzQzO1x0cnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1dSSVRFKTtcbiBcdGlmIChJU19FUlIocnVsZXNldCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xuIFxuQEAgLTUyOCw5ICYjNDM7NTI4LDggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXG4ge1xuIFx0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQgX19mcmVlKGxhbmRsb2NrX3B1dF9ydWxlc2V0KSA9IE5VTEw7XG4gXHRzdHJ1Y3QgY3JlZCAqbmV3X2NyZWQ7XG4tXHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqbmV3X2xsY3JlZDtcbi1cdGJvb2wgX19tYXliZV91bnVzZWQgbG9nX3NhbWVfZXhlYywgbG9nX25ld19leGVjLCBsb2dfc3ViZG9tYWlucyxcbi1cdFx0cHJldl9sb2dfc3ViZG9tYWlucztcbiYjNDM7XHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGlmICghaXNfaW5pdGlhbGl6ZWQoKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTU0NywxMyAmIzQzOzU0Niw2IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIFx0ICAgIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHQvKiBUcmFuc2xhdGVzIFwmIzM0O29mZlwmIzM0OyBmbGFnIHRvIGJvb2xlYW4uICovXG4tXHRsb2dfc2FtZV9leGVjID0gIShmbGFncyBcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU0FNRV9FWEVDX09GRik7XG4tXHQvKiBUcmFuc2xhdGVzIFwmIzM0O29uXCYjMzQ7IGZsYWcgdG8gYm9vbGVhbi4gKi9cbi1cdGxvZ19uZXdfZXhlYyA9ICEhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XG4tXHQvKiBUcmFuc2xhdGVzIFwmIzM0O29mZlwmIzM0OyBmbGFnIHRvIGJvb2xlYW4uICovXG4tXHRsb2dfc3ViZG9tYWlucyA9ICEoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NVQkRPTUFJTlNfT0ZGKTtcbi1cbiBcdC8qXG4gXHQgKiBJdCBpcyBhbGxvd2VkIHRvIHNldCBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiB3aXRoXG4gXHQgKiAtMSBhcyBydWxlc2V0X2ZkLCBvcHRpb25hbGx5IGNvbWJpbmVkIHdpdGhcbkBAIC01NjQsNyAmIzQzOzU1Niw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIFx0ICAgICAgKGZsYWdzIFx1MDAyNiB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgPT1cbiBcdFx0ICAgICAgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpKSB7XG4gXHRcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdFx0cnVsZXNldCA9IGdldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1JFQUQpO1xuJiM0MztcdFx0cnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIEZNT0RFX0NBTl9SRUFEKTtcbiBcdFx0aWYgKElTX0VSUihydWxlc2V0KSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihydWxlc2V0KTtcbiBcdH1cbkBAIC01NzQsNTMgJiM0Mzs1NjcsMjggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXG4gXHRpZiAoIW5ld19jcmVkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG5ld19sbGNyZWQgPSBsYW5kbG9ja19jcmVkKG5ld19jcmVkKTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRwcmV2X2xvZ19zdWJkb21haW5zID0gIW5ld19sbGNyZWQtXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmO1xuLVx0bmV3X2xsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxuLVx0XHRcdFx0XHQgIWxvZ19zdWJkb21haW5zO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbi1cbiBcdC8qXG4gXHQgKiBUaGUgb25seSBjYXNlIHdoZW4gYSBydWxlc2V0IG1heSBub3QgYmUgc2V0IGlzIGlmXG4gXHQgKiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiBpcyBzZXQgKG9wdGlvbmFsbHkgd2l0aFxuIFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZFxuIFx0ICogb3B0aW1pemUgdGhpcyBjYXNlIGJ5IG5vdCBjYWxsaW5nIGNvbW1pdF9jcmVkcygpIGlmIHRoaXMgZmxhZyB3YXNcbiBcdCAqIGFscmVhZHkgc2V0LCBidXQgaXQgaXMgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmQgbWFuaXB1bGF0aW5nXG4mIzQzO1x0ICogdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYmVjYXVzZSB0aGV5IGFyZSBkZWRpY2F0ZWQgcGVyIHRocmVhZC5cbiBcdCAqL1xuLVx0aWYgKHJ1bGVzZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmRcbi1cdFx0ICogbWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGJlY2F1c2UgdGhleSBhcmVcbi1cdFx0ICogZGVkaWNhdGVkIHBlciB0aHJlYWQuXG4tXHRcdCAqL1xuLVx0XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgbmV3X2RvbSA9XG4tXHRcdFx0bGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbiwgcnVsZXNldCk7XG4tXHRcdGlmIChJU19FUlIobmV3X2RvbSkpIHtcbi1cdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIobmV3X2RvbSk7XG4tXHRcdH1cbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zYW1lX2V4ZWMgPSBsb2dfc2FtZV9leGVjO1xuLVx0XHRuZXdfZG9tLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfbmV3X2V4ZWMgPSBsb2dfbmV3X2V4ZWM7XG4tXHRcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXHUwMDI2XHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxuLVx0XHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zdGF0dXMgPSBMQU5ETE9DS19MT0dfRElTQUJMRUQ7XG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuLVxuLVx0XHQvKiBSZXBsYWNlcyB0aGUgb2xkIChwcmVwYXJlZCkgZG9tYWluLiAqL1xuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbik7XG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluID0gbmV3X2RvbTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKG5ld19kb20tXHUwMDNlbnVtX2xheWVycyAtIDEpO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbiYjNDM7XHRlcnIgPSBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBydWxlc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgZmxhZ3MsIFx1MDAyNnJlc3RyaWN0aW9uKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBcdTAwMjZyZXN0cmljdGlvbik7XG4mIzQzO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DKSB7XG4tXHRcdGNvbnN0IGludCBlcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoXG4tXHRcdFx0Y3VycmVudF9jcmVkKCksIG5ld19jcmVkKTtcbiYjNDM7XHRcdGVyciA9IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcyhjdXJyZW50X2NyZWQoKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRuZXdfY3JlZCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZTlkOGM5NDkyYmRiMiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01NDQxLDYgJiM0Mzs1NDQxLDExMiBAQCBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludCBjYXApXG4gXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhicGZfdG9rZW5fY2FwYWJsZSwgdG9rZW4sIGNhcCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCgpIC0gR2V0IGFuIExTTSBwb2xpY3kgb2JqZWN0IGZyb20gYSBmZFxuJiM0MzsgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gYXNrZWQgdG8gaW50ZXJwcmV0IEBmZFxuJiM0MzsgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciByZWZlcnJpbmcgdG8gYSBwb2xpY3kgb2JqZWN0LCByZXNvbHZlZCBpbiB0aGVcbiYjNDM7ICogICAgICBjYWxsaW5nIHRhc2smIzM5O3MgZmlsZSBkZXNjcmlwdG9yIHRhYmxlXG4mIzQzOyAqIEBwb2xpY3k6IHJlY2VpdmVzIHRoZSByZWZlcmVuY2VkIHBvbGljeSBvYmplY3QgaW4gdGhlIG1lbWJlciBvZiB0aGVcbiYjNDM7ICogICAgICAgICAgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkXG4mIzQzOyAqXG4mIzQzOyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHRyYW5zbGF0ZSBAZmQgaW50byBhIHJlZmVyZW5jZVxuJiM0MzsgKiBjb3VudGVkIHBvbGljeSBvYmplY3QuICBUaGUgY2FsbGVyIG11c3Qgbm90IGRlcmVmZXJlbmNlIHRoZVxuJiM0MzsgKiByZXR1cm5lZCBoYW5kbGUsIG11c3Qgb25seSBoYW5kIGl0IGJhY2sgdG8gdGhlIHNhbWUgTFNNLCBlLmcuXG4mIzQzOyAqIHRocm91Z2ggc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCksIGFuZCBtdXN0IHJlbGVhc2UgaXRcbiYjNDM7ICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2ZcbiYjNDM7ICogdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpcyBjYWxsZWQuICBUaGUgaG9vayBpcyBvbmx5IGNhbGxlZFxuJiM0MzsgKiBmcm9tIGEgY29udGV4dCB0aGF0IG1heSBzbGVlcC5cbiYjNDM7ICpcbiYjNDM7ICogQW4gaW1wbGVtZW50YXRpb24gbXVzdCBmaWxsIGl0cyBvd24gbWVtYmVyIG9mIEBwb2xpY3kgd2l0aCBhXG4mIzQzOyAqIHJlZmVyZW5jZSB0aGF0IHJlbWFpbnMgdmFsaWQgdW50aWwgaXQgaXMgcmVsZWFzZWQgdGhyb3VnaCB0aGVcbiYjNDM7ICogcG9saWN5X2twdHJfcHV0IGhvb2ssIGFuZCBtdXN0IG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgQGZkIGJleW9uZFxuJiM0MzsgKiB3aGF0IGl0cyBvd24gdXNlcnNwYWNlIEFQSSBjcmVhdGVkIGl0IHdpdGguXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIEBwb2xpY3kgaG9sZHMgYSByZWZlcmVuY2UgY291bnRlZCBwb2xpY3lcbiYjNDM7ICogb2JqZWN0LCAtRU9QTk9UU1VQUCBpZiB0aGUgTFNNIGRvZXMgbm90IGltcGxlbWVudCB0aGUgaG9vaywgbmVnYXRpdmVcbiYjNDM7ICogdmFsdWVzIG9uIG90aGVyIGZhaWx1cmVzLlxuJiM0MzsgKi9cbiYjNDM7aW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsXG4mIzQzO1x0XHRcdFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4mIzQzO1xuJiM0MztcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBwb2xpY3lfa3B0cl9mcm9tX2ZkKSB7XG4mIzQzO1x0XHRpZiAoc2NhbGwtXHUwMDNlaGwtXHUwMDNlbHNtaWQtXHUwMDNlaWQgIT0gbHNtaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmV0dXJuIHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2sucG9saWN5X2twdHJfZnJvbV9mZChmZCwgcG9saWN5KTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIExTTV9SRVRfREVGQVVMVChwb2xpY3lfa3B0cl9mcm9tX2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpIC0gUHV0IGEgcmVmZXJlbmNlIG9uIGFuIExTTSBwb2xpY3kgb2JqZWN0XG4mIzQzOyAqIEBsc21pZDogTFNNX0lEXyogdmFsdWUgb2YgdGhlIExTTSBvd25pbmcgQHBvbGljeVxuJiM0MzsgKiBAcG9saWN5OiB0aGUgcG9saWN5IG9iamVjdCwgaW4gdGhlIG1lbWJlciBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogICAgICAgICAgQGxzbWlkXG4mIzQzOyAqXG4mIzQzOyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgcHJldmlvdXNseSBvYnRhaW5lZCB3aXRoXG4mIzQzOyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb25cbiYjNDM7ICogb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpcyBjYWxsZWQsIGFuZCBAcG9saWN5IG11c3QgaGF2ZVxuJiM0MzsgKiBiZWVuIG9idGFpbmVkIGZyb20gdGhhdCBzYW1lIExTTS4gIEFuIGltcGxlbWVudGF0aW9uIG11c3Qgc3VwcG9ydFxuJiM0MzsgKiBiZWluZyBjYWxsZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBjYW5ub3Qgc2xlZXA6IHRoZSByZWxlYXNlIG9mIEJQRlxuJiM0MzsgKiBtYW5hZ2VkIHJlZmVyZW5jZXMgbWF5IGJlIGRyaXZlbiBmcm9tIG9iamVjdCBkZXN0cnVjdG9ycy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbiYjNDM7XG4mIzQzO1x0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX3B1dCkge1xuJiM0MztcdFx0aWYgKHNjYWxsLVx1MDAzZWhsLVx1MDAzZWxzbWlkLVx1MDAzZWlkICE9IGxzbWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2sucG9saWN5X2twdHJfcHV0KHBvbGljeSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdC8qIEEgaGVsZCByZWZlcmVuY2UgaW1wbGllcyB0aGUgbWF0Y2hpbmcgTFNNIGltcGxlbWVudHMgdGhlIGhvb2suICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgLSBFbmZvcmNlIGEgcG9saWN5IG9uIGV4ZWMgY3JlZGVudGlhbHNcbiYjNDM7ICogQGxzbWlkOiBMU01fSURfKiB2YWx1ZSBvZiB0aGUgTFNNIG93bmluZyBAcG9saWN5XG4mIzQzOyAqIEBicHJtOiBleGVjdXRpb24gY29udGV4dCBwcm92aWRpbmcgdGhlIHByZXBhcmVkIGNyZWRlbnRpYWxzIHRvIHJlc3RyaWN0XG4mIzQzOyAqIEBwb2xpY3k6IHRoZSBwb2xpY3kgb2JqZWN0IHRvIGVuZm9yY2UsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTVxuJiM0MzsgKiAgICAgICAgICBpZGVudGlmaWVkIGJ5IEBsc21pZFxuJiM0MzsgKiBAZmxhZ3M6IExTTS1zcGVjaWZpYyBlbmZvcmNlbWVudCBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBBc2sgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCB0byByZXN0cmljdCB0aGUgY3JlZGVudGlhbHNcbiYjNDM7ICogcHJlcGFyZWQgaW4gQGJwcm0gd2l0aCBAcG9saWN5LCBzbyB0aGF0IHRoZSBleGVjdXRlZCB0YXNrIHN0YXJ0c1xuJiM0MzsgKiBjb25maW5lZCBieSBpdC4gIEBwb2xpY3kgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgZnJvbSB0aGUgc2FtZSBMU01cbiYjNDM7ICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCk7IHRoZSBob29rIGJvcnJvd3MgdGhlXG4mIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciByZW1haW5zIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgaXQuXG4mIzQzOyAqIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpc1xuJiM0MzsgKiBjYWxsZWQ6IGFuIExTTSBuZXZlciByZWNlaXZlcyBhIHBvbGljeSBvYmplY3QgbWVhbnQgZm9yIGFub3RoZXIgTFNNLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGhvb2sgbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYW4gZXhlYyBzZWN1cml0eSBjb250ZXh0IHdoZXJlXG4mIzQzOyAqIEBicHJtJiMzOTtzIGNyZWRlbnRpYWxzIGFyZSBwcmVwYXJlZCBidXQgbm90IHlldCBjb21taXR0ZWQsIGkuZS4gZnJvbSBhXG4mIzQzOyAqIGJwcm1fY3JlZHNfZm9yX2V4ZWMoKSBvciBicHJtX2NyZWRzX2Zyb21fZmlsZSgpIGhvb2suXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBAcG9saWN5IGNvbXBvc2VzIHdpdGggcmVzdHJpY3Rpb25zIHRoZSBjcmVkZW50aWFscyBhbHJlYWR5XG4mIzQzOyAqIGNhcnJ5IGlzIGRlZmluZWQgYnkgdGhlIGltcGxlbWVudGluZyBMU00sIGFzIGlzIHRoZSBtZWFuaW5nIG9mXG4mIzQzOyAqIEBmbGFncywgdW5zdXBwb3J0ZWQgdmFsdWVzIG9mIHdoaWNoIGl0IG11c3QgcmVqZWN0IHdpdGggLUVJTlZBTC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIExTTSBkb2VzIG5vdFxuJiM0MzsgKiBpbXBsZW1lbnQgdGhlIGhvb2ssIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBmYWlsdXJlcy5cbiYjNDM7ICovXG4mIzQzO2ludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbiYjNDM7XG4mIzQzO1x0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cikge1xuJiM0MztcdFx0aWYgKHNjYWxsLVx1MDAzZWhsLVx1MDAzZWxzbWlkLVx1MDAzZWlkICE9IGxzbWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJldHVybiBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihicHJtLCBwb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTFNNX1JFVF9ERUZBVUxUKGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2VjdXJpdHlfYnBmX21hcF9mcmVlKCkgLSBGcmVlIGEgYnBmIG1hcCYjMzk7cyBMU00gYmxvYlxuICAqIEBtYXA6IGJwZiBtYXBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuaW5kZXggZWE3MDQ0ZjMwYWRjMy4uMmZhNzM0NDk3NDYxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbkBAIC0xMjAsNiAmIzQzOzEyMCw3IEBAIENPTkZJR19TQU1QTEVTPXlcbiBDT05GSUdfU0FNUExFX0xJVkVQQVRDSD1tXG4gQ09ORklHX1NFQ1VSSVRZPXlcbiBDT05GSUdfU0VDVVJJVFlGUz15XG4mIzQzO0NPTkZJR19TRUNVUklUWV9MQU5ETE9DSz15XG4gQ09ORklHX1NZTl9DT09LSUVTPXlcbiBDT05GSUdfVEVTVF9CUEY9bVxuIENPTkZJR19VRE1BQlVGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XG5pbmRleCA1MjNlMGQyOWJiZDQzLi4yYzRkODU3ZjY5ZjU0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjRcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XG5AQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBDT05GSUdfTEVHQUNZX1ZTWVNDQUxMX05PTkU9eVxuIENPTkZJR19MT0dfQlVGX1NISUZUPTIxXG4gQ09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0wXG4gQ09ORklHX0xPR089eVxuLUNPTkZJR19MU009XCYjMzQ7c2VsaW51eCxicGYsaW50ZWdyaXR5XCYjMzQ7XG4mIzQzO0NPTkZJR19MU009XCYjMzQ7bGFuZGxvY2ssc2VsaW51eCxicGYsaW50ZWdyaXR5XCYjMzQ7XG4gQ09ORklHX01BQ19QQVJUSVRJT049eVxuIENPTkZJR19NQUdJQ19TWVNSUT15XG4gQ09ORklHX01DT1JFMj15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jOTE5MjlmOThlODhlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jXG5AQCAtMCwwICYjNDM7MSwzMjkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXHUwMDNlICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sYW5kbG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3Muc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBGYWxsYmFja3MgZm9yIG9sZCBzeXN0ZW0gaGVhZGVycy4gKi9cbiYjNDM7I2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTlxuJiM0MzsjZGVmaW5lIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OICgxVSBcdTAwM2NcdTAwM2MgMSlcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xuJiM0MzsjZGVmaW5lIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgKDFVIFx1MDAzY1x1MDAzYyAzKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3J1bGVzZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC5oYW5kbGVkX2FjY2Vzc19mcyA9IExBTkRMT0NLX0FDQ0VTU19GU19XUklURV9GSUxFLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfbGFuZGxvY2tfY3JlYXRlX3J1bGVzZXQsIFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlc2V0X3Byb2dfc3RhdGUoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vub19ydWxlc2V0ID0gZmFsc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3RfZXJyID0gLTE7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3QyX2VyciA9IC0xO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWtmdW5jX2ZsYWdzID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vkb3VibGVfY2FsbCA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSdW5zIHRoZSBzeXNjYWxsIHByb2dyYW0gdGhhdCBhY3F1aXJlcyB0aGUgcnVsZXNldCBmcm9tXG4mIzQzOyAqIEBydWxlc2V0X2ZkLCBpbiB0aGUgcnVubmVyJiMzOTtzIGZkIHRhYmxlLCBhbmQgcGFya3MgaXQgaW4gdGhlIG1hcCBrcHRyXG4mIzQzOyAqIHNsb3QgZm9yIHRoZSBMU00gcHJvZ3JhbS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbG9hZF9ydWxlc2V0X2ludG9fbWFwKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MubG9hZF9ydWxlc2V0KSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9ydWxlc2V0X3J1blwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O2xvYWRfcnVsZXNldF9yZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWdvdF9udWxsX2Zvcl9iYWRfZmQsIFwmIzM0O2JhZF9mZF9udWxsXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRm9ya3MgYSBjaGlsZCB0aGF0IGV4ZWNzIFwmIzM0O3NoIC1jICYjMzk7XHUwMDNjc2hlbGxfY21kXHUwMDNlJiMzOTtcJiMzNDsuICBUaGUgbW9uaXRvcmVkIHBpZFxuJiM0MzsgKiBpcyBvbmx5IGtub3duLCBhbmQgY2FuIG9ubHkgYmUgcHVibGlzaGVkIHRvIHRoZSBCUEYgcHJvZ3JhbSwgb25jZVxuJiM0MzsgKiB0aGUgY2hpbGQgZXhpc3RzOiB0aGUgY2hpbGQgd2FpdHMgb24gYSBwaXBlIHVudGlsIHRoZSBwYXJlbnQgaGFzXG4mIzQzOyAqIHVwZGF0ZWQgaXQuICBSZXR1cm5zIHRoZSBjaGlsZCYjMzk7cyBleGl0IHN0YXR1cywgb3IgLTEgb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ1bl9leGVjX2NoaWxkKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsLFxuJiM0MztcdFx0XHQgIGJvb2wgbW9uaXRvcmVkLCBjb25zdCBjaGFyICpzaGVsbF9jbWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcGlwZV9mZHNbMl0sIHN0YXR1cztcbiYjNDM7XHRjaGFyIGJ1ZiA9IDA7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgXCYjMzQ7cGlwZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHBpZCA9IGZvcmsoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwmIzM0O2ZvcmtcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2Zkc1swXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0Y2hhciAqYXJndltdID0geyBcJiMzNDtzaFwmIzM0OywgXCYjMzQ7LWNcJiMzNDssIChjaGFyICopc2hlbGxfY21kLCBOVUxMIH07XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9mZHNbMV0pO1xuJiM0MztcdFx0cmVhZChwaXBlX2Zkc1swXSwgXHUwMDI2YnVmLCAxKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbiYjNDM7XHRcdGV4ZWN2KFwmIzM0Oy9iaW4vc2hcJiMzNDssIGFyZ3YpO1xuJiM0MztcdFx0ZXhpdCgxMjcpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShwaXBlX2Zkc1swXSk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IG1vbml0b3JlZCA/IHBpZCA6IDA7XG4mIzQzO1x0d3JpdGUocGlwZV9mZHNbMV0sIFx1MDAyNmJ1ZiwgMSk7XG4mIzQzO1x0Y2xvc2UocGlwZV9mZHNbMV0pO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcJiMzNDt3YWl0cGlkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcJiMzNDtjaGlsZF9leGl0ZWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFeGl0IGNvZGVzOiA0ID0gdW5leHBlY3RlZCB3cml0ZSBvdXRjb21lLCAwID0gZXZlcnl0aGluZyBhc1xuJiM0MzsgKiBleHBlY3RlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGZvcm1hdF9jaGlsZF9jbWQoY2hhciAqY21kLCBzaXplX3QgbGVuLCBib29sIGV4cGVjdF93cml0ZV9vayxcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBjaGFyICp0bXBfcGF0aClcbiYjNDM7e1xuJiM0MztcdGlmIChleHBlY3Rfd3JpdGVfb2spXG4mIzQzO1x0XHRzbnByaW50ZihjbWQsIGxlbiwgXCYjMzQ7ZWNobyB4IFx1MDAzZSAlcyB8fCBleGl0IDQ7IGV4aXQgMFwmIzM0OywgdG1wX3BhdGgpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNucHJpbnRmKGNtZCwgbGVuLFxuJiM0MztcdFx0XHQgXCYjMzQ7aWYgZWNobyB4IFx1MDAzZSAlcyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuIGV4aXQgNDsgZmk7IGV4aXQgMFwmIzM0OyxcbiYjNDM7XHRcdFx0IHRtcF9wYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9yZXN0cmljdF9iaW5wcm0odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsID0gTlVMTDtcbiYjNDM7XHRjaGFyIHRtcF9wYXRoW10gPSBcJiMzNDsvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRjaGFyIGNtZFsyNTZdO1xuJiM0MztcdGludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDtcbiYjNDM7XG4mIzQzO1x0dG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcJiMzNDtta3N0ZW1wXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRjbG9zZSh0bXBfZmQpO1xuJiM0MztcbiYjNDM7XHRydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTtcbiYjNDM7XHRpZiAocnVsZXNldF9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PU1lTKVxuJiM0MztcdFx0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdEFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCBcJiMzNDtsYW5kbG9ja19jcmVhdGVfcnVsZXNldFwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxpbms7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2VsID0gbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVsZXNldF9mZCA9IHJ1bGVzZXRfZmQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2F0dGFjaChza2VsKSwgXCYjMzQ7c2tlbF9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsb2FkX3J1bGVzZXRfaW50b19tYXAoc2tlbCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udHJvbDogYW4gdW5tb25pdG9yZWQgZXhlY3V0aW9uIG1heSB3cml0ZSB0byB0aGUgdG1wIGZpbGUuICovXG4mIzQzO1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbiYjNDM7XHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCBmYWxzZSwgY21kKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O2NvbnRyb2xfY2hpbGRfZXhpdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcJiMzNDtjb250cm9sX25vdF9tb25pdG9yZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgbW9uaXRvcmVkIGV4ZWN1dGlvbiBzdGFydHMgbGFuZGxvY2tlZDogdGhlIHJ1bGVzZXQgaGFuZGxlc1xuJiM0MztcdCAqIExBTkRMT0NLX0FDQ0VTU19GU19XUklURV9GSUxFIHdpdGhvdXQgYW55IHJ1bGUsIHNvIHRoZSB3cml0ZVxuJiM0MztcdCAqIG11c3QgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7cmVzdHJpY3RlZF9jaGlsZF9leGl0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxlZCwgXCYjMzQ7bHNtX3Byb2dfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlbm9fcnVsZXNldCwgXCYjMzQ7cnVsZXNldF9pbl9tYXBcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwmIzM0O3Jlc3RyaWN0X2JpbnBybVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBhdWRpdCBsb2cgZmxhZ3Mgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBhcHBseSB0b28uICovXG4mIzQzO1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VrZnVuY19mbGFncyA9IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OO1xuJiM0MztcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7bG9nX2ZsYWdzX2NoaWxkX2V4aXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXCYjMzQ7bG9nX2ZsYWdzX3Jlc3RyaWN0X2JpbnBybVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyB0YXJnZXRzIHRoZSBjYWxsaW5nIHRocmVhZHMsIG5vdFxuJiM0MztcdCAqIGFuIGV4ZWN1dGlvbjogdGhlIGtmdW5jIG11c3QgcmVqZWN0IGl0IGFuZCB0aGUgZXhlY3V0aW9uIG11c3RcbiYjNDM7XHQgKiBzdGF5IHVucmVzdHJpY3RlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWtmdW5jX2ZsYWdzID0gTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQztcbiYjNDM7XHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcbiYjNDM7XHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7dHN5bmNfY2hpbGRfZXhpdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQsIFwmIzM0O3RzeW5jX3Byb2dfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3RfZXJyLCAtRUlOVkFMLCBcJiMzNDt0c3luY19yZWplY3RlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBzZWNvbmQgY2FsbCBvbiB0aGUgc2FtZSBleGVjdXRpb24gcmVwbGFjZXMgdGhlIHN0YWdlZFxuJiM0MztcdCAqIGRvbWFpbiAoYW5kIHJlbGVhc2VzIHRoZSBmaXJzdCBvbmUpOiB0aGUgcmVzdWx0IGlzIGEgc2luZ2xlXG4mIzQzO1x0ICogcmVzdHJpY3Rpb24sIG5vdCBhbiBlcnJvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRvdWJsZV9jYWxsID0gdHJ1ZTtcbiYjNDM7XHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIGZhbHNlLCB0bXBfcGF0aCk7XG4mIzQzO1x0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O2RvdWJsZV9jaGlsZF9leGl0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwmIzM0O2RvdWJsZV9yZXN0cmljdF9maXJzdFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0Ml9lcnIsIDAsIFwmIzM0O2RvdWJsZV9yZXN0cmljdF9zZWNvbmRcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0bHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTtcbiYjNDM7XHRjbG9zZShydWxlc2V0X2ZkKTtcbiYjNDM7b3V0X3VubGluazpcbiYjNDM7XHR1bmxpbmsodG1wX3BhdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkXG4mIzQzOyAqIGRvbWFpbiByZWxlYXNlZCwgd2hlbiB0aGUgZXhlY3V0aW9uIGZhaWxzIGFmdGVyIHRoZSBicHJtIGhvb2s6IHRoZVxuJiM0MzsgKiBjYWxsaW5nIHRhc2sgbXVzdCBub3QgZW5kIHVwIGxhbmRsb2NrZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3Jlc3RyaWN0X2JpbnBybV9kaXNjYXJkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0Y2hhciB0bXBfcGF0aFtdID0gXCYjMzQ7L3RtcC9sc21fcG9saWN5X2tmdW5jc19YWFhYWFhcJiMzNDs7XG4mIzQzO1x0Y2hhciBnYXJiYWdlX3BhdGhbXSA9IFwmIzM0Oy90bXAvbHNtX3BvbGljeV9nYXJiYWdlX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRpbnQgcnVsZXNldF9mZCA9IC0xLCB0bXBfZmQsIGdhcmJhZ2VfZmQsIHBpcGVfZmRzWzJdLCBzdGF0dXM7XG4mIzQzO1x0Y2hhciBidWYgPSAwO1xuJiM0MztcdHBpZF90IHBpZDtcbiYjNDM7XG4mIzQzO1x0dG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcJiMzNDtta3N0ZW1wXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRjbG9zZSh0bXBfZmQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIGV4ZWN1dGFibGUgZmlsZSB0aGF0IG5vIGJpbmZtdCBoYW5kbGVyIGFjY2VwdHM6IHRoZSBleGVjXG4mIzQzO1x0ICogZmFpbHMgd2l0aCBFTk9FWEVDIGFmdGVyIGJwcm1fY3JlZHNfZm9yX2V4ZWMoKSBoYXMgcnVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGdhcmJhZ2VfZmQgPSBta3N0ZW1wKGdhcmJhZ2VfcGF0aCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZ2FyYmFnZV9mZCwgMCwgXCYjMzQ7bWtzdGVtcF9nYXJiYWdlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X3VubGluaztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUSh3cml0ZShnYXJiYWdlX2ZkLCBcJiMzNDtqdW5rXFxuXCYjMzQ7LCA1KSwgNSwgXCYjMzQ7d3JpdGVfZ2FyYmFnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGNsb3NlKGdhcmJhZ2VfZmQpO1xuJiM0MztcdFx0Z290byBvdXRfdW5saW5rO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhmY2htb2QoZ2FyYmFnZV9mZCwgMDcwMCksIFwmIzM0O2NobW9kX2dhcmJhZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShnYXJiYWdlX2ZkKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubGluaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZ2FyYmFnZV9mZCk7XG4mIzQzO1xuJiM0MztcdHJ1bGVzZXRfZmQgPSBjcmVhdGVfcnVsZXNldCgpO1xuJiM0MztcdGlmIChydWxlc2V0X2ZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpXG4mIzQzO1x0XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0QVNTRVJUX0dFKHJ1bGVzZXRfZmQsIDAsIFwmIzM0O2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0XCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubGluaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VydWxlc2V0X2ZkID0gcnVsZXNldF9mZDtcbiYjNDM7XHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19hdHRhY2goc2tlbCksIFwmIzM0O3NrZWxfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9hZF9ydWxlc2V0X2ludG9fbWFwKHNrZWwpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9mZHMpLCBcJiMzNDtwaXBlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0Y2hhciAqYXJndltdID0geyBcJiMzNDtnYXJiYWdlXCYjMzQ7LCBOVUxMIH07XG4mIzQzO1x0XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9mZHNbMV0pO1xuJiM0MztcdFx0cmVhZChwaXBlX2Zkc1swXSwgXHUwMDI2YnVmLCAxKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbiYjNDM7XHRcdGV4ZWN2KGdhcmJhZ2VfcGF0aCwgYXJndik7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGZhaWxlZCBleGVjdXRpb24gbXVzdCBsZWF2ZSBubyB0cmFjZTogbm9cbiYjNDM7XHRcdCAqIExhbmRsb2NrIGRvbWFpbiwgaS5lLiB3cml0aW5nIG11c3Qgc3RpbGwgd29ya1xuJiM0MztcdFx0ICogKGV4aXQgNikuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZkID0gb3Blbih0bXBfcGF0aCwgT19XUk9OTFkgfCBPX1RSVU5DKTtcbiYjNDM7XHRcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0ZXhpdCg2KTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdGV4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gcGlkO1xuJiM0MztcdHdyaXRlKHBpcGVfZmRzWzFdLCBcdTAwMjZidWYsIDEpO1xuJiM0MztcdGNsb3NlKHBpcGVfZmRzWzFdKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCYjMzQ7d2FpdHBpZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcJiMzNDtjaGlsZF9leGl0ZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIDAsIFwmIzM0O2Rpc2NhcmRfY2hpbGRfZXhpdFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcJiMzNDtsc21fcHJvZ19jYWxsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwmIzM0O3Jlc3RyaWN0X2JpbnBybVwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdGlmIChydWxlc2V0X2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHJ1bGVzZXRfZmQpO1xuJiM0MztvdXRfdW5saW5rOlxuJiM0MztcdHVubGluayhnYXJiYWdlX3BhdGgpO1xuJiM0MztcdHVubGluayh0bXBfcGF0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9sc21fcG9saWN5X2tmdW5jcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmVzdHJpY3RfYmlucHJtXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfcmVzdHJpY3RfYmlucHJtKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmVzdHJpY3RfYmlucHJtX2Rpc2NhcmRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9yZXN0cmljdF9iaW5wcm1fZGlzY2FyZCgpO1xuJiM0MztcdFJVTl9URVNUUyhsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDMzNWRiNTQ3MDQwMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuY1xuQEAgLTAsMCAmIzQzOzEsMTAwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVx1MDAzZSAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQ7XG4mIzQzO1xuJiM0MztleHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcbiYjNDM7YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkXG4mIzQzO2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQpIF9fa3N5bTtcbiYjNDM7ZXh0ZXJuIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsXG4mIzQzO1x0XHRcdFx0XHR1MzIgZmxhZ3MpIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBMU00gcG9saWN5IGtmdW5jcyBhcmUgbGltaXRlZCB0byBMU00gYW5kIHN5c2NhbGwgcHJvZ3JhbXMgYnlcbiYjNDM7ICogdGhlIEJQRi1zaWRlIGtmdW5jIGZpbHRlcjogYSB0cmFjaW5nIHByb2dyYW0gY2FsbGluZyBvbmUgbXVzdCBmYWlsXG4mIzQzOyAqIHZlcmlmaWNhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvdGFza19uZXd0YXNrXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuJiM0MztcbiYjNDM7XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xuJiM0MztcdGlmIChydWxlc2V0KVxuJiM0MztcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHJ1bGVzZXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0XG4mIzQzOyAqIHNldCB0aGUgcnVsZXNldCB1cDogdGhlIGFjcXVpcmUga2Z1bmMgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGxcbiYjNDM7ICogcHJvZ3JhbXMgYW5kIG11c3QgYmUgcmVqZWN0ZWQgaW4gYW4gTFNNIHByb2dyYW0sIGV2ZW4gb24gYW5cbiYjNDM7ICogYWxsb3dlZCBob29rLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O2xzbS5zL2Jwcm1fY3JlZHNfZm9yX2V4ZWNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7XG4mIzQzO1xuJiM0MztcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG4mIzQzO1x0aWYgKHJ1bGVzZXQpXG4mIzQzO1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVuZm9yY2VtZW50IG5lZWRzIGFuIGV4ZWN1dGlvbiB0byByZXN0cmljdDogdGhlIGVuZm9yY2VtZW50IGtmdW5jXG4mIzQzOyAqIGlzIGV4Y2x1c2l2ZSB0byB0aGUgc2xlZXBhYmxlIGJwcm0gTFNNIGhvb2tzIGFuZCBtdXN0IGJlIHJlamVjdGVkXG4mIzQzOyAqIGluIGEgc3lzY2FsbCBwcm9ncmFtLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtIGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxuJiM0MztpbnQgc3lzY2FsbF9yZXN0cmljdCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShOVUxMLCBOVUxMLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQW55IExTTSBhdHRhY2ggcG9pbnQgb3RoZXIgdGhhbiB0aGUgc2xlZXBhYmxlIGJwcm0gaG9va3MgbXVzdCBiZVxuJiM0MzsgKiByZWplY3RlZC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtsc20ucy9maWxlX29wZW5cJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgaXMgbm90IGFsbG93ZWRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh3cm9uZ19ob29rLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChOVUxMKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGtmdW5jcyBtYXkgc2xlZXA6IGEgbm9uLXNsZWVwYWJsZSBwcm9ncmFtIG9uIGFuIGFsbG93ZWQgaG9va1xuJiM0MzsgKiBtdXN0IGJlIHJlamVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O2xzbS9icHJtX2NyZWRzX2Zvcl9leGVjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7X19tc2coXCYjMzQ7cHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhub25zbGVlcGFibGVfcHJvZywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7e1xuJiM0MztcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChOVUxMKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gYWNxdWlyZWQgcnVsZXNldCByZWZlcmVuY2UgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgcmV0dXJuaW5nLiAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlXCYjMzQ7KVxuJiM0MztpbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEwNzIwNmFlMTQ0ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuY1xuQEAgLTAsMCAmIzQzOzEsMTA3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVx1MDAzZSAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuJiM0MztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG4mIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xuJiM0MztleHRlcm4gdm9pZFxuJiM0MzticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KSBfX2tzeW07XG4mIzQzO2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LFxuJiM0MztcdFx0XHRcdFx0dTMyIGZsYWdzKSBfX2tzeW07XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnVsZXNldF9zbG90IHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgX19rcHRyICpydWxlc2V0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgcnVsZXNldF9zbG90KTtcbiYjNDM7fSBydWxlc2V0X21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IG1vbml0b3JlZF9waWQ7XG4mIzQzO2ludCBydWxlc2V0X2ZkO1xuJiM0Mzt1MzIga2Z1bmNfZmxhZ3M7XG4mIzQzO2Jvb2wgZG91YmxlX2NhbGw7XG4mIzQzO2Jvb2wgZ290X251bGxfZm9yX2JhZF9mZDtcbiYjNDM7Ym9vbCBub19ydWxlc2V0O1xuJiM0MztpbnQgcmVzdHJpY3RfZXJyO1xuJiM0MztpbnQgcmVzdHJpY3QyX2VycjtcbiYjNDM7Ym9vbCBjYWxsZWQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSdW5zIGluIHRoZSB0ZXN0IHJ1bm5lciYjMzk7cyBjb250ZXh0IHRocm91Z2ggQlBGX1BST0dfUlVOOlxuJiM0MzsgKiBAcnVsZXNldF9mZCBpcyByZXNvbHZlZCBpbiB0aGUgcnVubmVyJiMzOTtzIGZkIHRhYmxlIGFuZCB0aGUgYWNxdWlyZWRcbiYjNDM7ICogcnVsZXNldCBpcyBoYW5kZWQgdG8gdGhlIExTTSBwcm9ncmFtIHRocm91Z2ggdGhlIG1hcCBrcHRyIHNsb3QuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGxvYWRfcnVsZXNldCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsICpvbGQ7XG4mIzQzO1x0c3RydWN0IHJ1bGVzZXRfc2xvdCAqc2xvdDtcbiYjNDM7XHRpbnQga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0c2xvdCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2cnVsZXNldF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCFzbG90KVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdC8qIEEgZmQgdGhhdCBpcyBub3QgYSBMYW5kbG9jayBydWxlc2V0IG11c3QgcmVzb2x2ZSB0byBOVUxMLiAqL1xuJiM0MztcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG4mIzQzO1x0aWYgKCFydWxlc2V0KVxuJiM0MztcdFx0Z290X251bGxfZm9yX2JhZF9mZCA9IHRydWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHJ1bGVzZXQpO1xuJiM0MztcbiYjNDM7XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCk7XG4mIzQzO1x0aWYgKCFydWxlc2V0KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2c2xvdC1cdTAwM2VydWxlc2V0LCBydWxlc2V0KTtcbiYjNDM7XHRpZiAob2xkKVxuJiM0MztcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KG9sZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0cocmVzdHJpY3RfZXhlYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwgKm9sZDtcbiYjNDM7XHRzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90O1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAobW9uaXRvcmVkX3BpZCAhPSAoYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjYWxsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRzbG90ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZydWxlc2V0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXNsb3QpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cnVsZXNldCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2c2xvdC1cdTAwM2VydWxlc2V0LCBOVUxMKTtcbiYjNDM7XHRpZiAoIXJ1bGVzZXQpIHtcbiYjNDM7XHRcdG5vX3J1bGVzZXQgPSB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXN0cmljdF9lcnIgPSBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKGJwcm0sIHJ1bGVzZXQsIGtmdW5jX2ZsYWdzKTtcbiYjNDM7XHRpZiAoZG91YmxlX2NhbGwpXG4mIzQzO1x0XHQvKiBSZXBsYWNlcyB0aGUgZG9tYWluIHN0YWdlZCBieSB0aGUgZmlyc3QgY2FsbC4gKi9cbiYjNDM7XHRcdHJlc3RyaWN0Ml9lcnIgPSBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKGJwcm0sIHJ1bGVzZXQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBrZnVuY19mbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIHJ1bGVzZXQgZm9yIHRoZSBuZXh0IG1vbml0b3JlZCBleGVjdXRpb24uICovXG4mIzQzO1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZzbG90LVx1MDAzZXJ1bGVzZXQsIHJ1bGVzZXQpO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQob2xkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX0xBTkRMT0NLJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkJiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldCYjMzQ7LAogICAgJiMzNDticGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtJiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfcG9saWN5X2twdHJfcHV0JiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0ciYjMzQ7LAogICAgJiMzNDtsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uJiMzNDssCiAgICAmIzM0O2xhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBvbiBleGVjdXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBCUEYgYW5kIExhbmRsb2NrIHN1YnN5c3RlbXMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZWI2ZGE5NGViYzUxNWE2ZWQ0MmY4OTJmMTkyYTBiYzFlZmRlNTc5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMTowNzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QKaW5kZXggYzUxODY1MjZlNzZmNi4uMDExOTdjNzU4MGVjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QKQEAgLTEyOSw2ICYjNDM7MTI5LDMxIEBAIFRoZSByZWFzb25pbmcgaXM6CiAgIHJlc3RyaWN0aW9ucywgYmVjYXVzZSBhY2Nlc3Mgd2l0aGluIHRoZSBzYW1lIHNjb3BlIGlzIGFscmVhZHkKICAgYWxsb3dlZCBiYXNlZCBvbiBgYExBTkRMT0NLX0FDQ0VTU19GU19SRVNPTFZFX1VOSVhgYC4KIAomIzQzO0JQRiBrZnVuY3MKJiM0Mzs9PT09PT09PT09CiYjNDM7CiYjNDM7QlBGIHByb2dyYW1zIGNhbiBhcHBseSBhIHVzZXJzcGFjZS1jcmVhdGVkIExhbmRsb2NrIHJ1bGVzZXQgdG8gYW4KJiM0MztleGVjdXRpb24uICBBIHN5c2NhbGwgcHJvZ3JhbSAoYGBCUEZfUFJPR19UWVBFX1NZU0NBTExgYCksIHJ1bm5pbmcgaW4KJiM0Mzt0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgYWNxdWlyZXMgdGhlCiYjNDM7cnVsZXNldCBmcm9tIGl0cyBmaWxlIGRlc2NyaXB0b3IgYW5kIHR5cGljYWxseSBoYW5kcyBpdCBvdmVyIHRocm91Z2gKJiM0MzthIG1hcCBrcHRyIGZpZWxkOyBhIHNsZWVwYWJsZSBMU00gQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlCiYjNDM7YGBicHJtX2NyZWRzX2Zvcl9leGVjYGAgb3IgYGBicHJtX2NyZWRzX2Zyb21fZmlsZWBgIGhvb2tzIHRoZW4KJiM0MztlbmZvcmNlcyBpdCBvbiBhbiBleGVjdXRpb24uCiYjNDM7CiYjNDM7VGhpcyBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBydW50aW1lIGNvbnRleHQgb2YgYSBwZW5kaW5nIGV4ZWN1dGlvbiwKJiM0MzthbmQgZW5mb3JjZSBhIExhbmRsb2NrIHBvbGljeSB0aHJvdWdoIEJQRi4KJiM0MzsKJiM0MztUaGUgcmVzdHJpY3Rpb24gaXMgc3RhZ2VkIGluIHRoZSBMYW5kbG9jayBibG9iIG9mIHRoZQomIzQzO2NyZWRlbnRpYWxzIHByZXBhcmVkIGZvciB0aGUgZXhlY3V0aW9uIGFuZCBjb21taXR0ZWQgcGFzdCB0aGUgZXhlYwomIzQzO3BvaW50IG9mIG5vIHJldHVybiwgc28gYSBmYWlsZWQgZXhlY3V0aW9uIGxlYXZlcyB0aGUgY2FsbGluZyB0YXNrCiYjNDM7dW50b3VjaGVkLiAgVGhlIGBgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKWBgIGZsYWdzIGFwcGx5LCB3aXRoIHRoZQomIzQzO2V4Y2VwdGlvbiBvZiBgYExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNgYC4KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmMKJiM0MzsgICAgOmlkZW50aWZpZXJzOiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZAomIzQzOyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldAomIzQzOyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0KJiM0MzsKIFRlc3RzCiA9PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QKaW5kZXggNTg5NWU1MjlkYTdmZi4uZmMzYWYyMDZlNzk1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdApAQCAtMTUsMyAmIzQzOzE1LDMwIEBAIHNlZSBgYHNlY3VyaXR5L3NlY3VyaXR5LmNgYCBhbmQgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzOgogCiAuLiBrZXJuZWwtZG9jOjogc2VjdXJpdHkvc2VjdXJpdHkuYwogICAgOmV4cG9ydDoKJiM0MzsKJiM0MztMU00gcG9saWN5IGtwdHIgaG9va3MgYW5kIEJQRiBrZnVuY3MKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgTFNNIGZyYW1ld29yayBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3IgaW5kaXZpZHVhbCBMU01zIHRvCiYjNDM7ZXhwb3NlIHRoZWlyIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBCUEYga2Z1bmNzIGFuZCBrcHRycy4gQW4gTFNNCiYjNDM7bWF5IG5vdCBleHBvcnQgYW55IGtmdW5jIG9yIG90aGVyIEJQRiBpbnRlcmZhY2UgZGlyZWN0bHkuCiYjNDM7CiYjNDM7QW4gTFNNIHdpc2hpbmcgdG8gZXhwb3NlIGEgQlBGIGtmdW5jIG11c3QgcmV1c2UgYW4gZXhpc3Rpbmcgc2VjdXJpdHkKJiM0Mztob29rIG9yIGltcGxlbWVudCBhIG5ldyBzdWZmaWNpZW50bHkgZ2VuZXJpYyBMU00gaG9vayBmb3IgdGhlIGRlc2lyZWQKJiM0MztpbnRlcmZhY2UuIFRoZSBob29rcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSBrZnVuYyBkZWZpbml0aW9ucyBpbgomIzQzO2Bga2VybmVsL2JwZmBgLiBUaGlzIGFsbG93cyBMU00gaG9va3MgdG8gcmVtYWluIHN1ZmZpY2llbnRseSBnZW5lcmljCiYjNDM7d2hpbGUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzdHJvbmcgdHlwaW5nCiYjNDM7YW5kIHJ1bnRpbWUgY2hlY2tpbmcgb2ZmZXJlZCBieSB0aGUgQlBGIHZlcmlmaWVyLgomIzQzOwomIzQzO1RoZSBMU00gcHJvdmlkaW5nIGFuIG9wZXJhdGlvbiBpbXBsZW1lbnRzIHRoZSBvcGVyYXRpb24mIzM5O3MgaG9vayB3aXRoCiYjNDM7YGBMU01fSE9PS19JTklUKClgYCBsaWtlIGFueSBvdGhlciBob29rLiBBIEJQRiBwcm9ncmFtIGNhbGxpbmcgYW4KJiM0MztMU00ga2Z1bmMgdGhlcmVmb3JlIHJlYWNoZXMgdGhlIExTTSB0aGUgc2FtZSB3YXkgZXZlcnkgb3RoZXIKJiM0MztrZXJuZWwgY2FsbGVyIGRvZXM6IHRocm91Z2ggYW4gTFNNIGhvb2suIFRoZSBob29rcyBiYWNraW5nIGtmdW5jcwomIzQzO2ZvbGxvdyB0aGUgdXN1YWwgcnVsZXMgZm9yIG5ldyBMU00gaG9va3M6IHRoZWlyIGNvbnRyYWN0IG11c3QgYmUKJiM0MztMU00gYWdub3N0aWMgc28gdGhhdCBvdGhlciBMU01zIGNvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsCiYjNDM7aW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbWUgb3BlcmF0aW9uLgomIzQzOwomIzQzO1doZXRoZXIgdGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGlzIGJ1aWx0IGluIGFuZCBhY3RpdmUgaXMgYQomIzQzO3J1bnRpbWUgcHJvcGVydHk6IHRoZSBrZnVuY3MgYXJlIGFsd2F5cyByZWdpc3RlcmVkIHdoZW4KJiM0MztgYENPTkZJR19CUEZfTFNNYGAgaXMgZW5hYmxlZC4gQlBGIHByb2dyYW0gbG9hZGluZyBpcyB0aHVzCiYjNDM7aW5kZXBlbmRlbnQgb2YgdGhlIGJvb3QtdGltZSBMU00gY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uYTcwZWRiZDdiNzYxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTQ1Miw2ICYjNDM7NDUyLDExIEBAIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NyZWF0ZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIHVuaW9uIGJwZl9hdHRyICphdHRyCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGJwZl90b2tlbl9mcmVlLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbikKIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NtZCwgY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGVudW0gYnBmX2NtZCBjbWQpCiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jYXBhYmxlLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcCkKJiM0MztMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBwb2xpY3lfa3B0cl9mcm9tX2ZkLCBpbnQgZmQsCiYjNDM7CSB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSkKJiM0MztMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHBvbGljeV9rcHRyX3B1dCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7TFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAomIzQzOwkgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncykKICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogTFNNX0hPT0soaW50LCAwLCBsb2NrZWRfZG93biwgZW51bSBsb2NrZG93bl9yZWFzb24gd2hhdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li40MGRmYTk2YjZhNzE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNjgsNiAmIzQzOzE2OCwyMyBAQCBzdHJ1Y3QgbHNtX3Byb3AgewogCXN0cnVjdCBsc21fcHJvcF9icGYgYnBmOwogfTsKIAomIzQzO3N0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldDsKJiM0MzsKJiM0MztzdHJ1Y3QgbHNtX3BvbGljeV9sYW5kbG9jayB7CiYjNDM7CXN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSByZWZlcmVuY2UgdG8gYW4gTFNNIHBvbGljeSBvYmplY3QsIHRhZ2dlZCBieSB0aGUgTFNNX0lEXyogdmFsdWUKJiM0MzsgKiBwYXNzZWQgYWxvbmdzaWRlOiBvbmx5IHRoZSBtYXRjaGluZyBMU00mIzM5O3MgbWVtYmVyIGlzIHZhbGlkLiAgVGhlCiYjNDM7ICogbWVtYmVycyBhcmUgbm90IGd1YXJkZWQgYnkgdGhlIExTTXMmIzM5OyBDT05GSUcgb3B0aW9uczogdGhlIGNhbGxlcnMKJiM0MzsgKiBhcmUgYnVpbHQgaW5kZXBlbmRlbnRseSBvZiBhbnkgaW5kaXZpZHVhbCBMU00gYW5kIGEgY2FsbCBmb3IgYQomIzQzOyAqIG1pc3NpbmcgTFNNIG11c3QgZmFpbCBhdCBydW50aW1lLCBub3QgYXQgYnVpbGQgdGltZS4KJiM0MzsgKi8KJiM0Mzt1bmlvbiBsc21fcG9saWN5X2twdHIgewomIzQzOwlzdHJ1Y3QgbHNtX3BvbGljeV9sYW5kbG9jayBsYW5kbG9jazsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2tkb3duX3JlYXNvbnNbTE9DS0RPV05fQ09ORklERU5USUFMSVRZX01BWCYjNDM7MV07CiAKIC8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gc2VjdXJpdHkvY29tbW9uY2FwLmMgKi8KQEAgLTIzMTIsNiAmIzQzOzIzMjksMTMgQEAgZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY3JlYXRlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXQKIGV4dGVybiB2b2lkIHNlY3VyaXR5X2JwZl90b2tlbl9mcmVlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuKTsKIGV4dGVybiBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NtZChjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgZW51bSBicGZfY21kIGNtZCk7CiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKTsKJiM0MztleHRlcm4gaW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsCiYjNDM7CQkJCQl1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7CiYjNDM7ZXh0ZXJuIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpOwomIzQzO2V4dGVybiBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCSAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksCiYjNDM7CQkJCQkgICAgIHUzMiBmbGFncyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmKGludCBjbWQsIHVuaW9uIGJwZl9hdHRyICphdHRyLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBib29sIGtlcm5lbCkKQEAgLTIzNjUsNiAmIzQzOzIzODksMjUgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludAogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsCiYjNDM7CQkJCQkgICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQodTY0IGxzbWlkLAomIzQzOwkJCQkJICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwKJiM0MzsJCQkJCQkgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCQkgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksCiYjNDM7CQkJCQkJICAgIHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZICovCiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmMKaW5kZXggMzk4M2I0Y2U3M2M4MS4uNjdhYTkwMmYxMjU3MCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfbHNtLmMKQEAgLTE0LDggJiM0MzsxNCwxMCBAQAogI2luY2x1ZGUgJmx0O25ldC9icGZfc2tfc3RvcmFnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9sb2NhbF9zdG9yYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnRmX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGYtY2dyb3VwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbHNtLmgmZ3Q7CiAKIC8qIEZvciBldmVyeSBMU00gaG9vayB0aGF0IGFsbG93cyBhdHRhY2htZW50IG9mIEJQRiBwcm9ncmFtcywgZGVjbGFyZSBhIG5vcAogICogZnVuY3Rpb24gd2hlcmUgYSBCUEYgcHJvZ3JhbSBjYW4gYmUgYXR0YWNoZWQuIE5vdGFibHksIHdlIHF1YWxpZnkgZWFjaCB3aXRoCkBAIC01Niw2ICYjNDM7NTgsOSBAQCBCVEZfSUQoZnVuYywgYnBmX2xzbV94ZnJtX2RlY29kZV9zZXNzaW9uKQogI2VuZGlmCiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pc21hY2xhYmVsKQogQlRGX0lEKGZ1bmMsIGJwZl9sc21fZmlsZV9hbGxvY19zZWN1cml0eSkKJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9wb2xpY3lfa3B0cl9mcm9tX2ZkKQomIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX3B1dCkKJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIpCiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKQogCiAvKiBMaXN0IG9mIExTTSBob29rcyB0aGF0IHNob3VsZCBvcGVyYXRlIG9uICYjMzk7Y3VycmVudCYjMzk7IGNncm91cCByZWdhcmRsZXNzCkBAIC00NzAsMyAmIzQzOzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJfQogCXJldHVybiAwOwogfQomIzQzOwomIzQzOy8qIExTTSBwb2xpY3kga2Z1bmNzICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPcGFxdWUgaGFuZGxlIGZvciBhIExhbmRsb2NrIHJ1bGVzZXQuICBPbmx5CiYjNDM7ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBwcm9kdWNlcyBvbmUsIGFuZCBvbmx5IExhbmRsb2NrCiYjNDM7ICogcmVzb2x2ZXMgaXQuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0IHt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNsZWVwYWJsZSBMU00gaG9va3MgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSgpIGFuZAomIzQzOyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCgpIG1heSBiZSBjYWxsZWQgZnJvbS4KJiM0MzsgKi8KJiM0MztCVEZfU0VUX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19ob29rcykKJiM0MztCVEZfSUQoZnVuYywgYnBmX2xzbV9icHJtX2NyZWRzX2Zvcl9leGVjKQomIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZnJvbV9maWxlKQomIzQzO0JURl9TRVRfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19ob29rcykKJiM0MzsKJiM0MztfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgLSBHZXQgYSBMYW5kbG9jayBydWxlc2V0IGZyb20gYSBmZAomIzQzOyAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIG9mIGEgTGFuZGxvY2sgcnVsZXNldCwgcmVzb2x2ZWQgaW4gdGhlIGZpbGUKJiM0MzsgKiAgICAgIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIHRhc2sgcnVubmluZyB0aGUgcHJvZ3JhbQomIzQzOyAqCiYjNDM7ICogQWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUgTGFuZGxvY2sgcnVsZXNldCByZWZlcnJlZCB0byBieSBAZmQsIGFzCiYjNDM7ICogY3JlYXRlZCBieSBsYW5kbG9ja19jcmVhdGVfcnVsZXNldCgyKSBhbmQgcG9wdWxhdGVkIHdpdGgKJiM0MzsgKiBsYW5kbG9ja19hZGRfcnVsZSgyKS4gIE9ubHkgc3lzY2FsbCBwcm9ncmFtcyBtYXkgY2FsbCB0aGlzIGtmdW5jOgomIzQzOyAqIHRoZXkgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIGludm9raW5nIHRoZW0sIHdoZXJlIHRoZQomIzQzOyAqIHJ1bGVzZXQgZmQgaXMgbWVhbmluZ2Z1bC4gIFRoZSBhY3F1aXJlZCBydWxlc2V0IGNhbiBiZSBoYW5kZWQgdG8gYW4KJiM0MzsgKiBlbmZvcmNlbWVudCBwcm9ncmFtIHRocm91Z2ggYSBtYXAga3B0ciBmaWVsZC4gIFRoZSByZWZlcmVuY2UgbXVzdAomIzQzOyAqIGJlIHJlbGVhc2VkIHdpdGggYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IEEgcmVmZXJlbmNlZCBydWxlc2V0IGhhbmRsZSwgb3IgTlVMTCBpZiBAZmQgaXMgbm90IGEKJiM0MzsgKiByZWFkYWJsZSBMYW5kbG9jayBydWxlc2V0IGZkIG9yIHRoZSBMYW5kbG9jayBMU00gaXMgbm90IGVuYWJsZWQuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICoKJiM0MzticGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpCiYjNDM7ewomIzQzOwl1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5OwomIzQzOwomIzQzOwlpZiAoc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZChMU01fSURfTEFORExPQ0ssIGZkLCAmYW1wO3BvbGljeSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIHBvbGljeS5sYW5kbG9jay5ydWxlc2V0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgLSBQdXQgYSBMYW5kbG9jayBydWxlc2V0CiYjNDM7ICogQHJ1bGVzZXQ6IExhbmRsb2NrIHJ1bGVzZXQgdG8gcHV0CiYjNDM7ICoKJiM0MzsgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIGFjcXVpcmVkIHdpdGggYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQpCiYjNDM7ewomIzQzOwl1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTsKJiM0MzsKJiM0MzsJc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KExTTV9JRF9MQU5ETE9DSywgJmFtcDtwb2xpY3kpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtIC0gRW5mb3JjZSBhIExhbmRsb2NrIHJ1bGVzZXQgb24gZXhlYwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFscwomIzQzOyAqIEBicHJtOiBleGVjdXRpb24gY29udGV4dCBwcm92aWRpbmcgdGhlIHByZXBhcmVkIGNyZWRlbnRpYWxzIHRvCiYjNDM7ICogICAgICAgIHJlc3RyaWN0CiYjNDM7ICogQHJ1bGVzZXQ6IExhbmRsb2NrIHJ1bGVzZXQgdG8gZW5mb3JjZQomIzQzOyAqIEBmbGFnczogbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncywgZXhjZXB0CiYjNDM7ICogICAgICAgICAlTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQwomIzQzOyAqCiYjNDM7ICogUmVzdHJpY3QgdGhlIGNyZWRlbnRpYWxzIHByZXBhcmVkIGluIEBicHJtIHdpdGggQHJ1bGVzZXQsIHNvIHRoYXQKJiM0MzsgKiB0aGUgZXhlY3V0ZWQgdGFzayBzdGFydHMgY29uZmluZWQgYnkgaXQsIGZvbGxvd2luZyB0aGUgc2FtZSBkb21haW4KJiM0MzsgKiBjb21wb3NpdGlvbiBydWxlcyBhcyBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLiAgVGhlIHJlc3RyaWN0aW9uIGlzCiYjNDM7ICogc3RhZ2VkIGFuZCBvbmx5IGNvbW1pdHRlZCBhdCB0aGUgZXhlY3V0aW9uJiMzOTtzIHBvaW50IG9mIG5vIHJldHVybjogYW4KJiM0MzsgKiBleGVjdXRpb24gdGhhdCBmYWlscyBiZWZvcmUgdGhhdCBwb2ludCBpcyB1bmFmZmVjdGVkLCBhbmQgYSBsYXRlcgomIzQzOyAqIGNhbGwgb24gdGhlIHNhbWUgZXhlY3V0aW9uIHJlcGxhY2VzIGEgcHJldmlvdXNseSBzdGFnZWQKJiM0MzsgKiByZXN0cmljdGlvbi4gIEBydWxlc2V0IGlzIG9ubHkgYm9ycm93ZWQ6IHRoZSBjYWxsZXIga2VlcHMgaXRzCiYjNDM7ICogcmVmZXJlbmNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgZmxhZ3MgYXBwbHkgd2l0aCB0aGVpciB1c3VhbAomIzQzOyAqIHNlbWFudGljcy4gIE9ubHkgJUxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgaXMgcmVqZWN0ZWQsIGFzIGl0CiYjNDM7ICogdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzIHJhdGhlciB0aGFuIHRoZSBleGVjdXRpb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIExhbmRsb2NrIExTTSBpcyBub3QKJiM0MzsgKiBlbmFibGVkLCAtRUlOVkFMIGlmIEBmbGFncyBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBmbGFnLCBvdGhlcgomIzQzOyAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlIGFzIGZvciBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwKJiM0MzsJCQkJCSAgICAgdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJdW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07CiYjNDM7CiYjNDM7CXJldHVybiBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoTFNNX0lEX0xBTkRMT0NLLCBicHJtLAomIzQzOwkJCQkJCSAmYW1wO3BvbGljeSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEZXN0cnVjdG9yIGZvciByZWZlcmVuY2VkIGJwZl9sYW5kbG9ja19ydWxlc2V0IGtwdHJzLiAqLwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3Iodm9pZCAqcnVsZXNldCkKJiM0Mzt7CiYjNDM7CXVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9OwomIzQzOwomIzQzOwlzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoTFNNX0lEX0xBTkRMT0NLLCAmYW1wO3BvbGljeSk7CiYjNDM7fQomIzQzO0NGSV9OT1NFQUwoYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3IpOwomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCwKJiM0MzsJICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCwgS0ZfUkVMRUFTRSB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpCiYjNDM7CiYjNDM7QlRGX0lEX0xJU1QoYnBmX2xhbmRsb2NrX2R0b3JfaWRzKQomIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KQomIzQzO0JURl9JRChmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcikKJiM0MzsKJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYywKJiM0MzsJCSAgIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKQomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtX2lkcywgZnVuYywKJiM0MzsJCSAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0pCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCUEZfUFJPR19UWVBFX0xTTSBhbmQgQlBGX1BST0dfVFlQRV9TWVNDQUxMIHNoYXJlIHRoZWlyIGtmdW5jCiYjNDM7ICogbG9va3VwIGJ1Y2tldHMgd2l0aCBvdGhlciBwcm9ncmFtIHR5cGVzLCBzbyByZXN0cmljdGluZyB0aGUgTFNNCiYjNDM7ICogcG9saWN5IGtmdW5jcyByZXF1aXJlcyBhIGZpbHRlci4gIEEgcnVsZXNldCBmZCBpcyBvbmx5IG1lYW5pbmdmdWwKJiM0MzsgKiBpbiB0aGUgZmQgdGFibGUgb2YgdGhlIHRhc2sgdGhhdCBzZXQgdGhlIHJ1bGVzZXQgdXAsIHNvCiYjNDM7ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBpcyBleGNsdXNpdmUgdG8gc3lzY2FsbAomIzQzOyAqIHByb2dyYW1zLCB3aGljaCBydW4gaW4gdGhhdCB0YXNrJiMzOTtzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW4KJiM0MzsgKiB0aGUgY29udGV4dCBvZiB0aGUgdGFzayBpdCBtZWRpYXRlcy4gIEVuZm9yY2VtZW50IGlzIGV4Y2x1c2l2ZSB0bwomIzQzOyAqIHRoZSBzbGVlcGFibGUgYnBybSBMU00gaG9va3MgdGhlIHBvbGljeSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkCiYjNDM7ICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmUKJiM0MzsgKiBoZWxkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDticGZfbGFuZGxvY2tfa2Z1bmNfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwcm9nLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgQlBGX1BST0dfVFlQRV9TWVNDQUxMOgomIzQzOwkJaWYgKGtmdW5jX2lkID09IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1faWRzWzBdKQomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgQlBGX1BST0dfVFlQRV9MU006CiYjNDM7CQlpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkc1swXSkKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBCUEZfTFNNX0NHUk9VUCBwcm9ncmFtcyBydW4gdW5kZXIgY2xhc3NpYyBSQ1UgYW5kCiYjNDM7CQkgKiBjYW5ub3Qgc2xlZXAuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsKJiM0MzsJCWlmICghYnRmX2lkX3NldF9jb250YWlucygmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19ob29rcywKJiM0MzsJCQkJCSBwcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGZfaWQpKQomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2xhbmRsb2NrX2tmdW5jX3NldCA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5zZXQgPSAmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19pZHMsCiYjNDM7CS5maWx0ZXIgPSBicGZfbGFuZGxvY2tfa2Z1bmNfZmlsdGVyLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jIGJwZl9sYW5kbG9ja19kdG9yc1tdID0gewomIzQzOwkJewomIzQzOwkJCS5idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMF0sCiYjNDM7CQkJLmtmdW5jX2J0Zl9pZCA9IGJwZl9sYW5kbG9ja19kdG9yX2lkc1sxXSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19zZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2JwZl9sYW5kbG9ja19rZnVuY19zZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfbGFuZGxvY2tfZHRvcnMsCiYjNDM7CQkJCQkgICBBUlJBWV9TSVpFKGJwZl9sYW5kbG9ja19kdG9ycyksCiYjNDM7CQkJCQkgICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZSBiL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlCmluZGV4IGZmYTc2NDZkOTlmM2UuLjliYTI4YzA2YjVhYzIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlCkBAIC0xNiwzICYjNDM7MTYsNSBAQCBsYW5kbG9jay0kKENPTkZJR19BVURJVCkgJiM0Mzs9IFwKIAlpZC5vIFwKIAlhdWRpdC5vIFwKIAlkb21haW4ubwomIzQzOwomIzQzO2xhbmRsb2NrLSQoQ09ORklHX0JQRl9MU00pICYjNDM7PSBicGYubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jZjg5MDYyZDM1YTcwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMKQEAgLTAsMCAmIzQzOzEsMTMwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogTGFuZGxvY2sgLSBMU00gcG9saWN5IGtwdHIgaG9va3MKJiM0MzsgKgomIzQzOyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMU00gaG9va3MgYmFja2luZyB0aGUgTGFuZGxvY2sga2Z1bmNzCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgJmx0O3V0aWxpdHllbWFsNzdAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xzbV9ob29rcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1jb250cm9sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbGFuZGxvY2suaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NyZWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsaW1pdHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtydWxlc2V0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c2V0dXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0OwomIzQzOwomIzQzOwlydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChmZCwgRk1PREVfQ0FOX1JFQUQpOwomIzQzOwlpZiAoSVNfRVJSKHJ1bGVzZXQpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocnVsZXNldCk7CiYjNDM7CiYjNDM7CXBvbGljeS0mZ3Q7bGFuZGxvY2sucnVsZXNldCA9IChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKilydWxlc2V0OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaG9va19wb2xpY3lfa3B0cl9wdXQodW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9CiYjNDM7CQkoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktJmd0O2xhbmRsb2NrLnJ1bGVzZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1heSBiZSBjYWxsZWQgZnJvbSBhIEJQRiBvYmplY3QgZGVzdHJ1Y3RvciB0aGF0IGNhbm5vdCBzbGVlcCwKJiM0MzsJICogd2hlcmVhcyBkcm9wcGluZyB0aGUgbGFzdCBydWxlc2V0IHJlZmVyZW5jZSBmcmVlcyBpdCBhbmQgbWF5CiYjNDM7CSAqIHNsZWVwOiBhbHdheXMgZGVmZXIgdGhlIGZyZWUuCiYjNDM7CSAqLwomIzQzOwlsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChydWxlc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ2hhcmdpbmcgc2NvcGUgZm9yIHRoZSBCUEYtZHJpdmVuIGRvbWFpbiBhbGxvY2F0aW9uczogcm9vdCwgaS5lLiBub2JvZHkuICovCiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfYnBmX21lbWNnKHZvaWQpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MzsJcmV0dXJuIHJvb3RfbWVtX2Nncm91cDsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCSB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSwKJiM0MzsJCQkJCSB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tJmd0O2NyZWQpOwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9CiYjNDM7CQkoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktJmd0O2xhbmRsb2NrLnJ1bGVzZXQ7CiYjNDM7CXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm9sZF9tZW1jZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2FtZSBmbGFncyBhcyBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpLCBleGNlcHQKJiM0MzsJICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQzogdGhlIHJlc3RyaWN0aW9uIHRhcmdldHMgdGhlCiYjNDM7CSAqIGV4ZWN1dGlvbiwgbm90IHRoZSBjYWxsaW5nIHRocmVhZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGZsYWdzIHwgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pICE9CiYjNDM7CSAgICBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX0JJTlBSTSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZG9tYWluIGNvbmZpbmVzIHRoZSBleGVjdXRpb24gb24gYmVoYWxmIG9mIHRoZSBCUEYKJiM0MzsJICogcHJvZ3JhbSwgbm90IG9mIHRoZSBtZWRpYXRlZCB0YXNrOiBkbyBub3QgY2hhcmdlIHRoZSB0YXNrJiMzOTtzCiYjNDM7CSAqIG1lbWNnIGZvciBpdC4KJiM0MzsJICovCiYjNDM7CW9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ2V0X2JwZl9tZW1jZygpKTsKJiM0MzsJZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsCiYjNDM7CQkJCQkgICAmYW1wO3Jlc3RyaWN0aW9uKTsKJiM0MzsJc2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RhZ2VzIHRoZSByZXN0cmljdGlvbiB1bnRpbCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mIHRoZQomIzQzOwkgKiBleGVjdXRpb24sIHJlcGxhY2luZyAoYW5kIHJlbGVhc2luZykgYW55IHByZXZpb3VzbHkgc3RhZ2VkCiYjNDM7CSAqIG9uZS4gIE5vdGhpbmcgaXMgZW5mb3JjZWQgeWV0OiBhbiBleGVjdXRpb24gdGhhdCBmYWlscyBiZWZvcmUKJiM0MzsJICogY29tbWl0dGluZyBpdHMgY3JlZGVudGlhbHMgZHJvcHMgdGhlIHN0YWdlZCByZXN0cmljdGlvbiBpbgomIzQzOwkgKiBob29rX2NyZWRfZnJlZSgpIHdpdGggbm8gZWZmZWN0IG9uIHRoZSBjYWxsaW5nIHRhc2suCiYjNDM7CSAqLwomIzQzOwlsYW5kbG9ja19wdXRfcnVsZXNldChicHJtX2xsY3JlZC0mZ3Q7c3RhZ2VkLmRvbWFpbik7CiYjNDM7CWJwcm1fbGxjcmVkLSZndDtzdGFnZWQgPSByZXN0cmljdGlvbjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqYnBybV9sbGNyZWQgPSBsYW5kbG9ja19jcmVkKGJwcm0tJmd0O2NyZWQpOwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247CiYjNDM7CiYjNDM7CWlmICghYnBybV9sbGNyZWQtJmd0O3N0YWdlZC5kb21haW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJlc3RyaWN0aW9uID0gYnBybV9sbGNyZWQtJmd0O3N0YWdlZDsKJiM0MzsJYnBybV9sbGNyZWQtJmd0O3N0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7CiYjNDM7CWxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGJwcm1fbGxjcmVkLCAmYW1wO3Jlc3RyaWN0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgbGFuZGxvY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7CiYjNDM7CUxTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChwb2xpY3lfa3B0cl9wdXQsIGhvb2tfcG9saWN5X2twdHJfcHV0KSwKJiM0MzsJTFNNX0hPT0tfSU5JVChicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIGhvb2tfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSwKJiM0Mzt9OwomIzQzOwomIzQzO19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZCkKJiM0Mzt7CiYjNDM7CXNlY3VyaXR5X2FkZF9ob29rcyhsYW5kbG9ja19ob29rcywgQVJSQVlfU0laRShsYW5kbG9ja19ob29rcyksCiYjNDM7CQkJICAgJmFtcDtsYW5kbG9ja19sc21pZCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmggYi9zZWN1cml0eS9sYW5kbG9jay9icGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNTc3MjllNmE1NjQ0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmgKQEAgLTAsMCAmIzQzOzEsMjEgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rcwomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzICZsdDt1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSAomIzQzOyNkZWZpbmUgX1NFQ1VSSVRZX0xBTkRMT0NLX0JQRl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9MU00KJiM0MztfX2luaXQgdm9pZCBsYW5kbG9ja19hZGRfYnBmX2hvb2tzKHZvaWQpOwomIzQzOyNlbHNlIC8qIENPTkZJR19CUEZfTFNNICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqLwomIzQzOwomIzQzOyNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQlBGX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYwppbmRleCBjYzQxOWRlNzVjZDZiLi5lZmJmZDBjMjA0NzUzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jCkBAIC04LDE0ICYjNDM7OCwxMTQgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYmluZm10cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9sYW5kbG9jay5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvbW1vbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y3JlZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2RvbWFpbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cnVsZXNldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c2V0dXAuaCYjMzQ7CiAKJiM0MzsvKioKJiM0MzsgKiBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZSBhIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb24KJiM0MzsgKgomIzQzOyAqIEBsbGNyZWQ6IExhbmRsb2NrIGNyZWRlbnRpYWxzIHRvIHJlc3RyaWN0OiBwcm92aWRlcyB0aGUgcGFyZW50IGRvbWFpbiBhbmQKJiM0MzsgKiAgICAgICAgICB0aGUgcHJldmlvdXMgbG9nIGNvbmZpZ3VyYXRpb24uICBOb3QgbW9kaWZpZWQuCiYjNDM7ICogQHJ1bGVzZXQ6IFJ1bGVzZXQgdG8gZW5mb3JjZSwgb3IgTlVMTCBmb3IgYSBsb2ctY29uZmlndXJhdGlvbi1vbmx5IGNoYW5nZS4KJiM0MzsgKiBAZmxhZ3M6IGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgZmxhZ3MuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgomIzQzOyAqICAgICAgICAgdmFsaWRhdGluZyB0aGVtIGFnYWluc3QgdGhlIHNldCBvZiBmbGFncyBpdCBzdXBwb3J0cy4KJiM0MzsgKiBAcmVzdHJpY3Rpb246IENvbXB1dGVkIHJlc3RyaWN0aW9uLiAgT24gc3VjY2VzcywgaG9sZHMgYSByZWZlcmVuY2Ugb24KJiM0MzsgKiAgICAgICAgICAgICAgIEByZXN0cmljdGlvbi0mZ3Q7ZG9tYWluIChpZiBhbnkpLCB3aGljaAomIzQzOyAqICAgICAgICAgICAgICAgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oKSB0cmFuc2ZlcnMgdG8gdGhlIHJlc3RyaWN0ZWQKJiM0MzsgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLgomIzQzOyAqCiYjNDM7ICogVGhlIHJlc3RyaWN0aW9uIGJ1aWxkcyBvbiBAbGxjcmVkJiMzOTtzIGN1cnJlbnQgc3RhdGU6IHRoZSBjYWxsZXIgbXVzdCBhcHBseQomIzQzOyAqIGl0IHRvIChvciBzdGFnZSBpdCBmb3IpIHRoZXNlIHNhbWUgY3JlZGVudGlhbHMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oCiYjNDM7CWNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsCiYjNDM7CXN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsCiYjNDM7CXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQVVESVQKJiM0MzsJLyogVHJhbnNsYXRlcyAmIzM0O29mZiYjMzQ7IGFuZCAmIzM0O29uJiMzNDsgZmxhZ3MgdG8gYm9vbGVhbnMuICovCiYjNDM7CWNvbnN0IGJvb2wgbG9nX3NhbWVfZXhlYyA9CiYjNDM7CQkhKGZsYWdzICZhbXA7IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NBTUVfRVhFQ19PRkYpOwomIzQzOwljb25zdCBib29sIGxvZ19uZXdfZXhlYyA9CiYjNDM7CQkhIShmbGFncyAmYW1wOyBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7CiYjNDM7CWNvbnN0IGJvb2wgbG9nX3N1YmRvbWFpbnMgPQomIzQzOwkJIShmbGFncyAmYW1wOyBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7CiYjNDM7CWNvbnN0IGJvb2wgcHJldl9sb2dfc3ViZG9tYWlucyA9ICFsbGNyZWQtJmd0O2xvZ19zdWJkb21haW5zX29mZjsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiYjNDM7CiYjNDM7CSpyZXN0cmljdGlvbiA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BVURJVAomIzQzOwlyZXN0cmljdGlvbi0mZ3Q7bG9nX3N1YmRvbWFpbnNfb2ZmID0gIXByZXZfbG9nX3N1YmRvbWFpbnMgfHwKJiM0MzsJCQkJCSAgIWxvZ19zdWJkb21haW5zOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KJiM0MzsKJiM0MzsJaWYgKCFydWxlc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJlc3RyaWN0aW9uLSZndDtkb21haW4gPSBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KGxsY3JlZC0mZ3Q7ZG9tYWluLCBydWxlc2V0KTsKJiM0MzsJaWYgKElTX0VSUihyZXN0cmljdGlvbi0mZ3Q7ZG9tYWluKSkgewomIzQzOwkJY29uc3QgaW50IGVyciA9IFBUUl9FUlIocmVzdHJpY3Rpb24tJmd0O2RvbWFpbik7CiYjNDM7CiYjNDM7CQlyZXN0cmljdGlvbi0mZ3Q7ZG9tYWluID0gTlVMTDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FVRElUCiYjNDM7CXJlc3RyaWN0aW9uLSZndDtkb21haW4tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX3NhbWVfZXhlYyA9IGxvZ19zYW1lX2V4ZWM7CiYjNDM7CXJlc3RyaWN0aW9uLSZndDtkb21haW4tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX25ld19leGVjID0gbG9nX25ld19leGVjOwomIzQzOwlpZiAoKCFsb2dfc2FtZV9leGVjICZhbXA7JmFtcDsgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpCiYjNDM7CQlyZXN0cmljdGlvbi0mZ3Q7ZG9tYWluLSZndDtoaWVyYXJjaHktJmd0O2xvZ19zdGF0dXMgPQomIzQzOwkJCUxBTkRMT0NLX0xPR19ESVNBQkxFRDsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbiAtIEVuZm9yY2UgYSBjb21wdXRlZCByZXN0cmljdGlvbiBvbiBjcmVkZW50aWFscwomIzQzOyAqCiYjNDM7ICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXIKJiM0MzsgKiAgICAgICAgICAocHJlcGFyZWQgYW5kIG5vdCB5ZXQgY29tbWl0dGVkKS4KJiM0MzsgKiBAcmVzdHJpY3Rpb246IFJlc3RyaWN0aW9uIGNvbXB1dGVkIGJ5IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKQomIzQzOyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpcwomIzQzOyAqICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQgdG8gQGxsY3JlZC4KJiM0MzsgKgomIzQzOyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnQKJiM0MzsgKiBvZiBmYWlsdXJlLCBlLmcuIGFuIGV4ZWMgcG9pbnQgb2Ygbm8gcmV0dXJuLgomIzQzOyAqLwomIzQzO3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCwKJiM0MzsJCQkJc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbikKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19BVURJVAomIzQzOwlsbGNyZWQtJmd0O2xvZ19zdWJkb21haW5zX29mZiA9IHJlc3RyaWN0aW9uLSZndDtsb2dfc3ViZG9tYWluc19vZmY7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwomIzQzOwomIzQzOwlpZiAoIXJlc3RyaWN0aW9uLSZndDtkb21haW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFJlcGxhY2VzIHRoZSBvbGQgZG9tYWluLiAqLwomIzQzOwlsYW5kbG9ja19wdXRfcnVsZXNldChsbGNyZWQtJmd0O2RvbWFpbik7CiYjNDM7CWxsY3JlZC0mZ3Q7ZG9tYWluID0gcmVzdHJpY3Rpb24tJmd0O2RvbWFpbjsKJiM0MzsJcmVzdHJpY3Rpb24tJmd0O2RvbWFpbiA9IE5VTEw7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BVURJVAomIzQzOwlsbGNyZWQtJmd0O2RvbWFpbl9leGVjIHw9IEJJVChsbGNyZWQtJmd0O2RvbWFpbi0mZ3Q7bnVtX2xheWVycyAtIDEpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBob29rX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3Qgb2xkKQogewpAQCAtMjQsNiAmIzQzOzEyNCwxMiBAQCBzdGF0aWMgdm9pZCBob29rX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKIAogCWxhbmRsb2NrX2dldF9ydWxlc2V0KG9sZF9sbGNyZWQtJmd0O2RvbWFpbik7CiAJKmxhbmRsb2NrX2NyZWQobmV3KSA9ICpvbGRfbGxjcmVkOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzOwkvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovCiYjNDM7CVdBUk5fT05fT05DRShsYW5kbG9ja19jcmVkKG5ldyktJmd0O3N0YWdlZC5kb21haW4pOwomIzQzOwlsYW5kbG9ja19jcmVkKG5ldyktJmd0O3N0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovCiB9CiAKIHN0YXRpYyBpbnQgaG9va19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKQEAgLTM1LDEwICYjNDM7MTQxLDE0IEBAIHN0YXRpYyBpbnQgaG9va19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKmNvbnN0IG5ldywKIAogc3RhdGljIHZvaWQgaG9va19jcmVkX2ZyZWUoc3RydWN0IGNyZWQgKmNvbnN0IGNyZWQpCiB7Ci0Jc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IGRvbSA9IGxhbmRsb2NrX2NyZWQoY3JlZCktJmd0O2RvbWFpbjsKJiM0MzsJc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCA9IGxhbmRsb2NrX2NyZWQoY3JlZCk7CiYjNDM7CiYjNDM7CWxhbmRsb2NrX3B1dF9ydWxlc2V0X2RlZmVycmVkKGxsY3JlZC0mZ3Q7ZG9tYWluKTsKIAotCWlmIChkb20pCi0JCWxhbmRsb2NrX3B1dF9ydWxlc2V0X2RlZmVycmVkKGRvbSk7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CS8qIFJlbGVhc2VzIGEgcmVzdHJpY3Rpb24gc3RhZ2VkIGZvciBhbiBhYm9ydGVkIGV4ZWN1dGlvbi4gKi8KJiM0MzsJbGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLSZndDtzdGFnZWQuZG9tYWluKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi8KIH0KIAogI2lmZGVmIENPTkZJR19BVURJVApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oCmluZGV4IGYyODdjNTZiNWZkNGIuLjc0ZjhjOTgwOGRjNGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmgKQEAgLTIwLDYgJiM0MzsyMCwzMSBAQAogI2luY2x1ZGUgJiMzNDtydWxlc2V0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzZXR1cC5oJiMzNDsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAtIENvbXB1dGVkIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb24KJiM0MzsgKgomIzQzOyAqIFRoZSByZXN1bHQgb2YgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpOiB0aGUgbmV3IHN0YXRlIHRoYXQKJiM0MzsgKiBlbmZvcmNpbmcgYSBydWxlc2V0IHdpdGggYSBzZXQgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFncwomIzQzOyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXMKJiM0MzsgKiBlbmZvcmNlZCB3aXRoIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKCksIGVpdGhlciByaWdodCBhd2F5CiYjNDM7ICogKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikpIG9yIGFmdGVyIGEgc3RhZ2luZyBwZXJpb2QgKHJlc3RyaWN0aW9uCiYjNDM7ICogb2YgYW4gZXhlY3V0aW9uKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gewomIzQzOwkvKioKJiM0MzsJICogQGRvbWFpbjogTmV3IGRvbWFpbiB0byBlbmZvcmNlLCBvd25pbmcgYSByZWZlcmVuY2UuICBOVUxMIGlmIHRoZQomIzQzOwkgKiByZXN0cmljdGlvbiBvbmx5IGNhcnJpZXMgYSBsb2cgY29uZmlndXJhdGlvbiBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqZG9tYWluOwomIzQzOyNpZmRlZiBDT05GSUdfQVVESVQKJiM0MzsJLyoqCiYjNDM7CSAqIEBsb2dfc3ViZG9tYWluc19vZmY6IE5ldyB2YWx1ZSBvZiB0aGUgY3JlZGVudGlhbHMmIzM5OwomIzQzOwkgKiBAbGFuZGxvY2tfY3JlZF9zZWN1cml0eS5sb2dfc3ViZG9tYWluc19vZmYuCiYjNDM7CSAqLwomIzQzOwl1OCBsb2dfc3ViZG9tYWluc19vZmYgOiAxOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KJiM0Mzt9OwomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAtIENyZWRlbnRpYWwgc2VjdXJpdHkgYmxvYgogICoKQEAgLTM1LDYgJiM0Mzs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7CiAJICovCiAJc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmRvbWFpbjsKIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzOwkvKioKJiM0MzsJICogQHN0YWdlZDogUmVzdHJpY3Rpb24gc3RhZ2VkIGJ5IHRoZSBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIoKSBob29rLAomIzQzOwkgKiBvd25pbmcgaXRzIGRvbWFpbiByZWZlcmVuY2UgYW5kIGFwcGxpZWQgYXQgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZgomIzQzOwkgKiB0aGUgZXhlY3V0aW9uIChicHJtX2NvbW1pdHRpbmdfY3JlZHMpLiAgT25seSBldmVyIHNldCBvbiB0aGUKJiM0MzsJICogY3JlZGVudGlhbHMgcHJlcGFyZWQgZm9yIGFuIGV4ZWN1dGlvbiwgYmV0d2VlbiB0aGUgc3RhZ2luZyBhbmQKJiM0MzsJICogZWl0aGVyIHRoZSBhcHBsaWNhdGlvbiBvciB0aGUgcmVsZWFzZSBvZiB0aGUgYWJvcnRlZCBjcmVkZW50aWFsczsKJiM0MzsJICogY29tbWl0dGVkIHRhc2sgY3JlZGVudGlhbHMgbmV2ZXIgY2FycnkgYSBzdGFnZWQgcmVzdHJpY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gc3RhZ2VkOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqLwomIzQzOwogI2lmZGVmIENPTkZJR19BVURJVAogCS8qKgogCSAqIEBkb21haW5fZXhlYzogQml0bWFzayBpZGVudGlmeWluZyB0aGUgZG9tYWluIGxheWVycyB0aGF0IHdlcmUgZW5mb3JjZWQgYnkKQEAgLTc1LDYgJiM0MzsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2NyZWRfY29weShzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqZHN0LAogCSpkc3QgPSAqc3JjOwogCiAJbGFuZGxvY2tfZ2V0X3J1bGVzZXQoc3JjLSZndDtkb21haW4pOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzOwkvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovCiYjNDM7CVdBUk5fT05fT05DRShzcmMtJmd0O3N0YWdlZC5kb21haW4pOwomIzQzOwlkc3QtJmd0O3N0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovCiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9jdXJyZW50X2RvbWFpbih2b2lkKQpAQCAtMTUzLDYgJiM0MzsxOTYsMTQgQEAgbGFuZGxvY2tfZ2V0X2FwcGxpY2FibGVfc3ViamVjdChjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3QgY3JlZCwKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO2ludCBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKAomIzQzOwljb25zdCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLAomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCwgY29uc3QgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKTsKJiM0MzsKJiM0Mzt2b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsCiYjNDM7CQkJCXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pOwomIzQzOwogX19pbml0IHZvaWQgbGFuZGxvY2tfYWRkX2NyZWRfaG9va3Modm9pZCk7CiAKICNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQ1JFRF9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oCmluZGV4IDA4ZDVmMmY2ZDMyMWEuLjBiZWRmZTY1MGVhMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oCkBAIC0zNyw2ICYjNDM7MzcsMTAgQEAKICNkZWZpbmUgTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGCUxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMKICNkZWZpbmUgTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGCSgoTEFORExPQ0tfTEFTVF9SRVNUUklDVF9TRUxGICZsdDsmbHQ7IDEpIC0gMSkKIAomIzQzOy8qIFN1YnNldCBvZiB0aGUgcmVzdHJpY3Qtc2VsZiBmbGFncyBhcHBsaWNhYmxlIHRvIGFuIGV4ZWN1dGlvbi4gKi8KJiM0MzsjZGVmaW5lIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNIFwKJiM0MzsJKExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRiAmYW1wOyB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykKJiM0MzsKIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0xJTUlUU19IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmMgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmMKaW5kZXggNGRkMDllYTIyYzg0NC4uMTc2YzYyNmY5ZjEwNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuYwpAQCAtNTIwLDcgJiM0Mzs1MjAsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3J1bGVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmNvbnN0IHdvcmspCiAJZnJlZV9ydWxlc2V0KHJ1bGVzZXQpOwogfQogCi0vKiBPbmx5IGNhbGxlZCBieSBob29rX2NyZWRfZnJlZSgpLiAqLwomIzQzOy8qIEZvciBjb250ZXh0cyB0aGF0IGNhbm5vdCBzbGVlcCwgZS5nLiBob29rX2NyZWRfZnJlZSgpLiAqLwogdm9pZCBsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCkKIHsKIAlpZiAocnVsZXNldCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3J1bGVzZXQtJmd0O3VzYWdlKSkgewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oCmluZGV4IDA0MzdhZGYxNzQyODcuLmI2NWQxYzA3ZTE5MmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmgKQEAgLTIyNSw2ICYjNDM7MjI1LDkgQEAgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKgogbGFuZGxvY2tfbWVyZ2VfcnVsZXNldChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcGFyZW50LAogCQkgICAgICAgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQpOwogCiYjNDM7c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLAomIzQzOwkJCQkJCSAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSk7CiYjNDM7CiBjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZSAqCiBsYW5kbG9ja19maW5kX3J1bGUoY29uc3Qgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQsCiAJCSAgIGNvbnN0IHN0cnVjdCBsYW5kbG9ja19pZCBpZCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuYwppbmRleCA0N2RhYzE3MzZmMTAwLi4zYjdlMThlZGFkZmJjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbHNtX2hvb2tzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9sc20uaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7YnBmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2NyZWQuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VycmF0YS5oJiMzNDsKQEAgLTY4LDYgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGxhbmRsb2NrX2luaXQodm9pZCkKIAlsYW5kbG9ja19hZGRfdGFza19ob29rcygpOwogCWxhbmRsb2NrX2FkZF9mc19ob29rcygpOwogCWxhbmRsb2NrX2FkZF9uZXRfaG9va3MoKTsKJiM0MzsJbGFuZGxvY2tfYWRkX2JwZl9ob29rcygpOwogCWxhbmRsb2NrX2luaXRfaWQoKTsKIAlsYW5kbG9ja19pbml0aWFsaXplZCA9IHRydWU7CiAJcHJfaW5mbygmIzM0O1VwIGFuZCBydW5uaW5nLlxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmMKaW5kZXggMzZiMDI4OTJjNjJmNS4uODk5NjAxYWY3YzRlMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jCkBAIC0yOTMsOCAmIzQzOzI5Myw4IEBAIFNZU0NBTExfREVGSU5FMyhsYW5kbG9ja19jcmVhdGVfcnVsZXNldCwKICAqIFJldHVybnMgYW4gb3duZWQgcnVsZXNldCBmcm9tIGEgRkQuIEl0IGlzIHRodXMgbmVlZGVkIHRvIGNhbGwKICAqIGxhbmRsb2NrX3B1dF9ydWxlc2V0KCkgb24gdGhlIHJldHVybiB2YWx1ZS4KICAqLwotc3RhdGljIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpnZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCwKLQkJCQkJCSAgICBjb25zdCBmbW9kZV90IG1vZGUpCiYjNDM7c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLAomIzQzOwkJCQkJCSAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSkKIHsKIAlDTEFTUyhmZCwgcnVsZXNldF9mKShmZCk7CiAJc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7CkBAIC00NzYsNyAmIzQzOzQ3Niw3IEBAIFNZU0NBTExfREVGSU5FNChsYW5kbG9ja19hZGRfcnVsZSwgY29uc3QgaW50LCBydWxlc2V0X2ZkLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi8KLQlydWxlc2V0ID0gZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpOwomIzQzOwlydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpOwogCWlmIChJU19FUlIocnVsZXNldCkpCiAJCXJldHVybiBQVFJfRVJSKHJ1bGVzZXQpOwogCkBAIC01MjgsOSAmIzQzOzUyOCw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLAogewogCXN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0IF9fZnJlZShsYW5kbG9ja19wdXRfcnVsZXNldCkgPSBOVUxMOwogCXN0cnVjdCBjcmVkICpuZXdfY3JlZDsKLQlzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqbmV3X2xsY3JlZDsKLQlib29sIF9fbWF5YmVfdW51c2VkIGxvZ19zYW1lX2V4ZWMsIGxvZ19uZXdfZXhlYywgbG9nX3N1YmRvbWFpbnMsCi0JCXByZXZfbG9nX3N1YmRvbWFpbnM7CiYjNDM7CXN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjsKJiM0MzsJaW50IGVycjsKIAogCWlmICghaXNfaW5pdGlhbGl6ZWQoKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNTQ3LDEzICYjNDM7NTQ2LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsCiAJICAgIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBUcmFuc2xhdGVzICYjMzQ7b2ZmJiMzNDsgZmxhZyB0byBib29sZWFuLiAqLwotCWxvZ19zYW1lX2V4ZWMgPSAhKGZsYWdzICZhbXA7IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NBTUVfRVhFQ19PRkYpOwotCS8qIFRyYW5zbGF0ZXMgJiMzNDtvbiYjMzQ7IGZsYWcgdG8gYm9vbGVhbi4gKi8KLQlsb2dfbmV3X2V4ZWMgPSAhIShmbGFncyAmYW1wOyBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7Ci0JLyogVHJhbnNsYXRlcyAmIzM0O29mZiYjMzQ7IGZsYWcgdG8gYm9vbGVhbi4gKi8KLQlsb2dfc3ViZG9tYWlucyA9ICEoZmxhZ3MgJmFtcDsgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpOwotCiAJLyoKIAkgKiBJdCBpcyBhbGxvd2VkIHRvIHNldCBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiB3aXRoCiAJICogLTEgYXMgcnVsZXNldF9mZCwgb3B0aW9uYWxseSBjb21iaW5lZCB3aXRoCkBAIC01NjQsNyAmIzQzOzU1Niw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLAogCSAgICAgIChmbGFncyAmYW1wOyB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgPT0KIAkJICAgICAgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpKSB7CiAJCS8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi8KLQkJcnVsZXNldCA9IGdldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1JFQUQpOwomIzQzOwkJcnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwKJiM0MzsJCQkJCQkgICAgICAgRk1PREVfQ0FOX1JFQUQpOwogCQlpZiAoSVNfRVJSKHJ1bGVzZXQpKQogCQkJcmV0dXJuIFBUUl9FUlIocnVsZXNldCk7CiAJfQpAQCAtNTc0LDUzICYjNDM7NTY3LDI4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLAogCWlmICghbmV3X2NyZWQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbmV3X2xsY3JlZCA9IGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpOwotCi0jaWZkZWYgQ09ORklHX0FVRElUCi0JcHJldl9sb2dfc3ViZG9tYWlucyA9ICFuZXdfbGxjcmVkLSZndDtsb2dfc3ViZG9tYWluc19vZmY7Ci0JbmV3X2xsY3JlZC0mZ3Q7bG9nX3N1YmRvbWFpbnNfb2ZmID0gIXByZXZfbG9nX3N1YmRvbWFpbnMgfHwKLQkJCQkJICFsb2dfc3ViZG9tYWluczsKLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KLQogCS8qCiAJICogVGhlIG9ubHkgY2FzZSB3aGVuIGEgcnVsZXNldCBtYXkgbm90IGJlIHNldCBpcyBpZgogCSAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX1NVQkRPTUFJTlNfT0ZGIGlzIHNldCAob3B0aW9uYWxseSB3aXRoCiAJICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZAogCSAqIG9wdGltaXplIHRoaXMgY2FzZSBieSBub3QgY2FsbGluZyBjb21taXRfY3JlZHMoKSBpZiB0aGlzIGZsYWcgd2FzCiAJICogYWxyZWFkeSBzZXQsIGJ1dCBpdCBpcyBub3Qgd29ydGggdGhlIGNvbXBsZXhpdHkuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWxlIGNvcHlpbmcgYW5kIG1hbmlwdWxhdGluZwomIzQzOwkgKiB0aGUgY3VycmVudCBjcmVkZW50aWFscyBiZWNhdXNlIHRoZXkgYXJlIGRlZGljYXRlZCBwZXIgdGhyZWFkLgogCSAqLwotCWlmIChydWxlc2V0KSB7Ci0JCS8qCi0JCSAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWxlIGNvcHlpbmcgYW5kCi0JCSAqIG1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBjcmVkZW50aWFscyBiZWNhdXNlIHRoZXkgYXJlCi0JCSAqIGRlZGljYXRlZCBwZXIgdGhyZWFkLgotCQkgKi8KLQkJc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IG5ld19kb20gPQotCQkJbGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLSZndDtkb21haW4sIHJ1bGVzZXQpOwotCQlpZiAoSVNfRVJSKG5ld19kb20pKSB7Ci0JCQlhYm9ydF9jcmVkcyhuZXdfY3JlZCk7Ci0JCQlyZXR1cm4gUFRSX0VSUihuZXdfZG9tKTsKLQkJfQotCi0jaWZkZWYgQ09ORklHX0FVRElUCi0JCW5ld19kb20tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX3NhbWVfZXhlYyA9IGxvZ19zYW1lX2V4ZWM7Ci0JCW5ld19kb20tJmd0O2hpZXJhcmNoeS0mZ3Q7bG9nX25ld19leGVjID0gbG9nX25ld19leGVjOwotCQlpZiAoKCFsb2dfc2FtZV9leGVjICZhbXA7JmFtcDsgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpCi0JCQluZXdfZG9tLSZndDtoaWVyYXJjaHktJmd0O2xvZ19zdGF0dXMgPSBMQU5ETE9DS19MT0dfRElTQUJMRUQ7Ci0jZW5kaWYgLyogQ09ORklHX0FVRElUICovCi0KLQkJLyogUmVwbGFjZXMgdGhlIG9sZCAocHJlcGFyZWQpIGRvbWFpbi4gKi8KLQkJbGFuZGxvY2tfcHV0X3J1bGVzZXQobmV3X2xsY3JlZC0mZ3Q7ZG9tYWluKTsKLQkJbmV3X2xsY3JlZC0mZ3Q7ZG9tYWluID0gbmV3X2RvbTsKLQotI2lmZGVmIENPTkZJR19BVURJVAotCQluZXdfbGxjcmVkLSZndDtkb21haW5fZXhlYyB8PSBCSVQobmV3X2RvbS0mZ3Q7bnVtX2xheWVycyAtIDEpOwotI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwomIzQzOwllcnIgPSBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBydWxlc2V0LAomIzQzOwkJCQkJICAgZmxhZ3MsICZhbXA7cmVzdHJpY3Rpb24pOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlhYm9ydF9jcmVkcyhuZXdfY3JlZCk7CiYjNDM7CQlyZXR1cm4gZXJyOwogCX0KIAomIzQzOwlsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihsYW5kbG9ja19jcmVkKG5ld19jcmVkKSwgJmFtcDtyZXN0cmljdGlvbik7CiYjNDM7CiAJaWYgKGZsYWdzICZhbXA7IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMpIHsKLQkJY29uc3QgaW50IGVyciA9IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcygKLQkJCWN1cnJlbnRfY3JlZCgpLCBuZXdfY3JlZCk7CiYjNDM7CQllcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY3VycmVudF9jcmVkKCksCiYjNDM7CQkJCQkJCW5ld19jcmVkKTsKIAkJaWYgKGVycikgewogCQkJYWJvcnRfY3JlZHMobmV3X2NyZWQpOwogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDIuLmU5ZDhjOTQ5MmJkYjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNTQ0MSw2ICYjNDM7NTQ0MSwxMTIgQEAgaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKQogCXJldHVybiBjYWxsX2ludF9ob29rKGJwZl90b2tlbl9jYXBhYmxlLCB0b2tlbiwgY2FwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKSAtIEdldCBhbiBMU00gcG9saWN5IG9iamVjdCBmcm9tIGEgZmQKJiM0MzsgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gYXNrZWQgdG8gaW50ZXJwcmV0IEBmZAomIzQzOyAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIHJlZmVycmluZyB0byBhIHBvbGljeSBvYmplY3QsIHJlc29sdmVkIGluIHRoZQomIzQzOyAqICAgICAgY2FsbGluZyB0YXNrJiMzOTtzIGZpbGUgZGVzY3JpcHRvciB0YWJsZQomIzQzOyAqIEBwb2xpY3k6IHJlY2VpdmVzIHRoZSByZWZlcmVuY2VkIHBvbGljeSBvYmplY3QgaW4gdGhlIG1lbWJlciBvZiB0aGUKJiM0MzsgKiAgICAgICAgICBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQKJiM0MzsgKgomIzQzOyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHRyYW5zbGF0ZSBAZmQgaW50byBhIHJlZmVyZW5jZQomIzQzOyAqIGNvdW50ZWQgcG9saWN5IG9iamVjdC4gIFRoZSBjYWxsZXIgbXVzdCBub3QgZGVyZWZlcmVuY2UgdGhlCiYjNDM7ICogcmV0dXJuZWQgaGFuZGxlLCBtdXN0IG9ubHkgaGFuZCBpdCBiYWNrIHRvIHRoZSBzYW1lIExTTSwgZS5nLgomIzQzOyAqIHRocm91Z2ggc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCksIGFuZCBtdXN0IHJlbGVhc2UgaXQKJiM0MzsgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpLiAgT25seSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbiBvZgomIzQzOyAqIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgaXMgY2FsbGVkLiAgVGhlIGhvb2sgaXMgb25seSBjYWxsZWQKJiM0MzsgKiBmcm9tIGEgY29udGV4dCB0aGF0IG1heSBzbGVlcC4KJiM0MzsgKgomIzQzOyAqIEFuIGltcGxlbWVudGF0aW9uIG11c3QgZmlsbCBpdHMgb3duIG1lbWJlciBvZiBAcG9saWN5IHdpdGggYQomIzQzOyAqIHJlZmVyZW5jZSB0aGF0IHJlbWFpbnMgdmFsaWQgdW50aWwgaXQgaXMgcmVsZWFzZWQgdGhyb3VnaCB0aGUKJiM0MzsgKiBwb2xpY3lfa3B0cl9wdXQgaG9vaywgYW5kIG11c3Qgbm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBAZmQgYmV5b25kCiYjNDM7ICogd2hhdCBpdHMgb3duIHVzZXJzcGFjZSBBUEkgY3JlYXRlZCBpdCB3aXRoLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgQHBvbGljeSBob2xkcyBhIHJlZmVyZW5jZSBjb3VudGVkIHBvbGljeQomIzQzOyAqIG9iamVjdCwgLUVPUE5PVFNVUFAgaWYgdGhlIExTTSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGhvb2ssIG5lZ2F0aXZlCiYjNDM7ICogdmFsdWVzIG9uIG90aGVyIGZhaWx1cmVzLgomIzQzOyAqLwomIzQzO2ludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLAomIzQzOwkJCQkgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDsKJiM0MzsKJiM0MzsJbHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX2Zyb21fZmQpIHsKJiM0MzsJCWlmIChzY2FsbC0mZ3Q7aGwtJmd0O2xzbWlkLSZndDtpZCAhPSBsc21pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJldHVybiBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2sucG9saWN5X2twdHJfZnJvbV9mZChmZCwgcG9saWN5KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTFNNX1JFVF9ERUZBVUxUKHBvbGljeV9rcHRyX2Zyb21fZmQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKSAtIFB1dCBhIHJlZmVyZW5jZSBvbiBhbiBMU00gcG9saWN5IG9iamVjdAomIzQzOyAqIEBsc21pZDogTFNNX0lEXyogdmFsdWUgb2YgdGhlIExTTSBvd25pbmcgQHBvbGljeQomIzQzOyAqIEBwb2xpY3k6IHRoZSBwb2xpY3kgb2JqZWN0LCBpbiB0aGUgbWVtYmVyIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieQomIzQzOyAqICAgICAgICAgIEBsc21pZAomIzQzOyAqCiYjNDM7ICogUmVsZWFzZSBhIHJlZmVyZW5jZSBwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKJiM0MzsgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCkuICBPbmx5IHRoZSBob29rIGltcGxlbWVudGF0aW9uCiYjNDM7ICogb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpcyBjYWxsZWQsIGFuZCBAcG9saWN5IG11c3QgaGF2ZQomIzQzOyAqIGJlZW4gb2J0YWluZWQgZnJvbSB0aGF0IHNhbWUgTFNNLiAgQW4gaW1wbGVtZW50YXRpb24gbXVzdCBzdXBwb3J0CiYjNDM7ICogYmVpbmcgY2FsbGVkIGZyb20gYSBjb250ZXh0IHRoYXQgY2Fubm90IHNsZWVwOiB0aGUgcmVsZWFzZSBvZiBCUEYKJiM0MzsgKiBtYW5hZ2VkIHJlZmVyZW5jZXMgbWF5IGJlIGRyaXZlbiBmcm9tIG9iamVjdCBkZXN0cnVjdG9ycy4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KQomIzQzO3sKJiM0MzsJc3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7CiYjNDM7CiYjNDM7CWxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBwb2xpY3lfa3B0cl9wdXQpIHsKJiM0MzsJCWlmIChzY2FsbC0mZ3Q7aGwtJmd0O2xzbWlkLSZndDtpZCAhPSBsc21pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXNjYWxsLSZndDtobC0mZ3Q7aG9vay5wb2xpY3lfa3B0cl9wdXQocG9saWN5KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwkvKiBBIGhlbGQgcmVmZXJlbmNlIGltcGxpZXMgdGhlIG1hdGNoaW5nIExTTSBpbXBsZW1lbnRzIHRoZSBob29rLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cigpIC0gRW5mb3JjZSBhIHBvbGljeSBvbiBleGVjIGNyZWRlbnRpYWxzCiYjNDM7ICogQGxzbWlkOiBMU01fSURfKiB2YWx1ZSBvZiB0aGUgTFNNIG93bmluZyBAcG9saWN5CiYjNDM7ICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QKJiM0MzsgKiBAcG9saWN5OiB0aGUgcG9saWN5IG9iamVjdCB0byBlbmZvcmNlLCBpbiB0aGUgbWVtYmVyIG9mIHRoZSBMU00KJiM0MzsgKiAgICAgICAgICBpZGVudGlmaWVkIGJ5IEBsc21pZAomIzQzOyAqIEBmbGFnczogTFNNLXNwZWNpZmljIGVuZm9yY2VtZW50IGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBBc2sgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCB0byByZXN0cmljdCB0aGUgY3JlZGVudGlhbHMKJiM0MzsgKiBwcmVwYXJlZCBpbiBAYnBybSB3aXRoIEBwb2xpY3ksIHNvIHRoYXQgdGhlIGV4ZWN1dGVkIHRhc2sgc3RhcnRzCiYjNDM7ICogY29uZmluZWQgYnkgaXQuICBAcG9saWN5IG11c3QgaGF2ZSBiZWVuIG9idGFpbmVkIGZyb20gdGhlIHNhbWUgTFNNCiYjNDM7ICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCk7IHRoZSBob29rIGJvcnJvd3MgdGhlCiYjNDM7ICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIHJlbWFpbnMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBpdC4KJiM0MzsgKiBPbmx5IHRoZSBob29rIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgaXMKJiM0MzsgKiBjYWxsZWQ6IGFuIExTTSBuZXZlciByZWNlaXZlcyBhIHBvbGljeSBvYmplY3QgbWVhbnQgZm9yIGFub3RoZXIgTFNNLgomIzQzOyAqCiYjNDM7ICogVGhpcyBob29rIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIGFuIGV4ZWMgc2VjdXJpdHkgY29udGV4dCB3aGVyZQomIzQzOyAqIEBicHJtJiMzOTtzIGNyZWRlbnRpYWxzIGFyZSBwcmVwYXJlZCBidXQgbm90IHlldCBjb21taXR0ZWQsIGkuZS4gZnJvbSBhCiYjNDM7ICogYnBybV9jcmVkc19mb3JfZXhlYygpIG9yIGJwcm1fY3JlZHNfZnJvbV9maWxlKCkgaG9vay4KJiM0MzsgKgomIzQzOyAqIEhvdyBAcG9saWN5IGNvbXBvc2VzIHdpdGggcmVzdHJpY3Rpb25zIHRoZSBjcmVkZW50aWFscyBhbHJlYWR5CiYjNDM7ICogY2FycnkgaXMgZGVmaW5lZCBieSB0aGUgaW1wbGVtZW50aW5nIExTTSwgYXMgaXMgdGhlIG1lYW5pbmcgb2YKJiM0MzsgKiBAZmxhZ3MsIHVuc3VwcG9ydGVkIHZhbHVlcyBvZiB3aGljaCBpdCBtdXN0IHJlamVjdCB3aXRoIC1FSU5WQUwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiB0aGUgTFNNIGRvZXMgbm90CiYjNDM7ICogaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZmFpbHVyZXMuCiYjNDM7ICovCiYjNDM7aW50IHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cih1NjQgbHNtaWQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiYjNDM7CQkJCSAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDsKJiM0MzsKJiM0MzsJbHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cikgewomIzQzOwkJaWYgKHNjYWxsLSZndDtobC0mZ3Q7bHNtaWQtJmd0O2lkICE9IGxzbWlkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmV0dXJuIHNjYWxsLSZndDtobC0mZ3Q7aG9vay5icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoYnBybSwgcG9saWN5LAomIzQzOwkJCQkJCQkJIGZsYWdzKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTFNNX1JFVF9ERUZBVUxUKGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZWN1cml0eV9icGZfbWFwX2ZyZWUoKSAtIEZyZWUgYSBicGYgbWFwJiMzOTtzIExTTSBibG9iCiAgKiBAbWFwOiBicGYgbWFwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwppbmRleCBlYTcwNDRmMzBhZGMzLi4yZmE3MzQ0OTc0NjEyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKQEAgLTEyMCw2ICYjNDM7MTIwLDcgQEAgQ09ORklHX1NBTVBMRVM9eQogQ09ORklHX1NBTVBMRV9MSVZFUEFUQ0g9bQogQ09ORklHX1NFQ1VSSVRZPXkKIENPTkZJR19TRUNVUklUWUZTPXkKJiM0MztDT05GSUdfU0VDVVJJVFlfTEFORExPQ0s9eQogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19URVNUX0JQRj1tCiBDT05GSUdfVURNQUJVRj15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0CmluZGV4IDUyM2UwZDI5YmJkNDMuLjJjNGQ4NTdmNjlmNTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0CkBAIC0xMjUsNyAmIzQzOzEyNSw3IEBAIENPTkZJR19MRUdBQ1lfVlNZU0NBTExfTk9ORT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMQogQ09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0wCiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTFNNPSYjMzQ7c2VsaW51eCxicGYsaW50ZWdyaXR5JiMzNDsKJiM0MztDT05GSUdfTFNNPSYjMzQ7bGFuZGxvY2ssc2VsaW51eCxicGYsaW50ZWdyaXR5JiMzNDsKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfTUNPUkUyPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5MTkyOWY5OGU4OGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jCkBAIC0wLDAgJiM0MzsxLDMyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzICZsdDt1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbSZndDsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sYW5kbG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7LyogRmFsbGJhY2tzIGZvciBvbGQgc3lzdGVtIGhlYWRlcnMuICovCiYjNDM7I2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTgomIzQzOyNkZWZpbmUgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT04gKDFVICZsdDsmbHQ7IDEpCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DCiYjNDM7I2RlZmluZSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DICgxVSAmbHQ7Jmx0OyAzKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3J1bGVzZXQodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5oYW5kbGVkX2FjY2Vzc19mcyA9IExBTkRMT0NLX0FDQ0VTU19GU19XUklURV9GSUxFLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LCAmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlc2V0X3Byb2dfc3RhdGUoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwpCiYjNDM7ewomIzQzOwlza2VsLSZndDtic3MtJmd0O2NhbGxlZCA9IGZhbHNlOwomIzQzOwlza2VsLSZndDtic3MtJmd0O25vX3J1bGVzZXQgPSBmYWxzZTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdF9lcnIgPSAtMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdDJfZXJyID0gLTE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7a2Z1bmNfZmxhZ3MgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2RvdWJsZV9jYWxsID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUnVucyB0aGUgc3lzY2FsbCBwcm9ncmFtIHRoYXQgYWNxdWlyZXMgdGhlIHJ1bGVzZXQgZnJvbQomIzQzOyAqIEBydWxlc2V0X2ZkLCBpbiB0aGUgcnVubmVyJiMzOTtzIGZkIHRhYmxlLCBhbmQgcGFya3MgaXQgaW4gdGhlIG1hcCBrcHRyCiYjNDM7ICogc2xvdCBmb3IgdGhlIExTTSBwcm9ncmFtLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbG9hZF9ydWxlc2V0X2ludG9fbWFwKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5sb2FkX3J1bGVzZXQpLAomIzQzOwkJCQkgICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb2FkX3J1bGVzZXRfcnVuJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtsb2FkX3J1bGVzZXRfcmV0dmFsJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O2dvdF9udWxsX2Zvcl9iYWRfZmQsICYjMzQ7YmFkX2ZkX251bGwmIzM0Oyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZvcmtzIGEgY2hpbGQgdGhhdCBleGVjcyAmIzM0O3NoIC1jICYjMzk7Jmx0O3NoZWxsX2NtZCZndDsmIzM5OyYjMzQ7LiAgVGhlIG1vbml0b3JlZCBwaWQKJiM0MzsgKiBpcyBvbmx5IGtub3duLCBhbmQgY2FuIG9ubHkgYmUgcHVibGlzaGVkIHRvIHRoZSBCUEYgcHJvZ3JhbSwgb25jZQomIzQzOyAqIHRoZSBjaGlsZCBleGlzdHM6IHRoZSBjaGlsZCB3YWl0cyBvbiBhIHBpcGUgdW50aWwgdGhlIHBhcmVudCBoYXMKJiM0MzsgKiB1cGRhdGVkIGl0LiAgUmV0dXJucyB0aGUgY2hpbGQmIzM5O3MgZXhpdCBzdGF0dXMsIG9yIC0xIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnVuX2V4ZWNfY2hpbGQoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwsCiYjNDM7CQkJICBib29sIG1vbml0b3JlZCwgY29uc3QgY2hhciAqc2hlbGxfY21kKQomIzQzO3sKJiM0MzsJaW50IHBpcGVfZmRzWzJdLCBzdGF0dXM7CiYjNDM7CWNoYXIgYnVmID0gMDsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKSB7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1swXSk7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1sxXSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQljaGFyICphcmd2W10gPSB7ICYjMzQ7c2gmIzM0OywgJiMzNDstYyYjMzQ7LCAoY2hhciAqKXNoZWxsX2NtZCwgTlVMTCB9OwomIzQzOwomIzQzOwkJY2xvc2UocGlwZV9mZHNbMV0pOwomIzQzOwkJcmVhZChwaXBlX2Zkc1swXSwgJmFtcDtidWYsIDEpOwomIzQzOwkJY2xvc2UocGlwZV9mZHNbMF0pOwomIzQzOwkJZXhlY3YoJiMzNDsvYmluL3NoJiMzNDssIGFyZ3YpOwomIzQzOwkJZXhpdCgxMjcpOwomIzQzOwl9CiYjNDM7CWNsb3NlKHBpcGVfZmRzWzBdKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gbW9uaXRvcmVkID8gcGlkIDogMDsKJiM0MzsJd3JpdGUocGlwZV9mZHNbMV0sICZhbXA7YnVmLCAxKTsKJiM0MzsJY2xvc2UocGlwZV9mZHNbMV0pOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIDApLCBwaWQsICYjMzQ7d2FpdHBpZCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgJiMzNDtjaGlsZF9leGl0ZWQmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEV4aXQgY29kZXM6IDQgPSB1bmV4cGVjdGVkIHdyaXRlIG91dGNvbWUsIDAgPSBldmVyeXRoaW5nIGFzCiYjNDM7ICogZXhwZWN0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZm9ybWF0X2NoaWxkX2NtZChjaGFyICpjbWQsIHNpemVfdCBsZW4sIGJvb2wgZXhwZWN0X3dyaXRlX29rLAomIzQzOwkJCSAgICAgY29uc3QgY2hhciAqdG1wX3BhdGgpCiYjNDM7ewomIzQzOwlpZiAoZXhwZWN0X3dyaXRlX29rKQomIzQzOwkJc25wcmludGYoY21kLCBsZW4sICYjMzQ7ZWNobyB4ICZndDsgJXMgfHwgZXhpdCA0OyBleGl0IDAmIzM0OywgdG1wX3BhdGgpOwomIzQzOwllbHNlCiYjNDM7CQlzbnByaW50ZihjbWQsIGxlbiwKJiM0MzsJCQkgJiMzNDtpZiBlY2hvIHggJmd0OyAlcyAyJmd0Oy9kZXYvbnVsbDsgdGhlbiBleGl0IDQ7IGZpOyBleGl0IDAmIzM0OywKJiM0MzsJCQkgdG1wX3BhdGgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3Jlc3RyaWN0X2JpbnBybSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwgPSBOVUxMOwomIzQzOwljaGFyIHRtcF9wYXRoW10gPSAmIzM0Oy90bXAvbHNtX3BvbGljeV9rZnVuY3NfWFhYWFhYJiMzNDs7CiYjNDM7CWNoYXIgY21kWzI1Nl07CiYjNDM7CWludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDsKJiM0MzsKJiM0MzsJdG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHRtcF9mZCwgMCwgJiMzNDtta3N0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwljbG9zZSh0bXBfZmQpOwomIzQzOwomIzQzOwlydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTsKJiM0MzsJaWYgKHJ1bGVzZXRfZmQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZWxzZQomIzQzOwkJCUFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCAmIzM0O2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0JiMzNDspOwomIzQzOwkJZ290byBvdXRfdW5saW5rOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlza2VsLSZndDtic3MtJmd0O3J1bGVzZXRfZmQgPSBydWxlc2V0X2ZkOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19hdHRhY2goc2tlbCksICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGxvYWRfcnVsZXNldF9pbnRvX21hcChza2VsKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBDb250cm9sOiBhbiB1bm1vbml0b3JlZCBleGVjdXRpb24gbWF5IHdyaXRlIHRvIHRoZSB0bXAgZmlsZS4gKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJZm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCB0cnVlLCB0bXBfcGF0aCk7CiYjNDM7CXJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIGZhbHNlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7Y29udHJvbF9jaGlsZF9leGl0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9GQUxTRShza2VsLSZndDtic3MtJmd0O2NhbGxlZCwgJiMzNDtjb250cm9sX25vdF9tb25pdG9yZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgbW9uaXRvcmVkIGV4ZWN1dGlvbiBzdGFydHMgbGFuZGxvY2tlZDogdGhlIHJ1bGVzZXQgaGFuZGxlcwomIzQzOwkgKiBMQU5ETE9DS19BQ0NFU1NfRlNfV1JJVEVfRklMRSB3aXRob3V0IGFueSBydWxlLCBzbyB0aGUgd3JpdGUKJiM0MzsJICogbXVzdCBmYWlsLgomIzQzOwkgKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJZm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCBmYWxzZSwgdG1wX3BhdGgpOwomIzQzOwlyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7cmVzdHJpY3RlZF9jaGlsZF9leGl0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbGVkLCAmIzM0O2xzbV9wcm9nX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0ZBTFNFKHNrZWwtJmd0O2Jzcy0mZ3Q7bm9fcnVsZXNldCwgJiMzNDtydWxlc2V0X2luX21hcCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3RfZXJyLCAwLCAmIzM0O3Jlc3RyaWN0X2JpbnBybSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIGF1ZGl0IGxvZyBmbGFncyBvZiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGFwcGx5IHRvby4gKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtrZnVuY19mbGFncyA9IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OOwomIzQzOwlmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIGZhbHNlLCB0bXBfcGF0aCk7CiYjNDM7CXJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIHRydWUsIGNtZCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtsb2dfZmxhZ3NfY2hpbGRfZXhpdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdF9lcnIsIDAsICYjMzQ7bG9nX2ZsYWdzX3Jlc3RyaWN0X2JpbnBybSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyB0YXJnZXRzIHRoZSBjYWxsaW5nIHRocmVhZHMsIG5vdAomIzQzOwkgKiBhbiBleGVjdXRpb246IHRoZSBrZnVuYyBtdXN0IHJlamVjdCBpdCBhbmQgdGhlIGV4ZWN1dGlvbiBtdXN0CiYjNDM7CSAqIHN0YXkgdW5yZXN0cmljdGVkLgomIzQzOwkgKi8KJiM0MzsJcmVzZXRfcHJvZ19zdGF0ZShza2VsKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtrZnVuY19mbGFncyA9IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkM7CiYjNDM7CWZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgdHJ1ZSwgdG1wX3BhdGgpOwomIzQzOwlyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7dHN5bmNfY2hpbGRfZXhpdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O2NhbGxlZCwgJiMzNDt0c3luY19wcm9nX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3RfZXJyLCAtRUlOVkFMLCAmIzM0O3RzeW5jX3JlamVjdGVkJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHNlY29uZCBjYWxsIG9uIHRoZSBzYW1lIGV4ZWN1dGlvbiByZXBsYWNlcyB0aGUgc3RhZ2VkCiYjNDM7CSAqIGRvbWFpbiAoYW5kIHJlbGVhc2VzIHRoZSBmaXJzdCBvbmUpOiB0aGUgcmVzdWx0IGlzIGEgc2luZ2xlCiYjNDM7CSAqIHJlc3RyaWN0aW9uLCBub3QgYW4gZXJyb3IuCiYjNDM7CSAqLwomIzQzOwlyZXNldF9wcm9nX3N0YXRlKHNrZWwpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2RvdWJsZV9jYWxsID0gdHJ1ZTsKJiM0MzsJZm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCBmYWxzZSwgdG1wX3BhdGgpOwomIzQzOwlyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7ZG91YmxlX2NoaWxkX2V4aXQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3RfZXJyLCAwLCAmIzM0O2RvdWJsZV9yZXN0cmljdF9maXJzdCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVzdHJpY3QyX2VyciwgMCwgJiMzNDtkb3VibGVfcmVzdHJpY3Rfc2Vjb25kJiMzNDspOwomIzQzO291dDoKJiM0MzsJbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTsKJiM0MzsJY2xvc2UocnVsZXNldF9mZCk7CiYjNDM7b3V0X3VubGluazoKJiM0MzsJdW5saW5rKHRtcF9wYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkCiYjNDM7ICogZG9tYWluIHJlbGVhc2VkLCB3aGVuIHRoZSBleGVjdXRpb24gZmFpbHMgYWZ0ZXIgdGhlIGJwcm0gaG9vazogdGhlCiYjNDM7ICogY2FsbGluZyB0YXNrIG11c3Qgbm90IGVuZCB1cCBsYW5kbG9ja2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcmVzdHJpY3RfYmlucHJtX2Rpc2NhcmQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsID0gTlVMTDsKJiM0MzsJY2hhciB0bXBfcGF0aFtdID0gJiMzNDsvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWCYjMzQ7OwomIzQzOwljaGFyIGdhcmJhZ2VfcGF0aFtdID0gJiMzNDsvdG1wL2xzbV9wb2xpY3lfZ2FyYmFnZV9YWFhYWFgmIzM0OzsKJiM0MzsJaW50IHJ1bGVzZXRfZmQgPSAtMSwgdG1wX2ZkLCBnYXJiYWdlX2ZkLCBwaXBlX2Zkc1syXSwgc3RhdHVzOwomIzQzOwljaGFyIGJ1ZiA9IDA7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsKJiM0MzsJdG1wX2ZkID0gbWtzdGVtcCh0bXBfcGF0aCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHRtcF9mZCwgMCwgJiMzNDtta3N0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwljbG9zZSh0bXBfZmQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbiBleGVjdXRhYmxlIGZpbGUgdGhhdCBubyBiaW5mbXQgaGFuZGxlciBhY2NlcHRzOiB0aGUgZXhlYwomIzQzOwkgKiBmYWlscyB3aXRoIEVOT0VYRUMgYWZ0ZXIgYnBybV9jcmVkc19mb3JfZXhlYygpIGhhcyBydW4uCiYjNDM7CSAqLwomIzQzOwlnYXJiYWdlX2ZkID0gbWtzdGVtcChnYXJiYWdlX3BhdGgpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShnYXJiYWdlX2ZkLCAwLCAmIzM0O21rc3RlbXBfZ2FyYmFnZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X3VubGluazsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod3JpdGUoZ2FyYmFnZV9mZCwgJiMzNDtqdW5rXG4mIzM0OywgNSksIDUsICYjMzQ7d3JpdGVfZ2FyYmFnZSYjMzQ7KSkgewomIzQzOwkJY2xvc2UoZ2FyYmFnZV9mZCk7CiYjNDM7CQlnb3RvIG91dF91bmxpbms7CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfT0soZmNobW9kKGdhcmJhZ2VfZmQsIDA3MDApLCAmIzM0O2NobW9kX2dhcmJhZ2UmIzM0OykpIHsKJiM0MzsJCWNsb3NlKGdhcmJhZ2VfZmQpOwomIzQzOwkJZ290byBvdXRfdW5saW5rOwomIzQzOwl9CiYjNDM7CWNsb3NlKGdhcmJhZ2VfZmQpOwomIzQzOwomIzQzOwlydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTsKJiM0MzsJaWYgKHJ1bGVzZXRfZmQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZWxzZQomIzQzOwkJCUFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCAmIzM0O2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0JiMzNDspOwomIzQzOwkJZ290byBvdXRfdW5saW5rOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlza2VsLSZndDtic3MtJmd0O3J1bGVzZXRfZmQgPSBydWxlc2V0X2ZkOwomIzQzOwlyZXNldF9wcm9nX3N0YXRlKHNrZWwpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19hdHRhY2goc2tlbCksICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGxvYWRfcnVsZXNldF9pbnRvX21hcChza2VsKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQljaGFyICphcmd2W10gPSB7ICYjMzQ7Z2FyYmFnZSYjMzQ7LCBOVUxMIH07CiYjNDM7CQlpbnQgZmQ7CiYjNDM7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1sxXSk7CiYjNDM7CQlyZWFkKHBpcGVfZmRzWzBdLCAmYW1wO2J1ZiwgMSk7CiYjNDM7CQljbG9zZShwaXBlX2Zkc1swXSk7CiYjNDM7CQlleGVjdihnYXJiYWdlX3BhdGgsIGFyZ3YpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBmYWlsZWQgZXhlY3V0aW9uIG11c3QgbGVhdmUgbm8gdHJhY2U6IG5vCiYjNDM7CQkgKiBMYW5kbG9jayBkb21haW4sIGkuZS4gd3JpdGluZyBtdXN0IHN0aWxsIHdvcmsKJiM0MzsJCSAqIChleGl0IDYpLgomIzQzOwkJICovCiYjNDM7CQlmZCA9IG9wZW4odG1wX3BhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyk7CiYjNDM7CQlpZiAoZmQgJmx0OyAwKQomIzQzOwkJCWV4aXQoNik7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlleGl0KDApOwomIzQzOwl9CiYjNDM7CWNsb3NlKHBpcGVfZmRzWzBdKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gcGlkOwomIzQzOwl3cml0ZShwaXBlX2Zkc1sxXSwgJmFtcDtidWYsIDEpOwomIzQzOwljbG9zZShwaXBlX2Zkc1sxXSk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCksIHBpZCwgJiMzNDt3YWl0cGlkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksICYjMzQ7Y2hpbGRfZXhpdGVkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCAwLCAmIzM0O2Rpc2NhcmRfY2hpbGRfZXhpdCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtjYWxsZWQsICYjMzQ7bHNtX3Byb2dfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZXN0cmljdF9lcnIsIDAsICYjMzQ7cmVzdHJpY3RfYmlucHJtJiMzNDspOwomIzQzO291dDoKJiM0MzsJbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTsKJiM0MzsJaWYgKHJ1bGVzZXRfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHJ1bGVzZXRfZmQpOwomIzQzO291dF91bmxpbms6CiYjNDM7CXVubGluayhnYXJiYWdlX3BhdGgpOwomIzQzOwl1bmxpbmsodG1wX3BhdGgpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfbHNtX3BvbGljeV9rZnVuY3Modm9pZCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7cmVzdHJpY3RfYmlucHJtJiMzNDspKQomIzQzOwkJdGVzdF9yZXN0cmljdF9iaW5wcm0oKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyZXN0cmljdF9iaW5wcm1fZGlzY2FyZCYjMzQ7KSkKJiM0MzsJCXRlc3RfcmVzdHJpY3RfYmlucHJtX2Rpc2NhcmQoKTsKJiM0MzsJUlVOX1RFU1RTKGxzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjAzMzVkYjU0NzA0MDAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jCkBAIC0wLDAgJiM0MzsxLDEwMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzICZsdDt1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbSZndDsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0OwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKgomIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkCiYjNDM7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCkgX19rc3ltOwomIzQzO2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAomIzQzOwkJCQkJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LAomIzQzOwkJCQkJdTMyIGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgTFNNIHBvbGljeSBrZnVuY3MgYXJlIGxpbWl0ZWQgdG8gTFNNIGFuZCBzeXNjYWxsIHByb2dyYW1zIGJ5CiYjNDM7ICogdGhlIEJQRi1zaWRlIGtmdW5jIGZpbHRlcjogYSB0cmFjaW5nIHByb2dyYW0gY2FsbGluZyBvbmUgbXVzdCBmYWlsCiYjNDM7ICogdmVyaWZpY2F0aW9uLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3RwX2J0Zi90YXNrX25ld3Rhc2smIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0OwomIzQzOwomIzQzOwlydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpOwomIzQzOwlpZiAocnVsZXNldCkKJiM0MzsJCWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChydWxlc2V0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBydWxlc2V0IGZkIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiB0aGUgZmQgdGFibGUgb2YgdGhlIHRhc2sgdGhhdAomIzQzOyAqIHNldCB0aGUgcnVsZXNldCB1cDogdGhlIGFjcXVpcmUga2Z1bmMgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGwKJiM0MzsgKiBwcm9ncmFtcyBhbmQgbXVzdCBiZSByZWplY3RlZCBpbiBhbiBMU00gcHJvZ3JhbSwgZXZlbiBvbiBhbgomIzQzOyAqIGFsbG93ZWQgaG9vay4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0cobHNtX2dldCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDsKJiM0MzsKJiM0MzsJcnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTsKJiM0MzsJaWYgKHJ1bGVzZXQpCiYjNDM7CQlicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVuZm9yY2VtZW50IG5lZWRzIGFuIGV4ZWN1dGlvbiB0byByZXN0cmljdDogdGhlIGVuZm9yY2VtZW50IGtmdW5jCiYjNDM7ICogaXMgZXhjbHVzaXZlIHRvIHRoZSBzbGVlcGFibGUgYnBybSBMU00gaG9va3MgYW5kIG11c3QgYmUgcmVqZWN0ZWQKJiM0MzsgKiBpbiBhIHN5c2NhbGwgcHJvZ3JhbS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSBpcyBub3QgYWxsb3dlZCYjMzQ7KQomIzQzO2ludCBzeXNjYWxsX3Jlc3RyaWN0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKE5VTEwsIE5VTEwsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFueSBMU00gYXR0YWNoIHBvaW50IG90aGVyIHRoYW4gdGhlIHNsZWVwYWJsZSBicHJtIGhvb2tzIG11c3QgYmUKJiM0MzsgKiByZWplY3RlZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtsc20ucy9maWxlX29wZW4mIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0cod3JvbmdfaG9vaywgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoTlVMTCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBrZnVuY3MgbWF5IHNsZWVwOiBhIG5vbi1zbGVlcGFibGUgcHJvZ3JhbSBvbiBhbiBhbGxvd2VkIGhvb2sKJiM0MzsgKiBtdXN0IGJlIHJlamVjdGVkLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O2xzbS9icHJtX2NyZWRzX2Zvcl9leGVjJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhub25zbGVlcGFibGVfcHJvZywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChOVUxMKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIGFjcXVpcmVkIHJ1bGVzZXQgcmVmZXJlbmNlIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHJldHVybmluZy4gKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UmIzM0OykKJiM0MztpbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEwNzIwNmFlMTQ0ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMKQEAgLTAsMCAmIzQzOzEsMTA3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgJmx0O3V0aWxpdHllbWFsNzdAZ21haWwuY29tJmd0OyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0OwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKgomIzQzO2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkCiYjNDM7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCkgX19rc3ltOwomIzQzO2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAomIzQzOwkJCQkJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LAomIzQzOwkJCQkJdTMyIGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IHJ1bGVzZXRfc2xvdCB7CiYjNDM7CXN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCBfX2twdHIgKnJ1bGVzZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgcnVsZXNldF9zbG90KTsKJiM0Mzt9IHJ1bGVzZXRfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBydWxlc2V0X2ZkOwomIzQzO3UzMiBrZnVuY19mbGFnczsKJiM0Mztib29sIGRvdWJsZV9jYWxsOwomIzQzO2Jvb2wgZ290X251bGxfZm9yX2JhZF9mZDsKJiM0Mztib29sIG5vX3J1bGVzZXQ7CiYjNDM7aW50IHJlc3RyaWN0X2VycjsKJiM0MztpbnQgcmVzdHJpY3QyX2VycjsKJiM0Mztib29sIGNhbGxlZDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJ1bnMgaW4gdGhlIHRlc3QgcnVubmVyJiMzOTtzIGNvbnRleHQgdGhyb3VnaCBCUEZfUFJPR19SVU46CiYjNDM7ICogQHJ1bGVzZXRfZmQgaXMgcmVzb2x2ZWQgaW4gdGhlIHJ1bm5lciYjMzk7cyBmZCB0YWJsZSBhbmQgdGhlIGFjcXVpcmVkCiYjNDM7ICogcnVsZXNldCBpcyBoYW5kZWQgdG8gdGhlIExTTSBwcm9ncmFtIHRocm91Z2ggdGhlIG1hcCBrcHRyIHNsb3QuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBsb2FkX3J1bGVzZXQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkOwomIzQzOwlzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90OwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJc2xvdCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtydWxlc2V0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXNsb3QpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJLyogQSBmZCB0aGF0IGlzIG5vdCBhIExhbmRsb2NrIHJ1bGVzZXQgbXVzdCByZXNvbHZlIHRvIE5VTEwuICovCiYjNDM7CXJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7CiYjNDM7CWlmICghcnVsZXNldCkKJiM0MzsJCWdvdF9udWxsX2Zvcl9iYWRfZmQgPSB0cnVlOwomIzQzOwllbHNlCiYjNDM7CQlicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7CiYjNDM7CiYjNDM7CXJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkKTsKJiM0MzsJaWYgKCFydWxlc2V0KQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDtzbG90LSZndDtydWxlc2V0LCBydWxlc2V0KTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChvbGQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtLnMvYnBybV9jcmVkc19mb3JfZXhlYyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhyZXN0cmljdF9leGVjLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkOwomIzQzOwlzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90OwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKG1vbml0b3JlZF9waWQgIT0gKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljYWxsZWQgPSB0cnVlOwomIzQzOwomIzQzOwlzbG90ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3J1bGVzZXRfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghc2xvdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlydWxlc2V0ID0gYnBmX2twdHJfeGNoZygmYW1wO3Nsb3QtJmd0O3J1bGVzZXQsIE5VTEwpOwomIzQzOwlpZiAoIXJ1bGVzZXQpIHsKJiM0MzsJCW5vX3J1bGVzZXQgPSB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVzdHJpY3RfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LCBrZnVuY19mbGFncyk7CiYjNDM7CWlmIChkb3VibGVfY2FsbCkKJiM0MzsJCS8qIFJlcGxhY2VzIHRoZSBkb21haW4gc3RhZ2VkIGJ5IHRoZSBmaXJzdCBjYWxsLiAqLwomIzQzOwkJcmVzdHJpY3QyX2VyciA9IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oYnBybSwgcnVsZXNldCwKJiM0MzsJCQkJCQkJICAgICBrZnVuY19mbGFncyk7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIHJ1bGVzZXQgZm9yIHRoZSBuZXh0IG1vbml0b3JlZCBleGVjdXRpb24uICovCiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDtzbG90LSZndDtydWxlc2V0LCBydWxlc2V0KTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChvbGQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTQ3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgTGFuZGxvY2sgQlBGIEtmdW5jcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBCUEYga2Z1bmNzIGZvciBMYW5kbG9jayBMU00sIHdoaWNoIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFkZGl0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgbmVlZHMgZnV6emluZywgYW5kIGl0IG5lZWRzIGZ1enppbmcgKnRob3JvdWdobHkqLiYjMzQ7IEkgc2VlIHdlJiMzOTtyZSBhZGRpbmcgdGhlc2UgbmV3IEJQRiBrZnVuY3M6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGFuZCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgLiBQbHVzLCB0aGVyZSBhcmUgdGhlc2UgTFNNIGhvb2tzIG5vdzogYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYW5kIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLiBUaGVzZSBhbGwgbmVlZCB0byBiZSBhIHByaW9yaXR5IGZvciB0ZXN0aW5nLgoKVGhlIGZ1bmN0aW9uYWwgYXNwZWN0cyBvZiBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgYXJlIGtleSB0byB1bmRlcnN0YW5kIHdpdGggcmVnYXJkIHRvIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldyBrZnVuY3MgYW5kIGhvb2tzLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBGcm9tIGEgY29kZSBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5ldyBrZnVuY3MgYW5kIGhvb2tzLiBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBpbiB0aGUgZnV6emluZyBzY29wZS4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVgIHNvIGBsYW5kbG9jay0kKENPTkZJR19CUEZfTFNNKSAmIzQzOz0gYnBmLm9gLiBTbywgYENPTkZJR19CUEZfTFNNYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBJdCBhbHNvIG1ha2VzIHNlbnNlIHRoYXQgYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AgaXMgbmVlZGVkLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgZm9yIHRoZSBCUEYgZnVuY3Rpb25hbGl0eSBpdHNlbGYuIEdvdCBpdC4gTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0PTE1MD1leGNlcHRpb24gb2YgYGBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QtMTUyLS4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvYnBmL2JwZl9sc20uY1xuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3Q6MTUzOiAgICA6aWRlbnRpZmllcnM6IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdC0xNTQtICAgICAgICAgICAgICAgICAgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0XG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDU3PWludCBicGZfbHNtX2dldF9yZXR2YWxfcmFuZ2UoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQ4Mi0gKiBPcGFxdWUgaGFuZGxlIGZvciBhIExhbmRsb2NrIHJ1bGVzZXQuICBPbmx5XG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0ODM6ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBwcm9kdWNlcyBvbmUsIGFuZCBvbmx5IExhbmRsb2NrXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00ODQtICogcmVzb2x2ZXMgaXQuXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDk3PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00OTktLyoqXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo1MDA6ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgLSBHZXQgYSBMYW5kbG9jayBydWxlc2V0IGZyb20gYSBmZFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTAxLSAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIG9mIGEgTGFuZGxvY2sgcnVsZXNldCwgcmVzb2x2ZWQgaW4gdGhlIGZpbGVcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYz01MTU9X19icGZfa2Z1bmMgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUxNjpicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpXG5rZXJuZWwvYnBmL2JwZl9sc20uYy01MTcte1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTUyOC0gKlxua2VybmVsL2JwZi9icGZfbHNtLmM6NTI5OiAqIFJlbGVhc2UgYSByZWZlcmVuY2UgYWNxdWlyZWQgd2l0aCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpLlxua2VybmVsL2JwZi9icGZfbHNtLmMtNTMwLSAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTU4NT1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo1ODY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkLFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTg3LVx0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NTk2PUJURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfaWRzLCBmdW5jLFxua2VybmVsL2JwZi9icGZfbHNtLmM6NTk3Olx0XHQgICBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZClcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTU5OC1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHMsIGZ1bmMsXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmMtNjA1LSAqIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgc29cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjYwNjogKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIGlzIGV4Y2x1c2l2ZSB0byBzeXNjYWxsXG5rZXJuZWwvYnBmL2JwZl9sc20uYy02MDctICogcHJvZ3JhbXMsIHdoaWNoIHJ1biBpbiB0aGF0IHRhc2smIzM5O3MgY29udGV4dDsgYW4gTFNNIHByb2dyYW0gcnVucyBpblxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9MTM9ZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjE0OmJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0xNS1leHRlcm4gdm9pZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9MjY9U0VDKFwmIzM0O3RwX2J0Zi90YXNrX25ld3Rhc2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjI3Ol9fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMtMjgtaW50IEJQRl9QUk9HKHRyYWNpbmdfcHJvZywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6MzI6XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMy1cdGlmIChydWxlc2V0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9NDQ9U0VDKFwmIzM0O2xzbS5zL2Jwcm1fY3JlZHNfZm9yX2V4ZWNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjQ1Ol9fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMtNDYtaW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy00OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6NTA6XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy01MS1cdGlmIChydWxlc2V0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9OTY9aW50IGxlYWtfcnVsZXNldCh2b2lkICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk3LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6OTg6XHRicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk5LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYz0xMj1leHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM6MTM6YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTE0LWV4dGVybiB2b2lkXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYz00Nz1pbnQgbG9hZF9ydWxlc2V0KHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTU3LVx0LyogQSBmZCB0aGF0IGlzIG5vdCBhIExhbmRsb2NrIHJ1bGVzZXQgbXVzdCByZXNvbHZlIHRvIE5VTEwuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jOjU4Olx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMtNTktXHRpZiAoIXJ1bGVzZXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYy02My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM6NjQ6XHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTY1LVx0aWYgKCFydWxlc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGFuZGxvY2sgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gTGFuZGxvY2ssIHNwZWNpZmljYWxseSB3aXRoIHRoZSBhZGRpdGlvbiBvZiBuZXcgQlBGIGtmdW5jcy4gSSBzZWUgd2UgaGF2ZToKCiogICBgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRgCiogICBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0YAoqICAgYGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1gCiogICBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgCgpUaGVzZSBhcmUga2V5LiBUaGF0IHNldCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBhaW1pbmcgZm9yIGRlZXBlciBpbnRlZ3JhdGlvbiB3aXRoIEJQRiBmb3IgTGFuZGxvY2sgcG9saWN5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXkgaW50ZW5kIHRvIHVzZSB0aGVzZSBpbiByZWxhdGlvbiB0byB0aGUgZXhpc3RpbmcgTGFuZGxvY2sgc3lzdGVtLgoKQmV5b25kIHRoZSBrZnVuY3MsIGl0IHNlZW1zIHdlIGFsc28gaGF2ZSB1cGRhdGVzIHRvIHRoZSBMU00gaG9va3MuIFRoZSBjb2RlIGlzIGltcGxlbWVudGluZyBob29rcyBmb3IgYm90aCBnZW5lcmljIExTTSAocHJlc3VtYWJseSB0aGUgQlBGIGJhc2VkIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIExhbmRsb2NrIHNwZWNpZmljIG9wZXJhdGlvbnM6CgoqICAgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAKKiAgIGBob29rX3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgaG9va19wb2xpY3lfa3B0cl9wdXRgLCBgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHNgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAKClRoaXMgY29uZmlybXMgdGhhdCBCUEYgaXMgbWVhbnQgdG8gYWxsb3cgTGFuZGxvY2sgdG8gYmUgZXZlbiBtb3JlIGZpbmUtZ3JhaW5lZCBpbiBpdHMgZW5mb3JjZW1lbnQsIGFuZCBwb3NzaWJseSB0byBwZXJtaXQgZm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIG9mIHBvbGljaWVzLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVjaGFuaWNzIG9mIGAqX2twdHJgIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgcG9saWN5IHN0cnVjdHVyZXMuCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGxldCYjMzk7cyBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHNvcnRlZC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgSSBrbm93IHRoYXQ6CgoqICAgYENPTkZJR19CUEZfTFNNYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBrZnVuY3MgdG8gYmUgcmVnaXN0ZXJlZCwgd2hpY2ggbWFrZXMgc2Vuc2UsIHNpbmNlIHRoZXkgYXJlIEJQRi4KKiAgIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgIGlzIG9idmlvdXNseSBuZWVkZWQgdG8gZW5hYmxlIExhbmRsb2NrIGl0c2VsZi4KKiAgIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQgZm9yIEJQRiBzeXNjYWxsIHN1cHBvcnQsIHNvIHByb2JhYmx5IHVzZWQgdG8gY2FsbCB0aGUga2Z1bmNzLgoqICAgYENPTkZJR19TRUNVUklUWWAgaXMgcmVxdWlyZWQgZm9yIExTTSBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY29uc3VsdCBgc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCBsaWtlIG1heWJlIHNvbWUgb3RoZXIgTGFuZGxvY2sgZmVhdHVyZXMgb3IgaGVscGVyIGNvZGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBCUEYgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMi1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6Mzpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7TGFuZGxvY2sgc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjMtXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19LVU5JVF9URVNUXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgTGFuZGxvY2tcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBMYW5kbG9jayBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZywgdGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBsb29rIGJleW9uZCB0aGUgb2J2aW91cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGFuZCBjb25zaWRlciBob3cgTGFuZGxvY2smIzM5O3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZS4gV2hhdCBmZWF0dXJlcyBpcyBpdCBjb250aW5nZW50IG9uPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzZWN1cml0eSBzdWJzeXN0ZW1zLCBtYXliZSBTRUxpbnV4IG9yIEFwcEFybW9yLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgcHJvcGVyIGNvLWV4aXN0ZW5jZSBhbmQgYXZvaWQgYW55IGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzPyBJdCYjMzk7cyBjcnVjaWFsIEkgZ3Jhc3AgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IExhbmRsb2NrIGlzIGludGVncmF0ZWQgYW5kIHdoZXJlIGl0cyBjb25maWd1cmF0aW9uIGtub2JzIGNhbiBwb3RlbnRpYWxseSBpbmZsdWVuY2UgdGhlIHJlc3Qgb2YgdGhlIHNlY3VyaXR5IGxhbmRzY2FwZS4gVGhpcyBLY29uZmlnIGZpbGUgaG9sZHMgdGhlIGtleSB0byBjb25maWd1cmluZyBMYW5kbG9jayBjb3JyZWN0bHksIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudCBpcyBwYXJhbW91bnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xuICAgNDpcdFx0Ym9vbCBcJiMzNDtMYW5kbG9jayBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gICA2Olx0XHRzZWxlY3QgU0VDVVJJVFlfTkVUV09SS1xuICAgNzpcdFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTGFuZGxvY2sgaXMgYSBzYW5kYm94aW5nIG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgcHJvY2Vzc2VzIHRvIHJlc3RyaWN0XG4gIDEwOlx0XHQgIHRoZW1zZWx2ZXMgKGFuZCB0aGVpciBmdXR1cmUgY2hpbGRyZW4pIGJ5IGdyYWR1YWxseSBlbmZvcmNpbmdcbiAgMTE6XHRcdCAgdGFpbG9yZWQgYWNjZXNzIGNvbnRyb2wgcG9saWNpZXMuICBBIExhbmRsb2NrIHNlY3VyaXR5IHBvbGljeSBpcyBhXG4gIDEyOlx0XHQgIHNldCBvZiBhY2Nlc3MgcmlnaHRzIChlLmcuIG9wZW4gYSBmaWxlIGluIHJlYWQtb25seSwgbWFrZSBhXG4gIDEzOlx0XHQgIGRpcmVjdG9yeSwgZXRjLikgdGllZCB0byBhIGZpbGUgaGllcmFyY2h5LiAgU3VjaCBwb2xpY3kgY2FuIGJlXG4gIDE0Olx0XHQgIGNvbmZpZ3VyZWQgYW5kIGVuZm9yY2VkIGJ5IGFueSBwcm9jZXNzZXMgZm9yIHRoZW1zZWx2ZXMgdXNpbmcgdGhlXG4gIDE1Olx0XHQgIGRlZGljYXRlZCBzeXN0ZW0gY2FsbHM6IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KCksXG4gIDE2Olx0XHQgIGxhbmRsb2NrX2FkZF9ydWxlKCksIGFuZCBsYW5kbG9ja19yZXN0cmljdF9zZWxmKCkuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbGFuZGxvY2sucnN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuICAxOTpcdFxuICAyMDpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLiAgT3RoZXJ3aXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBzZWN1cml0eToKCioqVGhpbmtpbmcgQWJvdXQgTGFuZGxvY2sgYW5kIEJQRiBMU00qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBvbiBteSBtaW5kIHJpZ2h0IG5vdyBpcyB0aGUgYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZm9jdXMsIHRoZSBjZW50cmFsIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBJdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBnZXQgcmlnaHQuIEJ1dCBvZiBjb3Vyc2UsIHlvdSBjYW4mIzM5O3QganVzdCBlbmFibGUgTGFuZGxvY2sgaW4gaXNvbGF0aW9uLiBJIGFsc28ga25vdyB0aGF0IGBDT05GSUdfQlBGX0xTTWAgaXMgYSBwcmVyZXF1aXNpdGUsIHRoYXQmIzM5O3MgY3JpdGljYWwgdG8gbWFrZSBMYW5kbG9jayB3b3JrIGFzIGV4cGVjdGVkLiBTbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19CUEZfTFNNYCBpcyBlbmFibGVkIGFsb25nc2lkZSBgQ09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLYCwgdGhlc2UgdHdvIGNvbXBvbmVudHMgYXJlIGNsb3NlbHkgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGIExTTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQlBGIExTTS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIHNpbmNlIGl0IHNlZW1zIHRvIGJlIHdoZXJlIGFsbCB0aGluZ3MgQlBGLXJlbGF0ZWQgYXJlIGRlZmluZWQuIEkgZXhwZWN0IGBCUEZfTFNNYCBzaG91bGQgYmUgZGVmaW5lZCBvciByZWZlcmVuY2VkIGluIHRoZXJlIGlmIGl0JiMzOTtzIGEgY29uZmlndXJhYmxlIG9wdGlvbiBmb3IgdXNpbmcgQlBGIHdpdGggTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGVzKS4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGFueSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBCUEZfTFNNYCBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBCUEYgYW5kIGtlcm5lbCBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJQRl9MU01cbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAgOTU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgOTY6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTc6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuICA5ODpcdFx0aGVscFxuICA5OTpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTAwOlx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gMTAzOlx0XG4gMTA0Olx0ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQlBGIExTTSBhbmQgTGFuZGxvY2sgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGRlcGVuZGVuY3kgbGFuZHNjYXBlIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBDT05GSUdfQlBGX0xTTWAgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBHb29kIHRvIGtub3cuIE1vdmluZyBmb3J3YXJkLCBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IEkgZW5hYmxlIGBCUEZfTFNNYCwgYFNFQ1VSSVRZX0xBTkRMT0NLYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBTRUNVUklUWWAgaW4gbXkgY29uZmlndXJhdGlvbnMuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCB0aGUgcmVhbCBmb2N1cyDigJMgaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIHByaW1lIGNhbmRpZGF0ZXMgc2VlbSB0byBiZTogYGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGAsIGBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtYCwgYW5kIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGFsb25nIHdpdGggYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCwgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgdGVzdGluZyB0aGUgQlBGIGludGVncmF0aW9uIHdpdGggTGFuZGxvY2sgYW5kIHRoZSBzZWN1cml0eSBwb2xpY2llcy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIGFsc28gcGVyZm9ybSBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBlbnRpcmUgYHNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jYCBmaWxlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGNhbmRpZGF0ZXMuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIGFuZCBpZGVudGlmeSBhbGwgcmVsZXZhbnQgYXR0YWNrIHN1cmZhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLipob29rXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTI1LVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MjY6c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTI3LXtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0zNy1cbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jOjM4OnN0YXRpYyB2b2lkIGhvb2tfcG9saWN5X2twdHJfcHV0KHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMzkte1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jPTUyPXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTYwLVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6NjE6c3RhdGljIGludCBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtNjItXHRcdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSxcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0xMDQtXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYzoxMDU6c3RhdGljIHZvaWQgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHMoY29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTEwNi17XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTE4LVxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MTE5OnN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGxhbmRsb2NrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTIwLVx0TFNNX0hPT0tfSU5JVChwb2xpY3lfa3B0cl9mcm9tX2ZkLCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTGFuZGxvY2sgQlBGIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIExhbmRsb2NrIEJQRiBmdW5jdGlvbnMuIEkmIzM5O20gbG9va2luZyBhdCBgc2VjdXJpdHkvbGFuZGxvY2svYnBmLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9uczogYGhvb2tfcG9saWN5X2twdHJfZnJvbV9mZGAsIGBob29rX3BvbGljeV9rcHRyX3B1dGAsIGBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGFuZCBgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHNgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYyAqY291bGQqIG1lYW4gdGhleSYjMzk7cmUgaW5saW5lZCwgb3IgbGFjayBkaXN0aW5jdCBzeW1ib2xzLiBIb3dldmVyLCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhleSYjMzk7cmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBMU01fSE9PS19JTklUYCwgd2hpY2ggbWVhbnMgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBUaGV5JiMzOTtsbCBoYXZlIHRoZWlyIG93biB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4KCk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZmF2b3JzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIFNvLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhvc2UgZW50cnlwb2ludHMuIE9rYXksIGhlcmUgdGhleSBhcmU6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkYCwgYHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dGAsIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGFuZCBgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25gLgoKSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGxhdHRlciB0d28sIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCwgc28gSSYjMzk7bGwgZ28gb3ZlciB0byBgc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jYCB0byBjb25maXJtIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtNDEtICovXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmM6NDI6aW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtNDMtXHRjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipBbmFseXppbmcgdGhlIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdpdGggYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBpcyB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGVuZm9yY2luZyBzZWN1cml0eSBib3VuZGFyaWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBmaWxlIHN5c3RlbSBhY2Nlc3MuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHRoZSBjb3JlIG9mIExhbmRsb2NrJiMzOTtzIHJlc3RyaWN0aW9uIG1lY2hhbmlzbXMuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgdmFyaW91cyBMYW5kbG9jayBydWxlcy4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzLCBleHBlY3Rpbmcgc29tZXRoaW5nIGxpa2UgYSByZXN0cmljdGlvbiB0eXBlLCBwZXJoYXBzIGEgZmlsZSBkZXNjcmlwdG9yIG9yIHBhdGgsIGFuZCBzb21lIGtpbmQgb2YgYWNjZXNzIHBlcm1pc3Npb25zIGJpdG1hc2sgb3IgZmxhZy4gSeKAmW0gYWxzbyBnb2luZyB0byBiZSBleGFtaW5pbmcgdGhlIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCwgc3VjaCBhcyB3aGF0IGhhcHBlbnMgaWYgdGhlIHJlc3RyaWN0aW9uIGZhaWxzLCBvciBpZiB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4gSSYjMzk7bGwgZXhwZWN0IHRvIHNlZSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIG91dGxpbmluZyBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBhbnkgY2F2ZWF0cyBhc3NvY2lhdGVkIHdpdGggaXRzIHVzZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJhY2UgY29uZGl0aW9ucyBvciBzaWRlLWNoYW5uZWwgYXR0YWNrcy4gVW5kZXJzdGFuZGluZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgTGFuZGxvY2sgZnVuY3Rpb25zIGlzIGFsc28gZXNzZW50aWFsLCBjb25zaWRlcmluZyBpdOKAmXMgYSBrZXkgcGllY2Ugb2YgdGhlIExhbmRsb2NrIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay9jcmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jPTQyPWludCBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYy05OC0gKi9cbnNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYzo5OTp2b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtMTAwLVx0XHRcdFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0OTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgdGhhdCAqYXJlbiYjMzk7dCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZCBpbiBhIHdheSB0aGF0IHN0YXRpYyBvbmVzIGFyZW4mIzM5O3QsIG1ha2luZyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGFuYWx5c2lzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kLCBzcGVjaWZpY2FsbHksIGlmIHRoZXkmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggYW55dGhpbmcgc2VjdXJpdHktc2Vuc2l0aXZlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGdvaW5nIHRvIGh1bnQgZm9yIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGludm9sdmVkIGluIGRlcml2aW5nIGtlcm5lbCBwb2ludGVycyBmcm9tIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoLCBpZiBtaXNoYW5kbGVkLCBjb3VsZCBiZSBhIHNlcmlvdXMgdnVsbmVyYWJpbGl0eS4gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBub3cgbXkgcHJpbWFyeSBmb2N1cy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMgYW55IHBhdGh3YXlzIGZvciB1bmludGVuZGVkIGtlcm5lbCBtZW1vcnkgYWNjZXNzIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaGlzIGludmVzdGlnYXRpb24gaXMgbm93IHRvcCBwcmlvcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTU0Mzk9aW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTQ2OC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTQ2OTppbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTQ3MC1cdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRlZXAgRGl2ZSBvbiBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dGAsIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwgcG9pbnRlciBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjbGVhbnVwIGNvdW50ZXJwYXJ0IHRvIHNvbWV0aGluZyBsaWtlIGEgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2dldGAsIHNvIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCByaWdodD8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUga2VybmVsIHBvaW50ZXJzIGhlcmUsIGxpa2VseSBhc3NvY2lhdGVkIHdpdGggc29tZSBzZWN1cml0eSBjb250ZXh0IG9yIHBvbGljeSBkYXRhLgoKVGhlIGRlc2lnbiBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhci4gVGhlIHByZXNlbmNlIG9mIGBfcHV0YCBpbXBsaWVzIGEgY29ycmVzcG9uZGluZyBgX2dldGAsIGFuZCB0aGF0IHRoZSBrZXJuZWwgcG9pbnRlciBpcyBwcm90ZWN0ZWQgYnkgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGlzIGlzIHRoZSBjb21tb24gcGF0dGVybi4gVGhlIGdvYWwgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGxlYWsgdGhpcyBpbmZvcm1hdGlvbi4gSXQgYWxzbyBwcmV2ZW50cyBkYW5nbGluZyBwb2ludGVycywgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBldmVuIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy4gU28sIHdoYXQgc3BlY2lmaWMgc2VjdXJpdHkgcG9saWNpZXMgaXMgdGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGg/IFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEga2VybmVsLWludGVybmFsIGRhdGEgc3RydWN0dXJlIHNvIHRoZSBwb2xpY2llcyBoYXZlIHRvIGJlIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGRhdGEgc3RheXMgd2l0aGluIHRoZSBzeXN0ZW0sIHdpdGhvdXQgbGVha2FnZSBvciBtaXN1c2UuCgpOb3csIEkmIzM5O20gYWxyZWFkeSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zLiBXaGF0IGhhcHBlbnMgaWYgdGhpcyBgX3B1dGAgaXMgY2FsbGVkIHByZW1hdHVyZWx5LCBvciBpbiB0aGUgd3Jvbmcgc2VxdWVuY2U/IElzIHRoZXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXM/IEFyZSB3ZSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnQgc2FmZWx5PyBJJiMzOTttIG1lbnRhbGx5IHRyYWNpbmcgdGhlIHBvc3NpYmxlIGNvZGUgcGF0aHMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpbmsgYWJvdXQgaXQgLSBhIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBiZSBhIGdvbGRtaW5lIGZvciBhbiBhdHRhY2tlciEKCkJleW9uZCBzaW1wbGUgcmVmZXJlbmNlIGNvdW50IGlzc3VlcywgSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUga2VybmVsIHBvaW50ZXIuIFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgZGF0YSBzdHJ1Y3R1cmU/IElzIGl0IHNlbnNpdGl2ZT8gSXMgaXQgc3RydWN0dXJlZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gY2xlYXJseSBhYm91dCBob3cgdG8gcHJvdGVjdCBpdD8gV2UmIzM5O3JlIGxvb2tpbmcgYXQgcG9saWN5IGRhdGEsIHNvIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgaW4gYm90aCBpbnN0YW5jZXMuIFNvLCB0aGUgaW1wbGljYXRpb25zIG9mIGEgdnVsbmVyYWJpbGl0eSBpbiB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJ5IHNlcmlvdXMuCgpGaW5hbGx5LCBJJiMzOTttIHBvbmRlcmluZyB0aGUgY29udGV4dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHksIGZyb20gYSBzaW5nbGUgdGhyZWFkLCBvciBpcyBpdCBpbnZva2VkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCBvciBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBncmVhdGx5IGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBzYWZldHkgYW5kIHJlc2lsaWVuY2UuIFRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkIHdpbGwgYmUgb2YgZ3JlYXQgaW50ZXJlc3QgdG8gbWUgYXMgd2VsbC4gQW5kIEkgYmV0IHRoZXJlIGFyZSBhdWRpdCBwb2ludHMsIHRvbywgc29tZXdoZXJlIGRvd24gdGhlIGxpbmUuLi4gbGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTU0Njk9aW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy01NDk0LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo1NDk1OnZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG5zZWN1cml0eS9zZWN1cml0eS5jLTU0OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IHJlZmxlY3Rpbmcgb24gdGhlIHRob3VnaHQgcHJvY2VzcyByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb246CgoqKkFuYWx5emluZyBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCoqCgpSaWdodCwgbGV0IG1lIHRoaW5rIGFib3V0IHRoaXMgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAgZnVuY3Rpb24uIEl0cyB2ZXJ5IG5hbWUgc2NyZWFtcyAmIzM0O3NlY3VyaXR5JiMzNDsgYW5kICYjMzQ7cG9saWN5IGVuZm9yY2VtZW50JiMzNDsgcmVsYXRlZCB0byB0aGUgYGJwcm1gIHN0cnVjdHVyZSwgd2hpY2ggSSBrbm93IGludGltYXRlbHkuIEl04oCZcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSB3aGVuIHdlIGNvbnNpZGVyIGhvdyBhIG5ldyBwcm9jZXNzIGNvbWVzIHRvIGxpZmUgaW4gdGhlIGtlcm5lbCwgYW5kIGhvdyB3ZSBrZWVwIGl0IGNvbXBsaWFudCB3aXRoIG91ciBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUuIFRoZSBga3B0cmAgc3VmZml4IGxpa2VseSBpbmRpY2F0ZXMgdGhpcyBpc24mIzM5O3QgdGhlIHJhdyBmdW5jdGlvbiBidXQgc29tZXRoaW5nIHVzZWQgdmlhIGtlcm5lbCBwb2ludGVyLCBpbmRpY2F0aW5nIGEgY2VydGFpbiBkZWdyZWUgb2YgaW5kaXJlY3Rpb24gYW5kIHBvdGVudGlhbCBmb3Igc2VjdXJpdHkgY2hlY2tzIG9yIGR5bmFtaWMgZGlzcGF0Y2guCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB3aGF0IGl0IGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGluIHZhbGlkYXRpbmcgdGhlIGV4ZWN1dGFibGUmIzM5O3MgbGVnaXRpbWFjeSBhbmQgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGFjdHVhbGx5ICpzdGFydCogdGhhdCBwcm9jZXNzLiBUaGUgJiMzNDtwb2xpY3kmIzM0OyBwYXJ0IHN1Z2dlc3RzIGl0IGludGVncmF0ZXMgd2l0aCwgb3IgaXMgdGhlIGVudHJ5IHBvaW50IGZvciwgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXgsIEFwcEFybW9yLCBvciBtYXliZSBldmVuIGN1c3RvbSBMU01zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IGl0IHJlY2VpdmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0YWJsZSwgaXRzIGNvbnRleHQsIGFuZCB0aGUgcmVxdWVzdGluZyBwcm9jZXNzLiBJIGV4cGVjdCBpdCYjMzk7cyBnaXZlbiBhY2Nlc3MgdG8gdGhlIGBicHJtYCBzdHJ1Y3R1cmUsIGJ1dCB3aGF0IHNwZWNpZmljIGRhdGEgZmllbGRzIGlzIGl0IGFjY2Vzc2luZyB3aXRoaW4gdGhlcmU/IElzIGl0IGNoZWNraW5nIHRoZSBmaWxlIHBhdGgsIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgZXhlY3V0YWJsZSBmaWxlLCBhbnkgZXh0ZW5kZWQgYXR0cmlidXRlcyAobGlrZSBzZWN1cml0eSBsYWJlbHMpPyBXaGF0IGFib3V0IHRoZSBjYWxsaW5nIHByb2Nlc3MmIzM5O3MgY3JlZGVudGlhbHMgYW5kIGNhcGFiaWxpdGllcz8gRG9lcyB0aGlzIGZ1bmN0aW9uIG1hbmFnZSBhbnkgc3RhdGU/IEZvciBleGFtcGxlLCBkb2VzIGl0IGNhY2hlIG9yIHByZS1jYWxjdWxhdGUgaW5mb3JtYXRpb24gZm9yIHN1YnNlcXVlbnQgY2hlY2tzPwoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gQSBzdWJ0bGUgYnVnIGhlcmUgY291bGQgYWxsb3cgYSBtYWxpY2lvdXMgYWN0b3IgdG8gYnlwYXNzIHNlY3VyaXR5IHJlc3RyaWN0aW9ucywgYnkgZXhwbG9pdGluZyBhIHJhY2UgY29uZGl0aW9uLCBhIGZhdWx0eSBkYXRhIGNoZWNrLCBvciBieSBwcm92aWRpbmcgY3JhZnRlZCBpbnB1dC4gVGhlIGltcGFjdCBjb3VsZCBiZSBkZXZhc3RhdGluZywgbGVhZGluZyB0byBwcml2aWxlZ2UgZXNjYWxhdGlvbiBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24uIEkgbmVlZCB0byBiZSB0aGlua2luZyBhYm91dCB3YXlzIHRoZSBmdW5jdGlvbiBjb3VsZCBiZSB0cmlja2VkLCBzdWNoIGFzIGhhbmRsaW5nIHBhdGhzIHdpdGggc3ltYm9saWMgbGlua3MsIG9yIGV2ZW4gbWVtb3J5IGNvcnJ1cHRpb24gcG9zc2liaWxpdGllcy4KCkkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJcyBpdCBjYWxsZWQgZWFybHkgaW4gdGhlIGBleGVjdmVgIHBhdGgsIG9yIGxhdGVyIG9uPyBBcmUgdGhlcmUgb3RoZXIgc2VjdXJpdHkgY2hlY2tzIHRoYXQgaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGlzPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBIb3cgZG9lcyBpdCBzaWduYWwgYSBwb2xpY3kgdmlvbGF0aW9uIOKAkyBkb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCBsb2cgYSBtZXNzYWdlLCBvciB0cmlnZ2VyIGEga2VybmVsIHBhbmljPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoIG90aGVyIHN1YnN5c3RlbXMgaXMga2V5LgoKTXkgZm9jdXMgaGFzIHRvIGJlOiBkYXRhIGl0IHVzZXMsIGFuZCBob3cgdGhhdCBkYXRhIGlzIGNoZWNrZWQsIGFuZCBob3cgdGhlIGNhbGwgaXMgbWFuYWdlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgcHJvY2VzcyBjcmVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlY3VyaXR5LmM9NTQ5NT12b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTUzNS0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTUzNjppbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTUzNy1cdFx0XHRcdCAgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzMxCgkJCQkJCQlvdXRwdXQ6IDI0NAoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMYW5kbG9jayBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBMYW5kbG9jayBCUEYgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgQlBGIGtmdW5jcyB0aGF0IGludGVyZmFjZSB3aXRoIHRoZSBMYW5kbG9jayBMU00uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbiwgYXMgaXQgZW5hYmxlcyBCUEYgcHJvZ3JhbXMgdG8gYWN0aXZlbHkgZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBkdXJpbmcgcHJvY2VzcyBleGVjdXRpb24uIFRoaXMgbWVhbnMgd2UgaGF2ZSAqbmV3KiByZWFjaGFibGUgY29kZSBwYXRocyB3aXRoaW4gYm90aCB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLiBUaGF0JiMzOTtzIGEgY2xlYXIgc2lnbmFsIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cywgaW4gdGVybXMgb2Ygc3ltYm9sIGNvdmVyYWdlLCBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZnVuY3M6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkYCwgYHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dGAsIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGFuZCBgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgY29udHJvbCBmbG93IHBhdGhzIHJlbGF0ZWQgdG8gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKT2YgY291cnNlLCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBpbXBvcnRhbnQ6IGBCUEZfTFNNYCwgYFNFQ1VSSVRZX0xBTkRMT0NLYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBTRUNVUklUWWAuIEhvd2V2ZXIsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9MU01gLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWdzIHRvIGVuc3VyZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlLiBBaCwgeWVzLCBgQ09ORklHX0JQRl9MU01gIGRlcGVuZHMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBUaHVzLCBgQlBGX0VWRU5UU2AsIGBCUEZfSklUYCBhcmUgdmVyeSBpbXBvcnRhbnQsIGFuZCBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIGFueSBmdXp6aW5nIHNldHVwLgoKSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvdmVyZWQgYW5kIGhvdyB0byBzdHJ1Y3R1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTEFORExPQ0smIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0JiMzNDssCiAgICAmIzM0O2JwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0mIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3ImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyJiMzNDssCiAgICAmIzM0O2xhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24mIzM0OywKICAgICYjMzQ7bGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBMYW5kbG9jayBMU00sIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBlbmZvcmNlIExhbmRsb2NrIHJ1bGVzZXRzIG9uIGV4ZWN1dGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIEJQRiBhbmQgTGFuZGxvY2sgc3Vic3lzdGVtcywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9MQU5ETE9DSyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQmIzM0OywKICAgICYjMzQ7YnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSYjMzQ7LAogICAgJiMzNDticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHImIzM0OywKICAgICYjMzQ7bGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbiYjMzQ7LAogICAgJiMzNDtsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIExhbmRsb2NrIExTTSwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgb24gZXhlY3V0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6MjcuOTA2NTE1ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY5NTU3Nzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9MQU5ETE9DS1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybVwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dFwiLFxuICAgIFwic2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyXCIsXG4gICAgXCJsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uXCIsXG4gICAgXCJsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBvbiBleGVjdXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBCUEYgYW5kIExhbmRsb2NrIHN1YnN5c3RlbXMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA3OjI3LjkwNjUyMDc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgwNjUwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZWI2ZGE5NGViYzUxNWE2ZWQ0MmY4OTJmMTkyYTBiYzFlZmRlNTc5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTE6MDc6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxcbmluZGV4IGM1MTg2NTI2ZTc2ZjYuLjAxMTk3Yzc1ODBlYzAgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxcbkBAIC0xMjksNiArMTI5LDMxIEBAIFRoZSByZWFzb25pbmcgaXM6XFxuICAgcmVzdHJpY3Rpb25zLCBiZWNhdXNlIGFjY2VzcyB3aXRoaW4gdGhlIHNhbWUgc2NvcGUgaXMgYWxyZWFkeVxcbiAgIGFsbG93ZWQgYmFzZWQgb24gYGBMQU5ETE9DS19BQ0NFU1NfRlNfUkVTT0xWRV9VTklYYGAuXFxuIFxcbitCUEYga2Z1bmNzXFxuKz09PT09PT09PT1cXG4rXFxuK0JQRiBwcm9ncmFtcyBjYW4gYXBwbHkgYSB1c2Vyc3BhY2UtY3JlYXRlZCBMYW5kbG9jayBydWxlc2V0IHRvIGFuXFxuK2V4ZWN1dGlvbi4gIEEgc3lzY2FsbCBwcm9ncmFtIChgYEJQRl9QUk9HX1RZUEVfU1lTQ0FMTGBgKSwgcnVubmluZyBpblxcbit0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgYWNxdWlyZXMgdGhlXFxuK3J1bGVzZXQgZnJvbSBpdHMgZmlsZSBkZXNjcmlwdG9yIGFuZCB0eXBpY2FsbHkgaGFuZHMgaXQgb3ZlciB0aHJvdWdoXFxuK2EgbWFwIGtwdHIgZmllbGQ7IGEgc2xlZXBhYmxlIExTTSBCUEYgcHJvZ3JhbSBhdHRhY2hlZCB0byB0aGVcXG4rYGBicHJtX2NyZWRzX2Zvcl9leGVjYGAgb3IgYGBicHJtX2NyZWRzX2Zyb21fZmlsZWBgIGhvb2tzIHRoZW5cXG4rZW5mb3JjZXMgaXQgb24gYW4gZXhlY3V0aW9uLlxcbitcXG4rVGhpcyBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBydW50aW1lIGNvbnRleHQgb2YgYSBwZW5kaW5nIGV4ZWN1dGlvbixcXG4rYW5kIGVuZm9yY2UgYSBMYW5kbG9jayBwb2xpY3kgdGhyb3VnaCBCUEYuXFxuK1xcbitUaGUgcmVzdHJpY3Rpb24gaXMgc3RhZ2VkIGluIHRoZSBMYW5kbG9jayBibG9iIG9mIHRoZVxcbitjcmVkZW50aWFscyBwcmVwYXJlZCBmb3IgdGhlIGV4ZWN1dGlvbiBhbmQgY29tbWl0dGVkIHBhc3QgdGhlIGV4ZWNcXG4rcG9pbnQgb2Ygbm8gcmV0dXJuLCBzbyBhIGZhaWxlZCBleGVjdXRpb24gbGVhdmVzIHRoZSBjYWxsaW5nIHRhc2tcXG4rdW50b3VjaGVkLiAgVGhlIGBgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKWBgIGZsYWdzIGFwcGx5LCB3aXRoIHRoZVxcbitleGNlcHRpb24gb2YgYGBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DYGAuXFxuK1xcbisuLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmNcXG4rICAgIDppZGVudGlmaWVyczogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcXG4rICAgICAgICAgICAgICAgICAgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0XFxuKyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cXG4rXFxuIFRlc3RzXFxuID09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3QgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcXG5pbmRleCA1ODk1ZTUyOWRhN2ZmLi5mYzNhZjIwNmU3OTUwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbHNtLWRldmVsb3BtZW50LnJzdFxcbkBAIC0xNSwzICsxNSwzMCBAQCBzZWUgYGBzZWN1cml0eS9zZWN1cml0eS5jYGAgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlczpcXG4gXFxuIC4uIGtlcm5lbC1kb2M6OiBzZWN1cml0eS9zZWN1cml0eS5jXFxuICAgIDpleHBvcnQ6XFxuK1xcbitMU00gcG9saWN5IGtwdHIgaG9va3MgYW5kIEJQRiBrZnVuY3NcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitUaGUgTFNNIGZyYW1ld29yayBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3IgaW5kaXZpZHVhbCBMU01zIHRvXFxuK2V4cG9zZSB0aGVpciBjb25maWd1cmF0aW9uIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQga3B0cnMuIEFuIExTTVxcbittYXkgbm90IGV4cG9ydCBhbnkga2Z1bmMgb3Igb3RoZXIgQlBGIGludGVyZmFjZSBkaXJlY3RseS5cXG4rXFxuK0FuIExTTSB3aXNoaW5nIHRvIGV4cG9zZSBhIEJQRiBrZnVuYyBtdXN0IHJldXNlIGFuIGV4aXN0aW5nIHNlY3VyaXR5XFxuK2hvb2sgb3IgaW1wbGVtZW50IGEgbmV3IHN1ZmZpY2llbnRseSBnZW5lcmljIExTTSBob29rIGZvciB0aGUgZGVzaXJlZFxcbitpbnRlcmZhY2UuIFRoZSBob29rcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSBrZnVuYyBkZWZpbml0aW9ucyBpblxcbitgYGtlcm5lbC9icGZgYC4gVGhpcyBhbGxvd3MgTFNNIGhvb2tzIHRvIHJlbWFpbiBzdWZmaWNpZW50bHkgZ2VuZXJpY1xcbit3aGlsZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN0cm9uZyB0eXBpbmdcXG4rYW5kIHJ1bnRpbWUgY2hlY2tpbmcgb2ZmZXJlZCBieSB0aGUgQlBGIHZlcmlmaWVyLlxcbitcXG4rVGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGltcGxlbWVudHMgdGhlIG9wZXJhdGlvbidzIGhvb2sgd2l0aFxcbitgYExTTV9IT09LX0lOSVQoKWBgIGxpa2UgYW55IG90aGVyIGhvb2suIEEgQlBGIHByb2dyYW0gY2FsbGluZyBhblxcbitMU00ga2Z1bmMgdGhlcmVmb3JlIHJlYWNoZXMgdGhlIExTTSB0aGUgc2FtZSB3YXkgZXZlcnkgb3RoZXJcXG4ra2VybmVsIGNhbGxlciBkb2VzOiB0aHJvdWdoIGFuIExTTSBob29rLiBUaGUgaG9va3MgYmFja2luZyBrZnVuY3NcXG4rZm9sbG93IHRoZSB1c3VhbCBydWxlcyBmb3IgbmV3IExTTSBob29rczogdGhlaXIgY29udHJhY3QgbXVzdCBiZVxcbitMU00gYWdub3N0aWMgc28gdGhhdCBvdGhlciBMU01zIGNvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsXFxuK2ltcGxlbWVudGF0aW9uIG9mIHRoZSBzYW1lIG9wZXJhdGlvbi5cXG4rXFxuK1doZXRoZXIgdGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGlzIGJ1aWx0IGluIGFuZCBhY3RpdmUgaXMgYVxcbitydW50aW1lIHByb3BlcnR5OiB0aGUga2Z1bmNzIGFyZSBhbHdheXMgcmVnaXN0ZXJlZCB3aGVuXFxuK2BgQ09ORklHX0JQRl9MU01gYCBpcyBlbmFibGVkLiBCUEYgcHJvZ3JhbSBsb2FkaW5nIGlzIHRodXNcXG4raW5kZXBlbmRlbnQgb2YgdGhlIGJvb3QtdGltZSBMU00gY29uZmlndXJhdGlvbi5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcuLmE3MGVkYmQ3Yjc2MWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC00NTIsNiArNDUyLDExIEBAIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NyZWF0ZSwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIHVuaW9uIGJwZl9hdHRyICphdHRyXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgYnBmX3Rva2VuX2ZyZWUsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuKVxcbiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jbWQsIGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBlbnVtIGJwZl9jbWQgY21kKVxcbiBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jYXBhYmxlLCBjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcXG4rTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgcG9saWN5X2twdHJfZnJvbV9mZCwgaW50IGZkLFxcbitcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuK0xTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgcG9saWN5X2twdHJfcHV0LCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG4rTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG4gTFNNX0hPT0soaW50LCAwLCBsb2NrZWRfZG93biwgZW51bSBsb2NrZG93bl9yZWFzb24gd2hhdClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmOC4uNDBkZmE5NmI2YTcxOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5AQCAtMTY4LDYgKzE2OCwyMyBAQCBzdHJ1Y3QgbHNtX3Byb3Age1xcbiBcXHRzdHJ1Y3QgbHNtX3Byb3BfYnBmIGJwZjtcXG4gfTtcXG4gXFxuK3N0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldDtcXG4rXFxuK3N0cnVjdCBsc21fcG9saWN5X2xhbmRsb2NrIHtcXG4rXFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xcbit9O1xcbitcXG4rLypcXG4rICogQSByZWZlcmVuY2UgdG8gYW4gTFNNIHBvbGljeSBvYmplY3QsIHRhZ2dlZCBieSB0aGUgTFNNX0lEXyogdmFsdWVcXG4rICogcGFzc2VkIGFsb25nc2lkZTogb25seSB0aGUgbWF0Y2hpbmcgTFNNJ3MgbWVtYmVyIGlzIHZhbGlkLiAgVGhlXFxuKyAqIG1lbWJlcnMgYXJlIG5vdCBndWFyZGVkIGJ5IHRoZSBMU01zJyBDT05GSUcgb3B0aW9uczogdGhlIGNhbGxlcnNcXG4rICogYXJlIGJ1aWx0IGluZGVwZW5kZW50bHkgb2YgYW55IGluZGl2aWR1YWwgTFNNIGFuZCBhIGNhbGwgZm9yIGFcXG4rICogbWlzc2luZyBMU00gbXVzdCBmYWlsIGF0IHJ1bnRpbWUsIG5vdCBhdCBidWlsZCB0aW1lLlxcbisgKi9cXG4rdW5pb24gbHNtX3BvbGljeV9rcHRyIHtcXG4rXFx0c3RydWN0IGxzbV9wb2xpY3lfbGFuZGxvY2sgbGFuZGxvY2s7XFxuK307XFxuK1xcbiBleHRlcm4gY29uc3QgY2hhciAqY29uc3QgbG9ja2Rvd25fcmVhc29uc1tMT0NLRE9XTl9DT05GSURFTlRJQUxJVFlfTUFYKzFdO1xcbiBcXG4gLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBzZWN1cml0eS9jb21tb25jYXAuYyAqL1xcbkBAIC0yMzEyLDYgKzIzMjksMTMgQEAgZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY3JlYXRlKHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXRcXG4gZXh0ZXJuIHZvaWQgc2VjdXJpdHlfYnBmX3Rva2VuX2ZyZWUoc3RydWN0IGJwZl90b2tlbiAqdG9rZW4pO1xcbiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jbWQoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGVudW0gYnBmX2NtZCBjbWQpO1xcbiBleHRlcm4gaW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKTtcXG4rZXh0ZXJuIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxcbitcXHRcXHRcXHRcXHRcXHR1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7XFxuK2V4dGVybiB2b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KTtcXG4rZXh0ZXJuIGludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmKGludCBjbWQsIHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHNpemUsIGJvb2wga2VybmVsKVxcbkBAIC0yMzY1LDYgKzIzODksMjUgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludFxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cih1NjQgbHNtaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbmluZGV4IDM5ODNiNGNlNzNjODEuLjY3YWE5MDJmMTI1NzAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbkBAIC0xNCw4ICsxNCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbG9jYWxfc3RvcmFnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2ZpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi1jZ3JvdXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbHNtLmhcXHUwMDNlXFxuIFxcbiAvKiBGb3IgZXZlcnkgTFNNIGhvb2sgdGhhdCBhbGxvd3MgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMsIGRlY2xhcmUgYSBub3BcXG4gICogZnVuY3Rpb24gd2hlcmUgYSBCUEYgcHJvZ3JhbSBjYW4gYmUgYXR0YWNoZWQuIE5vdGFibHksIHdlIHF1YWxpZnkgZWFjaCB3aXRoXFxuQEAgLTU2LDYgKzU4LDkgQEAgQlRGX0lEKGZ1bmMsIGJwZl9sc21feGZybV9kZWNvZGVfc2Vzc2lvbilcXG4gI2VuZGlmXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lzbWFjbGFiZWwpXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2ZpbGVfYWxsb2Nfc2VjdXJpdHkpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX2Zyb21fZmQpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX3B1dClcXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21fYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKVxcbiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKVxcbiBcXG4gLyogTGlzdCBvZiBMU00gaG9va3MgdGhhdCBzaG91bGQgb3BlcmF0ZSBvbiAnY3VycmVudCcgY2dyb3VwIHJlZ2FyZGxlc3NcXG5AQCAtNDcwLDMgKzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuKy8qIExTTSBwb2xpY3kga2Z1bmNzICovXFxuK1xcbisvKlxcbisgKiBPcGFxdWUgaGFuZGxlIGZvciBhIExhbmRsb2NrIHJ1bGVzZXQuICBPbmx5XFxuKyAqIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKCkgcHJvZHVjZXMgb25lLCBhbmQgb25seSBMYW5kbG9ja1xcbisgKiByZXNvbHZlcyBpdC5cXG4rICovXFxuK3N0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCB7fTtcXG4rXFxuKy8qXFxuKyAqIFRoZSBzbGVlcGFibGUgTFNNIGhvb2tzIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oKSBhbmRcXG4rICogYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KCkgbWF5IGJlIGNhbGxlZCBmcm9tLlxcbisgKi9cXG4rQlRGX1NFVF9TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaG9va3MpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZm9yX2V4ZWMpXFxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZnJvbV9maWxlKVxcbitCVEZfU0VUX0VORChicGZfbGFuZGxvY2tfa2Z1bmNfaG9va3MpXFxuK1xcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuK1xcbisvKipcXG4rICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgLSBHZXQgYSBMYW5kbG9jayBydWxlc2V0IGZyb20gYSBmZFxcbisgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciBvZiBhIExhbmRsb2NrIHJ1bGVzZXQsIHJlc29sdmVkIGluIHRoZSBmaWxlXFxuKyAqICAgICAgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgdGFzayBydW5uaW5nIHRoZSBwcm9ncmFtXFxuKyAqXFxuKyAqIEFjcXVpcmUgYSByZWZlcmVuY2Ugb24gdGhlIExhbmRsb2NrIHJ1bGVzZXQgcmVmZXJyZWQgdG8gYnkgQGZkLCBhc1xcbisgKiBjcmVhdGVkIGJ5IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KDIpIGFuZCBwb3B1bGF0ZWQgd2l0aFxcbisgKiBsYW5kbG9ja19hZGRfcnVsZSgyKS4gIE9ubHkgc3lzY2FsbCBwcm9ncmFtcyBtYXkgY2FsbCB0aGlzIGtmdW5jOlxcbisgKiB0aGV5IHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgdGFzayBpbnZva2luZyB0aGVtLCB3aGVyZSB0aGVcXG4rICogcnVsZXNldCBmZCBpcyBtZWFuaW5nZnVsLiAgVGhlIGFjcXVpcmVkIHJ1bGVzZXQgY2FuIGJlIGhhbmRlZCB0byBhblxcbisgKiBlbmZvcmNlbWVudCBwcm9ncmFtIHRocm91Z2ggYSBtYXAga3B0ciBmaWVsZC4gIFRoZSByZWZlcmVuY2UgbXVzdFxcbisgKiBiZSByZWxlYXNlZCB3aXRoIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCgpLlxcbisgKlxcbisgKiBSZXR1cm46IEEgcmVmZXJlbmNlZCBydWxlc2V0IGhhbmRsZSwgb3IgTlVMTCBpZiBAZmQgaXMgbm90IGFcXG4rICogcmVhZGFibGUgTGFuZGxvY2sgcnVsZXNldCBmZCBvciB0aGUgTGFuZGxvY2sgTFNNIGlzIG5vdCBlbmFibGVkLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcXG4rYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKVxcbit7XFxuK1xcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3k7XFxuK1xcbitcXHRpZiAoc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZChMU01fSURfTEFORExPQ0ssIGZkLCBcXHUwMDI2cG9saWN5KSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBwb2xpY3kubGFuZGxvY2sucnVsZXNldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCAtIFB1dCBhIExhbmRsb2NrIHJ1bGVzZXRcXG4rICogQHJ1bGVzZXQ6IExhbmRsb2NrIHJ1bGVzZXQgdG8gcHV0XFxuKyAqXFxuKyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgYWNxdWlyZWQgd2l0aCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KVxcbit7XFxuK1xcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9O1xcbitcXG4rXFx0c2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KExTTV9JRF9MQU5ETE9DSywgXFx1MDAyNnBvbGljeSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtIC0gRW5mb3JjZSBhIExhbmRsb2NrIHJ1bGVzZXQgb24gZXhlY1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHNcXG4rICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG9cXG4rICogICAgICAgIHJlc3RyaWN0XFxuKyAqIEBydWxlc2V0OiBMYW5kbG9jayBydWxlc2V0IHRvIGVuZm9yY2VcXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLCBleGNlcHRcXG4rICogICAgICAgICAlTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xcbisgKlxcbisgKiBSZXN0cmljdCB0aGUgY3JlZGVudGlhbHMgcHJlcGFyZWQgaW4gQGJwcm0gd2l0aCBAcnVsZXNldCwgc28gdGhhdFxcbisgKiB0aGUgZXhlY3V0ZWQgdGFzayBzdGFydHMgY29uZmluZWQgYnkgaXQsIGZvbGxvd2luZyB0aGUgc2FtZSBkb21haW5cXG4rICogY29tcG9zaXRpb24gcnVsZXMgYXMgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKS4gIFRoZSByZXN0cmljdGlvbiBpc1xcbisgKiBzdGFnZWQgYW5kIG9ubHkgY29tbWl0dGVkIGF0IHRoZSBleGVjdXRpb24ncyBwb2ludCBvZiBubyByZXR1cm46IGFuXFxuKyAqIGV4ZWN1dGlvbiB0aGF0IGZhaWxzIGJlZm9yZSB0aGF0IHBvaW50IGlzIHVuYWZmZWN0ZWQsIGFuZCBhIGxhdGVyXFxuKyAqIGNhbGwgb24gdGhlIHNhbWUgZXhlY3V0aW9uIHJlcGxhY2VzIGEgcHJldmlvdXNseSBzdGFnZWRcXG4rICogcmVzdHJpY3Rpb24uICBAcnVsZXNldCBpcyBvbmx5IGJvcnJvd2VkOiB0aGUgY2FsbGVyIGtlZXBzIGl0c1xcbisgKiByZWZlcmVuY2UuXFxuKyAqXFxuKyAqIFRoZSBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzIGFwcGx5IHdpdGggdGhlaXIgdXN1YWxcXG4rICogc2VtYW50aWNzLiAgT25seSAlTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyBpcyByZWplY3RlZCwgYXMgaXRcXG4rICogdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzIHJhdGhlciB0aGFuIHRoZSBleGVjdXRpb24uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiB0aGUgTGFuZGxvY2sgTFNNIGlzIG5vdFxcbisgKiBlbmFibGVkLCAtRUlOVkFMIGlmIEBmbGFncyBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBmbGFnLCBvdGhlclxcbisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZSBhcyBmb3IgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKS5cXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncylcXG4re1xcbitcXHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTtcXG4rXFxuK1xcdHJldHVybiBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoTFNNX0lEX0xBTkRMT0NLLCBicHJtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBvbGljeSwgZmxhZ3MpO1xcbit9XFxuK1xcbisvKiBEZXN0cnVjdG9yIGZvciByZWZlcmVuY2VkIGJwZl9sYW5kbG9ja19ydWxlc2V0IGtwdHJzLiAqL1xcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yKHZvaWQgKnJ1bGVzZXQpXFxuK3tcXG4rXFx0dW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07XFxuK1xcbitcXHRzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoTFNNX0lEX0xBTkRMT0NLLCBcXHUwMDI2cG9saWN5KTtcXG4rfVxcbitDRklfTk9TRUFMKGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yKTtcXG4rXFxuK19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuK1xcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCxcXG4rXFx0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQsIEtGX1JFTEVBU0UgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXFxuK1xcbitCVEZfSURfTElTVChicGZfbGFuZGxvY2tfZHRvcl9pZHMpXFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KVxcbitCVEZfSUQoZnVuYywgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3IpXFxuK1xcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYyxcXG4rXFx0XFx0ICAgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQpXFxuK0JURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtX2lkcywgZnVuYyxcXG4rXFx0XFx0ICAgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSlcXG4rXFxuKy8qXFxuKyAqIEJQRl9QUk9HX1RZUEVfTFNNIGFuZCBCUEZfUFJPR19UWVBFX1NZU0NBTEwgc2hhcmUgdGhlaXIga2Z1bmNcXG4rICogbG9va3VwIGJ1Y2tldHMgd2l0aCBvdGhlciBwcm9ncmFtIHR5cGVzLCBzbyByZXN0cmljdGluZyB0aGUgTFNNXFxuKyAqIHBvbGljeSBrZnVuY3MgcmVxdWlyZXMgYSBmaWx0ZXIuICBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsXFxuKyAqIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgc29cXG4rICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBpcyBleGNsdXNpdmUgdG8gc3lzY2FsbFxcbisgKiBwcm9ncmFtcywgd2hpY2ggcnVuIGluIHRoYXQgdGFzaydzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cXG4rICogdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaXQgbWVkaWF0ZXMuICBFbmZvcmNlbWVudCBpcyBleGNsdXNpdmUgdG9cXG4rICogdGhlIHNsZWVwYWJsZSBicHJtIExTTSBob29rcyB0aGUgcG9saWN5IG9wZXJhdGlvbiBpcyBzcGVjaWZpZWRcXG4rICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmVcXG4rICogaGVsZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4re1xcbitcXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfbGFuZGxvY2tfa2Z1bmNfaWRzLCBrZnVuY19pZCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0c3dpdGNoIChwcm9nLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgQlBGX1BST0dfVFlQRV9TWVNDQUxMOlxcbitcXHRcXHRpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybV9pZHNbMF0pXFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcXG4rXFx0XFx0aWYgKGtmdW5jX2lkID09IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9pZHNbMF0pXFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQlBGX0xTTV9DR1JPVVAgcHJvZ3JhbXMgcnVuIHVuZGVyIGNsYXNzaWMgUkNVIGFuZFxcbitcXHRcXHQgKiBjYW5ub3Qgc2xlZXAuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX0xTTV9DR1JPVVApXFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXG4rXFx0XFx0aWYgKCFidGZfaWRfc2V0X2NvbnRhaW5zKFxcdTAwMjZicGZfbGFuZGxvY2tfa2Z1bmNfaG9va3MsXFxuK1xcdFxcdFxcdFxcdFxcdCBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2xhbmRsb2NrX2tmdW5jX3NldCA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5zZXQgPSBcXHUwMDI2YnBmX2xhbmRsb2NrX2tmdW5jX2lkcyxcXG4rXFx0LmZpbHRlciA9IGJwZl9sYW5kbG9ja19rZnVuY19maWx0ZXIsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX3BvbGljeV9rZnVuY19pbml0KHZvaWQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jIGJwZl9sYW5kbG9ja19kdG9yc1tdID0ge1xcbitcXHRcXHR7XFxuK1xcdFxcdFxcdC5idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMF0sXFxuK1xcdFxcdFxcdC5rZnVuY19idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMV0sXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX2xhbmRsb2NrX2tmdW5jX3NldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfbGFuZGxvY2tfZHRvcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFSUkFZX1NJWkUoYnBmX2xhbmRsb2NrX2R0b3JzKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgVEhJU19NT0RVTEUpO1xcbit9XFxuK2xhdGVfaW5pdGNhbGwoYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlIGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcXG5pbmRleCBmZmE3NjQ2ZDk5ZjNlLi45YmEyOGMwNmI1YWMyIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlXFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVcXG5AQCAtMTYsMyArMTYsNSBAQCBsYW5kbG9jay0kKENPTkZJR19BVURJVCkgKz0gXFxcXFxcbiBcXHRpZC5vIFxcXFxcXG4gXFx0YXVkaXQubyBcXFxcXFxuIFxcdGRvbWFpbi5vXFxuK1xcbitsYW5kbG9jay0kKENPTkZJR19CUEZfTFNNKSArPSBicGYub1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9icGYuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZjg5MDYyZDM1YTcwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXFxuQEAgLTAsMCArMSwxMzAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBMYW5kbG9jayAtIExTTSBwb2xpY3kga3B0ciBob29rc1xcbisgKlxcbisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGhvb2tzIGJhY2tpbmcgdGhlIExhbmRsb2NrIGtmdW5jc1xcbisgKlxcbisgKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sYW5kbG9jay5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJwZi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY3JlZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGltaXRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJydWxlc2V0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzZXR1cC5oXFxcIlxcbitcXG4rc3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG4re1xcbitcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcXG4rXFxuK1xcdHJ1bGVzZXQgPSBsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGZkLCBGTU9ERV9DQU5fUkVBRCk7XFxuK1xcdGlmIChJU19FUlIocnVsZXNldCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xcbitcXG4rXFx0cG9saWN5LVxcdTAwM2VsYW5kbG9jay5ydWxlc2V0ID0gKHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqKXJ1bGVzZXQ7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBob29rX3BvbGljeV9rcHRyX3B1dCh1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG4re1xcbitcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9XFxuK1xcdFxcdChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqKXBvbGljeS1cXHUwMDNlbGFuZGxvY2sucnVsZXNldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1heSBiZSBjYWxsZWQgZnJvbSBhIEJQRiBvYmplY3QgZGVzdHJ1Y3RvciB0aGF0IGNhbm5vdCBzbGVlcCxcXG4rXFx0ICogd2hlcmVhcyBkcm9wcGluZyB0aGUgbGFzdCBydWxlc2V0IHJlZmVyZW5jZSBmcmVlcyBpdCBhbmQgbWF5XFxuK1xcdCAqIHNsZWVwOiBhbHdheXMgZGVmZXIgdGhlIGZyZWUuXFxuK1xcdCAqL1xcbitcXHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChydWxlc2V0KTtcXG4rfVxcbitcXG4rLyogQ2hhcmdpbmcgc2NvcGUgZm9yIHRoZSBCUEYtZHJpdmVuIGRvbWFpbiBhbGxvY2F0aW9uczogcm9vdCwgaS5lLiBub2JvZHkuICovXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rXFx0cmV0dXJuIHJvb3RfbWVtX2Nncm91cDtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIE5VTEw7XFxuKyNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG4rfVxcbitcXG4rc3RhdGljIGludCBob29rX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmJwcm1fbGxjcmVkID0gbGFuZGxvY2tfY3JlZChicHJtLVxcdTAwM2VjcmVkKTtcXG4rXFx0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQgPVxcbitcXHRcXHQoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKilwb2xpY3ktXFx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQ7XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm9sZF9tZW1jZztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNhbWUgZmxhZ3MgYXMgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSwgZXhjZXB0XFxuK1xcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkM6IHRoZSByZXN0cmljdGlvbiB0YXJnZXRzIHRoZVxcbitcXHQgKiBleGVjdXRpb24sIG5vdCB0aGUgY2FsbGluZyB0aHJlYWRzLlxcbitcXHQgKi9cXG4rXFx0aWYgKChmbGFncyB8IExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNKSAhPVxcbitcXHQgICAgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRvbWFpbiBjb25maW5lcyB0aGUgZXhlY3V0aW9uIG9uIGJlaGFsZiBvZiB0aGUgQlBGXFxuK1xcdCAqIHByb2dyYW0sIG5vdCBvZiB0aGUgbWVkaWF0ZWQgdGFzazogZG8gbm90IGNoYXJnZSB0aGUgdGFzaydzXFxuK1xcdCAqIG1lbWNnIGZvciBpdC5cXG4rXFx0ICovXFxuK1xcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ2V0X2JwZl9tZW1jZygpKTtcXG4rXFx0ZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZXN0cmljdGlvbik7XFxuK1xcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0YWdlcyB0aGUgcmVzdHJpY3Rpb24gdW50aWwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBvZiB0aGVcXG4rXFx0ICogZXhlY3V0aW9uLCByZXBsYWNpbmcgKGFuZCByZWxlYXNpbmcpIGFueSBwcmV2aW91c2x5IHN0YWdlZFxcbitcXHQgKiBvbmUuICBOb3RoaW5nIGlzIGVuZm9yY2VkIHlldDogYW4gZXhlY3V0aW9uIHRoYXQgZmFpbHMgYmVmb3JlXFxuK1xcdCAqIGNvbW1pdHRpbmcgaXRzIGNyZWRlbnRpYWxzIGRyb3BzIHRoZSBzdGFnZWQgcmVzdHJpY3Rpb24gaW5cXG4rXFx0ICogaG9va19jcmVkX2ZyZWUoKSB3aXRoIG5vIGVmZmVjdCBvbiB0aGUgY2FsbGluZyB0YXNrLlxcbitcXHQgKi9cXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXQoYnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZC5kb21haW4pO1xcbitcXHRicHJtX2xsY3JlZC1cXHUwMDNlc3RhZ2VkID0gcmVzdHJpY3Rpb247XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBob29rX2Jwcm1fY29tbWl0dGluZ19jcmVkcyhjb25zdCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpicHJtX2xsY3JlZCA9IGxhbmRsb2NrX2NyZWQoYnBybS1cXHUwMDNlY3JlZCk7XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiByZXN0cmljdGlvbjtcXG4rXFxuK1xcdGlmICghYnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZC5kb21haW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJlc3RyaWN0aW9uID0gYnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZDtcXG4rXFx0YnBybV9sbGNyZWQtXFx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XFxuK1xcbitcXHRsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgXFx1MDAyNnJlc3RyaWN0aW9uKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgbGFuZGxvY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuK1xcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcXG4rXFx0TFNNX0hPT0tfSU5JVChwb2xpY3lfa3B0cl9wdXQsIGhvb2tfcG9saWN5X2twdHJfcHV0KSxcXG4rXFx0TFNNX0hPT0tfSU5JVChicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIGhvb2tfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKSxcXG4rXFx0TFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSxcXG4rfTtcXG4rXFxuK19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcXG4re1xcbitcXHRzZWN1cml0eV9hZGRfaG9va3MobGFuZGxvY2tfaG9va3MsIEFSUkFZX1NJWkUobGFuZGxvY2tfaG9va3MpLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2bGFuZGxvY2tfbHNtaWQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5oIGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU1NzcyOWU2YTU2NDRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmhcXG5AQCAtMCwwICsxLDIxIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLypcXG4rICogTGFuZGxvY2sgLSBMU00gcG9saWN5IGtwdHIgaG9va3NcXG4rICpcXG4rICogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFxcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaWZuZGVmIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxcbisjZGVmaW5lIF9TRUNVUklUWV9MQU5ETE9DS19CUEZfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rXFxuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbitfX2luaXQgdm9pZCBsYW5kbG9ja19hZGRfYnBmX2hvb2tzKHZvaWQpO1xcbisjZWxzZSAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbGFuZGxvY2tfYWRkX2JwZl9ob29rcyh2b2lkKVxcbit7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXFxuK1xcbisjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0JQRl9IICovXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xcbmluZGV4IGNjNDE5ZGU3NWNkNmIuLmVmYmZkMGMyMDQ3NTMgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jXFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jXFxuQEAgLTgsMTQgKzgsMTE0IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpbmZtdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sYW5kbG9jay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiY3JlZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZG9tYWluLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJydWxlc2V0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzZXR1cC5oXFxcIlxcbiBcXG4rLyoqXFxuKyAqIGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24gLSBDb21wdXRlIGEgY3JlZGVudGlhbCByZXN0cmljdGlvblxcbisgKlxcbisgKiBAbGxjcmVkOiBMYW5kbG9jayBjcmVkZW50aWFscyB0byByZXN0cmljdDogcHJvdmlkZXMgdGhlIHBhcmVudCBkb21haW4gYW5kXFxuKyAqICAgICAgICAgIHRoZSBwcmV2aW91cyBsb2cgY29uZmlndXJhdGlvbi4gIE5vdCBtb2RpZmllZC5cXG4rICogQHJ1bGVzZXQ6IFJ1bGVzZXQgdG8gZW5mb3JjZSwgb3IgTlVMTCBmb3IgYSBsb2ctY29uZmlndXJhdGlvbi1vbmx5IGNoYW5nZS5cXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3JcXG4rICogICAgICAgICB2YWxpZGF0aW5nIHRoZW0gYWdhaW5zdCB0aGUgc2V0IG9mIGZsYWdzIGl0IHN1cHBvcnRzLlxcbisgKiBAcmVzdHJpY3Rpb246IENvbXB1dGVkIHJlc3RyaWN0aW9uLiAgT24gc3VjY2VzcywgaG9sZHMgYSByZWZlcmVuY2Ugb25cXG4rICogICAgICAgICAgICAgICBAcmVzdHJpY3Rpb24tXFx1MDAzZWRvbWFpbiAoaWYgYW55KSwgd2hpY2hcXG4rICogICAgICAgICAgICAgICBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpIHRyYW5zZmVycyB0byB0aGUgcmVzdHJpY3RlZFxcbisgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLlxcbisgKlxcbisgKiBUaGUgcmVzdHJpY3Rpb24gYnVpbGRzIG9uIEBsbGNyZWQncyBjdXJyZW50IHN0YXRlOiB0aGUgY2FsbGVyIG11c3QgYXBwbHlcXG4rICogaXQgdG8gKG9yIHN0YWdlIGl0IGZvcikgdGhlc2Ugc2FtZSBjcmVkZW50aWFscy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXFxuK1xcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pXFxuK3tcXG4rI2lmZGVmIENPTkZJR19BVURJVFxcbitcXHQvKiBUcmFuc2xhdGVzIFxcXCJvZmZcXFwiIGFuZCBcXFwib25cXFwiIGZsYWdzIHRvIGJvb2xlYW5zLiAqL1xcbitcXHRjb25zdCBib29sIGxvZ19zYW1lX2V4ZWMgPVxcbitcXHRcXHQhKGZsYWdzIFxcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU0FNRV9FWEVDX09GRik7XFxuK1xcdGNvbnN0IGJvb2wgbG9nX25ld19leGVjID1cXG4rXFx0XFx0ISEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XFxuK1xcdGNvbnN0IGJvb2wgbG9nX3N1YmRvbWFpbnMgPVxcbitcXHRcXHQhKGZsYWdzIFxcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpO1xcbitcXHRjb25zdCBib29sIHByZXZfbG9nX3N1YmRvbWFpbnMgPSAhbGxjcmVkLVxcdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XFxuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4rXFxuK1xcdCpyZXN0cmljdGlvbiA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XFxuK1xcbisjaWZkZWYgQ09ORklHX0FVRElUXFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxcbitcXHRcXHRcXHRcXHRcXHQgICFsb2dfc3ViZG9tYWlucztcXG4rI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbitcXG4rXFx0aWYgKCFydWxlc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4gPSBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KGxsY3JlZC1cXHUwMDNlZG9tYWluLCBydWxlc2V0KTtcXG4rXFx0aWYgKElTX0VSUihyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluKSkge1xcbitcXHRcXHRjb25zdCBpbnQgZXJyID0gUFRSX0VSUihyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluKTtcXG4rXFxuK1xcdFxcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbisjaWZkZWYgQ09ORklHX0FVRElUXFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4tXFx1MDAzZWhpZXJhcmNoeS1cXHUwMDNlbG9nX3NhbWVfZXhlYyA9IGxvZ19zYW1lX2V4ZWM7XFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4tXFx1MDAzZWhpZXJhcmNoeS1cXHUwMDNlbG9nX25ld19leGVjID0gbG9nX25ld19leGVjO1xcbitcXHRpZiAoKCFsb2dfc2FtZV9leGVjIFxcdTAwMjZcXHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxcbitcXHRcXHRyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluLVxcdTAwM2VoaWVyYXJjaHktXFx1MDAzZWxvZ19zdGF0dXMgPVxcbitcXHRcXHRcXHRMQU5ETE9DS19MT0dfRElTQUJMRUQ7XFxuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24gLSBFbmZvcmNlIGEgY29tcHV0ZWQgcmVzdHJpY3Rpb24gb24gY3JlZGVudGlhbHNcXG4rICpcXG4rICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXJcXG4rICogICAgICAgICAgKHByZXBhcmVkIGFuZCBub3QgeWV0IGNvbW1pdHRlZCkuXFxuKyAqIEByZXN0cmljdGlvbjogUmVzdHJpY3Rpb24gY29tcHV0ZWQgYnkgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpXFxuKyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpc1xcbisgKiAgICAgICAgICAgICAgIHRyYW5zZmVycmVkIHRvIEBsbGNyZWQuXFxuKyAqXFxuKyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnRcXG4rICogb2YgZmFpbHVyZSwgZS5nLiBhbiBleGVjIHBvaW50IG9mIG5vIHJldHVybi5cXG4rICovXFxuK3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbilcXG4re1xcbisjaWZkZWYgQ09ORklHX0FVRElUXFxuK1xcdGxsY3JlZC1cXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmID0gcmVzdHJpY3Rpb24tXFx1MDAzZWxvZ19zdWJkb21haW5zX29mZjtcXG4rI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbitcXG4rXFx0aWYgKCFyZXN0cmljdGlvbi1cXHUwMDNlZG9tYWluKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBSZXBsYWNlcyB0aGUgb2xkIGRvbWFpbi4gKi9cXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXQobGxjcmVkLVxcdTAwM2Vkb21haW4pO1xcbitcXHRsbGNyZWQtXFx1MDAzZWRvbWFpbiA9IHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW47XFxuK1xcdHJlc3RyaWN0aW9uLVxcdTAwM2Vkb21haW4gPSBOVUxMO1xcbitcXG4rI2lmZGVmIENPTkZJR19BVURJVFxcbitcXHRsbGNyZWQtXFx1MDAzZWRvbWFpbl9leGVjIHw9IEJJVChsbGNyZWQtXFx1MDAzZWRvbWFpbi1cXHUwMDNlbnVtX2xheWVycyAtIDEpO1xcbisjZW5kaWYgLyogQ09ORklHX0FVRElUICovXFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNvbnN0IG9sZClcXG4ge1xcbkBAIC0yNCw2ICsxMjQsMTIgQEAgc3RhdGljIHZvaWQgaG9va19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpjb25zdCBuZXcsXFxuIFxcbiBcXHRsYW5kbG9ja19nZXRfcnVsZXNldChvbGRfbGxjcmVkLVxcdTAwM2Vkb21haW4pO1xcbiBcXHQqbGFuZGxvY2tfY3JlZChuZXcpID0gKm9sZF9sbGNyZWQ7XFxuK1xcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rXFx0LyogT25seSBicHJtIGNyZWRlbnRpYWxzIG93biBhIHN0YWdlZCByZXN0cmljdGlvbjogbmV2ZXIgY29waWVkLiAqL1xcbitcXHRXQVJOX09OX09OQ0UobGFuZGxvY2tfY3JlZChuZXcpLVxcdTAwM2VzdGFnZWQuZG9tYWluKTtcXG4rXFx0bGFuZGxvY2tfY3JlZChuZXcpLVxcdTAwM2VzdGFnZWQgPSAoc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uKXt9O1xcbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cXG4gfVxcbiBcXG4gc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxcbkBAIC0zNSwxMCArMTQxLDE0IEBAIHN0YXRpYyBpbnQgaG9va19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKmNvbnN0IG5ldyxcXG4gXFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjb25zdCBjcmVkKVxcbiB7XFxuLVxcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBkb20gPSBsYW5kbG9ja19jcmVkKGNyZWQpLVxcdTAwM2Vkb21haW47XFxuK1xcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQgPSBsYW5kbG9ja19jcmVkKGNyZWQpO1xcbitcXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVxcdTAwM2Vkb21haW4pO1xcbiBcXG4tXFx0aWYgKGRvbSlcXG4tXFx0XFx0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQoZG9tKTtcXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXFxuK1xcdC8qIFJlbGVhc2VzIGEgcmVzdHJpY3Rpb24gc3RhZ2VkIGZvciBhbiBhYm9ydGVkIGV4ZWN1dGlvbi4gKi9cXG4rXFx0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVxcdTAwM2VzdGFnZWQuZG9tYWluKTtcXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfQVVESVRcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXFxuaW5kZXggZjI4N2M1NmI1ZmQ0Yi4uNzRmOGM5ODA4ZGM0YyAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmhcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmhcXG5AQCAtMjAsNiArMjAsMzEgQEBcXG4gI2luY2x1ZGUgXFxcInJ1bGVzZXQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNldHVwLmhcXFwiXFxuIFxcbisvKipcXG4rICogc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIC0gQ29tcHV0ZWQgY3JlZGVudGlhbCByZXN0cmljdGlvblxcbisgKlxcbisgKiBUaGUgcmVzdWx0IG9mIGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKTogdGhlIG5ldyBzdGF0ZSB0aGF0XFxuKyAqIGVuZm9yY2luZyBhIHJ1bGVzZXQgd2l0aCBhIHNldCBvZiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzXFxuKyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXNcXG4rICogZW5mb3JjZWQgd2l0aCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbigpLCBlaXRoZXIgcmlnaHQgYXdheVxcbisgKiAobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSkgb3IgYWZ0ZXIgYSBzdGFnaW5nIHBlcmlvZCAocmVzdHJpY3Rpb25cXG4rICogb2YgYW4gZXhlY3V0aW9uKS5cXG4rICovXFxuK3N0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiB7XFxuK1xcdC8qKlxcbitcXHQgKiBAZG9tYWluOiBOZXcgZG9tYWluIHRvIGVuZm9yY2UsIG93bmluZyBhIHJlZmVyZW5jZS4gIE5VTEwgaWYgdGhlXFxuK1xcdCAqIHJlc3RyaWN0aW9uIG9ubHkgY2FycmllcyBhIGxvZyBjb25maWd1cmF0aW9uIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XFxuKyNpZmRlZiBDT05GSUdfQVVESVRcXG4rXFx0LyoqXFxuK1xcdCAqIEBsb2dfc3ViZG9tYWluc19vZmY6IE5ldyB2YWx1ZSBvZiB0aGUgY3JlZGVudGlhbHMnXFxuK1xcdCAqIEBsYW5kbG9ja19jcmVkX3NlY3VyaXR5LmxvZ19zdWJkb21haW5zX29mZi5cXG4rXFx0ICovXFxuK1xcdHU4IGxvZ19zdWJkb21haW5zX29mZiA6IDE7XFxuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAtIENyZWRlbnRpYWwgc2VjdXJpdHkgYmxvYlxcbiAgKlxcbkBAIC0zNSw2ICs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7XFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqZG9tYWluO1xcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXFxuK1xcdC8qKlxcbitcXHQgKiBAc3RhZ2VkOiBSZXN0cmljdGlvbiBzdGFnZWQgYnkgdGhlIGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cigpIGhvb2ssXFxuK1xcdCAqIG93bmluZyBpdHMgZG9tYWluIHJlZmVyZW5jZSBhbmQgYXBwbGllZCBhdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mXFxuK1xcdCAqIHRoZSBleGVjdXRpb24gKGJwcm1fY29tbWl0dGluZ19jcmVkcykuICBPbmx5IGV2ZXIgc2V0IG9uIHRoZVxcbitcXHQgKiBjcmVkZW50aWFscyBwcmVwYXJlZCBmb3IgYW4gZXhlY3V0aW9uLCBiZXR3ZWVuIHRoZSBzdGFnaW5nIGFuZFxcbitcXHQgKiBlaXRoZXIgdGhlIGFwcGxpY2F0aW9uIG9yIHRoZSByZWxlYXNlIG9mIHRoZSBhYm9ydGVkIGNyZWRlbnRpYWxzO1xcbitcXHQgKiBjb21taXR0ZWQgdGFzayBjcmVkZW50aWFscyBuZXZlciBjYXJyeSBhIHN0YWdlZCByZXN0cmljdGlvbi5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiBzdGFnZWQ7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitcXG4gI2lmZGVmIENPTkZJR19BVURJVFxcbiBcXHQvKipcXG4gXFx0ICogQGRvbWFpbl9leGVjOiBCaXRtYXNrIGlkZW50aWZ5aW5nIHRoZSBkb21haW4gbGF5ZXJzIHRoYXQgd2VyZSBlbmZvcmNlZCBieVxcbkBAIC03NSw2ICsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2NyZWRfY29weShzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqZHN0LFxcbiBcXHQqZHN0ID0gKnNyYztcXG4gXFxuIFxcdGxhbmRsb2NrX2dldF9ydWxlc2V0KHNyYy1cXHUwMDNlZG9tYWluKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbitcXHQvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovXFxuK1xcdFdBUk5fT05fT05DRShzcmMtXFx1MDAzZXN0YWdlZC5kb21haW4pO1xcbitcXHRkc3QtXFx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfY3VycmVudF9kb21haW4odm9pZClcXG5AQCAtMTUzLDYgKzE5NiwxNCBAQCBsYW5kbG9ja19nZXRfYXBwbGljYWJsZV9zdWJqZWN0KGNvbnN0IHN0cnVjdCBjcmVkICpjb25zdCBjcmVkLFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4raW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXFxuK1xcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBydWxlc2V0LCBjb25zdCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pO1xcbitcXG4rdm9pZCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gKmNvbnN0IHJlc3RyaWN0aW9uKTtcXG4rXFxuIF9faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9jcmVkX2hvb2tzKHZvaWQpO1xcbiBcXG4gI2VuZGlmIC8qIF9TRUNVUklUWV9MQU5ETE9DS19DUkVEX0ggKi9cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmggYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxcbmluZGV4IDA4ZDVmMmY2ZDMyMWEuLjBiZWRmZTY1MGVhMDUgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmhcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaFxcbkBAIC0zNyw2ICszNywxMCBAQFxcbiAjZGVmaW5lIExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRlxcdExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNcXG4gI2RlZmluZSBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEZcXHQoKExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRiBcXHUwMDNjXFx1MDAzYyAxKSAtIDEpXFxuIFxcbisvKiBTdWJzZXQgb2YgdGhlIHJlc3RyaWN0LXNlbGYgZmxhZ3MgYXBwbGljYWJsZSB0byBhbiBleGVjdXRpb24uICovXFxuKyNkZWZpbmUgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0gXFxcXFxcbitcXHQoTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGIFxcdTAwMjYgfkxBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMpXFxuK1xcbiAvKiBjbGFuZy1mb3JtYXQgb24gKi9cXG4gXFxuICNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfTElNSVRTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXFxuaW5kZXggNGRkMDllYTIyYzg0NC4uMTc2YzYyNmY5ZjEwNSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcXG5AQCAtNTIwLDcgKzUyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcnVsZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqY29uc3Qgd29yaylcXG4gXFx0ZnJlZV9ydWxlc2V0KHJ1bGVzZXQpO1xcbiB9XFxuIFxcbi0vKiBPbmx5IGNhbGxlZCBieSBob29rX2NyZWRfZnJlZSgpLiAqL1xcbisvKiBGb3IgY29udGV4dHMgdGhhdCBjYW5ub3Qgc2xlZXAsIGUuZy4gaG9va19jcmVkX2ZyZWUoKS4gKi9cXG4gdm9pZCBsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldClcXG4ge1xcbiBcXHRpZiAocnVsZXNldCBcXHUwMDI2XFx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnJ1bGVzZXQtXFx1MDAzZXVzYWdlKSkge1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmggYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmhcXG5pbmRleCAwNDM3YWRmMTc0Mjg3Li5iNjVkMWMwN2UxOTJkIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxcbkBAIC0yMjUsNiArMjI1LDkgQEAgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKlxcbiBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBwYXJlbnQsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCk7XFxuIFxcbitzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChjb25zdCBpbnQgZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSk7XFxuK1xcbiBjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZSAqXFxuIGxhbmRsb2NrX2ZpbmRfcnVsZShjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCxcXG4gXFx0XFx0ICAgY29uc3Qgc3RydWN0IGxhbmRsb2NrX2lkIGlkKTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuYyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcXG5pbmRleCA0N2RhYzE3MzZmMTAwLi4zYjdlMThlZGFkZmJjIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sc20uaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJicGYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiY3JlZC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZXJyYXRhLmhcXFwiXFxuQEAgLTY4LDYgKzY5LDcgQEAgc3RhdGljIGludCBfX2luaXQgbGFuZGxvY2tfaW5pdCh2b2lkKVxcbiBcXHRsYW5kbG9ja19hZGRfdGFza19ob29rcygpO1xcbiBcXHRsYW5kbG9ja19hZGRfZnNfaG9va3MoKTtcXG4gXFx0bGFuZGxvY2tfYWRkX25ldF9ob29rcygpO1xcbitcXHRsYW5kbG9ja19hZGRfYnBmX2hvb2tzKCk7XFxuIFxcdGxhbmRsb2NrX2luaXRfaWQoKTtcXG4gXFx0bGFuZGxvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbiBcXHRwcl9pbmZvKFxcXCJVcCBhbmQgcnVubmluZy5cXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xcbmluZGV4IDM2YjAyODkyYzYyZjUuLjg5OTYwMWFmN2M0ZTEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmNcXG5AQCAtMjkzLDggKzI5Myw4IEBAIFNZU0NBTExfREVGSU5FMyhsYW5kbG9ja19jcmVhdGVfcnVsZXNldCxcXG4gICogUmV0dXJucyBhbiBvd25lZCBydWxlc2V0IGZyb20gYSBGRC4gSXQgaXMgdGh1cyBuZWVkZWQgdG8gY2FsbFxcbiAgKiBsYW5kbG9ja19wdXRfcnVsZXNldCgpIG9uIHRoZSByZXR1cm4gdmFsdWUuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmdldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgZm1vZGVfdCBtb2RlKVxcbitzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChjb25zdCBpbnQgZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRDTEFTUyhmZCwgcnVsZXNldF9mKShmZCk7XFxuIFxcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xcbkBAIC00NzYsNyArNDc2LDcgQEAgU1lTQ0FMTF9ERUZJTkU0KGxhbmRsb2NrX2FkZF9ydWxlLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogR2V0cyBhbmQgY2hlY2tzIHRoZSBydWxlc2V0LiAqL1xcbi1cXHRydWxlc2V0ID0gZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpO1xcbitcXHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpO1xcbiBcXHRpZiAoSVNfRVJSKHJ1bGVzZXQpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihydWxlc2V0KTtcXG4gXFxuQEAgLTUyOCw5ICs1MjgsOCBAQCBTWVNDQUxMX0RFRklORTIobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZiwgY29uc3QgaW50LCBydWxlc2V0X2ZkLCBjb25zdCBfX3UzMixcXG4ge1xcbiBcXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCBfX2ZyZWUobGFuZGxvY2tfcHV0X3J1bGVzZXQpID0gTlVMTDtcXG4gXFx0c3RydWN0IGNyZWQgKm5ld19jcmVkO1xcbi1cXHRzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqbmV3X2xsY3JlZDtcXG4tXFx0Ym9vbCBfX21heWJlX3VudXNlZCBsb2dfc2FtZV9leGVjLCBsb2dfbmV3X2V4ZWMsIGxvZ19zdWJkb21haW5zLFxcbi1cXHRcXHRwcmV2X2xvZ19zdWJkb21haW5zO1xcbitcXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIWlzX2luaXRpYWxpemVkKCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtNTQ3LDEzICs1NDYsNiBAQCBTWVNDQUxMX0RFRklORTIobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZiwgY29uc3QgaW50LCBydWxlc2V0X2ZkLCBjb25zdCBfX3UzMixcXG4gXFx0ICAgIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfU0VMRilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHQvKiBUcmFuc2xhdGVzIFxcXCJvZmZcXFwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cXG4tXFx0bG9nX3NhbWVfZXhlYyA9ICEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TQU1FX0VYRUNfT0ZGKTtcXG4tXFx0LyogVHJhbnNsYXRlcyBcXFwib25cXFwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cXG4tXFx0bG9nX25ld19leGVjID0gISEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XFxuLVxcdC8qIFRyYW5zbGF0ZXMgXFxcIm9mZlxcXCIgZmxhZyB0byBib29sZWFuLiAqL1xcbi1cXHRsb2dfc3ViZG9tYWlucyA9ICEoZmxhZ3MgXFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJdCBpcyBhbGxvd2VkIHRvIHNldCBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiB3aXRoXFxuIFxcdCAqIC0xIGFzIHJ1bGVzZXRfZmQsIG9wdGlvbmFsbHkgY29tYmluZWQgd2l0aFxcbkBAIC01NjQsNyArNTU2LDggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXFxuIFxcdCAgICAgIChmbGFncyBcXHUwMDI2IH5MQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DKSA9PVxcbiBcXHRcXHQgICAgICBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRikpIHtcXG4gXFx0XFx0LyogR2V0cyBhbmQgY2hlY2tzIHRoZSBydWxlc2V0LiAqL1xcbi1cXHRcXHRydWxlc2V0ID0gZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fUkVBRCk7XFxuK1xcdFxcdHJ1bGVzZXQgPSBsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBGTU9ERV9DQU5fUkVBRCk7XFxuIFxcdFxcdGlmIChJU19FUlIocnVsZXNldCkpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xcbiBcXHR9XFxuQEAgLTU3NCw1MyArNTY3LDI4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxcbiBcXHRpZiAoIW5ld19jcmVkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG5ld19sbGNyZWQgPSBsYW5kbG9ja19jcmVkKG5ld19jcmVkKTtcXG4tXFxuLSNpZmRlZiBDT05GSUdfQVVESVRcXG4tXFx0cHJldl9sb2dfc3ViZG9tYWlucyA9ICFuZXdfbGxjcmVkLVxcdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XFxuLVxcdG5ld19sbGNyZWQtXFx1MDAzZWxvZ19zdWJkb21haW5zX29mZiA9ICFwcmV2X2xvZ19zdWJkb21haW5zIHx8XFxuLVxcdFxcdFxcdFxcdFxcdCAhbG9nX3N1YmRvbWFpbnM7XFxuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBvbmx5IGNhc2Ugd2hlbiBhIHJ1bGVzZXQgbWF5IG5vdCBiZSBzZXQgaXMgaWZcXG4gXFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYgaXMgc2V0IChvcHRpb25hbGx5IHdpdGhcXG4gXFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZFxcbiBcXHQgKiBvcHRpbWl6ZSB0aGlzIGNhc2UgYnkgbm90IGNhbGxpbmcgY29tbWl0X2NyZWRzKCkgaWYgdGhpcyBmbGFnIHdhc1xcbiBcXHQgKiBhbHJlYWR5IHNldCwgYnV0IGl0IGlzIG5vdCB3b3J0aCB0aGUgY29tcGxleGl0eS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmQgbWFuaXB1bGF0aW5nXFxuK1xcdCAqIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGJlY2F1c2UgdGhleSBhcmUgZGVkaWNhdGVkIHBlciB0aHJlYWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAocnVsZXNldCkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBUaGVyZSBpcyBubyBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiB3aGlsZSBjb3B5aW5nIGFuZFxcbi1cXHRcXHQgKiBtYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYmVjYXVzZSB0aGV5IGFyZVxcbi1cXHRcXHQgKiBkZWRpY2F0ZWQgcGVyIHRocmVhZC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBuZXdfZG9tID1cXG4tXFx0XFx0XFx0bGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLVxcdTAwM2Vkb21haW4sIHJ1bGVzZXQpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKG5ld19kb20pKSB7XFxuLVxcdFxcdFxcdGFib3J0X2NyZWRzKG5ld19jcmVkKTtcXG4tXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmV3X2RvbSk7XFxuLVxcdFxcdH1cXG4tXFxuLSNpZmRlZiBDT05GSUdfQVVESVRcXG4tXFx0XFx0bmV3X2RvbS1cXHUwMDNlaGllcmFyY2h5LVxcdTAwM2Vsb2dfc2FtZV9leGVjID0gbG9nX3NhbWVfZXhlYztcXG4tXFx0XFx0bmV3X2RvbS1cXHUwMDNlaGllcmFyY2h5LVxcdTAwM2Vsb2dfbmV3X2V4ZWMgPSBsb2dfbmV3X2V4ZWM7XFxuLVxcdFxcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXFx1MDAyNlxcdTAwMjYgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpXFxuLVxcdFxcdFxcdG5ld19kb20tXFx1MDAzZWhpZXJhcmNoeS1cXHUwMDNlbG9nX3N0YXR1cyA9IExBTkRMT0NLX0xPR19ESVNBQkxFRDtcXG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbi1cXG4tXFx0XFx0LyogUmVwbGFjZXMgdGhlIG9sZCAocHJlcGFyZWQpIGRvbWFpbi4gKi9cXG4tXFx0XFx0bGFuZGxvY2tfcHV0X3J1bGVzZXQobmV3X2xsY3JlZC1cXHUwMDNlZG9tYWluKTtcXG4tXFx0XFx0bmV3X2xsY3JlZC1cXHUwMDNlZG9tYWluID0gbmV3X2RvbTtcXG4tXFxuLSNpZmRlZiBDT05GSUdfQVVESVRcXG4tXFx0XFx0bmV3X2xsY3JlZC1cXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKG5ld19kb20tXFx1MDAzZW51bV9sYXllcnMgLSAxKTtcXG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xcbitcXHRlcnIgPSBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBydWxlc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBmbGFncywgXFx1MDAyNnJlc3RyaWN0aW9uKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuK1xcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBcXHUwMDI2cmVzdHJpY3Rpb24pO1xcbitcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykge1xcbi1cXHRcXHRjb25zdCBpbnQgZXJyID0gbGFuZGxvY2tfcmVzdHJpY3Rfc2libGluZ190aHJlYWRzKFxcbi1cXHRcXHRcXHRjdXJyZW50X2NyZWQoKSwgbmV3X2NyZWQpO1xcbitcXHRcXHRlcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG5ld19jcmVkKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZTlkOGM5NDkyYmRiMiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC01NDQxLDYgKzU0NDEsMTEyIEBAIGludCBzZWN1cml0eV9icGZfdG9rZW5fY2FwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcXG4gXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soYnBmX3Rva2VuX2NhcGFibGUsIHRva2VuLCBjYXApO1xcbiB9XFxuIFxcbisvKipcXG4rICogc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCgpIC0gR2V0IGFuIExTTSBwb2xpY3kgb2JqZWN0IGZyb20gYSBmZFxcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gYXNrZWQgdG8gaW50ZXJwcmV0IEBmZFxcbisgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciByZWZlcnJpbmcgdG8gYSBwb2xpY3kgb2JqZWN0LCByZXNvbHZlZCBpbiB0aGVcXG4rICogICAgICBjYWxsaW5nIHRhc2sncyBmaWxlIGRlc2NyaXB0b3IgdGFibGVcXG4rICogQHBvbGljeTogcmVjZWl2ZXMgdGhlIHJlZmVyZW5jZWQgcG9saWN5IG9iamVjdCBpbiB0aGUgbWVtYmVyIG9mIHRoZVxcbisgKiAgICAgICAgICBMU00gaWRlbnRpZmllZCBieSBAbHNtaWRcXG4rICpcXG4rICogQXNrIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgdG8gdHJhbnNsYXRlIEBmZCBpbnRvIGEgcmVmZXJlbmNlXFxuKyAqIGNvdW50ZWQgcG9saWN5IG9iamVjdC4gIFRoZSBjYWxsZXIgbXVzdCBub3QgZGVyZWZlcmVuY2UgdGhlXFxuKyAqIHJldHVybmVkIGhhbmRsZSwgbXVzdCBvbmx5IGhhbmQgaXQgYmFjayB0byB0aGUgc2FtZSBMU00sIGUuZy5cXG4rICogdGhyb3VnaCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoKSwgYW5kIG11c3QgcmVsZWFzZSBpdFxcbisgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpLiAgT25seSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbiBvZlxcbisgKiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzIGNhbGxlZC4gIFRoZSBob29rIGlzIG9ubHkgY2FsbGVkXFxuKyAqIGZyb20gYSBjb250ZXh0IHRoYXQgbWF5IHNsZWVwLlxcbisgKlxcbisgKiBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IGZpbGwgaXRzIG93biBtZW1iZXIgb2YgQHBvbGljeSB3aXRoIGFcXG4rICogcmVmZXJlbmNlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBpdCBpcyByZWxlYXNlZCB0aHJvdWdoIHRoZVxcbisgKiBwb2xpY3lfa3B0cl9wdXQgaG9vaywgYW5kIG11c3Qgbm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBAZmQgYmV5b25kXFxuKyAqIHdoYXQgaXRzIG93biB1c2Vyc3BhY2UgQVBJIGNyZWF0ZWQgaXQgd2l0aC5cXG4rICpcXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgQHBvbGljeSBob2xkcyBhIHJlZmVyZW5jZSBjb3VudGVkIHBvbGljeVxcbisgKiBvYmplY3QsIC1FT1BOT1RTVVBQIGlmIHRoZSBMU00gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZVxcbisgKiB2YWx1ZXMgb24gb3RoZXIgZmFpbHVyZXMuXFxuKyAqL1xcbitpbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcXG4rXFx0XFx0XFx0XFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcbit7XFxuK1xcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbitcXG4rXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX2Zyb21fZmQpIHtcXG4rXFx0XFx0aWYgKHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlbHNtaWQtXFx1MDAzZWlkICE9IGxzbWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmV0dXJuIHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlaG9vay5wb2xpY3lfa3B0cl9mcm9tX2ZkKGZkLCBwb2xpY3kpO1xcbitcXHR9XFxuK1xcdHJldHVybiBMU01fUkVUX0RFRkFVTFQocG9saWN5X2twdHJfZnJvbV9mZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKSAtIFB1dCBhIHJlZmVyZW5jZSBvbiBhbiBMU00gcG9saWN5IG9iamVjdFxcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gb3duaW5nIEBwb2xpY3lcXG4rICogQHBvbGljeTogdGhlIHBvbGljeSBvYmplY3QsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XFxuKyAqICAgICAgICAgIEBsc21pZFxcbisgKlxcbisgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIHByZXZpb3VzbHkgb2J0YWluZWQgd2l0aFxcbisgKiBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKCkuICBPbmx5IHRoZSBob29rIGltcGxlbWVudGF0aW9uXFxuKyAqIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieSBAbHNtaWQgaXMgY2FsbGVkLCBhbmQgQHBvbGljeSBtdXN0IGhhdmVcXG4rICogYmVlbiBvYnRhaW5lZCBmcm9tIHRoYXQgc2FtZSBMU00uICBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHN1cHBvcnRcXG4rICogYmVpbmcgY2FsbGVkIGZyb20gYSBjb250ZXh0IHRoYXQgY2Fubm90IHNsZWVwOiB0aGUgcmVsZWFzZSBvZiBCUEZcXG4rICogbWFuYWdlZCByZWZlcmVuY2VzIG1heSBiZSBkcml2ZW4gZnJvbSBvYmplY3QgZGVzdHJ1Y3RvcnMuXFxuKyAqL1xcbit2b2lkIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCh1NjQgbHNtaWQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcbit7XFxuK1xcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbitcXG4rXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIHBvbGljeV9rcHRyX3B1dCkge1xcbitcXHRcXHRpZiAoc2NhbGwtXFx1MDAzZWhsLVxcdTAwM2Vsc21pZC1cXHUwMDNlaWQgIT0gbHNtaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2sucG9saWN5X2twdHJfcHV0KHBvbGljeSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHQvKiBBIGhlbGQgcmVmZXJlbmNlIGltcGxpZXMgdGhlIG1hdGNoaW5nIExTTSBpbXBsZW1lbnRzIHRoZSBob29rLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoMSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoKSAtIEVuZm9yY2UgYSBwb2xpY3kgb24gZXhlYyBjcmVkZW50aWFsc1xcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gb3duaW5nIEBwb2xpY3lcXG4rICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3RcXG4rICogQHBvbGljeTogdGhlIHBvbGljeSBvYmplY3QgdG8gZW5mb3JjZSwgaW4gdGhlIG1lbWJlciBvZiB0aGUgTFNNXFxuKyAqICAgICAgICAgIGlkZW50aWZpZWQgYnkgQGxzbWlkXFxuKyAqIEBmbGFnczogTFNNLXNwZWNpZmljIGVuZm9yY2VtZW50IGZsYWdzXFxuKyAqXFxuKyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHJlc3RyaWN0IHRoZSBjcmVkZW50aWFsc1xcbisgKiBwcmVwYXJlZCBpbiBAYnBybSB3aXRoIEBwb2xpY3ksIHNvIHRoYXQgdGhlIGV4ZWN1dGVkIHRhc2sgc3RhcnRzXFxuKyAqIGNvbmZpbmVkIGJ5IGl0LiAgQHBvbGljeSBtdXN0IGhhdmUgYmVlbiBvYnRhaW5lZCBmcm9tIHRoZSBzYW1lIExTTVxcbisgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKTsgdGhlIGhvb2sgYm9ycm93cyB0aGVcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIHJlbWFpbnMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBpdC5cXG4rICogT25seSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzXFxuKyAqIGNhbGxlZDogYW4gTFNNIG5ldmVyIHJlY2VpdmVzIGEgcG9saWN5IG9iamVjdCBtZWFudCBmb3IgYW5vdGhlciBMU00uXFxuKyAqXFxuKyAqIFRoaXMgaG9vayBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSBhbiBleGVjIHNlY3VyaXR5IGNvbnRleHQgd2hlcmVcXG4rICogQGJwcm0ncyBjcmVkZW50aWFscyBhcmUgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgY29tbWl0dGVkLCBpLmUuIGZyb20gYVxcbisgKiBicHJtX2NyZWRzX2Zvcl9leGVjKCkgb3IgYnBybV9jcmVkc19mcm9tX2ZpbGUoKSBob29rLlxcbisgKlxcbisgKiBIb3cgQHBvbGljeSBjb21wb3NlcyB3aXRoIHJlc3RyaWN0aW9ucyB0aGUgY3JlZGVudGlhbHMgYWxyZWFkeVxcbisgKiBjYXJyeSBpcyBkZWZpbmVkIGJ5IHRoZSBpbXBsZW1lbnRpbmcgTFNNLCBhcyBpcyB0aGUgbWVhbmluZyBvZlxcbisgKiBAZmxhZ3MsIHVuc3VwcG9ydGVkIHZhbHVlcyBvZiB3aGljaCBpdCBtdXN0IHJlamVjdCB3aXRoIC1FSU5WQUwuXFxuKyAqXFxuKyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBMU00gZG9lcyBub3RcXG4rICogaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZmFpbHVyZXMuXFxuKyAqL1xcbitpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcXG4rXFxuK1xcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIpIHtcXG4rXFx0XFx0aWYgKHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlbHNtaWQtXFx1MDAzZWlkICE9IGxzbWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmV0dXJuIHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlaG9vay5icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoYnBybSwgcG9saWN5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZmxhZ3MpO1xcbitcXHR9XFxuK1xcdHJldHVybiBMU01fUkVUX0RFRkFVTFQoYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2JwZl9tYXBfZnJlZSgpIC0gRnJlZSBhIGJwZiBtYXAncyBMU00gYmxvYlxcbiAgKiBAbWFwOiBicGYgbWFwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuaW5kZXggZWE3MDQ0ZjMwYWRjMy4uMmZhNzM0NDk3NDYxMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xcbkBAIC0xMjAsNiArMTIwLDcgQEAgQ09ORklHX1NBTVBMRVM9eVxcbiBDT05GSUdfU0FNUExFX0xJVkVQQVRDSD1tXFxuIENPTkZJR19TRUNVUklUWT15XFxuIENPTkZJR19TRUNVUklUWUZTPXlcXG4rQ09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLPXlcXG4gQ09ORklHX1NZTl9DT09LSUVTPXlcXG4gQ09ORklHX1RFU1RfQlBGPW1cXG4gQ09ORklHX1VETUFCVUY9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XFxuaW5kZXggNTIzZTBkMjliYmQ0My4uMmM0ZDg1N2Y2OWY1NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0XFxuQEAgLTEyNSw3ICsxMjUsNyBAQCBDT05GSUdfTEVHQUNZX1ZTWVNDQUxMX05PTkU9eVxcbiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMVxcbiBDT05GSUdfTE9HX0NQVV9NQVhfQlVGX1NISUZUPTBcXG4gQ09ORklHX0xPR089eVxcbi1DT05GSUdfTFNNPVxcXCJzZWxpbnV4LGJwZixpbnRlZ3JpdHlcXFwiXFxuK0NPTkZJR19MU009XFxcImxhbmRsb2NrLHNlbGludXgsYnBmLGludGVncml0eVxcXCJcXG4gQ09ORklHX01BQ19QQVJUSVRJT049eVxcbiBDT05GSUdfTUFHSUNfU1lTUlE9eVxcbiBDT05GSUdfTUNPUkUyPXlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5MTkyOWY5OGU4OGVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuY1xcbkBAIC0wLDAgKzEsMzI5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cXHUwMDNlICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xhbmRsb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuc2tlbC5oXFxcIlxcbitcXG4rLyogRmFsbGJhY2tzIGZvciBvbGQgc3lzdGVtIGhlYWRlcnMuICovXFxuKyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT05cXG4rI2RlZmluZSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTiAoMVUgXFx1MDAzY1xcdTAwM2MgMSlcXG4rI2VuZGlmXFxuKyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xcbisjZGVmaW5lIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgKDFVIFxcdTAwM2NcXHUwMDNjIDMpXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfcnVsZXNldCh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHtcXG4rXFx0XFx0LmhhbmRsZWRfYWNjZXNzX2ZzID0gTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gc3lzY2FsbChfX05SX2xhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LCBcXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVzZXRfcHJvZ19zdGF0ZShzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcXG4re1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxlZCA9IGZhbHNlO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW5vX3J1bGVzZXQgPSBmYWxzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdF9lcnIgPSAtMTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdDJfZXJyID0gLTE7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNla2Z1bmNfZmxhZ3MgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWRvdWJsZV9jYWxsID0gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJ1bnMgdGhlIHN5c2NhbGwgcHJvZ3JhbSB0aGF0IGFjcXVpcmVzIHRoZSBydWxlc2V0IGZyb21cXG4rICogQHJ1bGVzZXRfZmQsIGluIHRoZSBydW5uZXIncyBmZCB0YWJsZSwgYW5kIHBhcmtzIGl0IGluIHRoZSBtYXAga3B0clxcbisgKiBzbG90IGZvciB0aGUgTFNNIHByb2dyYW0uXFxuKyAqL1xcbitzdGF0aWMgaW50IGxvYWRfcnVsZXNldF9pbnRvX21hcChzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5sb2FkX3J1bGVzZXQpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwibG9hZF9ydWxlc2V0X3J1blxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwibG9hZF9ydWxlc2V0X3JldHZhbFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdEFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZ290X251bGxfZm9yX2JhZF9mZCwgXFxcImJhZF9mZF9udWxsXFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBGb3JrcyBhIGNoaWxkIHRoYXQgZXhlY3MgXFxcInNoIC1jICdcXHUwMDNjc2hlbGxfY21kXFx1MDAzZSdcXFwiLiAgVGhlIG1vbml0b3JlZCBwaWRcXG4rICogaXMgb25seSBrbm93biwgYW5kIGNhbiBvbmx5IGJlIHB1Ymxpc2hlZCB0byB0aGUgQlBGIHByb2dyYW0sIG9uY2VcXG4rICogdGhlIGNoaWxkIGV4aXN0czogdGhlIGNoaWxkIHdhaXRzIG9uIGEgcGlwZSB1bnRpbCB0aGUgcGFyZW50IGhhc1xcbisgKiB1cGRhdGVkIGl0LiAgUmV0dXJucyB0aGUgY2hpbGQncyBleGl0IHN0YXR1cywgb3IgLTEgb24gZXJyb3IuXFxuKyAqL1xcbitzdGF0aWMgaW50IHJ1bl9leGVjX2NoaWxkKHN0cnVjdCBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzICpza2VsLFxcbitcXHRcXHRcXHQgIGJvb2wgbW9uaXRvcmVkLCBjb25zdCBjaGFyICpzaGVsbF9jbWQpXFxuK3tcXG4rXFx0aW50IHBpcGVfZmRzWzJdLCBzdGF0dXM7XFxuK1xcdGNoYXIgYnVmID0gMDtcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2ZkcyksIFxcXCJwaXBlXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcXFwiZm9ya1xcXCIpKSB7XFxuK1xcdFxcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9mZHNbMV0pO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdGNoYXIgKmFyZ3ZbXSA9IHsgXFxcInNoXFxcIiwgXFxcIi1jXFxcIiwgKGNoYXIgKilzaGVsbF9jbWQsIE5VTEwgfTtcXG4rXFxuK1xcdFxcdGNsb3NlKHBpcGVfZmRzWzFdKTtcXG4rXFx0XFx0cmVhZChwaXBlX2Zkc1swXSwgXFx1MDAyNmJ1ZiwgMSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0XFx0ZXhlY3YoXFxcIi9iaW4vc2hcXFwiLCBhcmd2KTtcXG4rXFx0XFx0ZXhpdCgxMjcpO1xcbitcXHR9XFxuK1xcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gbW9uaXRvcmVkID8gcGlkIDogMDtcXG4rXFx0d3JpdGUocGlwZV9mZHNbMV0sIFxcdTAwMjZidWYsIDEpO1xcbitcXHRjbG9zZShwaXBlX2Zkc1sxXSk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXFxcIndhaXRwaWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcXFwiY2hpbGRfZXhpdGVkXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEV4aXQgY29kZXM6IDQgPSB1bmV4cGVjdGVkIHdyaXRlIG91dGNvbWUsIDAgPSBldmVyeXRoaW5nIGFzXFxuKyAqIGV4cGVjdGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZm9ybWF0X2NoaWxkX2NtZChjaGFyICpjbWQsIHNpemVfdCBsZW4sIGJvb2wgZXhwZWN0X3dyaXRlX29rLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnRtcF9wYXRoKVxcbit7XFxuK1xcdGlmIChleHBlY3Rfd3JpdGVfb2spXFxuK1xcdFxcdHNucHJpbnRmKGNtZCwgbGVuLCBcXFwiZWNobyB4IFxcdTAwM2UgJXMgfHwgZXhpdCA0OyBleGl0IDBcXFwiLCB0bXBfcGF0aCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c25wcmludGYoY21kLCBsZW4sXFxuK1xcdFxcdFxcdCBcXFwiaWYgZWNobyB4IFxcdTAwM2UgJXMgMlxcdTAwM2UvZGV2L251bGw7IHRoZW4gZXhpdCA0OyBmaTsgZXhpdCAwXFxcIixcXG4rXFx0XFx0XFx0IHRtcF9wYXRoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9yZXN0cmljdF9iaW5wcm0odm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbCA9IE5VTEw7XFxuK1xcdGNoYXIgdG1wX3BhdGhbXSA9IFxcXCIvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWFxcXCI7XFxuK1xcdGNoYXIgY21kWzI1Nl07XFxuK1xcdGludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDtcXG4rXFxuK1xcdHRtcF9mZCA9IG1rc3RlbXAodG1wX3BhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9HRSh0bXBfZmQsIDAsIFxcXCJta3N0ZW1wXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Y2xvc2UodG1wX2ZkKTtcXG4rXFxuK1xcdHJ1bGVzZXRfZmQgPSBjcmVhdGVfcnVsZXNldCgpO1xcbitcXHRpZiAocnVsZXNldF9mZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PU1lTKVxcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0QVNTRVJUX0dFKHJ1bGVzZXRfZmQsIDAsIFxcXCJsYW5kbG9ja19jcmVhdGVfcnVsZXNldFxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF91bmxpbms7XFxuK1xcdH1cXG4rXFxuK1xcdHNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJ1bGVzZXRfZmQgPSBydWxlc2V0X2ZkO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sobHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fYXR0YWNoKHNrZWwpLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAobG9hZF9ydWxlc2V0X2ludG9fbWFwKHNrZWwpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIENvbnRyb2w6IGFuIHVubW9uaXRvcmVkIGV4ZWN1dGlvbiBtYXkgd3JpdGUgdG8gdGhlIHRtcCBmaWxlLiAqL1xcbitcXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xcbitcXHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgZmFsc2UsIGNtZCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXFxcImNvbnRyb2xfY2hpbGRfZXhpdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0ZBTFNFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbGVkLCBcXFwiY29udHJvbF9ub3RfbW9uaXRvcmVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBIG1vbml0b3JlZCBleGVjdXRpb24gc3RhcnRzIGxhbmRsb2NrZWQ6IHRoZSBydWxlc2V0IGhhbmRsZXNcXG4rXFx0ICogTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUgd2l0aG91dCBhbnkgcnVsZSwgc28gdGhlIHdyaXRlXFxuK1xcdCAqIG11c3QgZmFpbC5cXG4rXFx0ICovXFxuK1xcdHJlc2V0X3Byb2dfc3RhdGUoc2tlbCk7XFxuK1xcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwicmVzdHJpY3RlZF9jaGlsZF9leGl0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxlZCwgXFxcImxzbV9wcm9nX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vub19ydWxlc2V0LCBcXFwicnVsZXNldF9pbl9tYXBcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVzdHJpY3RfZXJyLCAwLCBcXFwicmVzdHJpY3RfYmlucHJtXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgYXVkaXQgbG9nIGZsYWdzIG9mIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikgYXBwbHkgdG9vLiAqL1xcbitcXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWtmdW5jX2ZsYWdzID0gTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT047XFxuK1xcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwibG9nX2ZsYWdzX2NoaWxkX2V4aXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXFxcImxvZ19mbGFnc19yZXN0cmljdF9iaW5wcm1cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzLCBub3RcXG4rXFx0ICogYW4gZXhlY3V0aW9uOiB0aGUga2Z1bmMgbXVzdCByZWplY3QgaXQgYW5kIHRoZSBleGVjdXRpb24gbXVzdFxcbitcXHQgKiBzdGF5IHVucmVzdHJpY3RlZC5cXG4rXFx0ICovXFxuK1xcdHJlc2V0X3Byb2dfc3RhdGUoc2tlbCk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNla2Z1bmNfZmxhZ3MgPSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DO1xcbitcXHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwidHN5bmNfY2hpbGRfZXhpdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VjYWxsZWQsIFxcXCJ0c3luY19wcm9nX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdF9lcnIsIC1FSU5WQUwsIFxcXCJ0c3luY19yZWplY3RlZFxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBzZWNvbmQgY2FsbCBvbiB0aGUgc2FtZSBleGVjdXRpb24gcmVwbGFjZXMgdGhlIHN0YWdlZFxcbitcXHQgKiBkb21haW4gKGFuZCByZWxlYXNlcyB0aGUgZmlyc3Qgb25lKTogdGhlIHJlc3VsdCBpcyBhIHNpbmdsZVxcbitcXHQgKiByZXN0cmljdGlvbiwgbm90IGFuIGVycm9yLlxcbitcXHQgKi9cXG4rXFx0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vkb3VibGVfY2FsbCA9IHRydWU7XFxuK1xcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcXG4rXFx0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgdHJ1ZSwgY21kKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcXFwiZG91YmxlX2NoaWxkX2V4aXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXFxcImRvdWJsZV9yZXN0cmljdF9maXJzdFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZXN0cmljdDJfZXJyLCAwLCBcXFwiZG91YmxlX3Jlc3RyaWN0X3NlY29uZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGNsb3NlKHJ1bGVzZXRfZmQpO1xcbitvdXRfdW5saW5rOlxcbitcXHR1bmxpbmsodG1wX3BhdGgpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkXFxuKyAqIGRvbWFpbiByZWxlYXNlZCwgd2hlbiB0aGUgZXhlY3V0aW9uIGZhaWxzIGFmdGVyIHRoZSBicHJtIGhvb2s6IHRoZVxcbisgKiBjYWxsaW5nIHRhc2sgbXVzdCBub3QgZW5kIHVwIGxhbmRsb2NrZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X3Jlc3RyaWN0X2JpbnBybV9kaXNjYXJkKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwgPSBOVUxMO1xcbitcXHRjaGFyIHRtcF9wYXRoW10gPSBcXFwiL3RtcC9sc21fcG9saWN5X2tmdW5jc19YWFhYWFhcXFwiO1xcbitcXHRjaGFyIGdhcmJhZ2VfcGF0aFtdID0gXFxcIi90bXAvbHNtX3BvbGljeV9nYXJiYWdlX1hYWFhYWFxcXCI7XFxuK1xcdGludCBydWxlc2V0X2ZkID0gLTEsIHRtcF9mZCwgZ2FyYmFnZV9mZCwgcGlwZV9mZHNbMl0sIHN0YXR1cztcXG4rXFx0Y2hhciBidWYgPSAwO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHR0bXBfZmQgPSBta3N0ZW1wKHRtcF9wYXRoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcXFwibWtzdGVtcFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGNsb3NlKHRtcF9mZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbiBleGVjdXRhYmxlIGZpbGUgdGhhdCBubyBiaW5mbXQgaGFuZGxlciBhY2NlcHRzOiB0aGUgZXhlY1xcbitcXHQgKiBmYWlscyB3aXRoIEVOT0VYRUMgYWZ0ZXIgYnBybV9jcmVkc19mb3JfZXhlYygpIGhhcyBydW4uXFxuK1xcdCAqL1xcbitcXHRnYXJiYWdlX2ZkID0gbWtzdGVtcChnYXJiYWdlX3BhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShnYXJiYWdlX2ZkLCAwLCBcXFwibWtzdGVtcF9nYXJiYWdlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X3VubGluaztcXG4rXFx0aWYgKCFBU1NFUlRfRVEod3JpdGUoZ2FyYmFnZV9mZCwgXFxcImp1bmtcXFxcblxcXCIsIDUpLCA1LCBcXFwid3JpdGVfZ2FyYmFnZVxcXCIpKSB7XFxuK1xcdFxcdGNsb3NlKGdhcmJhZ2VfZmQpO1xcbitcXHRcXHRnb3RvIG91dF91bmxpbms7XFxuK1xcdH1cXG4rXFx0aWYgKCFBU1NFUlRfT0soZmNobW9kKGdhcmJhZ2VfZmQsIDA3MDApLCBcXFwiY2htb2RfZ2FyYmFnZVxcXCIpKSB7XFxuK1xcdFxcdGNsb3NlKGdhcmJhZ2VfZmQpO1xcbitcXHRcXHRnb3RvIG91dF91bmxpbms7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZ2FyYmFnZV9mZCk7XFxuK1xcbitcXHRydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTtcXG4rXFx0aWYgKHJ1bGVzZXRfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1NZUylcXG4rXFx0XFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdEFTU0VSVF9HRShydWxlc2V0X2ZkLCAwLCBcXFwibGFuZGxvY2tfY3JlYXRlX3J1bGVzZXRcXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfdW5saW5rO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VydWxlc2V0X2ZkID0gcnVsZXNldF9mZDtcXG4rXFx0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2F0dGFjaChza2VsKSwgXFxcInNrZWxfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGxvYWRfcnVsZXNldF9pbnRvX21hcChza2VsKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfZmRzKSwgXFxcInBpcGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXFxcImZvcmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRjaGFyICphcmd2W10gPSB7IFxcXCJnYXJiYWdlXFxcIiwgTlVMTCB9O1xcbitcXHRcXHRpbnQgZmQ7XFxuK1xcbitcXHRcXHRjbG9zZShwaXBlX2Zkc1sxXSk7XFxuK1xcdFxcdHJlYWQocGlwZV9mZHNbMF0sIFxcdTAwMjZidWYsIDEpO1xcbitcXHRcXHRjbG9zZShwaXBlX2Zkc1swXSk7XFxuK1xcdFxcdGV4ZWN2KGdhcmJhZ2VfcGF0aCwgYXJndik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBmYWlsZWQgZXhlY3V0aW9uIG11c3QgbGVhdmUgbm8gdHJhY2U6IG5vXFxuK1xcdFxcdCAqIExhbmRsb2NrIGRvbWFpbiwgaS5lLiB3cml0aW5nIG11c3Qgc3RpbGwgd29ya1xcbitcXHRcXHQgKiAoZXhpdCA2KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGZkID0gb3Blbih0bXBfcGF0aCwgT19XUk9OTFkgfCBPX1RSVU5DKTtcXG4rXFx0XFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZXhpdCg2KTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRleGl0KDApO1xcbitcXHR9XFxuK1xcdGNsb3NlKHBpcGVfZmRzWzBdKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gcGlkO1xcbitcXHR3cml0ZShwaXBlX2Zkc1sxXSwgXFx1MDAyNmJ1ZiwgMSk7XFxuK1xcdGNsb3NlKHBpcGVfZmRzWzFdKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcXFwid2FpdHBpZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXFxcImNoaWxkX2V4aXRlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIDAsIFxcXCJkaXNjYXJkX2NoaWxkX2V4aXRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VjYWxsZWQsIFxcXCJsc21fcHJvZ19jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVzdHJpY3RfZXJyLCAwLCBcXFwicmVzdHJpY3RfYmlucHJtXFxcIik7XFxuK291dDpcXG4rXFx0bHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fZGVzdHJveShza2VsKTtcXG4rXFx0aWYgKHJ1bGVzZXRfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocnVsZXNldF9mZCk7XFxuK291dF91bmxpbms6XFxuK1xcdHVubGluayhnYXJiYWdlX3BhdGgpO1xcbitcXHR1bmxpbmsodG1wX3BhdGgpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfbHNtX3BvbGljeV9rZnVuY3Modm9pZClcXG4re1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmVzdHJpY3RfYmlucHJtXFxcIikpXFxuK1xcdFxcdHRlc3RfcmVzdHJpY3RfYmlucHJtKCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJyZXN0cmljdF9iaW5wcm1fZGlzY2FyZFxcXCIpKVxcbitcXHRcXHR0ZXN0X3Jlc3RyaWN0X2JpbnBybV9kaXNjYXJkKCk7XFxuK1xcdFJVTl9URVNUUyhsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDMzNWRiNTQ3MDQwMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jXFxuQEAgLTAsMCArMSwxMDAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFxcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVxcdTAwM2UgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xcbitcXG4rZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXFxuK2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xcbitleHRlcm4gdm9pZFxcbiticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KSBfX2tzeW07XFxuK2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdHUzMiBmbGFncykgX19rc3ltO1xcbitcXG4rLypcXG4rICogVGhlIExTTSBwb2xpY3kga2Z1bmNzIGFyZSBsaW1pdGVkIHRvIExTTSBhbmQgc3lzY2FsbCBwcm9ncmFtcyBieVxcbisgKiB0aGUgQlBGLXNpZGUga2Z1bmMgZmlsdGVyOiBhIHRyYWNpbmcgcHJvZ3JhbSBjYWxsaW5nIG9uZSBtdXN0IGZhaWxcXG4rICogdmVyaWZpY2F0aW9uLlxcbisgKi9cXG4rU0VDKFxcXCJ0cF9idGYvdGFza19uZXd0YXNrXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcXG4rXFxuK1xcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxuK1xcdGlmIChydWxlc2V0KVxcbitcXHRcXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0XFxuKyAqIHNldCB0aGUgcnVsZXNldCB1cDogdGhlIGFjcXVpcmUga2Z1bmMgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGxcXG4rICogcHJvZ3JhbXMgYW5kIG11c3QgYmUgcmVqZWN0ZWQgaW4gYW4gTFNNIHByb2dyYW0sIGV2ZW4gb24gYW5cXG4rICogYWxsb3dlZCBob29rLlxcbisgKi9cXG4rU0VDKFxcXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCBpcyBub3QgYWxsb3dlZFxcXCIpXFxuK2ludCBCUEZfUFJPRyhsc21fZ2V0LCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcXG4rXFxuK1xcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxuK1xcdGlmIChydWxlc2V0KVxcbitcXHRcXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBFbmZvcmNlbWVudCBuZWVkcyBhbiBleGVjdXRpb24gdG8gcmVzdHJpY3Q6IHRoZSBlbmZvcmNlbWVudCBrZnVuY1xcbisgKiBpcyBleGNsdXNpdmUgdG8gdGhlIHNsZWVwYWJsZSBicHJtIExTTSBob29rcyBhbmQgbXVzdCBiZSByZWplY3RlZFxcbisgKiBpbiBhIHN5c2NhbGwgcHJvZ3JhbS5cXG4rICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSBpcyBub3QgYWxsb3dlZFxcXCIpXFxuK2ludCBzeXNjYWxsX3Jlc3RyaWN0KHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShOVUxMLCBOVUxMLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogQW55IExTTSBhdHRhY2ggcG9pbnQgb3RoZXIgdGhhbiB0aGUgc2xlZXBhYmxlIGJwcm0gaG9va3MgbXVzdCBiZVxcbisgKiByZWplY3RlZC5cXG4rICovXFxuK1NFQyhcXFwibHNtLnMvZmlsZV9vcGVuXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQgaXMgbm90IGFsbG93ZWRcXFwiKVxcbitpbnQgQlBGX1BST0cod3JvbmdfaG9vaywgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KE5VTEwpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIGtmdW5jcyBtYXkgc2xlZXA6IGEgbm9uLXNsZWVwYWJsZSBwcm9ncmFtIG9uIGFuIGFsbG93ZWQgaG9va1xcbisgKiBtdXN0IGJlIHJlamVjdGVkLlxcbisgKi9cXG4rU0VDKFxcXCJsc20vYnBybV9jcmVkc19mb3JfZXhlY1xcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwicHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcXFwiKVxcbitpbnQgQlBGX1BST0cobm9uc2xlZXBhYmxlX3Byb2csIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK3tcXG4rXFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KE5VTEwpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQW4gYWNxdWlyZWQgcnVsZXNldCByZWZlcmVuY2UgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgcmV0dXJuaW5nLiAqL1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlXFxcIilcXG4raW50IGxlYWtfcnVsZXNldCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEwNzIwNmFlMTQ0ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jXFxuQEAgLTAsMCArMSwxMDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFxcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVxcdTAwM2UgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQ7XFxuK1xcbitleHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcXG4rYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XFxuK2V4dGVybiB2b2lkXFxuK2JwZl9sYW5kbG9ja19wdXRfcnVsZXNldChzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQpIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCxcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIGZsYWdzKSBfX2tzeW07XFxuK1xcbitzdHJ1Y3QgcnVsZXNldF9zbG90IHtcXG4rXFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0IF9fa3B0ciAqcnVsZXNldDtcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBydWxlc2V0X3Nsb3QpO1xcbit9IHJ1bGVzZXRfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2ludCBtb25pdG9yZWRfcGlkO1xcbitpbnQgcnVsZXNldF9mZDtcXG4rdTMyIGtmdW5jX2ZsYWdzO1xcbitib29sIGRvdWJsZV9jYWxsO1xcbitib29sIGdvdF9udWxsX2Zvcl9iYWRfZmQ7XFxuK2Jvb2wgbm9fcnVsZXNldDtcXG4raW50IHJlc3RyaWN0X2VycjtcXG4raW50IHJlc3RyaWN0Ml9lcnI7XFxuK2Jvb2wgY2FsbGVkO1xcbitcXG4rLypcXG4rICogUnVucyBpbiB0aGUgdGVzdCBydW5uZXIncyBjb250ZXh0IHRocm91Z2ggQlBGX1BST0dfUlVOOlxcbisgKiBAcnVsZXNldF9mZCBpcyByZXNvbHZlZCBpbiB0aGUgcnVubmVyJ3MgZmQgdGFibGUgYW5kIHRoZSBhY3F1aXJlZFxcbisgKiBydWxlc2V0IGlzIGhhbmRlZCB0byB0aGUgTFNNIHByb2dyYW0gdGhyb3VnaCB0aGUgbWFwIGtwdHIgc2xvdC5cXG4rICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBsb2FkX3J1bGVzZXQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwgKm9sZDtcXG4rXFx0c3RydWN0IHJ1bGVzZXRfc2xvdCAqc2xvdDtcXG4rXFx0aW50IGtleSA9IDA7XFxuK1xcbitcXHRzbG90ID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2cnVsZXNldF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXNsb3QpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0LyogQSBmZCB0aGF0IGlzIG5vdCBhIExhbmRsb2NrIHJ1bGVzZXQgbXVzdCByZXNvbHZlIHRvIE5VTEwuICovXFxuK1xcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxuK1xcdGlmICghcnVsZXNldClcXG4rXFx0XFx0Z290X251bGxfZm9yX2JhZF9mZCA9IHRydWU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHJ1bGVzZXQpO1xcbitcXG4rXFx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQpO1xcbitcXHRpZiAoIXJ1bGVzZXQpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2c2xvdC1cXHUwMDNlcnVsZXNldCwgcnVsZXNldCk7XFxuK1xcdGlmIChvbGQpXFxuK1xcdFxcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChvbGQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXFxcIilcXG4raW50IEJQRl9QUk9HKHJlc3RyaWN0X2V4ZWMsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkO1xcbitcXHRzdHJ1Y3QgcnVsZXNldF9zbG90ICpzbG90O1xcbitcXHRpbnQga2V5ID0gMDtcXG4rXFxuK1xcdGlmIChtb25pdG9yZWRfcGlkICE9IChicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y2FsbGVkID0gdHJ1ZTtcXG4rXFxuK1xcdHNsb3QgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZydWxlc2V0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghc2xvdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRydWxlc2V0ID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2c2xvdC1cXHUwMDNlcnVsZXNldCwgTlVMTCk7XFxuK1xcdGlmICghcnVsZXNldCkge1xcbitcXHRcXHRub19ydWxlc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJlc3RyaWN0X2VyciA9IGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oYnBybSwgcnVsZXNldCwga2Z1bmNfZmxhZ3MpO1xcbitcXHRpZiAoZG91YmxlX2NhbGwpXFxuK1xcdFxcdC8qIFJlcGxhY2VzIHRoZSBkb21haW4gc3RhZ2VkIGJ5IHRoZSBmaXJzdCBjYWxsLiAqL1xcbitcXHRcXHRyZXN0cmljdDJfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGtmdW5jX2ZsYWdzKTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIHJ1bGVzZXQgZm9yIHRoZSBuZXh0IG1vbml0b3JlZCBleGVjdXRpb24uICovXFxuK1xcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXFx1MDAyNnNsb3QtXFx1MDAzZXJ1bGVzZXQsIHJ1bGVzZXQpO1xcbitcXHRpZiAob2xkKVxcbitcXHRcXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQob2xkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6MjguNDM1NTM3NjYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjExNjY1NDY5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXCIsXG4gICAgXCJicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcIixcbiAgICBcImJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRcIixcbiAgICBcInNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0clwiLFxuICAgIFwibGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvblwiLFxuICAgIFwibGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIExhbmRsb2NrIExTTSwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgb24gZXhlY3V0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZWI2ZGE5NGViYzUxNWE2ZWQ0MmY4OTJmMTkyYTBiYzFlZmRlNTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMTowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbmluZGV4IGM1MTg2NTI2ZTc2ZjYuLjAxMTk3Yzc1ODBlYzAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3RcbkBAIC0xMjksNiArMTI5LDMxIEBAIFRoZSByZWFzb25pbmcgaXM6XG4gICByZXN0cmljdGlvbnMsIGJlY2F1c2UgYWNjZXNzIHdpdGhpbiB0aGUgc2FtZSBzY29wZSBpcyBhbHJlYWR5XG4gICBhbGxvd2VkIGJhc2VkIG9uIGBgTEFORExPQ0tfQUNDRVNTX0ZTX1JFU09MVkVfVU5JWGBgLlxuIFxuK0JQRiBrZnVuY3Ncbis9PT09PT09PT09XG4rXG4rQlBGIHByb2dyYW1zIGNhbiBhcHBseSBhIHVzZXJzcGFjZS1jcmVhdGVkIExhbmRsb2NrIHJ1bGVzZXQgdG8gYW5cbitleGVjdXRpb24uICBBIHN5c2NhbGwgcHJvZ3JhbSAoYGBCUEZfUFJPR19UWVBFX1NZU0NBTExgYCksIHJ1bm5pbmcgaW5cbit0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgYWNxdWlyZXMgdGhlXG4rcnVsZXNldCBmcm9tIGl0cyBmaWxlIGRlc2NyaXB0b3IgYW5kIHR5cGljYWxseSBoYW5kcyBpdCBvdmVyIHRocm91Z2hcbithIG1hcCBrcHRyIGZpZWxkOyBhIHNsZWVwYWJsZSBMU00gQlBGIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4rYGBicHJtX2NyZWRzX2Zvcl9leGVjYGAgb3IgYGBicHJtX2NyZWRzX2Zyb21fZmlsZWBgIGhvb2tzIHRoZW5cbitlbmZvcmNlcyBpdCBvbiBhbiBleGVjdXRpb24uXG4rXG4rVGhpcyBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBydW50aW1lIGNvbnRleHQgb2YgYSBwZW5kaW5nIGV4ZWN1dGlvbixcbithbmQgZW5mb3JjZSBhIExhbmRsb2NrIHBvbGljeSB0aHJvdWdoIEJQRi5cbitcbitUaGUgcmVzdHJpY3Rpb24gaXMgc3RhZ2VkIGluIHRoZSBMYW5kbG9jayBibG9iIG9mIHRoZVxuK2NyZWRlbnRpYWxzIHByZXBhcmVkIGZvciB0aGUgZXhlY3V0aW9uIGFuZCBjb21taXR0ZWQgcGFzdCB0aGUgZXhlY1xuK3BvaW50IG9mIG5vIHJldHVybiwgc28gYSBmYWlsZWQgZXhlY3V0aW9uIGxlYXZlcyB0aGUgY2FsbGluZyB0YXNrXG4rdW50b3VjaGVkLiAgVGhlIGBgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKWBgIGZsYWdzIGFwcGx5LCB3aXRoIHRoZVxuK2V4Y2VwdGlvbiBvZiBgYExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNgYC5cbitcbisuLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmNcbisgICAgOmlkZW50aWZpZXJzOiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZFxuKyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFxuKyAgICAgICAgICAgICAgICAgIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cbitcbiBUZXN0c1xuID09PT09XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0XG5pbmRleCA1ODk1ZTUyOWRhN2ZmLi5mYzNhZjIwNmU3OTUwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sc20tZGV2ZWxvcG1lbnQucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xzbS1kZXZlbG9wbWVudC5yc3RcbkBAIC0xNSwzICsxNSwzMCBAQCBzZWUgYGBzZWN1cml0eS9zZWN1cml0eS5jYGAgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlczpcbiBcbiAuLiBrZXJuZWwtZG9jOjogc2VjdXJpdHkvc2VjdXJpdHkuY1xuICAgIDpleHBvcnQ6XG4rXG4rTFNNIHBvbGljeSBrcHRyIGhvb2tzIGFuZCBCUEYga2Z1bmNzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rVGhlIExTTSBmcmFtZXdvcmsgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgZm9yIGluZGl2aWR1YWwgTFNNcyB0b1xuK2V4cG9zZSB0aGVpciBjb25maWd1cmF0aW9uIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQga3B0cnMuIEFuIExTTVxuK21heSBub3QgZXhwb3J0IGFueSBrZnVuYyBvciBvdGhlciBCUEYgaW50ZXJmYWNlIGRpcmVjdGx5LlxuK1xuK0FuIExTTSB3aXNoaW5nIHRvIGV4cG9zZSBhIEJQRiBrZnVuYyBtdXN0IHJldXNlIGFuIGV4aXN0aW5nIHNlY3VyaXR5XG4raG9vayBvciBpbXBsZW1lbnQgYSBuZXcgc3VmZmljaWVudGx5IGdlbmVyaWMgTFNNIGhvb2sgZm9yIHRoZSBkZXNpcmVkXG4raW50ZXJmYWNlLiBUaGUgaG9va3MgYXJlIHRoZW4gY2FsbGVkIGZyb20ga2Z1bmMgZGVmaW5pdGlvbnMgaW5cbitgYGtlcm5lbC9icGZgYC4gVGhpcyBhbGxvd3MgTFNNIGhvb2tzIHRvIHJlbWFpbiBzdWZmaWNpZW50bHkgZ2VuZXJpY1xuK3doaWxlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgc3Ryb25nIHR5cGluZ1xuK2FuZCBydW50aW1lIGNoZWNraW5nIG9mZmVyZWQgYnkgdGhlIEJQRiB2ZXJpZmllci5cbitcbitUaGUgTFNNIHByb3ZpZGluZyBhbiBvcGVyYXRpb24gaW1wbGVtZW50cyB0aGUgb3BlcmF0aW9uJ3MgaG9vayB3aXRoXG4rYGBMU01fSE9PS19JTklUKClgYCBsaWtlIGFueSBvdGhlciBob29rLiBBIEJQRiBwcm9ncmFtIGNhbGxpbmcgYW5cbitMU00ga2Z1bmMgdGhlcmVmb3JlIHJlYWNoZXMgdGhlIExTTSB0aGUgc2FtZSB3YXkgZXZlcnkgb3RoZXJcbitrZXJuZWwgY2FsbGVyIGRvZXM6IHRocm91Z2ggYW4gTFNNIGhvb2suIFRoZSBob29rcyBiYWNraW5nIGtmdW5jc1xuK2ZvbGxvdyB0aGUgdXN1YWwgcnVsZXMgZm9yIG5ldyBMU00gaG9va3M6IHRoZWlyIGNvbnRyYWN0IG11c3QgYmVcbitMU00gYWdub3N0aWMgc28gdGhhdCBvdGhlciBMU01zIGNvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsXG4raW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbWUgb3BlcmF0aW9uLlxuK1xuK1doZXRoZXIgdGhlIExTTSBwcm92aWRpbmcgYW4gb3BlcmF0aW9uIGlzIGJ1aWx0IGluIGFuZCBhY3RpdmUgaXMgYVxuK3J1bnRpbWUgcHJvcGVydHk6IHRoZSBrZnVuY3MgYXJlIGFsd2F5cyByZWdpc3RlcmVkIHdoZW5cbitgYENPTkZJR19CUEZfTFNNYGAgaXMgZW5hYmxlZC4gQlBGIHByb2dyYW0gbG9hZGluZyBpcyB0aHVzXG4raW5kZXBlbmRlbnQgb2YgdGhlIGJvb3QtdGltZSBMU00gY29uZmlndXJhdGlvbi5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li5hNzBlZGJkN2I3NjFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtNDUyLDYgKzQ1MiwxMSBAQCBMU01fSE9PSyhpbnQsIDAsIGJwZl90b2tlbl9jcmVhdGUsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCB1bmlvbiBicGZfYXR0ciAqYXR0clxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgYnBmX3Rva2VuX2ZyZWUsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuKVxuIExTTV9IT09LKGludCwgMCwgYnBmX3Rva2VuX2NtZCwgY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGVudW0gYnBmX2NtZCBjbWQpXG4gTFNNX0hPT0soaW50LCAwLCBicGZfdG9rZW5fY2FwYWJsZSwgY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludCBjYXApXG4rTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgcG9saWN5X2twdHJfZnJvbV9mZCwgaW50IGZkLFxuK1x0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuK0xTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgcG9saWN5X2twdHJfcHV0LCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbitMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gTFNNX0hPT0soaW50LCAwLCBsb2NrZWRfZG93biwgZW51bSBsb2NrZG93bl9yZWFzb24gd2hhdClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjQwZGZhOTZiNmE3MTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTE2OCw2ICsxNjgsMjMgQEAgc3RydWN0IGxzbV9wcm9wIHtcbiBcdHN0cnVjdCBsc21fcHJvcF9icGYgYnBmO1xuIH07XG4gXG4rc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuK1xuK3N0cnVjdCBsc21fcG9saWN5X2xhbmRsb2NrIHtcbitcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldDtcbit9O1xuK1xuKy8qXG4rICogQSByZWZlcmVuY2UgdG8gYW4gTFNNIHBvbGljeSBvYmplY3QsIHRhZ2dlZCBieSB0aGUgTFNNX0lEXyogdmFsdWVcbisgKiBwYXNzZWQgYWxvbmdzaWRlOiBvbmx5IHRoZSBtYXRjaGluZyBMU00ncyBtZW1iZXIgaXMgdmFsaWQuICBUaGVcbisgKiBtZW1iZXJzIGFyZSBub3QgZ3VhcmRlZCBieSB0aGUgTFNNcycgQ09ORklHIG9wdGlvbnM6IHRoZSBjYWxsZXJzXG4rICogYXJlIGJ1aWx0IGluZGVwZW5kZW50bHkgb2YgYW55IGluZGl2aWR1YWwgTFNNIGFuZCBhIGNhbGwgZm9yIGFcbisgKiBtaXNzaW5nIExTTSBtdXN0IGZhaWwgYXQgcnVudGltZSwgbm90IGF0IGJ1aWxkIHRpbWUuXG4rICovXG4rdW5pb24gbHNtX3BvbGljeV9rcHRyIHtcbitcdHN0cnVjdCBsc21fcG9saWN5X2xhbmRsb2NrIGxhbmRsb2NrO1xuK307XG4rXG4gZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2tkb3duX3JlYXNvbnNbTE9DS0RPV05fQ09ORklERU5USUFMSVRZX01BWCsxXTtcbiBcbiAvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGluIHNlY3VyaXR5L2NvbW1vbmNhcC5jICovXG5AQCAtMjMxMiw2ICsyMzI5LDEzIEBAIGV4dGVybiBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NyZWF0ZShzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgdW5pb24gYnBmX2F0dHIgKmF0XG4gZXh0ZXJuIHZvaWQgc2VjdXJpdHlfYnBmX3Rva2VuX2ZyZWUoc3RydWN0IGJwZl90b2tlbiAqdG9rZW4pO1xuIGV4dGVybiBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NtZChjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgZW51bSBicGZfY21kIGNtZCk7XG4gZXh0ZXJuIGludCBzZWN1cml0eV9icGZfdG9rZW5fY2FwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcCk7XG4rZXh0ZXJuIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuK1x0XHRcdFx0XHR1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSk7XG4rZXh0ZXJuIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpO1xuK2V4dGVybiBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0XHQgICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LFxuK1x0XHRcdFx0XHQgICAgIHUzMiBmbGFncyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9icGYoaW50IGNtZCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBib29sIGtlcm5lbClcbkBAIC0yMzY1LDYgKzIzODksMjUgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBmX3Rva2VuX2NhcGFibGUoY29uc3Qgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sIGludFxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkKHU2NCBsc21pZCwgaW50IGZkLFxuK1x0XHRcdFx0XHQgICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCxcbitcdFx0XHRcdFx0ICAgIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKHU2NCBsc21pZCxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbitcdFx0XHRcdFx0XHQgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXG4rXHRcdFx0XHRcdFx0ICAgIHUzMiBmbGFncylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuaW5kZXggMzk4M2I0Y2U3M2M4MS4uNjdhYTkwMmYxMjU3MCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuQEAgLTE0LDggKzE0LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbG9jYWxfc3RvcmFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2ZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi1jZ3JvdXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiAvKiBGb3IgZXZlcnkgTFNNIGhvb2sgdGhhdCBhbGxvd3MgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMsIGRlY2xhcmUgYSBub3BcbiAgKiBmdW5jdGlvbiB3aGVyZSBhIEJQRiBwcm9ncmFtIGNhbiBiZSBhdHRhY2hlZC4gTm90YWJseSwgd2UgcXVhbGlmeSBlYWNoIHdpdGhcbkBAIC01Niw2ICs1OCw5IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX3hmcm1fZGVjb2RlX3Nlc3Npb24pXG4gI2VuZGlmXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faXNtYWNsYWJlbClcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9maWxlX2FsbG9jX3NlY3VyaXR5KVxuK0JURl9JRChmdW5jLCBicGZfbHNtX3BvbGljeV9rcHRyX2Zyb21fZmQpXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21fcG9saWN5X2twdHJfcHV0KVxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cilcbiBCVEZfU0VUX0VORChicGZfbHNtX2Rpc2FibGVkX2hvb2tzKVxuIFxuIC8qIExpc3Qgb2YgTFNNIGhvb2tzIHRoYXQgc2hvdWxkIG9wZXJhdGUgb24gJ2N1cnJlbnQnIGNncm91cCByZWdhcmRsZXNzXG5AQCAtNDcwLDMgKzQ3NSwyMDAgQEAgaW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rLyogTFNNIHBvbGljeSBrZnVuY3MgKi9cbitcbisvKlxuKyAqIE9wYXF1ZSBoYW5kbGUgZm9yIGEgTGFuZGxvY2sgcnVsZXNldC4gIE9ubHlcbisgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIHByb2R1Y2VzIG9uZSwgYW5kIG9ubHkgTGFuZGxvY2tcbisgKiByZXNvbHZlcyBpdC5cbisgKi9cbitzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQge307XG4rXG4rLypcbisgKiBUaGUgc2xlZXBhYmxlIExTTSBob29rcyBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKCkgYW5kXG4rICogYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KCkgbWF5IGJlIGNhbGxlZCBmcm9tLlxuKyAqL1xuK0JURl9TRVRfU1RBUlQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuK0JURl9JRChmdW5jLCBicGZfbHNtX2Jwcm1fY3JlZHNfZm9yX2V4ZWMpXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21fYnBybV9jcmVkc19mcm9tX2ZpbGUpXG4rQlRGX1NFVF9FTkQoYnBmX2xhbmRsb2NrX2tmdW5jX2hvb2tzKVxuK1xuK19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbitcbisvKipcbisgKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCAtIEdldCBhIExhbmRsb2NrIHJ1bGVzZXQgZnJvbSBhIGZkXG4rICogQGZkOiBmaWxlIGRlc2NyaXB0b3Igb2YgYSBMYW5kbG9jayBydWxlc2V0LCByZXNvbHZlZCBpbiB0aGUgZmlsZVxuKyAqICAgICAgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgdGFzayBydW5uaW5nIHRoZSBwcm9ncmFtXG4rICpcbisgKiBBY3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZSBMYW5kbG9jayBydWxlc2V0IHJlZmVycmVkIHRvIGJ5IEBmZCwgYXNcbisgKiBjcmVhdGVkIGJ5IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KDIpIGFuZCBwb3B1bGF0ZWQgd2l0aFxuKyAqIGxhbmRsb2NrX2FkZF9ydWxlKDIpLiAgT25seSBzeXNjYWxsIHByb2dyYW1zIG1heSBjYWxsIHRoaXMga2Z1bmM6XG4rICogdGhleSBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgaW52b2tpbmcgdGhlbSwgd2hlcmUgdGhlXG4rICogcnVsZXNldCBmZCBpcyBtZWFuaW5nZnVsLiAgVGhlIGFjcXVpcmVkIHJ1bGVzZXQgY2FuIGJlIGhhbmRlZCB0byBhblxuKyAqIGVuZm9yY2VtZW50IHByb2dyYW0gdGhyb3VnaCBhIG1hcCBrcHRyIGZpZWxkLiAgVGhlIHJlZmVyZW5jZSBtdXN0XG4rICogYmUgcmVsZWFzZWQgd2l0aCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoKS5cbisgKlxuKyAqIFJldHVybjogQSByZWZlcmVuY2VkIHJ1bGVzZXQgaGFuZGxlLCBvciBOVUxMIGlmIEBmZCBpcyBub3QgYVxuKyAqIHJlYWRhYmxlIExhbmRsb2NrIHJ1bGVzZXQgZmQgb3IgdGhlIExhbmRsb2NrIExTTSBpcyBub3QgZW5hYmxlZC5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKlxuK2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZClcbit7XG4rXHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5O1xuK1xuK1x0aWYgKHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoTFNNX0lEX0xBTkRMT0NLLCBmZCwgXHUwMDI2cG9saWN5KSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gcG9saWN5LmxhbmRsb2NrLnJ1bGVzZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCAtIFB1dCBhIExhbmRsb2NrIHJ1bGVzZXRcbisgKiBAcnVsZXNldDogTGFuZGxvY2sgcnVsZXNldCB0byBwdXRcbisgKlxuKyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgYWNxdWlyZWQgd2l0aCBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpLlxuKyAqL1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldClcbit7XG4rXHR1bmlvbiBsc21fcG9saWN5X2twdHIgcG9saWN5ID0geyAubGFuZGxvY2sucnVsZXNldCA9IHJ1bGVzZXQgfTtcbitcbitcdHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dChMU01fSURfTEFORExPQ0ssIFx1MDAyNnBvbGljeSk7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0gLSBFbmZvcmNlIGEgTGFuZGxvY2sgcnVsZXNldCBvbiBleGVjXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzXG4rICogQGJwcm06IGV4ZWN1dGlvbiBjb250ZXh0IHByb3ZpZGluZyB0aGUgcHJlcGFyZWQgY3JlZGVudGlhbHMgdG9cbisgKiAgICAgICAgcmVzdHJpY3RcbisgKiBAcnVsZXNldDogTGFuZGxvY2sgcnVsZXNldCB0byBlbmZvcmNlXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLCBleGNlcHRcbisgKiAgICAgICAgICVMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DXG4rICpcbisgKiBSZXN0cmljdCB0aGUgY3JlZGVudGlhbHMgcHJlcGFyZWQgaW4gQGJwcm0gd2l0aCBAcnVsZXNldCwgc28gdGhhdFxuKyAqIHRoZSBleGVjdXRlZCB0YXNrIHN0YXJ0cyBjb25maW5lZCBieSBpdCwgZm9sbG93aW5nIHRoZSBzYW1lIGRvbWFpblxuKyAqIGNvbXBvc2l0aW9uIHJ1bGVzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikuICBUaGUgcmVzdHJpY3Rpb24gaXNcbisgKiBzdGFnZWQgYW5kIG9ubHkgY29tbWl0dGVkIGF0IHRoZSBleGVjdXRpb24ncyBwb2ludCBvZiBubyByZXR1cm46IGFuXG4rICogZXhlY3V0aW9uIHRoYXQgZmFpbHMgYmVmb3JlIHRoYXQgcG9pbnQgaXMgdW5hZmZlY3RlZCwgYW5kIGEgbGF0ZXJcbisgKiBjYWxsIG9uIHRoZSBzYW1lIGV4ZWN1dGlvbiByZXBsYWNlcyBhIHByZXZpb3VzbHkgc3RhZ2VkXG4rICogcmVzdHJpY3Rpb24uICBAcnVsZXNldCBpcyBvbmx5IGJvcnJvd2VkOiB0aGUgY2FsbGVyIGtlZXBzIGl0c1xuKyAqIHJlZmVyZW5jZS5cbisgKlxuKyAqIFRoZSBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzIGFwcGx5IHdpdGggdGhlaXIgdXN1YWxcbisgKiBzZW1hbnRpY3MuICBPbmx5ICVMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DIGlzIHJlamVjdGVkLCBhcyBpdFxuKyAqIHRhcmdldHMgdGhlIGNhbGxpbmcgdGhyZWFkcyByYXRoZXIgdGhhbiB0aGUgZXhlY3V0aW9uLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBMYW5kbG9jayBMU00gaXMgbm90XG4rICogZW5hYmxlZCwgLUVJTlZBTCBpZiBAZmxhZ3MgY29udGFpbnMgYW4gdW5zdXBwb3J0ZWQgZmxhZywgb3RoZXJcbisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZSBhcyBmb3IgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKS5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCxcbitcdFx0XHRcdFx0ICAgICB1MzIgZmxhZ3MpXG4re1xuK1x0dW5pb24gbHNtX3BvbGljeV9rcHRyIHBvbGljeSA9IHsgLmxhbmRsb2NrLnJ1bGVzZXQgPSBydWxlc2V0IH07XG4rXG4rXHRyZXR1cm4gc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKExTTV9JRF9MQU5ETE9DSywgYnBybSxcbitcdFx0XHRcdFx0XHQgXHUwMDI2cG9saWN5LCBmbGFncyk7XG4rfVxuK1xuKy8qIERlc3RydWN0b3IgZm9yIHJlZmVyZW5jZWQgYnBmX2xhbmRsb2NrX3J1bGVzZXQga3B0cnMuICovXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcih2b2lkICpydWxlc2V0KVxuK3tcbitcdHVuaW9uIGxzbV9wb2xpY3lfa3B0ciBwb2xpY3kgPSB7IC5sYW5kbG9jay5ydWxlc2V0ID0gcnVsZXNldCB9O1xuK1xuK1x0c2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KExTTV9JRF9MQU5ETE9DSywgXHUwMDI2cG9saWN5KTtcbit9XG4rQ0ZJX05PU0VBTChicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcik7XG4rXG4rX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbitcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkLFxuK1x0ICAgICBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCwgS0ZfUkVMRUFTRSB8IEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybSwgS0ZfU0xFRVBBQkxFKVxuK0JURl9LRlVOQ1NfRU5EKGJwZl9sYW5kbG9ja19rZnVuY19pZHMpXG4rXG4rQlRGX0lEX0xJU1QoYnBmX2xhbmRsb2NrX2R0b3JfaWRzKVxuK0JURl9JRChzdHJ1Y3QsIGJwZl9sYW5kbG9ja19ydWxlc2V0KVxuK0JURl9JRChmdW5jLCBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcilcbitcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkcywgZnVuYyxcbitcdFx0ICAgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQpXG4rQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1faWRzLCBmdW5jLFxuK1x0XHQgICBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKVxuK1xuKy8qXG4rICogQlBGX1BST0dfVFlQRV9MU00gYW5kIEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCBzaGFyZSB0aGVpciBrZnVuY1xuKyAqIGxvb2t1cCBidWNrZXRzIHdpdGggb3RoZXIgcHJvZ3JhbSB0eXBlcywgc28gcmVzdHJpY3RpbmcgdGhlIExTTVxuKyAqIHBvbGljeSBrZnVuY3MgcmVxdWlyZXMgYSBmaWx0ZXIuICBBIHJ1bGVzZXQgZmQgaXMgb25seSBtZWFuaW5nZnVsXG4rICogaW4gdGhlIGZkIHRhYmxlIG9mIHRoZSB0YXNrIHRoYXQgc2V0IHRoZSBydWxlc2V0IHVwLCBzb1xuKyAqIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKCkgaXMgZXhjbHVzaXZlIHRvIHN5c2NhbGxcbisgKiBwcm9ncmFtcywgd2hpY2ggcnVuIGluIHRoYXQgdGFzaydzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cbisgKiB0aGUgY29udGV4dCBvZiB0aGUgdGFzayBpdCBtZWRpYXRlcy4gIEVuZm9yY2VtZW50IGlzIGV4Y2x1c2l2ZSB0b1xuKyAqIHRoZSBzbGVlcGFibGUgYnBybSBMU00gaG9va3MgdGhlIHBvbGljeSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkXG4rICogZm9yLCBhbmQgdGhlIHJlbGVhc2Uga2Z1bmMgaXMgYWxsb3dlZCB3aGVyZXZlciBhIHJlZmVyZW5jZSBjYW4gYmVcbisgKiBoZWxkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbit7XG4rXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19pZHMsIGtmdW5jX2lkKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzd2l0Y2ggKHByb2ctXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBCUEZfUFJPR19UWVBFX1NZU0NBTEw6XG4rXHRcdGlmIChrZnVuY19pZCA9PSBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtX2lkc1swXSlcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxuK1x0XHRpZiAoa2Z1bmNfaWQgPT0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2lkc1swXSlcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcbitcdFx0LypcbitcdFx0ICogQlBGX0xTTV9DR1JPVVAgcHJvZ3JhbXMgcnVuIHVuZGVyIGNsYXNzaWMgUkNVIGFuZFxuK1x0XHQgKiBjYW5ub3Qgc2xlZXAuXG4rXHRcdCAqL1xuK1x0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcbitcdFx0aWYgKCFidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19ob29rcyxcbitcdFx0XHRcdFx0IHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpKVxuK1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1xuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2xhbmRsb2NrX2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19pZHMsXG4rXHQuZmlsdGVyID0gYnBmX2xhbmRsb2NrX2tmdW5jX2ZpbHRlcixcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9sc21fcG9saWN5X2tmdW5jX2luaXQodm9pZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2xhbmRsb2NrX2R0b3JzW10gPSB7XG4rXHRcdHtcbitcdFx0XHQuYnRmX2lkID0gYnBmX2xhbmRsb2NrX2R0b3JfaWRzWzBdLFxuK1x0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfbGFuZGxvY2tfZHRvcl9pZHNbMV0sXG4rXHRcdH0sXG4rXHR9O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4rXHRcdFx0XHRcdFx1MDAyNmJwZl9sYW5kbG9ja19rZnVuY19zZXQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHRcdTAwMjZicGZfbGFuZGxvY2tfa2Z1bmNfc2V0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9sYW5kbG9ja19kdG9ycyxcbitcdFx0XHRcdFx0ICAgQVJSQVlfU0laRShicGZfbGFuZGxvY2tfZHRvcnMpLFxuK1x0XHRcdFx0XHQgICBUSElTX01PRFVMRSk7XG4rfVxuK2xhdGVfaW5pdGNhbGwoYnBmX2xzbV9wb2xpY3lfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGUgYi9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZVxuaW5kZXggZmZhNzY0NmQ5OWYzZS4uOWJhMjhjMDZiNWFjMiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZVxuQEAgLTE2LDMgKzE2LDUgQEAgbGFuZGxvY2stJChDT05GSUdfQVVESVQpICs9IFxcXG4gXHRpZC5vIFxcXG4gXHRhdWRpdC5vIFxcXG4gXHRkb21haW4ub1xuK1xuK2xhbmRsb2NrLSQoQ09ORklHX0JQRl9MU00pICs9IGJwZi5vXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMgYi9zZWN1cml0eS9sYW5kbG9jay9icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNmODkwNjJkMzVhNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5jXG5AQCAtMCwwICsxLDEzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIExhbmRsb2NrIC0gTFNNIHBvbGljeSBrcHRyIGhvb2tzXG4rICpcbisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFNNIGhvb2tzIGJhY2tpbmcgdGhlIExhbmRsb2NrIGtmdW5jc1xuKyAqXG4rICogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbGFuZGxvY2suaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYnBmLmhcIlxuKyNpbmNsdWRlIFwiY3JlZC5oXCJcbisjaW5jbHVkZSBcImxpbWl0cy5oXCJcbisjaW5jbHVkZSBcInJ1bGVzZXQuaFwiXG4rI2luY2x1ZGUgXCJzZXR1cC5oXCJcbitcbitzdGF0aWMgaW50IGhvb2tfcG9saWN5X2twdHJfZnJvbV9mZChpbnQgZmQsIHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxuK3tcbitcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuK1xuK1x0cnVsZXNldCA9IGxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoZmQsIEZNT0RFX0NBTl9SRUFEKTtcbitcdGlmIChJU19FUlIocnVsZXNldCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKHJ1bGVzZXQpO1xuK1xuK1x0cG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQgPSAoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICopcnVsZXNldDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBob29rX3BvbGljeV9rcHRyX3B1dCh1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbit7XG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCA9XG4rXHRcdChzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqKXBvbGljeS1cdTAwM2VsYW5kbG9jay5ydWxlc2V0O1xuK1xuK1x0LypcbitcdCAqIE1heSBiZSBjYWxsZWQgZnJvbSBhIEJQRiBvYmplY3QgZGVzdHJ1Y3RvciB0aGF0IGNhbm5vdCBzbGVlcCxcbitcdCAqIHdoZXJlYXMgZHJvcHBpbmcgdGhlIGxhc3QgcnVsZXNldCByZWZlcmVuY2UgZnJlZXMgaXQgYW5kIG1heVxuK1x0ICogc2xlZXA6IGFsd2F5cyBkZWZlciB0aGUgZnJlZS5cbitcdCAqL1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQocnVsZXNldCk7XG4rfVxuK1xuKy8qIENoYXJnaW5nIHNjb3BlIGZvciB0aGUgQlBGLWRyaXZlbiBkb21haW4gYWxsb2NhdGlvbnM6IHJvb3QsIGkuZS4gbm9ib2R5LiAqL1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X2JwZl9tZW1jZyh2b2lkKVxuK3tcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xuKyNlbHNlXG4rXHRyZXR1cm4gTlVMTDtcbisjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4rfVxuK1xuK3N0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbitcdFx0XHRcdFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5LFxuK1x0XHRcdFx0XHQgdTMyIGZsYWdzKVxuK3tcbitcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpicHJtX2xsY3JlZCA9IGxhbmRsb2NrX2NyZWQoYnBybS1cdTAwM2VjcmVkKTtcbitcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0ID1cbitcdFx0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICopcG9saWN5LVx1MDAzZWxhbmRsb2NrLnJ1bGVzZXQ7XG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqb2xkX21lbWNnO1xuK1x0aW50IGVycjtcbitcbitcdC8qXG4rXHQgKiBTYW1lIGZsYWdzIGFzIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMiksIGV4Y2VwdFxuK1x0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQzogdGhlIHJlc3RyaWN0aW9uIHRhcmdldHMgdGhlXG4rXHQgKiBleGVjdXRpb24sIG5vdCB0aGUgY2FsbGluZyB0aHJlYWRzLlxuK1x0ICovXG4rXHRpZiAoKGZsYWdzIHwgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pICE9XG4rXHQgICAgTEFORExPQ0tfTUFTS19SRVNUUklDVF9CSU5QUk0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkb21haW4gY29uZmluZXMgdGhlIGV4ZWN1dGlvbiBvbiBiZWhhbGYgb2YgdGhlIEJQRlxuK1x0ICogcHJvZ3JhbSwgbm90IG9mIHRoZSBtZWRpYXRlZCB0YXNrOiBkbyBub3QgY2hhcmdlIHRoZSB0YXNrJ3NcbitcdCAqIG1lbWNnIGZvciBpdC5cbitcdCAqL1xuK1x0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhnZXRfYnBmX21lbWNnKCkpO1xuK1x0ZXJyID0gbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgcnVsZXNldCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNnJlc3RyaWN0aW9uKTtcbitcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHQvKlxuK1x0ICogU3RhZ2VzIHRoZSByZXN0cmljdGlvbiB1bnRpbCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mIHRoZVxuK1x0ICogZXhlY3V0aW9uLCByZXBsYWNpbmcgKGFuZCByZWxlYXNpbmcpIGFueSBwcmV2aW91c2x5IHN0YWdlZFxuK1x0ICogb25lLiAgTm90aGluZyBpcyBlbmZvcmNlZCB5ZXQ6IGFuIGV4ZWN1dGlvbiB0aGF0IGZhaWxzIGJlZm9yZVxuK1x0ICogY29tbWl0dGluZyBpdHMgY3JlZGVudGlhbHMgZHJvcHMgdGhlIHN0YWdlZCByZXN0cmljdGlvbiBpblxuK1x0ICogaG9va19jcmVkX2ZyZWUoKSB3aXRoIG5vIGVmZmVjdCBvbiB0aGUgY2FsbGluZyB0YXNrLlxuK1x0ICovXG4rXHRsYW5kbG9ja19wdXRfcnVsZXNldChicHJtX2xsY3JlZC1cdTAwM2VzdGFnZWQuZG9tYWluKTtcbitcdGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZCA9IHJlc3RyaWN0aW9uO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0c3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmJwcm1fbGxjcmVkID0gbGFuZGxvY2tfY3JlZChicHJtLVx1MDAzZWNyZWQpO1xuK1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uIHJlc3RyaWN0aW9uO1xuK1xuK1x0aWYgKCFicHJtX2xsY3JlZC1cdTAwM2VzdGFnZWQuZG9tYWluKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXN0cmljdGlvbiA9IGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZDtcbitcdGJwcm1fbGxjcmVkLVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4rXG4rXHRsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihicHJtX2xsY3JlZCwgXHUwMDI2cmVzdHJpY3Rpb24pO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBsYW5kbG9ja19ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbitcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcbitcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfcHV0LCBob29rX3BvbGljeV9rcHRyX3B1dCksXG4rXHRMU01fSE9PS19JTklUKGJwcm1fZW5mb3JjZV9wb2xpY3lfa3B0ciwgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIpLFxuK1x0TFNNX0hPT0tfSU5JVChicHJtX2NvbW1pdHRpbmdfY3JlZHMsIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKSxcbit9O1xuK1xuK19faW5pdCB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbit7XG4rXHRzZWN1cml0eV9hZGRfaG9va3MobGFuZGxvY2tfaG9va3MsIEFSUkFZX1NJWkUobGFuZGxvY2tfaG9va3MpLFxuK1x0XHRcdCAgIFx1MDAyNmxhbmRsb2NrX2xzbWlkKTtcbit9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svYnBmLmggYi9zZWN1cml0eS9sYW5kbG9jay9icGYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU1NzcyOWU2YTU2NDRcbi0tLSAvZGV2L251bGxcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2JwZi5oXG5AQCAtMCwwICsxLDIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogTGFuZGxvY2sgLSBMU00gcG9saWN5IGtwdHIgaG9va3NcbisgKlxuKyAqIENvcHlyaWdodCDCqSAyMDI2IEp1c3RpbiBTdWVzcyBcdTAwM2N1dGlsaXR5ZW1hbDc3QGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpZm5kZWYgX1NFQ1VSSVRZX0xBTkRMT0NLX0JQRl9IXG4rI2RlZmluZSBfU0VDVVJJVFlfTEFORExPQ0tfQlBGX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitfX2luaXQgdm9pZCBsYW5kbG9ja19hZGRfYnBmX2hvb2tzKHZvaWQpO1xuKyNlbHNlIC8qIENPTkZJR19CUEZfTFNNICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxhbmRsb2NrX2FkZF9icGZfaG9va3Modm9pZClcbit7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuK1xuKyNlbmRpZiAvKiBfU0VDVVJJVFlfTEFORExPQ0tfQlBGX0ggKi9cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmNcbmluZGV4IGNjNDE5ZGU3NWNkNmIuLmVmYmZkMGMyMDQ3NTMgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmNcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1xuQEAgLTgsMTQgKzgsMTE0IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2xhbmRsb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNvbW1vbi5oXCJcbiAjaW5jbHVkZSBcImNyZWQuaFwiXG4rI2luY2x1ZGUgXCJkb21haW4uaFwiXG4gI2luY2x1ZGUgXCJydWxlc2V0LmhcIlxuICNpbmNsdWRlIFwic2V0dXAuaFwiXG4gXG4rLyoqXG4rICogbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbiAtIENvbXB1dGUgYSBjcmVkZW50aWFsIHJlc3RyaWN0aW9uXG4rICpcbisgKiBAbGxjcmVkOiBMYW5kbG9jayBjcmVkZW50aWFscyB0byByZXN0cmljdDogcHJvdmlkZXMgdGhlIHBhcmVudCBkb21haW4gYW5kXG4rICogICAgICAgICAgdGhlIHByZXZpb3VzIGxvZyBjb25maWd1cmF0aW9uLiAgTm90IG1vZGlmaWVkLlxuKyAqIEBydWxlc2V0OiBSdWxlc2V0IHRvIGVuZm9yY2UsIG9yIE5VTEwgZm9yIGEgbG9nLWNvbmZpZ3VyYXRpb24tb25seSBjaGFuZ2UuXG4rICogQGZsYWdzOiBsYW5kbG9ja19yZXN0cmljdF9zZWxmKDIpIGZsYWdzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3JcbisgKiAgICAgICAgIHZhbGlkYXRpbmcgdGhlbSBhZ2FpbnN0IHRoZSBzZXQgb2YgZmxhZ3MgaXQgc3VwcG9ydHMuXG4rICogQHJlc3RyaWN0aW9uOiBDb21wdXRlZCByZXN0cmljdGlvbi4gIE9uIHN1Y2Nlc3MsIGhvbGRzIGEgcmVmZXJlbmNlIG9uXG4rICogICAgICAgICAgICAgICBAcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluIChpZiBhbnkpLCB3aGljaFxuKyAqICAgICAgICAgICAgICAgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oKSB0cmFuc2ZlcnMgdG8gdGhlIHJlc3RyaWN0ZWRcbisgKiAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzLlxuKyAqXG4rICogVGhlIHJlc3RyaWN0aW9uIGJ1aWxkcyBvbiBAbGxjcmVkJ3MgY3VycmVudCBzdGF0ZTogdGhlIGNhbGxlciBtdXN0IGFwcGx5XG4rICogaXQgdG8gKG9yIHN0YWdlIGl0IGZvcikgdGhlc2Ugc2FtZSBjcmVkZW50aWFscy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcbitcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCwgY29uc3QgdTMyIGZsYWdzLFxuK1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbilcbit7XG4rI2lmZGVmIENPTkZJR19BVURJVFxuK1x0LyogVHJhbnNsYXRlcyBcIm9mZlwiIGFuZCBcIm9uXCIgZmxhZ3MgdG8gYm9vbGVhbnMuICovXG4rXHRjb25zdCBib29sIGxvZ19zYW1lX2V4ZWMgPVxuK1x0XHQhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TQU1FX0VYRUNfT0ZGKTtcbitcdGNvbnN0IGJvb2wgbG9nX25ld19leGVjID1cbitcdFx0ISEoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfTE9HX05FV19FWEVDX09OKTtcbitcdGNvbnN0IGJvb2wgbG9nX3N1YmRvbWFpbnMgPVxuK1x0XHQhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XG4rXHRjb25zdCBib29sIHByZXZfbG9nX3N1YmRvbWFpbnMgPSAhbGxjcmVkLVx1MDAzZWxvZ19zdWJkb21haW5zX29mZjtcbisjZW5kaWYgLyogQ09ORklHX0FVRElUICovXG4rXG4rXHQqcmVzdHJpY3Rpb24gPSAoc3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uKXt9O1xuK1xuKyNpZmRlZiBDT05GSUdfQVVESVRcbitcdHJlc3RyaWN0aW9uLVx1MDAzZWxvZ19zdWJkb21haW5zX29mZiA9ICFwcmV2X2xvZ19zdWJkb21haW5zIHx8XG4rXHRcdFx0XHRcdCAgIWxvZ19zdWJkb21haW5zO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbitcbitcdGlmICghcnVsZXNldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4gPSBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KGxsY3JlZC1cdTAwM2Vkb21haW4sIHJ1bGVzZXQpO1xuK1x0aWYgKElTX0VSUihyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pKSB7XG4rXHRcdGNvbnN0IGludCBlcnIgPSBQVFJfRVJSKHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbik7XG4rXG4rXHRcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbiA9IE5VTEw7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rI2lmZGVmIENPTkZJR19BVURJVFxuK1x0cmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfc2FtZV9leGVjID0gbG9nX3NhbWVfZXhlYztcbitcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbi1cdTAwM2VoaWVyYXJjaHktXHUwMDNlbG9nX25ld19leGVjID0gbG9nX25ld19leGVjO1xuK1x0aWYgKCghbG9nX3NhbWVfZXhlYyBcdTAwMjZcdTAwMjYgIWxvZ19uZXdfZXhlYykgfHwgIXByZXZfbG9nX3N1YmRvbWFpbnMpXG4rXHRcdHJlc3RyaWN0aW9uLVx1MDAzZWRvbWFpbi1cdTAwM2VoaWVyYXJjaHktXHUwMDNlbG9nX3N0YXR1cyA9XG4rXHRcdFx0TEFORExPQ0tfTE9HX0RJU0FCTEVEO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbiAtIEVuZm9yY2UgYSBjb21wdXRlZCByZXN0cmljdGlvbiBvbiBjcmVkZW50aWFsc1xuKyAqXG4rICogQGxsY3JlZDogTGFuZGxvY2sgY3JlZGVudGlhbHMgdG8gcmVzdHJpY3QsIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjYWxsZXJcbisgKiAgICAgICAgICAocHJlcGFyZWQgYW5kIG5vdCB5ZXQgY29tbWl0dGVkKS5cbisgKiBAcmVzdHJpY3Rpb246IFJlc3RyaWN0aW9uIGNvbXB1dGVkIGJ5IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oKVxuKyAqICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgc2FtZSBjcmVkZW50aWFsIHN0YXRlOyBpdHMgZG9tYWluIHJlZmVyZW5jZSBpc1xuKyAqICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQgdG8gQGxsY3JlZC5cbisgKlxuKyAqIENhbm5vdCBmYWlsLCBzbyB0aGF0IGEgY2FsbGVyIG1heSBhcHBseSBhIHJlc3RyaWN0aW9uIHBhc3QgaXRzIGxhc3QgcG9pbnRcbisgKiBvZiBmYWlsdXJlLCBlLmcuIGFuIGV4ZWMgcG9pbnQgb2Ygbm8gcmV0dXJuLlxuKyAqL1xuK3ZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcbitcdFx0XHRcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pXG4re1xuKyNpZmRlZiBDT05GSUdfQVVESVRcbitcdGxsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSByZXN0cmljdGlvbi1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmY7XG4rI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuK1xuK1x0aWYgKCFyZXN0cmljdGlvbi1cdTAwM2Vkb21haW4pXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFJlcGxhY2VzIHRoZSBvbGQgZG9tYWluLiAqL1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXQobGxjcmVkLVx1MDAzZWRvbWFpbik7XG4rXHRsbGNyZWQtXHUwMDNlZG9tYWluID0gcmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluO1xuK1x0cmVzdHJpY3Rpb24tXHUwMDNlZG9tYWluID0gTlVMTDtcbitcbisjaWZkZWYgQ09ORklHX0FVRElUXG4rXHRsbGNyZWQtXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKGxsY3JlZC1cdTAwM2Vkb21haW4tXHUwMDNlbnVtX2xheWVycyAtIDEpO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbit9XG4rXG4gc3RhdGljIHZvaWQgaG9va19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpjb25zdCBuZXcsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjb25zdCBvbGQpXG4ge1xuQEAgLTI0LDYgKzEyNCwxMiBAQCBzdGF0aWMgdm9pZCBob29rX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKmNvbnN0IG5ldyxcbiBcbiBcdGxhbmRsb2NrX2dldF9ydWxlc2V0KG9sZF9sbGNyZWQtXHUwMDNlZG9tYWluKTtcbiBcdCpsYW5kbG9ja19jcmVkKG5ldykgPSAqb2xkX2xsY3JlZDtcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitcdC8qIE9ubHkgYnBybSBjcmVkZW50aWFscyBvd24gYSBzdGFnZWQgcmVzdHJpY3Rpb246IG5ldmVyIGNvcGllZC4gKi9cbitcdFdBUk5fT05fT05DRShsYW5kbG9ja19jcmVkKG5ldyktXHUwMDNlc3RhZ2VkLmRvbWFpbik7XG4rXHRsYW5kbG9ja19jcmVkKG5ldyktXHUwMDNlc3RhZ2VkID0gKHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbil7fTtcbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbiB9XG4gXG4gc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuQEAgLTM1LDEwICsxNDEsMTQgQEAgc3RhdGljIGludCBob29rX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqY29uc3QgbmV3LFxuIFxuIHN0YXRpYyB2b2lkIGhvb2tfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjb25zdCBjcmVkKVxuIHtcbi1cdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBkb20gPSBsYW5kbG9ja19jcmVkKGNyZWQpLVx1MDAzZWRvbWFpbjtcbitcdHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQgPSBsYW5kbG9ja19jcmVkKGNyZWQpO1xuK1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZWRvbWFpbik7XG4gXG4tXHRpZiAoZG9tKVxuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldF9kZWZlcnJlZChkb20pO1xuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuK1x0LyogUmVsZWFzZXMgYSByZXN0cmljdGlvbiBzdGFnZWQgZm9yIGFuIGFib3J0ZWQgZXhlY3V0aW9uLiAqL1xuK1x0bGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQobGxjcmVkLVx1MDAzZXN0YWdlZC5kb21haW4pO1xuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0FVRElUXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oIGIvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXG5pbmRleCBmMjg3YzU2YjVmZDRiLi43NGY4Yzk4MDhkYzRjIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5oXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9jcmVkLmhcbkBAIC0yMCw2ICsyMCwzMSBAQFxuICNpbmNsdWRlIFwicnVsZXNldC5oXCJcbiAjaW5jbHVkZSBcInNldHVwLmhcIlxuIFxuKy8qKlxuKyAqIHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAtIENvbXB1dGVkIGNyZWRlbnRpYWwgcmVzdHJpY3Rpb25cbisgKlxuKyAqIFRoZSByZXN1bHQgb2YgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbigpOiB0aGUgbmV3IHN0YXRlIHRoYXRcbisgKiBlbmZvcmNpbmcgYSBydWxlc2V0IHdpdGggYSBzZXQgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBmbGFnc1xuKyAqIGdpdmVzIHRvIGEgY3JlZGVudGlhbCwgZGVjb3VwbGVkIGZyb20gaXRzIGFwcGxpY2F0aW9uLiAgSXQgaXNcbisgKiBlbmZvcmNlZCB3aXRoIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKCksIGVpdGhlciByaWdodCBhd2F5XG4rICogKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoMikpIG9yIGFmdGVyIGEgc3RhZ2luZyBwZXJpb2QgKHJlc3RyaWN0aW9uXG4rICogb2YgYW4gZXhlY3V0aW9uKS5cbisgKi9cbitzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24ge1xuK1x0LyoqXG4rXHQgKiBAZG9tYWluOiBOZXcgZG9tYWluIHRvIGVuZm9yY2UsIG93bmluZyBhIHJlZmVyZW5jZS4gIE5VTEwgaWYgdGhlXG4rXHQgKiByZXN0cmljdGlvbiBvbmx5IGNhcnJpZXMgYSBsb2cgY29uZmlndXJhdGlvbiBjaGFuZ2UuXG4rXHQgKi9cbitcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XG4rI2lmZGVmIENPTkZJR19BVURJVFxuK1x0LyoqXG4rXHQgKiBAbG9nX3N1YmRvbWFpbnNfb2ZmOiBOZXcgdmFsdWUgb2YgdGhlIGNyZWRlbnRpYWxzJ1xuK1x0ICogQGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkubG9nX3N1YmRvbWFpbnNfb2ZmLlxuK1x0ICovXG4rXHR1OCBsb2dfc3ViZG9tYWluc19vZmYgOiAxO1xuKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5IC0gQ3JlZGVudGlhbCBzZWN1cml0eSBibG9iXG4gICpcbkBAIC0zNSw2ICs2MCwxOCBAQCBzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSB7XG4gXHQgKi9cbiBcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpkb21haW47XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXG4rXHQvKipcbitcdCAqIEBzdGFnZWQ6IFJlc3RyaWN0aW9uIHN0YWdlZCBieSB0aGUgYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgaG9vayxcbitcdCAqIG93bmluZyBpdHMgZG9tYWluIHJlZmVyZW5jZSBhbmQgYXBwbGllZCBhdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIG9mXG4rXHQgKiB0aGUgZXhlY3V0aW9uIChicHJtX2NvbW1pdHRpbmdfY3JlZHMpLiAgT25seSBldmVyIHNldCBvbiB0aGVcbitcdCAqIGNyZWRlbnRpYWxzIHByZXBhcmVkIGZvciBhbiBleGVjdXRpb24sIGJldHdlZW4gdGhlIHN0YWdpbmcgYW5kXG4rXHQgKiBlaXRoZXIgdGhlIGFwcGxpY2F0aW9uIG9yIHRoZSByZWxlYXNlIG9mIHRoZSBhYm9ydGVkIGNyZWRlbnRpYWxzO1xuK1x0ICogY29tbWl0dGVkIHRhc2sgY3JlZGVudGlhbHMgbmV2ZXIgY2FycnkgYSBzdGFnZWQgcmVzdHJpY3Rpb24uXG4rXHQgKi9cbitcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiBzdGFnZWQ7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4rXG4gI2lmZGVmIENPTkZJR19BVURJVFxuIFx0LyoqXG4gXHQgKiBAZG9tYWluX2V4ZWM6IEJpdG1hc2sgaWRlbnRpZnlpbmcgdGhlIGRvbWFpbiBsYXllcnMgdGhhdCB3ZXJlIGVuZm9yY2VkIGJ5XG5AQCAtNzUsNiArMTEyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsYW5kbG9ja19jcmVkX2NvcHkoc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmRzdCxcbiBcdCpkc3QgPSAqc3JjO1xuIFxuIFx0bGFuZGxvY2tfZ2V0X3J1bGVzZXQoc3JjLVx1MDAzZWRvbWFpbik7XG4rXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXG4rXHQvKiBPbmx5IGJwcm0gY3JlZGVudGlhbHMgb3duIGEgc3RhZ2VkIHJlc3RyaWN0aW9uOiBuZXZlciBjb3BpZWQuICovXG4rXHRXQVJOX09OX09OQ0Uoc3JjLVx1MDAzZXN0YWdlZC5kb21haW4pO1xuK1x0ZHN0LVx1MDAzZXN0YWdlZCA9IChzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24pe307XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9jdXJyZW50X2RvbWFpbih2b2lkKVxuQEAgLTE1Myw2ICsxOTYsMTQgQEAgbGFuZGxvY2tfZ2V0X2FwcGxpY2FibGVfc3ViamVjdChjb25zdCBzdHJ1Y3QgY3JlZCAqY29uc3QgY3JlZCxcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitpbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcbitcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19jcmVkX3NlY3VyaXR5ICpjb25zdCBsbGNyZWQsXG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCwgY29uc3QgdTMyIGZsYWdzLFxuK1x0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4rXG4rdm9pZCBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbihzdHJ1Y3QgbGFuZGxvY2tfY3JlZF9zZWN1cml0eSAqY29uc3QgbGxjcmVkLFxuK1x0XHRcdFx0c3RydWN0IGxhbmRsb2NrX3Jlc3RyaWN0aW9uICpjb25zdCByZXN0cmljdGlvbik7XG4rXG4gX19pbml0IHZvaWQgbGFuZGxvY2tfYWRkX2NyZWRfaG9va3Modm9pZCk7XG4gXG4gI2VuZGlmIC8qIF9TRUNVUklUWV9MQU5ETE9DS19DUkVEX0ggKi9cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9saW1pdHMuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oXG5pbmRleCAwOGQ1ZjJmNmQzMjFhLi4wYmVkZmU2NTBlYTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svbGltaXRzLmhcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL2xpbWl0cy5oXG5AQCAtMzcsNiArMzcsMTAgQEBcbiAjZGVmaW5lIExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRlx0TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xuICNkZWZpbmUgTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGXHQoKExBTkRMT0NLX0xBU1RfUkVTVFJJQ1RfU0VMRiBcdTAwM2NcdTAwM2MgMSkgLSAxKVxuIFxuKy8qIFN1YnNldCBvZiB0aGUgcmVzdHJpY3Qtc2VsZiBmbGFncyBhcHBsaWNhYmxlIHRvIGFuIGV4ZWN1dGlvbi4gKi9cbisjZGVmaW5lIExBTkRMT0NLX01BU0tfUkVTVFJJQ1RfQklOUFJNIFxcXG4rXHQoTEFORExPQ0tfTUFTS19SRVNUUklDVF9TRUxGIFx1MDAyNiB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQylcbitcbiAvKiBjbGFuZy1mb3JtYXQgb24gKi9cbiBcbiAjZW5kaWYgLyogX1NFQ1VSSVRZX0xBTkRMT0NLX0xJTUlUU19IICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG5pbmRleCA0ZGQwOWVhMjJjODQ0Li4xNzZjNjI2ZjlmMTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5jXG4rKysgYi9zZWN1cml0eS9sYW5kbG9jay9ydWxlc2V0LmNcbkBAIC01MjAsNyArNTIwLDcgQEAgc3RhdGljIHZvaWQgZnJlZV9ydWxlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpjb25zdCB3b3JrKVxuIFx0ZnJlZV9ydWxlc2V0KHJ1bGVzZXQpO1xuIH1cbiBcbi0vKiBPbmx5IGNhbGxlZCBieSBob29rX2NyZWRfZnJlZSgpLiAqL1xuKy8qIEZvciBjb250ZXh0cyB0aGF0IGNhbm5vdCBzbGVlcCwgZS5nLiBob29rX2NyZWRfZnJlZSgpLiAqL1xuIHZvaWQgbGFuZGxvY2tfcHV0X3J1bGVzZXRfZGVmZXJyZWQoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmNvbnN0IHJ1bGVzZXQpXG4ge1xuIFx0aWYgKHJ1bGVzZXQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZydWxlc2V0LVx1MDAzZXVzYWdlKSkge1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaCBiL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxuaW5kZXggMDQzN2FkZjE3NDI4Ny4uYjY1ZDFjMDdlMTkyZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3J1bGVzZXQuaFxuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svcnVsZXNldC5oXG5AQCAtMjI1LDYgKzIyNSw5IEBAIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpcbiBsYW5kbG9ja19tZXJnZV9ydWxlc2V0KHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpjb25zdCBwYXJlbnQsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCk7XG4gXG4rc3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKmxhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoY29uc3QgaW50IGZkLFxuK1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IGZtb2RlX3QgbW9kZSk7XG4rXG4gY29uc3Qgc3RydWN0IGxhbmRsb2NrX3J1bGUgKlxuIGxhbmRsb2NrX2ZpbmRfcnVsZShjb25zdCBzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgcnVsZXNldCxcbiBcdFx0ICAgY29uc3Qgc3RydWN0IGxhbmRsb2NrX2lkIGlkKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zZXR1cC5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc2V0dXAuY1xuaW5kZXggNDdkYWMxNzM2ZjEwMC4uM2I3ZTE4ZWRhZGZiYyAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3NldHVwLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2xzbS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJicGYuaFwiXG4gI2luY2x1ZGUgXCJjb21tb24uaFwiXG4gI2luY2x1ZGUgXCJjcmVkLmhcIlxuICNpbmNsdWRlIFwiZXJyYXRhLmhcIlxuQEAgLTY4LDYgKzY5LDcgQEAgc3RhdGljIGludCBfX2luaXQgbGFuZGxvY2tfaW5pdCh2b2lkKVxuIFx0bGFuZGxvY2tfYWRkX3Rhc2tfaG9va3MoKTtcbiBcdGxhbmRsb2NrX2FkZF9mc19ob29rcygpO1xuIFx0bGFuZGxvY2tfYWRkX25ldF9ob29rcygpO1xuK1x0bGFuZGxvY2tfYWRkX2JwZl9ob29rcygpO1xuIFx0bGFuZGxvY2tfaW5pdF9pZCgpO1xuIFx0bGFuZGxvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFx0cHJfaW5mbyhcIlVwIGFuZCBydW5uaW5nLlxcblwiKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay9zeXNjYWxscy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svc3lzY2FsbHMuY1xuaW5kZXggMzZiMDI4OTJjNjJmNS4uODk5NjAxYWY3YzRlMSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmNcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3N5c2NhbGxzLmNcbkBAIC0yOTMsOCArMjkzLDggQEAgU1lTQ0FMTF9ERUZJTkUzKGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0LFxuICAqIFJldHVybnMgYW4gb3duZWQgcnVsZXNldCBmcm9tIGEgRkQuIEl0IGlzIHRodXMgbmVlZGVkIHRvIGNhbGxcbiAgKiBsYW5kbG9ja19wdXRfcnVsZXNldCgpIG9uIHRoZSByZXR1cm4gdmFsdWUuXG4gICovXG4tc3RhdGljIHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpnZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbi1cdFx0XHRcdFx0XHQgICAgY29uc3QgZm1vZGVfdCBtb2RlKVxuK3N0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpsYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGNvbnN0IGludCBmZCxcbitcdFx0XHRcdFx0XHQgICAgICBjb25zdCBmbW9kZV90IG1vZGUpXG4ge1xuIFx0Q0xBU1MoZmQsIHJ1bGVzZXRfZikoZmQpO1xuIFx0c3RydWN0IGxhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7XG5AQCAtNDc2LDcgKzQ3Niw3IEBAIFNZU0NBTExfREVGSU5FNChsYW5kbG9ja19hZGRfcnVsZSwgY29uc3QgaW50LCBydWxlc2V0X2ZkLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdHJ1bGVzZXQgPSBnZXRfcnVsZXNldF9mcm9tX2ZkKHJ1bGVzZXRfZmQsIEZNT0RFX0NBTl9XUklURSk7XG4rXHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLCBGTU9ERV9DQU5fV1JJVEUpO1xuIFx0aWYgKElTX0VSUihydWxlc2V0KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnVsZXNldCk7XG4gXG5AQCAtNTI4LDkgKzUyOCw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIHtcbiBcdHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0IF9fZnJlZShsYW5kbG9ja19wdXRfcnVsZXNldCkgPSBOVUxMO1xuIFx0c3RydWN0IGNyZWQgKm5ld19jcmVkO1xuLVx0c3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKm5ld19sbGNyZWQ7XG4tXHRib29sIF9fbWF5YmVfdW51c2VkIGxvZ19zYW1lX2V4ZWMsIGxvZ19uZXdfZXhlYywgbG9nX3N1YmRvbWFpbnMsXG4tXHRcdHByZXZfbG9nX3N1YmRvbWFpbnM7XG4rXHRzdHJ1Y3QgbGFuZGxvY2tfcmVzdHJpY3Rpb24gcmVzdHJpY3Rpb247XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFpc19pbml0aWFsaXplZCgpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtNTQ3LDEzICs1NDYsNiBAQCBTWVNDQUxMX0RFRklORTIobGFuZGxvY2tfcmVzdHJpY3Rfc2VsZiwgY29uc3QgaW50LCBydWxlc2V0X2ZkLCBjb25zdCBfX3UzMixcbiBcdCAgICBMQU5ETE9DS19NQVNLX1JFU1RSSUNUX1NFTEYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogVHJhbnNsYXRlcyBcIm9mZlwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cbi1cdGxvZ19zYW1lX2V4ZWMgPSAhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TQU1FX0VYRUNfT0ZGKTtcbi1cdC8qIFRyYW5zbGF0ZXMgXCJvblwiIGZsYWcgdG8gYm9vbGVhbi4gKi9cbi1cdGxvZ19uZXdfZXhlYyA9ICEhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTik7XG4tXHQvKiBUcmFuc2xhdGVzIFwib2ZmXCIgZmxhZyB0byBib29sZWFuLiAqL1xuLVx0bG9nX3N1YmRvbWFpbnMgPSAhKGZsYWdzIFx1MDAyNiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRik7XG4tXG4gXHQvKlxuIFx0ICogSXQgaXMgYWxsb3dlZCB0byBzZXQgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYgd2l0aFxuIFx0ICogLTEgYXMgcnVsZXNldF9mZCwgb3B0aW9uYWxseSBjb21iaW5lZCB3aXRoXG5AQCAtNTY0LDcgKzU1Niw4IEBAIFNZU0NBTExfREVGSU5FMihsYW5kbG9ja19yZXN0cmljdF9zZWxmLCBjb25zdCBpbnQsIHJ1bGVzZXRfZmQsIGNvbnN0IF9fdTMyLFxuIFx0ICAgICAgKGZsYWdzIFx1MDAyNiB+TEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgPT1cbiBcdFx0ICAgICAgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfU1VCRE9NQUlOU19PRkYpKSB7XG4gXHRcdC8qIEdldHMgYW5kIGNoZWNrcyB0aGUgcnVsZXNldC4gKi9cbi1cdFx0cnVsZXNldCA9IGdldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCwgRk1PREVfQ0FOX1JFQUQpO1xuK1x0XHRydWxlc2V0ID0gbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkLFxuK1x0XHRcdFx0XHRcdCAgICAgICBGTU9ERV9DQU5fUkVBRCk7XG4gXHRcdGlmIChJU19FUlIocnVsZXNldCkpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocnVsZXNldCk7XG4gXHR9XG5AQCAtNTc0LDUzICs1NjcsMjggQEAgU1lTQ0FMTF9ERUZJTkUyKGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsIGNvbnN0IGludCwgcnVsZXNldF9mZCwgY29uc3QgX191MzIsXG4gXHRpZiAoIW5ld19jcmVkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG5ld19sbGNyZWQgPSBsYW5kbG9ja19jcmVkKG5ld19jcmVkKTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRwcmV2X2xvZ19zdWJkb21haW5zID0gIW5ld19sbGNyZWQtXHUwMDNlbG9nX3N1YmRvbWFpbnNfb2ZmO1xuLVx0bmV3X2xsY3JlZC1cdTAwM2Vsb2dfc3ViZG9tYWluc19vZmYgPSAhcHJldl9sb2dfc3ViZG9tYWlucyB8fFxuLVx0XHRcdFx0XHQgIWxvZ19zdWJkb21haW5zO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbi1cbiBcdC8qXG4gXHQgKiBUaGUgb25seSBjYXNlIHdoZW4gYSBydWxlc2V0IG1heSBub3QgYmUgc2V0IGlzIGlmXG4gXHQgKiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19TVUJET01BSU5TX09GRiBpcyBzZXQgKG9wdGlvbmFsbHkgd2l0aFxuIFx0ICogTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQykgYW5kIHJ1bGVzZXRfZmQgaXMgLTEuICBXZSBjb3VsZFxuIFx0ICogb3B0aW1pemUgdGhpcyBjYXNlIGJ5IG5vdCBjYWxsaW5nIGNvbW1pdF9jcmVkcygpIGlmIHRoaXMgZmxhZyB3YXNcbiBcdCAqIGFscmVhZHkgc2V0LCBidXQgaXQgaXMgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuK1x0ICpcbitcdCAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWxlIGNvcHlpbmcgYW5kIG1hbmlwdWxhdGluZ1xuK1x0ICogdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYmVjYXVzZSB0aGV5IGFyZSBkZWRpY2F0ZWQgcGVyIHRocmVhZC5cbiBcdCAqL1xuLVx0aWYgKHJ1bGVzZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogVGhlcmUgaXMgbm8gcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpbGUgY29weWluZyBhbmRcbi1cdFx0ICogbWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGJlY2F1c2UgdGhleSBhcmVcbi1cdFx0ICogZGVkaWNhdGVkIHBlciB0aHJlYWQuXG4tXHRcdCAqL1xuLVx0XHRzdHJ1Y3QgbGFuZGxvY2tfcnVsZXNldCAqY29uc3QgbmV3X2RvbSA9XG4tXHRcdFx0bGFuZGxvY2tfbWVyZ2VfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbiwgcnVsZXNldCk7XG4tXHRcdGlmIChJU19FUlIobmV3X2RvbSkpIHtcbi1cdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIobmV3X2RvbSk7XG4tXHRcdH1cbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zYW1lX2V4ZWMgPSBsb2dfc2FtZV9leGVjO1xuLVx0XHRuZXdfZG9tLVx1MDAzZWhpZXJhcmNoeS1cdTAwM2Vsb2dfbmV3X2V4ZWMgPSBsb2dfbmV3X2V4ZWM7XG4tXHRcdGlmICgoIWxvZ19zYW1lX2V4ZWMgXHUwMDI2XHUwMDI2ICFsb2dfbmV3X2V4ZWMpIHx8ICFwcmV2X2xvZ19zdWJkb21haW5zKVxuLVx0XHRcdG5ld19kb20tXHUwMDNlaGllcmFyY2h5LVx1MDAzZWxvZ19zdGF0dXMgPSBMQU5ETE9DS19MT0dfRElTQUJMRUQ7XG4tI2VuZGlmIC8qIENPTkZJR19BVURJVCAqL1xuLVxuLVx0XHQvKiBSZXBsYWNlcyB0aGUgb2xkIChwcmVwYXJlZCkgZG9tYWluLiAqL1xuLVx0XHRsYW5kbG9ja19wdXRfcnVsZXNldChuZXdfbGxjcmVkLVx1MDAzZWRvbWFpbik7XG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluID0gbmV3X2RvbTtcbi1cbi0jaWZkZWYgQ09ORklHX0FVRElUXG4tXHRcdG5ld19sbGNyZWQtXHUwMDNlZG9tYWluX2V4ZWMgfD0gQklUKG5ld19kb20tXHUwMDNlbnVtX2xheWVycyAtIDEpO1xuLSNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi9cbitcdGVyciA9IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24obGFuZGxvY2tfY3JlZChuZXdfY3JlZCksIHJ1bGVzZXQsXG4rXHRcdFx0XHRcdCAgIGZsYWdzLCBcdTAwMjZyZXN0cmljdGlvbik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGFib3J0X2NyZWRzKG5ld19jcmVkKTtcbitcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbitcdGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uKGxhbmRsb2NrX2NyZWQobmV3X2NyZWQpLCBcdTAwMjZyZXN0cmljdGlvbik7XG4rXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMpIHtcbi1cdFx0Y29uc3QgaW50IGVyciA9IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcyhcbi1cdFx0XHRjdXJyZW50X2NyZWQoKSwgbmV3X2NyZWQpO1xuK1x0XHRlcnIgPSBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY3VycmVudF9jcmVkKCksXG4rXHRcdFx0XHRcdFx0XHRuZXdfY3JlZCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRhYm9ydF9jcmVkcyhuZXdfY3JlZCk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uZTlkOGM5NDkyYmRiMiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01NDQxLDYgKzU0NDEsMTEyIEBAIGludCBzZWN1cml0eV9icGZfdG9rZW5fY2FwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwgaW50IGNhcClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKGJwZl90b2tlbl9jYXBhYmxlLCB0b2tlbiwgY2FwKTtcbiB9XG4gXG4rLyoqXG4rICogc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCgpIC0gR2V0IGFuIExTTSBwb2xpY3kgb2JqZWN0IGZyb20gYSBmZFxuKyAqIEBsc21pZDogTFNNX0lEXyogdmFsdWUgb2YgdGhlIExTTSBhc2tlZCB0byBpbnRlcnByZXQgQGZkXG4rICogQGZkOiBmaWxlIGRlc2NyaXB0b3IgcmVmZXJyaW5nIHRvIGEgcG9saWN5IG9iamVjdCwgcmVzb2x2ZWQgaW4gdGhlXG4rICogICAgICBjYWxsaW5nIHRhc2sncyBmaWxlIGRlc2NyaXB0b3IgdGFibGVcbisgKiBAcG9saWN5OiByZWNlaXZlcyB0aGUgcmVmZXJlbmNlZCBwb2xpY3kgb2JqZWN0IGluIHRoZSBtZW1iZXIgb2YgdGhlXG4rICogICAgICAgICAgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkXG4rICpcbisgKiBBc2sgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCB0byB0cmFuc2xhdGUgQGZkIGludG8gYSByZWZlcmVuY2VcbisgKiBjb3VudGVkIHBvbGljeSBvYmplY3QuICBUaGUgY2FsbGVyIG11c3Qgbm90IGRlcmVmZXJlbmNlIHRoZVxuKyAqIHJldHVybmVkIGhhbmRsZSwgbXVzdCBvbmx5IGhhbmQgaXQgYmFjayB0byB0aGUgc2FtZSBMU00sIGUuZy5cbisgKiB0aHJvdWdoIHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cigpLCBhbmQgbXVzdCByZWxlYXNlIGl0XG4rICogd2l0aCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2ZcbisgKiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzIGNhbGxlZC4gIFRoZSBob29rIGlzIG9ubHkgY2FsbGVkXG4rICogZnJvbSBhIGNvbnRleHQgdGhhdCBtYXkgc2xlZXAuXG4rICpcbisgKiBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IGZpbGwgaXRzIG93biBtZW1iZXIgb2YgQHBvbGljeSB3aXRoIGFcbisgKiByZWZlcmVuY2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGl0IGlzIHJlbGVhc2VkIHRocm91Z2ggdGhlXG4rICogcG9saWN5X2twdHJfcHV0IGhvb2ssIGFuZCBtdXN0IG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgQGZkIGJleW9uZFxuKyAqIHdoYXQgaXRzIG93biB1c2Vyc3BhY2UgQVBJIGNyZWF0ZWQgaXQgd2l0aC5cbisgKlxuKyAqIFJldHVybjogUmV0dXJucyAwIGlmIEBwb2xpY3kgaG9sZHMgYSByZWZlcmVuY2UgY291bnRlZCBwb2xpY3lcbisgKiBvYmplY3QsIC1FT1BOT1RTVVBQIGlmIHRoZSBMU00gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBob29rLCBuZWdhdGl2ZVxuKyAqIHZhbHVlcyBvbiBvdGhlciBmYWlsdXJlcy5cbisgKi9cbitpbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcbitcdFx0XHRcdCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcbit7XG4rXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbitcbitcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBwb2xpY3lfa3B0cl9mcm9tX2ZkKSB7XG4rXHRcdGlmIChzY2FsbC1cdTAwM2VobC1cdTAwM2Vsc21pZC1cdTAwM2VpZCAhPSBsc21pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmV0dXJuIHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2sucG9saWN5X2twdHJfZnJvbV9mZChmZCwgcG9saWN5KTtcbitcdH1cbitcdHJldHVybiBMU01fUkVUX0RFRkFVTFQocG9saWN5X2twdHJfZnJvbV9mZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dCgpIC0gUHV0IGEgcmVmZXJlbmNlIG9uIGFuIExTTSBwb2xpY3kgb2JqZWN0XG4rICogQGxzbWlkOiBMU01fSURfKiB2YWx1ZSBvZiB0aGUgTFNNIG93bmluZyBAcG9saWN5XG4rICogQHBvbGljeTogdGhlIHBvbGljeSBvYmplY3QsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XG4rICogICAgICAgICAgQGxzbWlkXG4rICpcbisgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIHByZXZpb3VzbHkgb2J0YWluZWQgd2l0aFxuKyAqIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKS4gIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb25cbisgKiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIGlzIGNhbGxlZCwgYW5kIEBwb2xpY3kgbXVzdCBoYXZlXG4rICogYmVlbiBvYnRhaW5lZCBmcm9tIHRoYXQgc2FtZSBMU00uICBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHN1cHBvcnRcbisgKiBiZWluZyBjYWxsZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBjYW5ub3Qgc2xlZXA6IHRoZSByZWxlYXNlIG9mIEJQRlxuKyAqIG1hbmFnZWQgcmVmZXJlbmNlcyBtYXkgYmUgZHJpdmVuIGZyb20gb2JqZWN0IGRlc3RydWN0b3JzLlxuKyAqL1xuK3ZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXG4re1xuK1x0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4rXG4rXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgcG9saWN5X2twdHJfcHV0KSB7XG4rXHRcdGlmIChzY2FsbC1cdTAwM2VobC1cdTAwM2Vsc21pZC1cdTAwM2VpZCAhPSBsc21pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5wb2xpY3lfa3B0cl9wdXQocG9saWN5KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0LyogQSBoZWxkIHJlZmVyZW5jZSBpbXBsaWVzIHRoZSBtYXRjaGluZyBMU00gaW1wbGVtZW50cyB0aGUgaG9vay4gKi9cbitcdFdBUk5fT05fT05DRSgxKTtcbit9XG4rXG4rLyoqXG4rICogc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyKCkgLSBFbmZvcmNlIGEgcG9saWN5IG9uIGV4ZWMgY3JlZGVudGlhbHNcbisgKiBAbHNtaWQ6IExTTV9JRF8qIHZhbHVlIG9mIHRoZSBMU00gb3duaW5nIEBwb2xpY3lcbisgKiBAYnBybTogZXhlY3V0aW9uIGNvbnRleHQgcHJvdmlkaW5nIHRoZSBwcmVwYXJlZCBjcmVkZW50aWFscyB0byByZXN0cmljdFxuKyAqIEBwb2xpY3k6IHRoZSBwb2xpY3kgb2JqZWN0IHRvIGVuZm9yY2UsIGluIHRoZSBtZW1iZXIgb2YgdGhlIExTTVxuKyAqICAgICAgICAgIGlkZW50aWZpZWQgYnkgQGxzbWlkXG4rICogQGZsYWdzOiBMU00tc3BlY2lmaWMgZW5mb3JjZW1lbnQgZmxhZ3NcbisgKlxuKyAqIEFzayB0aGUgTFNNIGlkZW50aWZpZWQgYnkgQGxzbWlkIHRvIHJlc3RyaWN0IHRoZSBjcmVkZW50aWFsc1xuKyAqIHByZXBhcmVkIGluIEBicHJtIHdpdGggQHBvbGljeSwgc28gdGhhdCB0aGUgZXhlY3V0ZWQgdGFzayBzdGFydHNcbisgKiBjb25maW5lZCBieSBpdC4gIEBwb2xpY3kgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgZnJvbSB0aGUgc2FtZSBMU01cbisgKiB3aXRoIHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQoKTsgdGhlIGhvb2sgYm9ycm93cyB0aGVcbisgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgcmVtYWlucyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIGl0LlxuKyAqIE9ubHkgdGhlIGhvb2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5IEBsc21pZCBpc1xuKyAqIGNhbGxlZDogYW4gTFNNIG5ldmVyIHJlY2VpdmVzIGEgcG9saWN5IG9iamVjdCBtZWFudCBmb3IgYW5vdGhlciBMU00uXG4rICpcbisgKiBUaGlzIGhvb2sgbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYW4gZXhlYyBzZWN1cml0eSBjb250ZXh0IHdoZXJlXG4rICogQGJwcm0ncyBjcmVkZW50aWFscyBhcmUgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgY29tbWl0dGVkLCBpLmUuIGZyb20gYVxuKyAqIGJwcm1fY3JlZHNfZm9yX2V4ZWMoKSBvciBicHJtX2NyZWRzX2Zyb21fZmlsZSgpIGhvb2suXG4rICpcbisgKiBIb3cgQHBvbGljeSBjb21wb3NlcyB3aXRoIHJlc3RyaWN0aW9ucyB0aGUgY3JlZGVudGlhbHMgYWxyZWFkeVxuKyAqIGNhcnJ5IGlzIGRlZmluZWQgYnkgdGhlIGltcGxlbWVudGluZyBMU00sIGFzIGlzIHRoZSBtZWFuaW5nIG9mXG4rICogQGZsYWdzLCB1bnN1cHBvcnRlZCB2YWx1ZXMgb2Ygd2hpY2ggaXQgbXVzdCByZWplY3Qgd2l0aCAtRUlOVkFMLlxuKyAqXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIExTTSBkb2VzIG5vdFxuKyAqIGltcGxlbWVudCB0aGUgaG9vaywgbmVnYXRpdmUgdmFsdWVzIG9uIG90aGVyIGZhaWx1cmVzLlxuKyAqL1xuK2ludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0ICAgICAgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksIHUzMiBmbGFncylcbit7XG4rXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbitcbitcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBicHJtX2VuZm9yY2VfcG9saWN5X2twdHIpIHtcbitcdFx0aWYgKHNjYWxsLVx1MDAzZWhsLVx1MDAzZWxzbWlkLVx1MDAzZWlkICE9IGxzbWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZXR1cm4gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoYnBybSwgcG9saWN5LFxuK1x0XHRcdFx0XHRcdFx0XHQgZmxhZ3MpO1xuK1x0fVxuK1x0cmV0dXJuIExTTV9SRVRfREVGQVVMVChicHJtX2VuZm9yY2VfcG9saWN5X2twdHIpO1xuK31cbitcbiAvKipcbiAgKiBzZWN1cml0eV9icGZfbWFwX2ZyZWUoKSAtIEZyZWUgYSBicGYgbWFwJ3MgTFNNIGJsb2JcbiAgKiBAbWFwOiBicGYgbWFwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IGVhNzA0NGYzMGFkYzMuLjJmYTczNDQ5NzQ2MTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTIwLDYgKzEyMCw3IEBAIENPTkZJR19TQU1QTEVTPXlcbiBDT05GSUdfU0FNUExFX0xJVkVQQVRDSD1tXG4gQ09ORklHX1NFQ1VSSVRZPXlcbiBDT05GSUdfU0VDVVJJVFlGUz15XG4rQ09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLPXlcbiBDT05GSUdfU1lOX0NPT0tJRVM9eVxuIENPTkZJR19URVNUX0JQRj1tXG4gQ09ORklHX1VETUFCVUY9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjRcbmluZGV4IDUyM2UwZDI5YmJkNDMuLjJjNGQ4NTdmNjlmNTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjRcbkBAIC0xMjUsNyArMTI1LDcgQEAgQ09ORklHX0xFR0FDWV9WU1lTQ0FMTF9OT05FPXlcbiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMVxuIENPTkZJR19MT0dfQ1BVX01BWF9CVUZfU0hJRlQ9MFxuIENPTkZJR19MT0dPPXlcbi1DT05GSUdfTFNNPVwic2VsaW51eCxicGYsaW50ZWdyaXR5XCJcbitDT05GSUdfTFNNPVwibGFuZGxvY2ssc2VsaW51eCxicGYsaW50ZWdyaXR5XCJcbiBDT05GSUdfTUFDX1BBUlRJVElPTj15XG4gQ09ORklHX01BR0lDX1NZU1JRPXlcbiBDT05GSUdfTUNPUkUyPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fcG9saWN5X2tmdW5jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX3BvbGljeV9rZnVuY3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5MTkyOWY5OGU4OGVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9wb2xpY3lfa2Z1bmNzLmNcbkBAIC0wLDAgKzEsMzI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2UgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGFuZGxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJsc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLnNrZWwuaFwiXG4rXG4rLyogRmFsbGJhY2tzIGZvciBvbGQgc3lzdGVtIGhlYWRlcnMuICovXG4rI2lmbmRlZiBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTlxuKyNkZWZpbmUgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9MT0dfTkVXX0VYRUNfT04gKDFVIFx1MDAzY1x1MDAzYyAxKVxuKyNlbmRpZlxuKyNpZm5kZWYgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQ1xuKyNkZWZpbmUgTEFORExPQ0tfUkVTVFJJQ1RfU0VMRl9UU1lOQyAoMVUgXHUwMDNjXHUwMDNjIDMpXG4rI2VuZGlmXG4rXG4rc3RhdGljIGludCBjcmVhdGVfcnVsZXNldCh2b2lkKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBsYW5kbG9ja19ydWxlc2V0X2F0dHIgYXR0ciA9IHtcbitcdFx0LmhhbmRsZWRfYWNjZXNzX2ZzID0gTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHN5c2NhbGwoX19OUl9sYW5kbG9ja19jcmVhdGVfcnVsZXNldCwgXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVzZXRfcHJvZ19zdGF0ZShzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcbit7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQgPSBmYWxzZTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vX3J1bGVzZXQgPSBmYWxzZTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3QyX2VyciA9IC0xO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNla2Z1bmNfZmxhZ3MgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZG91YmxlX2NhbGwgPSBmYWxzZTtcbit9XG4rXG4rLypcbisgKiBSdW5zIHRoZSBzeXNjYWxsIHByb2dyYW0gdGhhdCBhY3F1aXJlcyB0aGUgcnVsZXNldCBmcm9tXG4rICogQHJ1bGVzZXRfZmQsIGluIHRoZSBydW5uZXIncyBmZCB0YWJsZSwgYW5kIHBhcmtzIGl0IGluIHRoZSBtYXAga3B0clxuKyAqIHNsb3QgZm9yIHRoZSBMU00gcHJvZ3JhbS5cbisgKi9cbitzdGF0aWMgaW50IGxvYWRfcnVsZXNldF9pbnRvX21hcChzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5sb2FkX3J1bGVzZXQpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb2FkX3J1bGVzZXRfcnVuXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJsb2FkX3J1bGVzZXRfcmV0dmFsXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vnb3RfbnVsbF9mb3JfYmFkX2ZkLCBcImJhZF9mZF9udWxsXCIpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogRm9ya3MgYSBjaGlsZCB0aGF0IGV4ZWNzIFwic2ggLWMgJ1x1MDAzY3NoZWxsX2NtZFx1MDAzZSdcIi4gIFRoZSBtb25pdG9yZWQgcGlkXG4rICogaXMgb25seSBrbm93biwgYW5kIGNhbiBvbmx5IGJlIHB1Ymxpc2hlZCB0byB0aGUgQlBGIHByb2dyYW0sIG9uY2VcbisgKiB0aGUgY2hpbGQgZXhpc3RzOiB0aGUgY2hpbGQgd2FpdHMgb24gYSBwaXBlIHVudGlsIHRoZSBwYXJlbnQgaGFzXG4rICogdXBkYXRlZCBpdC4gIFJldHVybnMgdGhlIGNoaWxkJ3MgZXhpdCBzdGF0dXMsIG9yIC0xIG9uIGVycm9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgcnVuX2V4ZWNfY2hpbGQoc3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwsXG4rXHRcdFx0ICBib29sIG1vbml0b3JlZCwgY29uc3QgY2hhciAqc2hlbGxfY21kKVxuK3tcbitcdGludCBwaXBlX2Zkc1syXSwgc3RhdHVzO1xuK1x0Y2hhciBidWYgPSAwO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2ZkcyksIFwicGlwZVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcImZvcmtcIikpIHtcbitcdFx0Y2xvc2UocGlwZV9mZHNbMF0pO1xuK1x0XHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRjaGFyICphcmd2W10gPSB7IFwic2hcIiwgXCItY1wiLCAoY2hhciAqKXNoZWxsX2NtZCwgTlVMTCB9O1xuK1xuK1x0XHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4rXHRcdHJlYWQocGlwZV9mZHNbMF0sIFx1MDAyNmJ1ZiwgMSk7XG4rXHRcdGNsb3NlKHBpcGVfZmRzWzBdKTtcbitcdFx0ZXhlY3YoXCIvYmluL3NoXCIsIGFyZ3YpO1xuK1x0XHRleGl0KDEyNyk7XG4rXHR9XG4rXHRjbG9zZShwaXBlX2Zkc1swXSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gbW9uaXRvcmVkID8gcGlkIDogMDtcbitcdHdyaXRlKHBpcGVfZmRzWzFdLCBcdTAwMjZidWYsIDEpO1xuK1x0Y2xvc2UocGlwZV9mZHNbMV0pO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcImNoaWxkX2V4aXRlZFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XG4rfVxuK1xuKy8qXG4rICogRXhpdCBjb2RlczogNCA9IHVuZXhwZWN0ZWQgd3JpdGUgb3V0Y29tZSwgMCA9IGV2ZXJ5dGhpbmcgYXNcbisgKiBleHBlY3RlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBmb3JtYXRfY2hpbGRfY21kKGNoYXIgKmNtZCwgc2l6ZV90IGxlbiwgYm9vbCBleHBlY3Rfd3JpdGVfb2ssXG4rXHRcdFx0ICAgICBjb25zdCBjaGFyICp0bXBfcGF0aClcbit7XG4rXHRpZiAoZXhwZWN0X3dyaXRlX29rKVxuK1x0XHRzbnByaW50ZihjbWQsIGxlbiwgXCJlY2hvIHggXHUwMDNlICVzIHx8IGV4aXQgNDsgZXhpdCAwXCIsIHRtcF9wYXRoKTtcbitcdGVsc2VcbitcdFx0c25wcmludGYoY21kLCBsZW4sXG4rXHRcdFx0IFwiaWYgZWNobyB4IFx1MDAzZSAlcyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuIGV4aXQgNDsgZmk7IGV4aXQgMFwiLFxuK1x0XHRcdCB0bXBfcGF0aCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfcmVzdHJpY3RfYmlucHJtKHZvaWQpXG4re1xuK1x0c3RydWN0IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MgKnNrZWwgPSBOVUxMO1xuK1x0Y2hhciB0bXBfcGF0aFtdID0gXCIvdG1wL2xzbV9wb2xpY3lfa2Z1bmNzX1hYWFhYWFwiO1xuK1x0Y2hhciBjbWRbMjU2XTtcbitcdGludCBydWxlc2V0X2ZkLCB0bXBfZmQsIHJldDtcbitcbitcdHRtcF9mZCA9IG1rc3RlbXAodG1wX3BhdGgpO1xuK1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcIm1rc3RlbXBcIikpXG4rXHRcdHJldHVybjtcbitcdGNsb3NlKHRtcF9mZCk7XG4rXG4rXHRydWxlc2V0X2ZkID0gY3JlYXRlX3J1bGVzZXQoKTtcbitcdGlmIChydWxlc2V0X2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1NZUylcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGVsc2VcbitcdFx0XHRBU1NFUlRfR0UocnVsZXNldF9mZCwgMCwgXCJsYW5kbG9ja19jcmVhdGVfcnVsZXNldFwiKTtcbitcdFx0Z290byBvdXRfdW5saW5rO1xuK1x0fVxuK1xuK1x0c2tlbCA9IGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VydWxlc2V0X2ZkID0gcnVsZXNldF9mZDtcbitcbitcdGlmICghQVNTRVJUX09LKGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2F0dGFjaChza2VsKSwgXCJza2VsX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAobG9hZF9ydWxlc2V0X2ludG9fbWFwKHNrZWwpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIENvbnRyb2w6IGFuIHVubW9uaXRvcmVkIGV4ZWN1dGlvbiBtYXkgd3JpdGUgdG8gdGhlIHRtcCBmaWxlLiAqL1xuK1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbitcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgdHJ1ZSwgdG1wX3BhdGgpO1xuK1x0cmV0ID0gcnVuX2V4ZWNfY2hpbGQoc2tlbCwgZmFsc2UsIGNtZCk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwiY29udHJvbF9jaGlsZF9leGl0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQsIFwiY29udHJvbF9ub3RfbW9uaXRvcmVkXCIpO1xuK1xuK1x0LypcbitcdCAqIEEgbW9uaXRvcmVkIGV4ZWN1dGlvbiBzdGFydHMgbGFuZGxvY2tlZDogdGhlIHJ1bGVzZXQgaGFuZGxlc1xuK1x0ICogTEFORExPQ0tfQUNDRVNTX0ZTX1dSSVRFX0ZJTEUgd2l0aG91dCBhbnkgcnVsZSwgc28gdGhlIHdyaXRlXG4rXHQgKiBtdXN0IGZhaWwuXG4rXHQgKi9cbitcdHJlc2V0X3Byb2dfc3RhdGUoc2tlbCk7XG4rXHRmb3JtYXRfY2hpbGRfY21kKGNtZCwgc2l6ZW9mKGNtZCksIGZhbHNlLCB0bXBfcGF0aCk7XG4rXHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcInJlc3RyaWN0ZWRfY2hpbGRfZXhpdFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsZWQsIFwibHNtX3Byb2dfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vX3J1bGVzZXQsIFwicnVsZXNldF9pbl9tYXBcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3RfZXJyLCAwLCBcInJlc3RyaWN0X2JpbnBybVwiKTtcbitcbitcdC8qIFRoZSBhdWRpdCBsb2cgZmxhZ3Mgb2YgbGFuZGxvY2tfcmVzdHJpY3Rfc2VsZigyKSBhcHBseSB0b28uICovXG4rXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNla2Z1bmNfZmxhZ3MgPSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX0xPR19ORVdfRVhFQ19PTjtcbitcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbitcdHJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIHRydWUsIGNtZCk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwibG9nX2ZsYWdzX2NoaWxkX2V4aXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXCJsb2dfZmxhZ3NfcmVzdHJpY3RfYmlucHJtXCIpO1xuK1xuK1x0LypcbitcdCAqIExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkMgdGFyZ2V0cyB0aGUgY2FsbGluZyB0aHJlYWRzLCBub3RcbitcdCAqIGFuIGV4ZWN1dGlvbjogdGhlIGtmdW5jIG11c3QgcmVqZWN0IGl0IGFuZCB0aGUgZXhlY3V0aW9uIG11c3RcbitcdCAqIHN0YXkgdW5yZXN0cmljdGVkLlxuK1x0ICovXG4rXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNla2Z1bmNfZmxhZ3MgPSBMQU5ETE9DS19SRVNUUklDVF9TRUxGX1RTWU5DO1xuK1x0Zm9ybWF0X2NoaWxkX2NtZChjbWQsIHNpemVvZihjbWQpLCB0cnVlLCB0bXBfcGF0aCk7XG4rXHRyZXQgPSBydW5fZXhlY19jaGlsZChza2VsLCB0cnVlLCBjbWQpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcInRzeW5jX2NoaWxkX2V4aXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcInRzeW5jX3Byb2dfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgLUVJTlZBTCwgXCJ0c3luY19yZWplY3RlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBBIHNlY29uZCBjYWxsIG9uIHRoZSBzYW1lIGV4ZWN1dGlvbiByZXBsYWNlcyB0aGUgc3RhZ2VkXG4rXHQgKiBkb21haW4gKGFuZCByZWxlYXNlcyB0aGUgZmlyc3Qgb25lKTogdGhlIHJlc3VsdCBpcyBhIHNpbmdsZVxuK1x0ICogcmVzdHJpY3Rpb24sIG5vdCBhbiBlcnJvci5cbitcdCAqL1xuK1x0cmVzZXRfcHJvZ19zdGF0ZShza2VsKTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRvdWJsZV9jYWxsID0gdHJ1ZTtcbitcdGZvcm1hdF9jaGlsZF9jbWQoY21kLCBzaXplb2YoY21kKSwgZmFsc2UsIHRtcF9wYXRoKTtcbitcdHJldCA9IHJ1bl9leGVjX2NoaWxkKHNrZWwsIHRydWUsIGNtZCk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwiZG91YmxlX2NoaWxkX2V4aXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlc3RyaWN0X2VyciwgMCwgXCJkb3VibGVfcmVzdHJpY3RfZmlyc3RcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVzdHJpY3QyX2VyciwgMCwgXCJkb3VibGVfcmVzdHJpY3Rfc2Vjb25kXCIpO1xuK291dDpcbitcdGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2Rlc3Ryb3koc2tlbCk7XG4rXHRjbG9zZShydWxlc2V0X2ZkKTtcbitvdXRfdW5saW5rOlxuK1x0dW5saW5rKHRtcF9wYXRoKTtcbit9XG4rXG4rLypcbisgKiBDaGVja3MgdGhhdCBhIHN0YWdlZCByZXN0cmljdGlvbiBpcyBkaXNjYXJkZWQsIGFuZCB0aGUgc3RhZ2VkXG4rICogZG9tYWluIHJlbGVhc2VkLCB3aGVuIHRoZSBleGVjdXRpb24gZmFpbHMgYWZ0ZXIgdGhlIGJwcm0gaG9vazogdGhlXG4rICogY2FsbGluZyB0YXNrIG11c3Qgbm90IGVuZCB1cCBsYW5kbG9ja2VkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfcmVzdHJpY3RfYmlucHJtX2Rpc2NhcmQodm9pZClcbit7XG4rXHRzdHJ1Y3QgbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2VzcyAqc2tlbCA9IE5VTEw7XG4rXHRjaGFyIHRtcF9wYXRoW10gPSBcIi90bXAvbHNtX3BvbGljeV9rZnVuY3NfWFhYWFhYXCI7XG4rXHRjaGFyIGdhcmJhZ2VfcGF0aFtdID0gXCIvdG1wL2xzbV9wb2xpY3lfZ2FyYmFnZV9YWFhYWFhcIjtcbitcdGludCBydWxlc2V0X2ZkID0gLTEsIHRtcF9mZCwgZ2FyYmFnZV9mZCwgcGlwZV9mZHNbMl0sIHN0YXR1cztcbitcdGNoYXIgYnVmID0gMDtcbitcdHBpZF90IHBpZDtcbitcbitcdHRtcF9mZCA9IG1rc3RlbXAodG1wX3BhdGgpO1xuK1x0aWYgKCFBU1NFUlRfR0UodG1wX2ZkLCAwLCBcIm1rc3RlbXBcIikpXG4rXHRcdHJldHVybjtcbitcdGNsb3NlKHRtcF9mZCk7XG4rXG4rXHQvKlxuK1x0ICogQW4gZXhlY3V0YWJsZSBmaWxlIHRoYXQgbm8gYmluZm10IGhhbmRsZXIgYWNjZXB0czogdGhlIGV4ZWNcbitcdCAqIGZhaWxzIHdpdGggRU5PRVhFQyBhZnRlciBicHJtX2NyZWRzX2Zvcl9leGVjKCkgaGFzIHJ1bi5cbitcdCAqL1xuK1x0Z2FyYmFnZV9mZCA9IG1rc3RlbXAoZ2FyYmFnZV9wYXRoKTtcbitcdGlmICghQVNTRVJUX0dFKGdhcmJhZ2VfZmQsIDAsIFwibWtzdGVtcF9nYXJiYWdlXCIpKVxuK1x0XHRnb3RvIG91dF91bmxpbms7XG4rXHRpZiAoIUFTU0VSVF9FUSh3cml0ZShnYXJiYWdlX2ZkLCBcImp1bmtcXG5cIiwgNSksIDUsIFwid3JpdGVfZ2FyYmFnZVwiKSkge1xuK1x0XHRjbG9zZShnYXJiYWdlX2ZkKTtcbitcdFx0Z290byBvdXRfdW5saW5rO1xuK1x0fVxuK1x0aWYgKCFBU1NFUlRfT0soZmNobW9kKGdhcmJhZ2VfZmQsIDA3MDApLCBcImNobW9kX2dhcmJhZ2VcIikpIHtcbitcdFx0Y2xvc2UoZ2FyYmFnZV9mZCk7XG4rXHRcdGdvdG8gb3V0X3VubGluaztcbitcdH1cbitcdGNsb3NlKGdhcmJhZ2VfZmQpO1xuK1xuK1x0cnVsZXNldF9mZCA9IGNyZWF0ZV9ydWxlc2V0KCk7XG4rXHRpZiAocnVsZXNldF9mZCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9TWVMpXG4rXHRcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRlbHNlXG4rXHRcdFx0QVNTRVJUX0dFKHJ1bGVzZXRfZmQsIDAsIFwibGFuZGxvY2tfY3JlYXRlX3J1bGVzZXRcIik7XG4rXHRcdGdvdG8gb3V0X3VubGluaztcbitcdH1cbitcbitcdHNrZWwgPSBsc21fcG9saWN5X2tmdW5jc19zdWNjZXNzX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVsZXNldF9mZCA9IHJ1bGVzZXRfZmQ7XG4rXHRyZXNldF9wcm9nX3N0YXRlKHNrZWwpO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzc19fYXR0YWNoKHNrZWwpLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChsb2FkX3J1bGVzZXRfaW50b19tYXAoc2tlbCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2ZkcyksIFwicGlwZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0Y2hhciAqYXJndltdID0geyBcImdhcmJhZ2VcIiwgTlVMTCB9O1xuK1x0XHRpbnQgZmQ7XG4rXG4rXHRcdGNsb3NlKHBpcGVfZmRzWzFdKTtcbitcdFx0cmVhZChwaXBlX2Zkc1swXSwgXHUwMDI2YnVmLCAxKTtcbitcdFx0Y2xvc2UocGlwZV9mZHNbMF0pO1xuK1x0XHRleGVjdihnYXJiYWdlX3BhdGgsIGFyZ3YpO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgZmFpbGVkIGV4ZWN1dGlvbiBtdXN0IGxlYXZlIG5vIHRyYWNlOiBub1xuK1x0XHQgKiBMYW5kbG9jayBkb21haW4sIGkuZS4gd3JpdGluZyBtdXN0IHN0aWxsIHdvcmtcbitcdFx0ICogKGV4aXQgNikuXG4rXHRcdCAqL1xuK1x0XHRmZCA9IG9wZW4odG1wX3BhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyk7XG4rXHRcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0XHRleGl0KDYpO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdGV4aXQoMCk7XG4rXHR9XG4rXHRjbG9zZShwaXBlX2Zkc1swXSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gcGlkO1xuK1x0d3JpdGUocGlwZV9mZHNbMV0sIFx1MDAyNmJ1ZiwgMSk7XG4rXHRjbG9zZShwaXBlX2Zkc1sxXSk7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcIndhaXRwaWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXCJjaGlsZF9leGl0ZWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIDAsIFwiZGlzY2FyZF9jaGlsZF9leGl0XCIpO1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGVkLCBcImxzbV9wcm9nX2NhbGxlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZXN0cmljdF9lcnIsIDAsIFwicmVzdHJpY3RfYmlucHJtXCIpO1xuK291dDpcbitcdGxzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3NfX2Rlc3Ryb3koc2tlbCk7XG4rXHRpZiAocnVsZXNldF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHJ1bGVzZXRfZmQpO1xuK291dF91bmxpbms6XG4rXHR1bmxpbmsoZ2FyYmFnZV9wYXRoKTtcbitcdHVubGluayh0bXBfcGF0aCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9sc21fcG9saWN5X2tmdW5jcyh2b2lkKVxuK3tcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmVzdHJpY3RfYmlucHJtXCIpKVxuK1x0XHR0ZXN0X3Jlc3RyaWN0X2JpbnBybSgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJyZXN0cmljdF9iaW5wcm1fZGlzY2FyZFwiKSlcbitcdFx0dGVzdF9yZXN0cmljdF9iaW5wcm1fZGlzY2FyZCgpO1xuK1x0UlVOX1RFU1RTKGxzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjAzMzVkYjU0NzA0MDBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmNcbkBAIC0wLDAgKzEsMTAwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgwqkgMjAyNiBKdXN0aW4gU3Vlc3MgXHUwMDNjdXRpbGl0eWVtYWw3N0BnbWFpbC5jb21cdTAwM2UgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0O1xuK1xuK2V4dGVybiBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKlxuK2JwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xuK2V4dGVybiB2b2lkXG4rYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCkgX19rc3ltO1xuK2V4dGVybiBpbnQgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQsXG4rXHRcdFx0XHRcdHUzMiBmbGFncykgX19rc3ltO1xuK1xuKy8qXG4rICogVGhlIExTTSBwb2xpY3kga2Z1bmNzIGFyZSBsaW1pdGVkIHRvIExTTSBhbmQgc3lzY2FsbCBwcm9ncmFtcyBieVxuKyAqIHRoZSBCUEYtc2lkZSBrZnVuYyBmaWx0ZXI6IGEgdHJhY2luZyBwcm9ncmFtIGNhbGxpbmcgb25lIG11c3QgZmFpbFxuKyAqIHZlcmlmaWNhdGlvbi5cbisgKi9cbitTRUMoXCJ0cF9idGYvdGFza19uZXd0YXNrXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWRcIilcbitpbnQgQlBGX1BST0codHJhY2luZ19wcm9nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbit7XG4rXHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKnJ1bGVzZXQ7XG4rXG4rXHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoLTEpO1xuK1x0aWYgKHJ1bGVzZXQpXG4rXHRcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChydWxlc2V0KTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEEgcnVsZXNldCBmZCBpcyBvbmx5IG1lYW5pbmdmdWwgaW4gdGhlIGZkIHRhYmxlIG9mIHRoZSB0YXNrIHRoYXRcbisgKiBzZXQgdGhlIHJ1bGVzZXQgdXA6IHRoZSBhY3F1aXJlIGtmdW5jIGlzIGV4Y2x1c2l2ZSB0byBzeXNjYWxsXG4rICogcHJvZ3JhbXMgYW5kIG11c3QgYmUgcmVqZWN0ZWQgaW4gYW4gTFNNIHByb2dyYW0sIGV2ZW4gb24gYW5cbisgKiBhbGxvd2VkIGhvb2suXG4rICovXG4rU0VDKFwibHNtLnMvYnBybV9jcmVkc19mb3JfZXhlY1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkIGlzIG5vdCBhbGxvd2VkXCIpXG4raW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0O1xuK1xuK1x0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbitcdGlmIChydWxlc2V0KVxuK1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQocnVsZXNldCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBFbmZvcmNlbWVudCBuZWVkcyBhbiBleGVjdXRpb24gdG8gcmVzdHJpY3Q6IHRoZSBlbmZvcmNlbWVudCBrZnVuY1xuKyAqIGlzIGV4Y2x1c2l2ZSB0byB0aGUgc2xlZXBhYmxlIGJwcm0gTFNNIGhvb2tzIGFuZCBtdXN0IGJlIHJlamVjdGVkXG4rICogaW4gYSBzeXNjYWxsIHByb2dyYW0uXG4rICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0gaXMgbm90IGFsbG93ZWRcIilcbitpbnQgc3lzY2FsbF9yZXN0cmljdCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm0oTlVMTCwgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogQW55IExTTSBhdHRhY2ggcG9pbnQgb3RoZXIgdGhhbiB0aGUgc2xlZXBhYmxlIGJwcm0gaG9va3MgbXVzdCBiZVxuKyAqIHJlamVjdGVkLlxuKyAqL1xuK1NFQyhcImxzbS5zL2ZpbGVfb3BlblwiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldCBpcyBub3QgYWxsb3dlZFwiKVxuK2ludCBCUEZfUFJPRyh3cm9uZ19ob29rLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoTlVMTCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGUga2Z1bmNzIG1heSBzbGVlcDogYSBub24tc2xlZXBhYmxlIHByb2dyYW0gb24gYW4gYWxsb3dlZCBob29rXG4rICogbXVzdCBiZSByZWplY3RlZC5cbisgKi9cbitTRUMoXCJsc20vYnBybV9jcmVkc19mb3JfZXhlY1wiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwicHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcIilcbitpbnQgQlBGX1BST0cobm9uc2xlZXBhYmxlX3Byb2csIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KE5VTEwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEFuIGFjcXVpcmVkIHJ1bGVzZXQgcmVmZXJlbmNlIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHJldHVybmluZy4gKi9cbitTRUMoXCJzeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2VcIilcbitpbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eClcbit7XG4rXHRicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMTA3MjA2YWUxNDRkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jXG5AQCAtMCwwICsxLDEwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IMKpIDIwMjYgSnVzdGluIFN1ZXNzIFx1MDAzY3V0aWxpdHllbWFsNzdAZ21haWwuY29tXHUwMDNlICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQ7XG4rXG4rZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXG4rYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoaW50IGZkKSBfX2tzeW07XG4rZXh0ZXJuIHZvaWRcbiticGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQoc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0KSBfX2tzeW07XG4rZXh0ZXJuIGludCBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHRcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCxcbitcdFx0XHRcdFx0dTMyIGZsYWdzKSBfX2tzeW07XG4rXG4rc3RydWN0IHJ1bGVzZXRfc2xvdCB7XG4rXHRzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgX19rcHRyICpydWxlc2V0O1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBydWxlc2V0X3Nsb3QpO1xuK30gcnVsZXNldF9tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4raW50IG1vbml0b3JlZF9waWQ7XG4raW50IHJ1bGVzZXRfZmQ7XG4rdTMyIGtmdW5jX2ZsYWdzO1xuK2Jvb2wgZG91YmxlX2NhbGw7XG4rYm9vbCBnb3RfbnVsbF9mb3JfYmFkX2ZkO1xuK2Jvb2wgbm9fcnVsZXNldDtcbitpbnQgcmVzdHJpY3RfZXJyO1xuK2ludCByZXN0cmljdDJfZXJyO1xuK2Jvb2wgY2FsbGVkO1xuK1xuKy8qXG4rICogUnVucyBpbiB0aGUgdGVzdCBydW5uZXIncyBjb250ZXh0IHRocm91Z2ggQlBGX1BST0dfUlVOOlxuKyAqIEBydWxlc2V0X2ZkIGlzIHJlc29sdmVkIGluIHRoZSBydW5uZXIncyBmZCB0YWJsZSBhbmQgdGhlIGFjcXVpcmVkXG4rICogcnVsZXNldCBpcyBoYW5kZWQgdG8gdGhlIExTTSBwcm9ncmFtIHRocm91Z2ggdGhlIG1hcCBrcHRyIHNsb3QuXG4rICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBsb2FkX3J1bGVzZXQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqcnVsZXNldCwgKm9sZDtcbitcdHN0cnVjdCBydWxlc2V0X3Nsb3QgKnNsb3Q7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdHNsb3QgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJ1bGVzZXRfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCFzbG90KVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEEgZmQgdGhhdCBpcyBub3QgYSBMYW5kbG9jayBydWxlc2V0IG11c3QgcmVzb2x2ZSB0byBOVUxMLiAqL1xuK1x0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcbitcdGlmICghcnVsZXNldClcbitcdFx0Z290X251bGxfZm9yX2JhZF9mZCA9IHRydWU7XG4rXHRlbHNlXG4rXHRcdGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldChydWxlc2V0KTtcbitcbitcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChydWxlc2V0X2ZkKTtcbitcdGlmICghcnVsZXNldClcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnNsb3QtXHUwMDNlcnVsZXNldCwgcnVsZXNldCk7XG4rXHRpZiAob2xkKVxuK1x0XHRicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXQob2xkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXCIpXG4raW50IEJQRl9QUk9HKHJlc3RyaWN0X2V4ZWMsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0c3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpydWxlc2V0LCAqb2xkO1xuK1x0c3RydWN0IHJ1bGVzZXRfc2xvdCAqc2xvdDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0aWYgKG1vbml0b3JlZF9waWQgIT0gKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y2FsbGVkID0gdHJ1ZTtcbitcbitcdHNsb3QgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJ1bGVzZXRfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCFzbG90KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJ1bGVzZXQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnNsb3QtXHUwMDNlcnVsZXNldCwgTlVMTCk7XG4rXHRpZiAoIXJ1bGVzZXQpIHtcbitcdFx0bm9fcnVsZXNldCA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmVzdHJpY3RfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LCBrZnVuY19mbGFncyk7XG4rXHRpZiAoZG91YmxlX2NhbGwpXG4rXHRcdC8qIFJlcGxhY2VzIHRoZSBkb21haW4gc3RhZ2VkIGJ5IHRoZSBmaXJzdCBjYWxsLiAqL1xuK1x0XHRyZXN0cmljdDJfZXJyID0gYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybShicHJtLCBydWxlc2V0LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBrZnVuY19mbGFncyk7XG4rXG4rXHQvKiBLZWVwIHRoZSBydWxlc2V0IGZvciB0aGUgbmV4dCBtb25pdG9yZWQgZXhlY3V0aW9uLiAqL1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZzbG90LVx1MDAzZXJ1bGVzZXQsIHJ1bGVzZXQpO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0KG9sZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzoyOC40MzU1Mzk0MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg2Nzk2Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgTGFuZGxvY2sgQlBGIEtmdW5jcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCB3aGljaCBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhZGRpdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcywgXCJUaGlzIG5lZWRzIGZ1enppbmcsIGFuZCBpdCBuZWVkcyBmdXp6aW5nICp0aG9yb3VnaGx5Ki5cIiBJIHNlZSB3ZSdyZSBhZGRpbmcgdGhlc2UgbmV3IEJQRiBrZnVuY3M6IGBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZGAsIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRgLCBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWAsIGFuZCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgLiBQbHVzLCB0aGVyZSBhcmUgdGhlc2UgTFNNIGhvb2tzIG5vdzogYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYW5kIGBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLiBUaGVzZSBhbGwgbmVlZCB0byBiZSBhIHByaW9yaXR5IGZvciB0ZXN0aW5nLlxuXG5UaGUgZnVuY3Rpb25hbCBhc3BlY3RzIG9mIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBhcmUga2V5IHRvIHVuZGVyc3RhbmQgd2l0aCByZWdhcmQgdG8gaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV3IGtmdW5jcyBhbmQgaG9va3MuXG5cbkxldCdzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBGcm9tIGEgY29kZSBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5ldyBrZnVuY3MgYW5kIGhvb2tzLiBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYCBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZWAgc28gYGxhbmRsb2NrLSQoQ09ORklHX0JQRl9MU00pICs9IGJwZi5vYC4gU28sIGBDT05GSUdfQlBGX0xTTWAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gSXQgYWxzbyBtYWtlcyBzZW5zZSB0aGF0IGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgIGlzIG5lZWRlZCwgYW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX1NZU0NBTExgIGZvciB0aGUgQlBGIGZ1bmN0aW9uYWxpdHkgaXRzZWxmLiBHb3QgaXQuIE5vdywgbGV0J3MgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk0NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA3OjM0LjgyMjM1NDY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTIxMDk3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9sYW5kbG9jay5yc3Q9MTUwPWV4Y2VwdGlvbiBvZiBgYExBTkRMT0NLX1JFU1RSSUNUX1NFTEZfVFNZTkNgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvbGFuZGxvY2sucnN0LTE1Mi0uLiBrZXJuZWwtZG9jOjoga2VybmVsL2JwZi9icGZfbHNtLmNcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdDoxNTM6ICAgIDppZGVudGlmaWVyczogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2xhbmRsb2NrLnJzdC0xNTQtICAgICAgICAgICAgICAgICAgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00NTc9aW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00ODItICogT3BhcXVlIGhhbmRsZSBmb3IgYSBMYW5kbG9jayBydWxlc2V0LiAgT25seVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQ4MzogKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgpIHByb2R1Y2VzIG9uZSwgYW5kIG9ubHkgTGFuZGxvY2tcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00ODQtICogcmVzb2x2ZXMgaXQuXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00OTc9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDk5LS8qKlxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUwMDogKiBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCAtIEdldCBhIExhbmRsb2NrIHJ1bGVzZXQgZnJvbSBhIGZkXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTAxLSAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIG9mIGEgTGFuZGxvY2sgcnVsZXNldCwgcmVzb2x2ZWQgaW4gdGhlIGZpbGVcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTUxNT1fX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2xhbmRsb2NrX3J1bGVzZXQgKlxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUxNjpicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTE3LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTUyOC0gKlxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjUyOTogKiBSZWxlYXNlIGEgcmVmZXJlbmNlIGFjcXVpcmVkIHdpdGggYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKS5cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy01MzAtICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz01ODU9QlRGX0tGVU5DU19TVEFSVChicGZfbGFuZGxvY2tfa2Z1bmNfaWRzKVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjU4NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQsXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNTg3LVxcdCAgICAgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9NTk2PUJURl9JRF9MSVNUX1NJTkdMRShicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfaWRzLCBmdW5jLFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjU5NzpcXHRcXHQgICBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZClcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy01OTgtQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1faWRzLCBmdW5jLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNjA1LSAqIGluIHRoZSBmZCB0YWJsZSBvZiB0aGUgdGFzayB0aGF0IHNldCB0aGUgcnVsZXNldCB1cCwgc29cXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo2MDY6ICogYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQoKSBpcyBleGNsdXNpdmUgdG8gc3lzY2FsbFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTYwNy0gKiBwcm9ncmFtcywgd2hpY2ggcnVuIGluIHRoYXQgdGFzaydzIGNvbnRleHQ7IGFuIExTTSBwcm9ncmFtIHJ1bnMgaW5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9MTM9ZXh0ZXJuIHN0cnVjdCBicGZfbGFuZGxvY2tfcnVsZXNldCAqXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYzoxNDpicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZChpbnQgZmQpIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTE1LWV4dGVybiB2b2lkXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jPTI2PVNFQyhcXFwidHBfYnRmL3Rhc2tfbmV3dGFza1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYzoyNzpfX2ZhaWx1cmUgX19tc2coXFxcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkIGlzIG5vdCBhbGxvd2VkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTI4LWludCBCUEZfUFJPRyh0cmFjaW5nX3Byb2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjMyOlxcdHJ1bGVzZXQgPSBicGZfbGFuZGxvY2tfZ2V0X3J1bGVzZXRfZnJvbV9mZCgtMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYy0zMy1cXHRpZiAocnVsZXNldClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM9NDQ9U0VDKFxcXCJsc20ucy9icHJtX2NyZWRzX2Zvcl9leGVjXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjQ1Ol9fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQgaXMgbm90IGFsbG93ZWRcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmMtNDYtaW50IEJQRl9QUk9HKGxzbV9nZXQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTQ5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19mYWlsdXJlLmM6NTA6XFx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTUxLVxcdGlmIChydWxlc2V0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX2ZhaWx1cmUuYz05Nj1pbnQgbGVha19ydWxlc2V0KHZvaWQgKmN0eClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jOjk4OlxcdGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3NfZmFpbHVyZS5jLTk5LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYz0xMj1leHRlcm4gc3RydWN0IGJwZl9sYW5kbG9ja19ydWxlc2V0ICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jOjEzOmJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKGludCBmZCkgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMtMTQtZXh0ZXJuIHZvaWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM9NDc9aW50IGxvYWRfcnVsZXNldCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTU3LVxcdC8qIEEgZmQgdGhhdCBpcyBub3QgYSBMYW5kbG9jayBydWxlc2V0IG11c3QgcmVzb2x2ZSB0byBOVUxMLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmM6NTg6XFx0cnVsZXNldCA9IGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkKC0xKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX3BvbGljeV9rZnVuY3Nfc3VjY2Vzcy5jLTU5LVxcdGlmICghcnVsZXNldClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fcG9saWN5X2tmdW5jc19zdWNjZXNzLmMtNjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYzo2NDpcXHRydWxlc2V0ID0gYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmQocnVsZXNldF9mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9wb2xpY3lfa2Z1bmNzX3N1Y2Nlc3MuYy02NS1cXHRpZiAoIXJ1bGVzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA3OjM3LjI3NDQ3MTQ1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTMxNDY4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMYW5kbG9jayBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIExhbmRsb2NrLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYWRkaXRpb24gb2YgbmV3IEJQRiBrZnVuY3MuIEkgc2VlIHdlIGhhdmU6XG5cbiogICBgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRgXG4qICAgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGBcbiogICBgYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybWBcbiogICBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgXG5cblRoZXNlIGFyZSBrZXkuIFRoYXQgc2V0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXkncmUgYWltaW5nIGZvciBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCBCUEYgZm9yIExhbmRsb2NrIHBvbGljeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGV5IGludGVuZCB0byB1c2UgdGhlc2UgaW4gcmVsYXRpb24gdG8gdGhlIGV4aXN0aW5nIExhbmRsb2NrIHN5c3RlbS5cblxuQmV5b25kIHRoZSBrZnVuY3MsIGl0IHNlZW1zIHdlIGFsc28gaGF2ZSB1cGRhdGVzIHRvIHRoZSBMU00gaG9va3MuIFRoZSBjb2RlIGlzIGltcGxlbWVudGluZyBob29rcyBmb3IgYm90aCBnZW5lcmljIExTTSAocHJlc3VtYWJseSB0aGUgQlBGIGJhc2VkIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIExhbmRsb2NrIHNwZWNpZmljIG9wZXJhdGlvbnM6XG5cbiogICBgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZGAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRgLCBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYFxuKiAgIGBob29rX3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgaG9va19wb2xpY3lfa3B0cl9wdXRgLCBgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBgaG9va19icHJtX2NvbW1pdHRpbmdfY3JlZHNgLCBgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbmAsIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmBcblxuVGhpcyBjb25maXJtcyB0aGF0IEJQRiBpcyBtZWFudCB0byBhbGxvdyBMYW5kbG9jayB0byBiZSBldmVuIG1vcmUgZmluZS1ncmFpbmVkIGluIGl0cyBlbmZvcmNlbWVudCwgYW5kIHBvc3NpYmx5IHRvIHBlcm1pdCBmb3IgZHluYW1pYyBtb2RpZmljYXRpb24gb2YgcG9saWNpZXMuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZWNoYW5pY3Mgb2YgYCpfa3B0cmAgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwb2xpY3kgc3RydWN0dXJlcy5cblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBsZXQncyBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHNvcnRlZC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgSSBrbm93IHRoYXQ6XG5cbiogICBgQ09ORklHX0JQRl9MU01gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGtmdW5jcyB0byBiZSByZWdpc3RlcmVkLCB3aGljaCBtYWtlcyBzZW5zZSwgc2luY2UgdGhleSBhcmUgQlBGLlxuKiAgIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgIGlzIG9idmlvdXNseSBuZWVkZWQgdG8gZW5hYmxlIExhbmRsb2NrIGl0c2VsZi5cbiogICBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHJlcXVpcmVtZW50IGZvciBCUEYgc3lzY2FsbCBzdXBwb3J0LCBzbyBwcm9iYWJseSB1c2VkIHRvIGNhbGwgdGhlIGtmdW5jcy5cbiogICBgQ09ORklHX1NFQ1VSSVRZYCBpcyByZXF1aXJlZCBmb3IgTFNNIGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbC5cblxuTm93LCBJJ20gZ29pbmcgdG8gY29uc3VsdCBgc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCBsaWtlIG1heWJlIHNvbWUgb3RoZXIgTGFuZGxvY2sgZmVhdHVyZXMgb3IgaGVscGVyIGNvZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIEJQRiBpbnRlZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6NDMuMTY3NjIyMjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjY2OTMxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMi1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjM6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy00LVxcdGJvb2wgXFxcIkxhbmRsb2NrIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTIzLVxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6MjQ6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLX0tVTklUX1RFU1RcXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIktVbml0IHRlc3RzIGZvciBMYW5kbG9ja1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo0NS40MzQzMjE2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE2NTk1MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIExhbmRsb2NrIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYHNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZywgdGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGNoZWNrLiBJJ20gZ29pbmcgdG8gbG9vayBiZXlvbmQgdGhlIG9idmlvdXMgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBhbmQgY29uc2lkZXIgaG93IExhbmRsb2NrJ3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3Mgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlLiBXaGF0IGZlYXR1cmVzIGlzIGl0IGNvbnRpbmdlbnQgb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHNlY3VyaXR5IHN1YnN5c3RlbXMsIG1heWJlIFNFTGludXggb3IgQXBwQXJtb3IsIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRvIGVuc3VyZSBwcm9wZXIgY28tZXhpc3RlbmNlIGFuZCBhdm9pZCBhbnkgY29uZmlndXJhdGlvbiBjb25mbGljdHM/IEl0J3MgY3J1Y2lhbCBJIGdyYXNwIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyBMYW5kbG9jayBpcyBpbnRlZ3JhdGVkIGFuZCB3aGVyZSBpdHMgY29uZmlndXJhdGlvbiBrbm9icyBjYW4gcG90ZW50aWFsbHkgaW5mbHVlbmNlIHRoZSByZXN0IG9mIHRoZSBzZWN1cml0eSBsYW5kc2NhcGUuIFRoaXMgS2NvbmZpZyBmaWxlIGhvbGRzIHRoZSBrZXkgdG8gY29uZmlndXJpbmcgTGFuZGxvY2sgY29ycmVjdGx5LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgaXMgcGFyYW1vdW50LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo0OC41NTA5MjA0NjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9sYW5kbG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbiAgIDQ6XFx0XFx0Ym9vbCBcXFwiTGFuZGxvY2sgc3VwcG9ydFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gICA2OlxcdFxcdHNlbGVjdCBTRUNVUklUWV9ORVRXT1JLXFxuICAgNzpcXHRcXHRzZWxlY3QgU0VDVVJJVFlfUEFUSFxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBMYW5kbG9jayBpcyBhIHNhbmRib3hpbmcgbWVjaGFuaXNtIHRoYXQgZW5hYmxlcyBwcm9jZXNzZXMgdG8gcmVzdHJpY3RcXG4gIDEwOlxcdFxcdCAgdGhlbXNlbHZlcyAoYW5kIHRoZWlyIGZ1dHVyZSBjaGlsZHJlbikgYnkgZ3JhZHVhbGx5IGVuZm9yY2luZ1xcbiAgMTE6XFx0XFx0ICB0YWlsb3JlZCBhY2Nlc3MgY29udHJvbCBwb2xpY2llcy4gIEEgTGFuZGxvY2sgc2VjdXJpdHkgcG9saWN5IGlzIGFcXG4gIDEyOlxcdFxcdCAgc2V0IG9mIGFjY2VzcyByaWdodHMgKGUuZy4gb3BlbiBhIGZpbGUgaW4gcmVhZC1vbmx5LCBtYWtlIGFcXG4gIDEzOlxcdFxcdCAgZGlyZWN0b3J5LCBldGMuKSB0aWVkIHRvIGEgZmlsZSBoaWVyYXJjaHkuICBTdWNoIHBvbGljeSBjYW4gYmVcXG4gIDE0OlxcdFxcdCAgY29uZmlndXJlZCBhbmQgZW5mb3JjZWQgYnkgYW55IHByb2Nlc3NlcyBmb3IgdGhlbXNlbHZlcyB1c2luZyB0aGVcXG4gIDE1OlxcdFxcdCAgZGVkaWNhdGVkIHN5c3RlbSBjYWxsczogbGFuZGxvY2tfY3JlYXRlX3J1bGVzZXQoKSxcXG4gIDE2OlxcdFxcdCAgbGFuZGxvY2tfYWRkX3J1bGUoKSwgYW5kIGxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYoKS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2xhbmRsb2NrLnJzdCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLiAgT3RoZXJ3aXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo0OC41NTEwMTY5NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE5MTQxMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBzZWN1cml0eTpcblxuKipUaGlua2luZyBBYm91dCBMYW5kbG9jayBhbmQgQlBGIExTTSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQncyBvbiBteSBtaW5kIHJpZ2h0IG5vdyBpcyB0aGUgYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyB0aGUgcHJpbWFyeSBmb2N1cywgdGhlIGNlbnRyYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuIEl0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZ2V0IHJpZ2h0LiBCdXQgb2YgY291cnNlLCB5b3UgY2FuJ3QganVzdCBlbmFibGUgTGFuZGxvY2sgaW4gaXNvbGF0aW9uLiBJIGFsc28ga25vdyB0aGF0IGBDT05GSUdfQlBGX0xTTWAgaXMgYSBwcmVyZXF1aXNpdGUsIHRoYXQncyBjcml0aWNhbCB0byBtYWtlIExhbmRsb2NrIHdvcmsgYXMgZXhwZWN0ZWQuIFNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0JQRl9MU01gIGlzIGVuYWJsZWQgYWxvbmdzaWRlIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgLCB0aGVzZSB0d28gY29tcG9uZW50cyBhcmUgY2xvc2VseSByZWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDc6NTEuNDcwMTYwOTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkxODQ0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo1My42NjIwMTQ0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA4NzM1MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBMU00gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQlBGIExTTS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBzaW5jZSBpdCBzZWVtcyB0byBiZSB3aGVyZSBhbGwgdGhpbmdzIEJQRi1yZWxhdGVkIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCBgQlBGX0xTTWAgc2hvdWxkIGJlIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBpbiB0aGVyZSBpZiBpdCdzIGEgY29uZmlndXJhYmxlIG9wdGlvbiBmb3IgdXNpbmcgQlBGIHdpdGggTFNNIChMaW51eCBTZWN1cml0eSBNb2R1bGVzKS4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGFueSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBCUEZfTFNNYCBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBCUEYgYW5kIGtlcm5lbCBzZWN1cml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo1Ni40NzA3NTIzMzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdHNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowNzo1Ni40NzA4NDM2OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODM0NDE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgTFNNIGFuZCBMYW5kbG9jayBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGRlcGVuZGVuY3kgbGFuZHNjYXBlIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBDT05GSUdfQlBGX0xTTWAgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBHb29kIHRvIGtub3cuIE1vdmluZyBmb3J3YXJkLCBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQgSSBlbmFibGUgYEJQRl9MU01gLCBgU0VDVVJJVFlfTEFORExPQ0tgLCBgQlBGX1NZU0NBTExgLCBhbmQgYFNFQ1VSSVRZYCBpbiBteSBjb25maWd1cmF0aW9ucy4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCB0aGUgcmVhbCBmb2N1cyDigJMgaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIHByaW1lIGNhbmRpZGF0ZXMgc2VlbSB0byBiZTogYGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGAsIGBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtYCwgYW5kIGBicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRfZHRvcmAsIGFsb25nIHdpdGggYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCwgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgdGVzdGluZyB0aGUgQlBGIGludGVncmF0aW9uIHdpdGggTGFuZGxvY2sgYW5kIHRoZSBzZWN1cml0eSBwb2xpY2llcy5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgYWxzbyBwZXJmb3JtIGEgcXVpY2sgc3dlZXAgb2YgdGhlIGVudGlyZSBgc2VjdXJpdHkvbGFuZGxvY2svYnBmLmNgIGZpbGUgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIGFuZCBpZGVudGlmeSBhbGwgcmVsZXZhbnQgYXR0YWNrIHN1cmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA4OjAxLjA5OTE5MDc2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyOTE2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qaG9va19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMjUtXFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MjY6c3RhdGljIGludCBob29rX3BvbGljeV9rcHRyX2Zyb21fZmQoaW50IGZkLCB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0yNy17XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0zNy1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYzozODpzdGF0aWMgdm9pZCBob29rX3BvbGljeV9rcHRyX3B1dCh1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSlcXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0zOS17XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYz01Mj1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9icGZfbWVtY2codm9pZClcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTYwLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jOjYxOnN0YXRpYyBpbnQgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy02Mi1cXHRcXHRcXHRcXHRcXHQgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3ksXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYy0xMDQtXFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmM6MTA1OnN0YXRpYyB2b2lkIGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzKGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTA2LXtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jLTExOC1cXG5zZWN1cml0eS9sYW5kbG9jay9icGYuYzoxMTk6c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgbGFuZGxvY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuc2VjdXJpdHkvbGFuZGxvY2svYnBmLmMtMTIwLVxcdExTTV9IT09LX0lOSVQocG9saWN5X2twdHJfZnJvbV9mZCwgaG9va19wb2xpY3lfa3B0cl9mcm9tX2ZkKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MDEuMTU3NDg3NjkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjg5MjYwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIExhbmRsb2NrIEJQRiBGdW5jdGlvbiBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgTGFuZGxvY2sgQlBGIGZ1bmN0aW9ucy4gSSdtIGxvb2tpbmcgYXQgYHNlY3VyaXR5L2xhbmRsb2NrL2JwZi5jYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM6IGBob29rX3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgaG9va19wb2xpY3lfa3B0cl9wdXRgLCBgaG9va19icHJtX2VuZm9yY2VfcG9saWN5X2twdHJgLCBhbmQgYGhvb2tfYnBybV9jb21taXR0aW5nX2NyZWRzYC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIHN0YXRpYyAqY291bGQqIG1lYW4gdGhleSdyZSBpbmxpbmVkLCBvciBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGV5J3JlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgTFNNX0hPT0tfSU5JVGAsIHdoaWNoIG1lYW5zIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLiBUaGV5J2xsIGhhdmUgdGhlaXIgb3duIHVuaXF1ZSBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGZhdm9ycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXJzLiBTbywgSSBuZWVkIHRvIGlkZW50aWZ5IHRob3NlIGVudHJ5cG9pbnRzLiBPa2F5LCBoZXJlIHRoZXkgYXJlOiBgYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRgLCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0YCwgYGJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1gLCBgYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZGAsIGBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRgLCBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCwgYGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb25gLCBhbmQgYGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uYC5cblxuSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgbGF0dGVyIHR3bywgYGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb25gIGFuZCBgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25gLCBzbyBJJ2xsIGdvIG92ZXIgdG8gYHNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY2AgdG8gY29uZmlybSB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTMxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODowNi40MjY0MTcxNTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzI4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9sYW5kbG9jay9jcmVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jLTQxLSAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuYzo0MjppbnQgbGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvbihcXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtNDMtXFx0Y29uc3Qgc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MDYuNTEyMTQ5NzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mzc1ODI0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipBbmFseXppbmcgdGhlIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3aXRoIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBlbmZvcmNpbmcgc2VjdXJpdHkgYm91bmRhcmllcywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgZmlsZSBzeXN0ZW0gYWNjZXNzLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IGl0J3MgcHJvYmFibHkgdGhlIGNvcmUgb2YgTGFuZGxvY2sncyByZXN0cmljdGlvbiBtZWNoYW5pc21zLiBJJ20ga2VlbiB0byBkaXNzZWN0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgdmFyaW91cyBMYW5kbG9jayBydWxlcy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMsIGV4cGVjdGluZyBzb21ldGhpbmcgbGlrZSBhIHJlc3RyaWN0aW9uIHR5cGUsIHBlcmhhcHMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgcGF0aCwgYW5kIHNvbWUga2luZCBvZiBhY2Nlc3MgcGVybWlzc2lvbnMgYml0bWFzayBvciBmbGFnLiBJ4oCZbSBhbHNvIGdvaW5nIHRvIGJlIGV4YW1pbmluZyB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBzdWNoIGFzIHdoYXQgaGFwcGVucyBpZiB0aGUgcmVzdHJpY3Rpb24gZmFpbHMsIG9yIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLiBJJ2xsIGV4cGVjdCB0byBzZWUgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBvdXRsaW5pbmcgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgYW55IGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2UsIGVzcGVjaWFsbHkgY29uY2VybmluZyByYWNlIGNvbmRpdGlvbnMgb3Igc2lkZS1jaGFubmVsIGF0dGFja3MuIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIExhbmRsb2NrIGZ1bmN0aW9ucyBpcyBhbHNvIGVzc2VudGlhbCwgY29uc2lkZXJpbmcgaXTigJlzIGEga2V5IHBpZWNlIG9mIHRoZSBMYW5kbG9jayBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODowOS45NDk3MzU0OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjE2NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxhbmRsb2NrX2FwcGx5X3Jlc3RyaWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2xhbmRsb2NrL2NyZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9sYW5kbG9jay9jcmVkLmM9NDI9aW50IGxhbmRsb2NrX3ByZXBhcmVfcmVzdHJpY3Rpb24oXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtOTgtICovXFxuc2VjdXJpdHkvbGFuZGxvY2svY3JlZC5jOjk5OnZvaWQgbGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb24oc3RydWN0IGxhbmRsb2NrX2NyZWRfc2VjdXJpdHkgKmNvbnN0IGxsY3JlZCxcXG5zZWN1cml0eS9sYW5kbG9jay9jcmVkLmMtMTAwLVxcdFxcdFxcdFxcdHN0cnVjdCBsYW5kbG9ja19yZXN0cmljdGlvbiAqY29uc3QgcmVzdHJpY3Rpb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjA4OjEwLjAxMTk1ODk3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc2MTI3NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRoYXQgKmFyZW4ndCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZCBpbiBhIHdheSB0aGF0IHN0YXRpYyBvbmVzIGFyZW4ndCwgbWFraW5nIHRoZW0gaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgYW5hbHlzaXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSB1c2VkIGFuZCwgc3BlY2lmaWNhbGx5LCBpZiB0aGV5J3JlIGludGVyYWN0aW5nIHdpdGggYW55dGhpbmcgc2VjdXJpdHktc2Vuc2l0aXZlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBzZWN1cml0eS9zZWN1cml0eS5jYC4gSSdtIHNwZWNpZmljYWxseSBnb2luZyB0byBodW50IGZvciBgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZGAuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBkZXJpdmluZyBrZXJuZWwgcG9pbnRlcnMgZnJvbSBmaWxlIGRlc2NyaXB0b3JzLCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgYmUgYSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHkuIFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMgbm93IG15IHByaW1hcnkgZm9jdXMuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2VzIGFueSBwYXRod2F5cyBmb3IgdW5pbnRlbmRlZCBrZXJuZWwgbWVtb3J5IGFjY2VzcyBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIG5vdyB0b3AgcHJpb3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MTMuMTg4MDkwMjU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1MDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTU0Mzk9aW50IHNlY3VyaXR5X2JwZl90b2tlbl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLCBpbnQgY2FwKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy01NDY4LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NTQ2OTppbnQgc2VjdXJpdHlfcG9saWN5X2twdHJfZnJvbV9mZCh1NjQgbHNtaWQsIGludCBmZCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTU0NzAtXFx0XFx0XFx0XFx0IHVuaW9uIGxzbV9wb2xpY3lfa3B0ciAqcG9saWN5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODoxMy4yMzgwNDY1NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5NTAzNDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRlZXAgRGl2ZSBvbiBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRgLCBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwgcG9pbnRlciBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjbGVhbnVwIGNvdW50ZXJwYXJ0IHRvIHNvbWV0aGluZyBsaWtlIGEgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2dldGAsIHNvIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCByaWdodD8gV2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBrZXJuZWwgcG9pbnRlcnMgaGVyZSwgbGlrZWx5IGFzc29jaWF0ZWQgd2l0aCBzb21lIHNlY3VyaXR5IGNvbnRleHQgb3IgcG9saWN5IGRhdGEuXG5cblRoZSBkZXNpZ24gaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIFRoZSBwcmVzZW5jZSBvZiBgX3B1dGAgaW1wbGllcyBhIGNvcnJlc3BvbmRpbmcgYF9nZXRgLCBhbmQgdGhhdCB0aGUga2VybmVsIHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyB0aGUgY29tbW9uIHBhdHRlcm4uIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgdGhpcyBpbmZvcm1hdGlvbi4gSXQgYWxzbyBwcmV2ZW50cyBkYW5nbGluZyBwb2ludGVycywgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBldmVuIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy4gU28sIHdoYXQgc3BlY2lmaWMgc2VjdXJpdHkgcG9saWNpZXMgaXMgdGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGg/IFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBrZXJuZWwtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgc28gdGhlIHBvbGljaWVzIGhhdmUgdG8gYmUgYWJvdXQgbWFraW5nIHN1cmUgdGhhdCB0aGUgZGF0YSBzdGF5cyB3aXRoaW4gdGhlIHN5c3RlbSwgd2l0aG91dCBsZWFrYWdlIG9yIG1pc3VzZS5cblxuTm93LCBJJ20gYWxyZWFkeSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zLiBXaGF0IGhhcHBlbnMgaWYgdGhpcyBgX3B1dGAgaXMgY2FsbGVkIHByZW1hdHVyZWx5LCBvciBpbiB0aGUgd3Jvbmcgc2VxdWVuY2U/IElzIHRoZXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXM/IEFyZSB3ZSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnQgc2FmZWx5PyBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgcG9zc2libGUgY29kZSBwYXRocyB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGluayBhYm91dCBpdCAtIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGJlIGEgZ29sZG1pbmUgZm9yIGFuIGF0dGFja2VyIVxuXG5CZXlvbmQgc2ltcGxlIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMsIEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUga2VybmVsIHBvaW50ZXIuIFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgZGF0YSBzdHJ1Y3R1cmU/IElzIGl0IHNlbnNpdGl2ZT8gSXMgaXQgc3RydWN0dXJlZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gY2xlYXJseSBhYm91dCBob3cgdG8gcHJvdGVjdCBpdD8gV2UncmUgbG9va2luZyBhdCBwb2xpY3kgZGF0YSwgc28gdGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLCBpbiBib3RoIGluc3RhbmNlcy4gU28sIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB2dWxuZXJhYmlsaXR5IGluIHRoaXMgZnVuY3Rpb24gYXJlIHZlcnkgc2VyaW91cy5cblxuRmluYWxseSwgSSdtIHBvbmRlcmluZyB0aGUgY29udGV4dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHksIGZyb20gYSBzaW5nbGUgdGhyZWFkLCBvciBpcyBpdCBpbnZva2VkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCBvciBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBncmVhdGx5IGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50IG9mIHRoZSBmdW5jdGlvbidzIHNhZmV0eSBhbmQgcmVzaWxpZW5jZS4gVGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCB0byBtZSBhcyB3ZWxsLiBBbmQgSSBiZXQgdGhlcmUgYXJlIGF1ZGl0IHBvaW50cywgdG9vLCBzb21ld2hlcmUgZG93biB0aGUgbGluZS4uLiBsZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MTcuODMzMDgzOTEzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg3Njg0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTU0Njk9aW50IHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmQodTY0IGxzbWlkLCBpbnQgZmQsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTU0OTQtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo1NDk1OnZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy01NDk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MTcuOTA4OTY0NDgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDk4OTA1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCByZWZsZWN0aW5nIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MgcmVsYXRlZCB0byB0aGF0IGZ1bmN0aW9uOlxuXG4qKkFuYWx5emluZyBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsgYWJvdXQgdGhpcyBgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyYCBmdW5jdGlvbi4gSXRzIHZlcnkgbmFtZSBzY3JlYW1zIFwic2VjdXJpdHlcIiBhbmQgXCJwb2xpY3kgZW5mb3JjZW1lbnRcIiByZWxhdGVkIHRvIHRoZSBgYnBybWAgc3RydWN0dXJlLCB3aGljaCBJIGtub3cgaW50aW1hdGVseS4gSXTigJlzIGRlZmluaXRlbHkgYSBjcnVjaWFsIHBpZWNlIHdoZW4gd2UgY29uc2lkZXIgaG93IGEgbmV3IHByb2Nlc3MgY29tZXMgdG8gbGlmZSBpbiB0aGUga2VybmVsLCBhbmQgaG93IHdlIGtlZXAgaXQgY29tcGxpYW50IHdpdGggb3VyIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZS4gVGhlIGBrcHRyYCBzdWZmaXggbGlrZWx5IGluZGljYXRlcyB0aGlzIGlzbid0IHRoZSByYXcgZnVuY3Rpb24gYnV0IHNvbWV0aGluZyB1c2VkIHZpYSBrZXJuZWwgcG9pbnRlciwgaW5kaWNhdGluZyBhIGNlcnRhaW4gZGVncmVlIG9mIGluZGlyZWN0aW9uIGFuZCBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGNoZWNrcyBvciBkeW5hbWljIGRpc3BhdGNoLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB3aGF0IGl0IGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQgaW4gdmFsaWRhdGluZyB0aGUgZXhlY3V0YWJsZSdzIGxlZ2l0aW1hY3kgYW5kIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBhY3R1YWxseSAqc3RhcnQqIHRoYXQgcHJvY2Vzcy4gVGhlIFwicG9saWN5XCIgcGFydCBzdWdnZXN0cyBpdCBpbnRlZ3JhdGVzIHdpdGgsIG9yIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IsIHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LCBBcHBBcm1vciwgb3IgbWF5YmUgZXZlbiBjdXN0b20gTFNNcy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IGl0IHJlY2VpdmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0YWJsZSwgaXRzIGNvbnRleHQsIGFuZCB0aGUgcmVxdWVzdGluZyBwcm9jZXNzLiBJIGV4cGVjdCBpdCdzIGdpdmVuIGFjY2VzcyB0byB0aGUgYGJwcm1gIHN0cnVjdHVyZSwgYnV0IHdoYXQgc3BlY2lmaWMgZGF0YSBmaWVsZHMgaXMgaXQgYWNjZXNzaW5nIHdpdGhpbiB0aGVyZT8gSXMgaXQgY2hlY2tpbmcgdGhlIGZpbGUgcGF0aCwgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBleGVjdXRhYmxlIGZpbGUsIGFueSBleHRlbmRlZCBhdHRyaWJ1dGVzIChsaWtlIHNlY3VyaXR5IGxhYmVscyk/IFdoYXQgYWJvdXQgdGhlIGNhbGxpbmcgcHJvY2VzcydzIGNyZWRlbnRpYWxzIGFuZCBjYXBhYmlsaXRpZXM/IERvZXMgdGhpcyBmdW5jdGlvbiBtYW5hZ2UgYW55IHN0YXRlPyBGb3IgZXhhbXBsZSwgZG9lcyBpdCBjYWNoZSBvciBwcmUtY2FsY3VsYXRlIGluZm9ybWF0aW9uIGZvciBzdWJzZXF1ZW50IGNoZWNrcz9cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBBIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBhbGxvdyBhIG1hbGljaW91cyBhY3RvciB0byBieXBhc3Mgc2VjdXJpdHkgcmVzdHJpY3Rpb25zLCBieSBleHBsb2l0aW5nIGEgcmFjZSBjb25kaXRpb24sIGEgZmF1bHR5IGRhdGEgY2hlY2ssIG9yIGJ5IHByb3ZpZGluZyBjcmFmdGVkIGlucHV0LiBUaGUgaW1wYWN0IGNvdWxkIGJlIGRldmFzdGF0aW5nLCBsZWFkaW5nIHRvIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IHdheXMgdGhlIGZ1bmN0aW9uIGNvdWxkIGJlIHRyaWNrZWQsIHN1Y2ggYXMgaGFuZGxpbmcgcGF0aHMgd2l0aCBzeW1ib2xpYyBsaW5rcywgb3IgZXZlbiBtZW1vcnkgY29ycnVwdGlvbiBwb3NzaWJpbGl0aWVzLlxuXG5JJ20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHByb2Nlc3MgZXhlY3V0aW9uLiBJcyBpdCBjYWxsZWQgZWFybHkgaW4gdGhlIGBleGVjdmVgIHBhdGgsIG9yIGxhdGVyIG9uPyBBcmUgdGhlcmUgb3RoZXIgc2VjdXJpdHkgY2hlY2tzIHRoYXQgaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGlzPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEhvdyBkb2VzIGl0IHNpZ25hbCBhIHBvbGljeSB2aW9sYXRpb24g4oCTIGRvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGUsIGxvZyBhIG1lc3NhZ2UsIG9yIHRyaWdnZXIgYSBrZXJuZWwgcGFuaWM/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVncmF0aW9uIHBvaW50IHdpdGggb3RoZXIgc3Vic3lzdGVtcyBpcyBrZXkuXG5cbk15IGZvY3VzIGhhcyB0byBiZTogZGF0YSBpdCB1c2VzLCBhbmQgaG93IHRoYXQgZGF0YSBpcyBjaGVja2VkLCBhbmQgaG93IHRoZSBjYWxsIGlzIG1hbmFnZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIHByb2Nlc3MgY3JlYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTg0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MjIuODU4ODY2MDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTUwMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgc2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuYz01NDk1PXZvaWQgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0KHU2NCBsc21pZCwgdW5pb24gbHNtX3BvbGljeV9rcHRyICpwb2xpY3kpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTU1MzUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo1NTM2OmludCBzZWN1cml0eV9icHJtX2VuZm9yY2VfcG9saWN5X2twdHIodTY0IGxzbWlkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNTUzNy1cXHRcXHRcXHRcXHQgICAgICB1bmlvbiBsc21fcG9saWN5X2twdHIgKnBvbGljeSwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMTowODoyMi45MTk4MjI2M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTYxMjQ0NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIExhbmRsb2NrIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgTGFuZGxvY2sgQlBGIHBhdGNoIGlzIGludGVyZXN0aW5nLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUgTGFuZGxvY2sgTFNNLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIGFzIGl0IGVuYWJsZXMgQlBGIHByb2dyYW1zIHRvIGFjdGl2ZWx5IGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uLiBUaGlzIG1lYW5zIHdlIGhhdmUgKm5ldyogcmVhY2hhYmxlIGNvZGUgcGF0aHMgd2l0aGluIGJvdGggdGhlIEJQRiBhbmQgTGFuZGxvY2sgc3Vic3lzdGVtcy4gVGhhdCdzIGEgY2xlYXIgc2lnbmFsIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzLCBpbiB0ZXJtcyBvZiBzeW1ib2wgY292ZXJhZ2UsIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtmdW5jczogYGJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldGAsIGBicGZfbGFuZGxvY2tfcmVzdHJpY3RfYmlucHJtYCwgYGJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yYCwgYHNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRgLCBgc2VjdXJpdHlfcG9saWN5X2twdHJfcHV0YCwgYHNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0cmAsIGBsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uYCwgYW5kIGBsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvbmAuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIGZsb3cgcGF0aHMgcmVsYXRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbk9mIGNvdXJzZSwgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGFsc28gaW1wb3J0YW50OiBgQlBGX0xTTWAsIGBTRUNVUklUWV9MQU5ETE9DS2AsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgU0VDVVJJVFlgLiBIb3dldmVyLCBnaXZlbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCUEZfTFNNYCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0byBlbnN1cmUgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZS4gQWgsIHllcywgYENPTkZJR19CUEZfTFNNYCBkZXBlbmRzIG9uIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYFNFQ1VSSVRZYCwgYW5kIGBCUEZfSklUYC4gVGh1cywgYEJQRl9FVkVOVFNgLCBgQlBGX0pJVGAgYXJlIHZlcnkgaW1wb3J0YW50LCBhbmQgbmVlZCB0byBiZSBpbmNsdWRlZCBpbiBhbnkgZnV6emluZyBzZXR1cC5cblxuSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvdmVyZWQgYW5kIGhvdyB0byBzdHJ1Y3R1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEknbSBnb2luZyB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMzMSwiT3V0cHV0VG9rZW5zIjoyNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MDg6MjkuNDgxMDcxNDI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDEwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9MQU5ETE9DS1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xhbmRsb2NrX2dldF9ydWxlc2V0X2Zyb21fZmRcIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldFwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3Jlc3RyaWN0X2JpbnBybVwiLFxuICAgIFwiYnBmX2xhbmRsb2NrX3B1dF9ydWxlc2V0X2R0b3JcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX2Zyb21fZmRcIixcbiAgICBcInNlY3VyaXR5X3BvbGljeV9rcHRyX3B1dFwiLFxuICAgIFwic2VjdXJpdHlfYnBybV9lbmZvcmNlX3BvbGljeV9rcHRyXCIsXG4gICAgXCJsYW5kbG9ja19wcmVwYXJlX3Jlc3RyaWN0aW9uXCIsXG4gICAgXCJsYW5kbG9ja19hcHBseV9yZXN0cmljdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgTGFuZGxvY2sgTFNNLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gZW5mb3JjZSBMYW5kbG9jayBydWxlc2V0cyBvbiBleGVjdXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBCUEYgYW5kIExhbmRsb2NrIHN1YnN5c3RlbXMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sYW5kbG9ja19nZXRfcnVsZXNldF9mcm9tX2ZkXCIsXG4gICAgXCJicGZfbGFuZGxvY2tfcHV0X3J1bGVzZXRcIixcbiAgICBcImJwZl9sYW5kbG9ja19yZXN0cmljdF9iaW5wcm1cIixcbiAgICBcImJwZl9sYW5kbG9ja19wdXRfcnVsZXNldF9kdG9yXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9mcm9tX2ZkXCIsXG4gICAgXCJzZWN1cml0eV9wb2xpY3lfa3B0cl9wdXRcIixcbiAgICBcInNlY3VyaXR5X2Jwcm1fZW5mb3JjZV9wb2xpY3lfa3B0clwiLFxuICAgIFwibGFuZGxvY2tfcHJlcGFyZV9yZXN0cmljdGlvblwiLFxuICAgIFwibGFuZGxvY2tfYXBwbHlfcmVzdHJpY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIExhbmRsb2NrIExTTSwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGVuZm9yY2UgTGFuZGxvY2sgcnVsZXNldHMgb24gZXhlY3V0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgQlBGIGFuZCBMYW5kbG9jayBzdWJzeXN0ZW1zLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[1] Phase: Succeeded StartedAt: 2026-08-01 11:08:41 +0000 UTC FinishedAt: 2026-08-01 11:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 11:08:41 +0000 UTC FinishedAt: 2026-08-01 11:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2] Phase: Succeeded StartedAt: 2026-08-01 11:08:41 +0000 UTC FinishedAt: 2026-08-01 14:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 11:08:41 +0000 UTC FinishedAt: 2026-08-01 14:53:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 11:08:41 +0000 UTC FinishedAt: 2026-08-01 11:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 11:08:41 +0000 UTC FinishedAt: 2026-08-01 11:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowxbztm/series-workflowxbztm-convert-artifact-619573812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 11:09:02 +0000 UTC FinishedAt: 2026-08-01 11:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 11:09:02 +0000 UTC FinishedAt: 2026-08-01 11:28:42 +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:*dac36a94-c067-40e6-b1c1-e49eac48a4ff,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-workflowxbztm/series-workflowxbztm-convert-artifact-619573812/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": "aa2d4060-dd08-4e7d-8e4a-1689a449ee92", "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-workflowxbztm/series-workflowxbztm-build-action-2169612338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 11:09:02 +0000 UTC FinishedAt: 2026-08-01 11:28:36 +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:*dac36a94-c067-40e6-b1c1-e49eac48a4ff,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-workflowxbztm/series-workflowxbztm-convert-artifact-619573812/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": "aa2d4060-dd08-4e7d-8e4a-1689a449ee92", "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-workflowxbztm/series-workflowxbztm-build-action-2169612338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 11:28:42 +0000 UTC FinishedAt: 2026-08-01 11:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 11:28:42 +0000 UTC FinishedAt: 2026-08-01 11:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 11:28:42 +0000 UTC FinishedAt: 2026-08-01 11:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 11:28:42 +0000 UTC FinishedAt: 2026-08-01 11:28:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowxbztm/series-workflowxbztm-convert-artifact-146545651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 11:28:52 +0000 UTC FinishedAt: 2026-08-01 11:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 11:28:52 +0000 UTC FinishedAt: 2026-08-01 11:30:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa2d4060-dd08-4e7d-8e4a-1689a449ee92,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-workflowxbztm/series-workflowxbztm-build-action-2169612338/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-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 11:30:45 +0000 UTC FinishedAt: 2026-08-01 11:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 11:30:45 +0000 UTC FinishedAt: 2026-08-01 11:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 11:30:45 +0000 UTC FinishedAt: 2026-08-01 11:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 11:30:45 +0000 UTC FinishedAt: 2026-08-01 11:50:26 +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:*dac36a94-c067-40e6-b1c1-e49eac48a4ff,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-workflowxbztm/series-workflowxbztm-convert-artifact-146545651/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": "d09e3e66-eee0-4d8e-9a84-929c17decb7c", "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-workflowxbztm/series-workflowxbztm-build-action-1843581863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 11:30:45 +0000 UTC FinishedAt: 2026-08-01 11:50:16 +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:*dac36a94-c067-40e6-b1c1-e49eac48a4ff,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-workflowxbztm/series-workflowxbztm-convert-artifact-146545651/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": "d09e3e66-eee0-4d8e-9a84-929c17decb7c", "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-workflowxbztm/series-workflowxbztm-build-action-1843581863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 11:50:26 +0000 UTC FinishedAt: 2026-08-01 11:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 11:50:26 +0000 UTC FinishedAt: 2026-08-01 11:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 11:50:26 +0000 UTC FinishedAt: 2026-08-01 11:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 11:50:26 +0000 UTC FinishedAt: 2026-08-01 11:52:18 +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:*d09e3e66-eee0-4d8e-9a84-929c17decb7c,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-workflowxbztm/series-workflowxbztm-build-action-1843581863/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-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 14:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 14:53:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"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:*aa2d4060-dd08-4e7d-8e4a-1689a449ee92,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d09e3e66-eee0-4d8e-9a84-929c17decb7c,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-workflowxbztm/series-workflowxbztm-build-action-2169612338/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-workflowxbztm/series-workflowxbztm-build-action-1843581863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 11:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 11:52:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"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-workflowxbztm/series-workflowxbztm-convert-artifact-2222178028/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 11:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 11:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 11:52:28 +0000 UTC FinishedAt: 2026-08-01 11:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 11:52:38 +0000 UTC FinishedAt: 2026-08-01 14:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbztm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_landlock_get_ruleset_from_fd","bpf_landlock_put_ruleset","bpf_landlock_restrict_binprm","bpf_landlock_put_ruleset_dtor","security_policy_kptr_from_fd","security_policy_kptr_put","security_bprm_enforce_policy_kptr","landlock_prepare_restriction","landlock_apply_restriction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_LANDLOCK","BPF_SYSCALL","SECURITY","BPF_EVENTS","BPF_JIT"],"series_id":"158492be-10e7-4e70-a5a1-24bbff65c3c0","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 11:52:38 +0000 UTC FinishedAt: 2026-08-01 14:53:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa2d4060-dd08-4e7d-8e4a-1689a449ee92,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d09e3e66-eee0-4d8e-9a84-929c17decb7c,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-workflowxbztm/series-workflowxbztm-build-action-2169612338/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-workflowxbztm/series-workflowxbztm-build-action-1843581863/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-workflowxbztm/series-workflowxbztm-convert-artifact-2222178028/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,}