Name: series-workflowcmt2z Phase: Succeeded StartedAt: 2026-08-06 20:19:46 +0000 UTC FinishedAt: 2026-08-06 21:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[0] Phase: Succeeded StartedAt: 2026-08-06 20:19:46 +0000 UTC FinishedAt: 2026-08-06 20:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 20:19:46 +0000 UTC FinishedAt: 2026-08-06 20:23:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "7fe6ec21-a191-4629-9759-add5e40fe457" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_vm_ioctl_check_extension" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWVmZDAxOTQ1NmIyNzUyOTNmOTUyZGM0ODRkOWRmYzhmNmVmNzMwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMjA6MjE6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5pbmRleCBlMzAwM2EyNDFkNWIwLi4yMmZlZGIwYWEzNGI0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC02NTY2LDYgJiM0Mzs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuJiM0Mzs0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0Mzs6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcbiYjNDM7OlR5cGU6IHZtIGlvY3RsXG4mIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxuJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXG4mIzQzO1xuJiM0MztFcnJvcnMgaW5jbHVkZTpcbiYjNDM7XG4mIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbiYjNDM7ICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxuJiM0MzsgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW5cbiYjNDM7ICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbiYjNDM7ICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXG4mIzQzOyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzXG4mIzQzOyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZVxuJiM0MzsgICAgICAgICAgIChuZXcgdXNlcnNwYWNlIG9uIG9sZCBrZXJuZWwpOyB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0c1xuJiM0MzsgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXG4mIzQzOyAgICAgICAgICAgcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXG4mIzQzOyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXG4mIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbiYjNDM7ICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcbiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXG4mIzQzO3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxuJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbiYjNDM7XG4mIzQzO1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXG4mIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbiYjNDM7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxuJiM0MztcbiYjNDM7OjpcbiYjNDM7XG4mIzQzOyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuJiM0MztcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbiYjNDM7XHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0MzsgIH07XG4mIzQzO1xuJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXG4mIzQzO2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4mIzQzO1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50XG4mIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXG4mIzQzO2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4mIzQzO1xuJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcbiYjNDM7dG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxuJiM0Mzt0aGFuIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIChgYHNpemUgXHUwMDNlPSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgKSxcbiYjNDM7dGhlIGtlcm5lbCB6ZXJvLXBhZHMgdW5rbm93biB0cmFpbGluZyBmaWVsZHMuIElmIHVzZXJzcGFjZSBwYXNzZXMgYSBsYXJnZXJcbiYjNDM7c3RydWN0IChgYHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXG4mIzQzO2JhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBhbmQgcmV0dXJucyBgYC1FMkJJR2BgLFxuJiM0MzthbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGlzY292ZXIgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSBhbmQgcmV0cnkuXG4mIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlXG4mIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uXG4mIzQzO1xuJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHlcbiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWNcbiYjNDM7cHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MztzaWduaWZpY2FudCBiaXQpOlxuJiM0MztcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuJiM0MztcbiYjNDM7Li4gbm90ZTo6XG4mIzQzO1xuJiM0MzsgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbiYjNDM7XG4mIzQzOyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjIpYGBcbiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYwKWBgXG4mIzQzO1xuJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4mIzQzOyAgIHRoYW4gaGFyZGNvZGluZyBiaXQgcG9zaXRpb25zLlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiAmIzQzOzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4mIzQzO1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIge1xuIFx0X191NjRcdGJlaGF2aW91cl9tYXNrO1x0XHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xuIH07XG4gXG4mIzQzOy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xuJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4mIzQzO1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuJiM0MztcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0Mzt9O1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXHQyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuXG4mIzQzOyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYyKVxuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MClcbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLXHRcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXG4gLypcbiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuJiM0MztcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzE6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbiYjNDM7XHRsb25nIHJjID0gLUVJTlZBTDtcbiYjNDM7XHR1MzIgY3B1X3ZlcnNpb24gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG4mIzQzO1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuJiM0MztcdFx0XHRjYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzO1xuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFwmIzM0O2NwdVwmIzM0Oykge1xuJiM0MztcdFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwmIzM0O2NwdS12ZXJzaW9uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3B1X3ZlcnNpb24pKSB7XG4mIzQzO1x0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFjcHVfdmVyc2lvbilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuJiM0MztcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2IuLmVkMGNkN2I4M2I2M2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC02OTcsNiAmIzQzOzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcbiYjNDM7XHRcdHIgPSAwO1xuJiM0MztcdFx0aWYgKGh2X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcbiYjNDM7XHRcdFx0ciA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3MCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZXN2bV9vZmYoa3ZtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuJiM0MztcdFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XG4mIzQzO1x0XHR1NjQgdXNpemU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLlxuJiM0MztcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuJiM0MztcdFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXG4mIzQzO1x0XHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxuJiM0MztcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIga2VybmVsLlxuJiM0MztcdFx0ICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2hcbiYjNDM7XHRcdCAqIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLCB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh1c2l6ZSBcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcykpIHtcbiYjNDM7XHRcdFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcbiYjNDM7XHRcdFx0ciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGlmIChwdXRfdXNlcihob3N0X2NhcHMuc2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRyID0gLUUyQklHO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbiYjNDM7XHRcdCAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHlcbiYjNDM7XHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoXHUwMDI2aG9zdF9jYXBzLCBzaXplb2YoaG9zdF9jYXBzKSxcbiYjNDM7XHRcdFx0XHRcdCAgYXJncCwgdXNpemUpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cbiYjNDM7XHRcdHIgPSAtRUlOVkFMO1xuJiM0MztcdFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFx0ciA9IC1FTk9UVFk7XG4mIzQzO1x0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMoXHUwMDI2aG9zdF9jYXBzKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xuJiM0MztcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbiYjNDM7XHRcdFx0XHRcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGRlZmF1bHQ6IHtcbiBcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWFyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlLi43MGUzNmU2YTBhZDRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbkBAIC05OTcsNiAmIzQzOzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuJiM0MzsjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNDEsNiAmIzQzOzEzNDIsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfQ09VTlRFUl9PRkZTRVQgKi9cbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcbiAjZGVmaW5lIEtWTV9BUk1fR0VUX1JFR19XUklUQUJMRV9NQVNLUyBfSU9SKEtWTUlPLCAgMHhiNiwgc3RydWN0IHJlZ19tYXNrX3JhbmdlKVxuJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXHRfSU8oS1ZNSU8sICAweGI4KVxuIFxuIC8qIGlvY3RsIGZvciB2bSBmZCAqL1xuICNkZWZpbmUgS1ZNX0NSRUFURV9ERVZJQ0VcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWVmZDAxOTQ1NmIyNzUyOTNmOTUyZGM0ODRkOWRmYzhmNmVmNzMwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMjA6MjE6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKaW5kZXggZTMwMDNhMjQxZDViMC4uMjJmZWRiMGFhMzRiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdApAQCAtNjU2Niw2ICYjNDM7NjU2Niw4NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFCiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5CiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuCiAKJiM0Mzs0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHBvd2VycGMKJiM0Mzs6VHlwZTogdm0gaW9jdGwKJiM0Mzs6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCiYjNDM7CiYjNDM7RXJyb3JzIGluY2x1ZGU6CiYjNDM7CiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yCiYjNDM7ICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZQomIzQzOyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhbgomIzQzOyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkCiYjNDM7ICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwCiYjNDM7ICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMKJiM0MzsgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUKJiM0MzsgICAgICAgICAgIChuZXcgdXNlcnNwYWNlIG9uIG9sZCBrZXJuZWwpOyB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0cwomIzQzOyAgICAgICAgICAgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4KJiM0MzsgICAgICAgICAgIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZQomIzQzOyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgCiYjNDM7ICAgICAgICAgICBvcGVyYXRpb24gKGUuZy4sIG9uIG5vbi1IViBLVk0gaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZQomIzQzOyAgICAgICAgICAgcmVxdWlyZWQgS1ZNIG9wZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUpCiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztJQk0gUE9XRVIgc3lzdGVtIHNlcnZlci1iYXNlZCBwcm9jZXNzb3JzIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IG1vZGUgZmVhdHVyZQomIzQzO3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllcgomIzQzO2dlbmVyYXRpb25zIHN1Y2ggYXMgKE4tMSkgYW5kIChOLTIpLgomIzQzOwomIzQzO1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzCiYjNDM7c3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvbgomIzQzO0tWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy4KJiM0MzsKJiM0Mzs6OgomIzQzOwomIzQzOyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgewomIzQzOwlfX3U2NAlzaXplOwkJCS8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KJiM0MzsJX191NjQJZmxhZ3M7CQkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqLwomIzQzOwlfX3U2NAljb21wYXRfY2FwYWJpbGl0aWVzOwkvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovCiYjNDM7ICB9OwomIzQzOwomIzQzO0JlZm9yZSBjYWxsaW5nIHRoaXMgaW9jdGwsIHVzZXJzcGFjZSBtdXN0IHNldCB0aGUgYGBzaXplYGAgZmllbGQgdG8KJiM0MztgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLgomIzQzO1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50CiYjNDM7dW5pbml0aWFsaXplZCBzdGFjayB2YWx1ZXMgZnJvbSBiZWluZyBzaWxlbnRseSBhY2NlcHRlZCwga2VlcGluZyB0aGUKJiM0MztmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LgomIzQzOwomIzQzO1RoZSBpb2N0bCB1c2VzIGBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgYCBhbmQgYGBjb3B5X3N0cnVjdF90b191c2VyKClgYAomIzQzO3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nOiBpZiB1c2Vyc3BhY2UgcGFzc2VzIGEgc3RydWN0IHNtYWxsZXIKJiM0Mzt0aGFuIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIChgYHNpemUgJmd0Oz0gS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCksCiYjNDM7dGhlIGtlcm5lbCB6ZXJvLXBhZHMgdW5rbm93biB0cmFpbGluZyBmaWVsZHMuIElmIHVzZXJzcGFjZSBwYXNzZXMgYSBsYXJnZXIKJiM0MztzdHJ1Y3QgKGBgc2l6ZSAmZ3Q7IHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzCiYjNDM7YmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsCiYjNDM7YWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgYW5kIHJldHJ5LgomIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlCiYjNDM7c2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi4KJiM0MzsKJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkKJiM0Mzttb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpYwomIzQzO3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3QKJiM0MztzaWduaWZpY2FudCBiaXQpOgomIzQzOwomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZQomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCAoYml0IDMpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjExIHByb2Nlc3NvciBtb2RlCiYjNDM7CiYjNDM7Li4gbm90ZTo6CiYjNDM7CiYjNDM7ICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3QKJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczoKJiM0MzsKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgJmx0OyZsdDsgNjIpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjEpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjApYGAKJiM0MzsKJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYCZsdDtsaW51eC9rdm0uaCZndDtgYCByYXRoZXIKJiM0MzsgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy4KJiM0MzsKIC4uIF9rdm1fcnVuOgogCiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtMzE5LDYgJiM0MzszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7CiAJYm9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpOwogCWludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pOwogCWludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpOwomIzQzOwlpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaApAQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIgewogCV9fdTY0CWJlaGF2aW91cl9tYXNrOwkJLyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi8KIH07CiAKJiM0MzsvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi8KJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7CiYjNDM7CV9fdTY0CXNpemU7CQkJLyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqLwomIzQzOwlfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwlfX3U2NAljb21wYXRfY2FwYWJpbGl0aWVzOwkvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovCiYjNDM7fTsKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwCTI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy4KJiM0MzsgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5CSgxVUxMICZsdDsmbHQ7IDYyKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAJKDFVTEwgJmx0OyZsdDsgNjEpCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMQkoMVVMTCAmbHQ7Jmx0OyA2MCkKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0sJCShLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExKQogLyoKICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay4KICAqIFRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHZhbHVlcyB1c2VkIGJ5IEhfR0VUX0NQVV9DSEFSQUNURVJJU1RJQ1MuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwppbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKQEAgLTY1MTAsNiAmIzQzOzY1MTAsNjEgQEAgc3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjcHVfdmVyc2lvbikgewomIzQzOwljYXNlIFBWUl9BUkNIXzMxX1AxMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMDA6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDsKJiM0MzsJbG9uZyByYyA9IC1FSU5WQUw7CiYjNDM7CXUzMiBjcHVfdmVyc2lvbiA9IDA7CiYjNDM7CiYjNDM7CWlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHsKJiM0MzsJCWlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7CiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKJiM0MzsJCQljYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzOwomIzQzOwkJCXJjID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAmIzM0O2NwdSYjMzQ7KSB7CiYjNDM7CQkJCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7Y3B1LXZlcnNpb24mIzM0OywKJiM0MzsJCQkJCQkJICAmYW1wO2NwdV92ZXJzaW9uKSkgewomIzQzOwkJCQkJb2Zfbm9kZV9wdXQobnApOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFjcHVfdmVyc2lvbikKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkJCSAgICAmYW1wO2NhcGFiaWxpdGllcyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaG9zdF9jYXBzLSZndDtjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzICZhbXA7IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsCiAJLnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LApAQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0gewogCS5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsCiAJLmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LAogCS5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LAomIzQzOwkuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcywKIH07CiAKIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggMDAzMDIzOTlmYzM3Yi4uZWQwY2Q3YjgzYjYzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTY5Nyw2ICYjNDM7Njk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJCQl9CiAJCX0KIAkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpCiYjNDM7CWNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6CiYjNDM7CQlyID0gMDsKJiM0MzsJCWlmIChodl9lbmFibGVkICZhbXA7JmFtcDsga3ZtaHZfb25fcHNlcmllcygpKQomIzQzOwkJCXIgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovCiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3MCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7c3ZtX29mZihrdm0pOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6IHsKJiM0MzsJCXN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9OwomIzQzOwkJdTY0IHVzaXplOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLgomIzQzOwkJICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LgomIzQzOwkJICovCiYjNDM7CQlyID0gLUVGQVVMVDsKJiM0MzsJCWlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWwKJiM0MzsJCSAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZAomIzQzOwkJICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWwKJiM0MzsJCSAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKHVzaXplICZsdDsgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIga2VybmVsLgomIzQzOwkJICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2gKJiM0MzsJCSAqIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLCB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1c2l6ZSAmZ3Q7IHNpemVvZihob3N0X2NhcHMpKSB7CiYjNDM7CQkJaG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTsKJiM0MzsJCQlyID0gLUVGQVVMVDsKJiM0MzsJCQlpZiAocHV0X3VzZXIoaG9zdF9jYXBzLnNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSkKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJciA9IC1FMkJJRzsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OgomIzQzOwkJICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weQomIzQzOwkJICogICB1c2l6ZSAmbHQ7ICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoJmFtcDtob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLAomIzQzOwkJCQkJICBhcmdwLCB1c2l6ZSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCS8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKGhvc3RfY2Fwcy5mbGFncykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSAtRU5PVFRZOwomIzQzOwkJaWYgKCFrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpOwomIzQzOwkJciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsICZhbXA7aG9zdF9jYXBzLAomIzQzOwkJCQkJc2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAlkZWZhdWx0OiB7CiAJCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKIAkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDthcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDQxOTAxMTA5N2ZhOGUuLjcwZTM2ZTZhMGFkNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTAKIAogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKIAlfX3UzMiBpcnFjaGlwOwpAQCAtMTM0MSw2ICYjNDM7MTM0Miw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7CiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovCiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldCkKICNkZWZpbmUgS1ZNX0FSTV9HRVRfUkVHX1dSSVRBQkxFX01BU0tTIF9JT1IoS1ZNSU8sICAweGI2LCBzdHJ1Y3QgcmVnX21hc2tfcmFuZ2UpCiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCV9JTyhLVk1JTywgIDB4YjgpCiAKIC8qIGlvY3RsIGZvciB2bSBmZCAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRQkgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogODI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsIGZvciBQb3dlclBDLCBpbXBsZW1lbnRlZCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgIGFuZCBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoaXMgaW9jdGwsIGJhc2VkIG9uIGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2AsIGFpbXMgdG8gZXhwb3NlIGhvc3QgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5IGZ1enogdGhpcz8gVGhlIGNydWNpYWwgdGhpbmcgaXMgd2hldGhlciB0aGlzIGlzIHJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGFyY2hpdGVjdHVyZSBpcyBQb3dlclBDLiBUaGUgaW9jdGwgaXMgb25seSBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgIGlzIHN1cHBvcnRlZC4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIHRlbGxzIHVzIGl0IHJldHVybnMgMSBpZiBgaHZfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bWh2X29uX3BzZXJpZXMoKWAuIGBodl9lbmFibGVkYCBpcyBLVk0gSFYsIGFuZCBga3ZtaHZfb25fcHNlcmllcygpYCBjaGVja3MgaWYgd2UmIzM5O3JlIG9uIGEgcHNlcmllcyBtYWNoaW5lLiBOb3csIGNhbiB0aGlzIGJlIHRyaWdnZXJlZCBieSBhIHN0YW5kYXJkIFFFTVUgY29uZmlnIGZvciBmdXp6aW5nPwoKU3l6a2FsbGVyIHN1cHBvcnRzIGZ1enppbmcgcHBjNjRsZSwgYW5kIGl0IHVzZXMgUUVNVS4gVGhhdCYjMzk7cyBnb29kLiBUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgUUVNVSwgYnkgZGVmYXVsdCwgdXNlcyB0aGUgYHBzZXJpZXNgIG1hY2hpbmUgdHlwZSBmb3IgcHBjNjRsZSB3aGVuIEtWTSBpcyBlbmFibGVkLiBPa2F5LCBidXQgaG93IGFib3V0IEtWTSBIViwgY2FuIFFFTVUgcnVuIEtWTSBIVj8gWWVzLCBQb3dlclBDIHN1cHBvcnRzIG5lc3RlZCBLVk0sIGFuZCBldmVuIGlmIHdlIGRvbiYjMzk7dCBoYXZlIEtWTSBIViwgd2UgY2FuIGZ1enogaXQgaWYgd2UgaGF2ZSBLVk0uCgpUaGUgY2F0Y2ggaXMsIHdoaWxlIHN5emthbGxlciB1c3VhbGx5IGZvY3VzZXMgb24geDg2LCBpdCAqZG9lcyogc3VwcG9ydCBvdGhlciBhcmNoaXRlY3R1cmVzIGlmIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBMZXQmIzM5O3MgcmVtZW1iZXIgdGhlIHByb21wdCYjMzk7cyBjb25kaXRpb246ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIEJ1dCwgaWYgd2UmIzM5O3JlIGZ1enppbmcgKktWTSogb24gUG93ZXJQQywgZXZlbiBpbnNpZGUgUUVNVSwgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGZ1enplcyBLVk0uIEl0JiMzOTtzIGEgVk0gaW9jdGwsIHdoaWNoIG1lYW5zIHRoaXMgaW9jdGwsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AsIHNob3VsZCBiZSBmdXp6ZWQgYXMgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClNvLCBsZXQmIzM5O3MgZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCwgYW5kIHRoZSBpb2N0bCBoYW5kbGVyIHdpdGhpbiBga3ZtX2FyY2hfdm1faW9jdGxgIHRoYXQgZGVhbHMgd2l0aCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGluZGVlZCB0aGUgcmlnaHQgaGFuZGxlci4KCkZpbmFsbHksIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWdzLiBXZSBvYnZpb3VzbHkgbmVlZCBgQ09ORklHX0tWTWAsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGVpdGhlciBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIG9yIGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAuIExldCYjMzk7cyBjb25maXJtIHdpdGggYSBxdWljayBzZWFyY2ggaW4gYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9CT09LM1NfSFZfUE9TU0lCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTM4PWNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTY2LVx0c2VsZWN0IEtWTVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjY3Olx0c2VsZWN0IEtWTV9CT09LM1NfUFJfUE9TU0lCTEUgaWYgIUtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02OC1cdHNlbGVjdCBQUENfNjRTX0hBU0hfTU1VXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFx1MDAyNlx1MDAyNiBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgyOlx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04My1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xMjk9Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMS1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTMyOlx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMy1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTQyPWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDQtXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcdTAwMjZcdTAwMjYgREVCVUdfRlMgXHUwMDI2XHUwMDI2ICFLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0Ni1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTU3PWNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTk6XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNjAtXHRkZWZhdWx0ICFFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MjUxPWNvbmZpZyBLVk1fWElWRVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTMtXHRkZWZhdWx0IHlcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTQ6XHRkZXBlbmRzIG9uIEtWTV9YSUNTIFx1MDAyNlx1MDAyNiBQUENfWElWRV9OQVRJVkUgXHUwMDI2XHUwMDI2IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugc2VsZWN0aW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBhdXRvbWF0aWNhbGx5IGltcGxpZXMgdGhhdCBgS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgYWxzbyBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIGxvZ2ljIHN0YW5kcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gb2YgYEtWTV9CT09LM1NfNjRfSFZgIGl0c2VsZi4gVGhlIHRleHQgaW5kaWNhdGVzIHRoYXQgYEtWTV9CT09LM1NfNjRfSFZgIGhhcyBhIGRlcGVuZGVuY3ksIHNvIGxldCYjMzk7cyBkaWcgaW50byB0aGF0LiBBY2NvcmRpbmcgdG8gdGhlIHRleHQsIGl0IGRlcGVuZHMgb24gYm90aCBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAgYmVpbmcgc2V0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGF0IGBLVk1fQk9PSzNTXzY0YCBpcyBhbGwgYWJvdXQuIFVuZGVyc3RhbmRpbmcgaXRzIGF0dHJpYnV0ZXMgd2lsbCBjbGFyaWZ5IHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mjk9Y29uZmlnIEtWTV9CT09LM1NfMzJfSEFORExFUlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzUtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTQ1PWNvbmZpZyBLVk1fQk9PSzNTXzMyXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBCb29rM1MgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBLVk0gY29uZmlndXJhdGlvbnM6IGBLVk1fQk9PSzNTXzY0YCBhbmQgYEtWTV9CT09LM1NfNjRfSFZgLiBJbW1lZGlhdGVseSwgSSBub3RpY2UgdGhlIGRpZmZlcmVuY2UsIHBhcnRpY3VsYXJseSB0aGUgYF9IVmAgc3VmZml4LiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCByaWdodCwgdGhlIHNlY29uZCBvbmUsIGBLVk1fQk9PSzNTXzY0X0hWYCwgc2VlbXMgdG8gYmUgZGVwZW5kZW50IG9uIGBQUENfUE9XRVJOVmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IGxpa2VseSBpbXBsaWVzIGEgaHlwZXJ2aXNvci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGZlYXR1cmUgc2V0LiBCZXR0ZXIgZG91YmxlLWNoZWNrIGBQUENfUE9XRVJOVmAgdG8gY29uZmlybSBleGFjdGx5IHdoYXQgdGhhdCYjMzk7cyBicmluZ2luZyB0byB0aGUgdGFibGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19QT1dFUk5WJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMy1cdGRlcGVuZHMgb24gUFBDNjQgXHUwMDI2XHUwMDI2IFBQQ19CT09LM1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBvd2VyUEMgQ29tcGF0aWJpbGl0eSBGZWF0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgUG93ZXJQQyBLVk0gcGxhdGZvcm0sIHNwZWNpZmljYWxseSBgUFBDX1BPV0VSTlZgLiBUaGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHNlZW0gdG8gYmUgYEtWTWAsIGBLVk1fQk9PSzNTXzY0YCwgYEtWTV9CT09LM1NfNjRfSFZgLCBhbmQgYFBQQ19QT1dFUk5WYC4gSSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNvbmZpcm1lZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaXMgaW5kZWVkIHByZXNlbnQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBUaGVyZWZvcmUsIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBoYW5kbGVzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoYXQgZnVuY3Rpb24gY2FsbHMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCB3aGljaCBpcyBhc3NpZ25lZCB0byBga3ZtX29wc19odi5nZXRfY29tcGF0X2NhcHNgLCBzbyBpdCBzZWVtcyBsaWtlIGEgdmFsaWQgZW50cnkgcG9pbnQuCgpJIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyB3aGljaCBmdW5jdGlvbiB0byBjaG9vc2UuIEkgbmVlZCB0byBiYWxhbmNlIGNsYXJpdHkgd2l0aCBhZGhlcmluZyB0byB0aGUgJiMzNDtub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCYjMzQ7IHJ1bGUuIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgYXJlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhpbiBgYm9vazNzX2h2LmNgLiBUaGUgcGF0Y2ggKmRvZXMqIG1vZGlmeSBga3ZtX2FyY2hfdm1faW9jdGxgLCBhbmQgd2hpbGUgaXQmIzM5O3MgYSBnZW5lcmFsIGVudHJ5IHBvaW50LCBpdCYjMzk7cyBhbHNvIHdoZXJlIHRoZSBwYXRjaCYjMzk7cyBzcGVjaWZpYyBjYXNlIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQuCgpJIGNoZWNrZWQgYWdhaW4sIGFuZCB5ZXMsIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgYXJlIGRlZmluaXRlbHkgc3RhdGljLCBhcyB0aGUgcGF0Y2ggY29uZmlybXMgdGhpcy4gU2luY2UgdGhlIHByb21wdCBmYXZvcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLCBga3ZtX2FyY2hfdm1faW9jdGxgIHNlZW1zIHRvIGJlIHRoZSBiZXR0ZXIgY2hvaWNlIHNpbmNlIGl0IGlzIG5vdCBzdGF0aWMuIE9uIHNlY29uZCBsb29rLCBJIHNob3VsZCBpbmNsdWRlIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCB3aGljaCBpcyBhbHNvIG1vZGlmaWVkIGFuZCBub24tc3RhdGljLiBUaGVyZWZvcmUgSSB3aWxsIGdvIHdpdGggYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgbWFrZSBzdXJlIG15IHJlYXNvbmluZyBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMjk0PXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jcHVfY2hhcihzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciAqY3ApXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2Mi1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjIzNjM6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbnNpZGVyaW5nIEtWTSBpb2N0bCBGdW5jdGlvbiBWaXNpYmlsaXR5KioKClJpZ2h0LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGluZGVlZCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSAqb3V0c2lkZSogdGhlIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbiwgd2hpY2ggaXMgYSBrZXkgZGVzaWduIGNob2ljZSBpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIGl0cyByb2xlIGluIGhhbmRsaW5nIFZNLXNwZWNpZmljIGlvY3Rscy4KCkFuZCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suLi4gWWVzLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaXMgYWxzbyBub24tc3RhdGljLCBqdXN0IGFzIEkgc3VzcGVjdGVkLiBUaGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZS4gSXQmIzM5O3MgdXNlZCBmb3IgdmFsaWRhdGluZyBhbmQgbWFuYWdpbmcgS1ZNIGV4dGVuc2lvbnMsIHNvIGl0IHJlcXVpcmVzIGJyb2FkZXIgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0sIGFuZCBwb3RlbnRpYWxseSBldmVuIGZyb20gdGhlIHVzZXJzcGFjZSBzaWRlLCB0byBkZXRlcm1pbmUgd2hpY2ggZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSB0byBhIHNwZWNpZmljIFZNLiBUaGlzIGFyY2hpdGVjdHVyZSBvZiB0aGUgaW9jdGwgZnVuY3Rpb25zIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXNlIGRlc2lnbiBjaG9pY2VzIGFyZSBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdGVkIHRvIHNlZSBpbiBhIHdlbGwtc3RydWN0dXJlZCBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz00Nzg9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy01MDEtXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo1MDI6aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTUwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjEyCgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDg4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBvd2VyUEMgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBvdXRsaW5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIHRoaXMgUG93ZXJQQyBLVk0gcGF0Y2guIExldCYjMzk7cyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2Vzcy4KCkZpcnN0LCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgpSaWdodCwgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBXYWl0LCBhIHF1aWNrIGNoZWNrIHJlbWluZHMgbWUgdGhhdCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gR29vZCwgZ290IHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBlbmFibGluZyB0aGUgY29ycmVjdCBjb25maWdzIHdoZW4gSSBzZXQgdGhpcyB1cC4KClRoZXJlJiMzOTtzIGFsc28gdGhhdCBgI2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpYCBpbiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAuIEFoLCByaWdodCwgdGhhdCYjMzk7cyByZWxhdGVkIHRvIGBLVk1fQk9PSzNTXzY0X0hWYCwgc2luY2UgYEtWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHNlbGVjdGVkIGJ5IGl0LiBTbywgZW5hYmxpbmcgYEtWTV9CT09LM1NfNjRfSFZgIGVmZmVjdGl2ZWx5IGNvdmVycyB0aGF0IGNvbmRpdGlvbmFsIGNoZWNrLiBFeGNlbGxlbnQuIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgZXhwbGljaXRseSBzZXQuCgpTaW5jZSBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHRoZSBvbmx5IG9uZSB1c2VkLCBJIGNhbiBmZWVsIGNvbmZpZGVudCBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0aGUgbW9zdCByZWxldmFudC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsIGZvciBQb3dlclBDIHRvIHF1ZXJ5IENQVSBjb21wYXRpYmlsaXR5LiBUaGlzIG1lYW5zIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgY29yZSBLVk0gVk0gaW9jdGwgaGFuZGxlciBhbmQgYWRkaW5nIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgdXNlci1zcGFjZSBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIEFQSSwgc28gZnV6emluZyBpcyBjcml0aWNhbCB0byBlbnN1cmUgcHJvcGVyIGhhbmRsaW5nIG9mIHVzZXIgaW5wdXQsIHNwZWNpZmljYWxseSBzaXplcyBhbmQgZmxhZ3MgcGFzc2VkIHRvIHRoaXMgbmV3IGlvY3RsLgoKT2theSwgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYC4gSSBoYWQgYSBtb21lbnQgb2YgZG91YnQgYWJvdXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBiZWluZyB0b28gZ2VuZXJpYywgYnV0IHNpbmNlIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciAqYWxsKiBQb3dlclBDIFZNIGlvY3RscyBhbmQgdGhlIG5ldyBpb2N0bCBoYW5kbGluZyBpcyBkaXJlY3RseSBpbnRlZ3JhdGVkIHdpdGhpbiBpdCAodGhlIGBjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOmAgaXMgaW5zaWRlIHRoZSBzd2l0Y2ggaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCksIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaXMgdGhlIHJpZ2h0IGNob2ljZS4KClRoZSBhY3R1YWwgY2FwYWJpbGl0eSBtYXBwaW5nIGxvZ2ljIGlzIHdpdGhpbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEhvd2V2ZXIsIGFjY29yZGluZyB0byB0aGUgZ3VpZGFuY2UsIEkgY2FuJiMzOTt0IGxpc3QgYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uIGlmIHRoZXJlJiMzOTtzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2VlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKCZhbXA7aG9zdF9jYXBzKWAuIFNpbmNlIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQgYW5kIGl0IHdpbGwgaGF2ZSBhIHNwZWNpZmljIHN5bWJvbCBhZGRyZXNzLiBTdGlsbCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludC4KCklzIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbj8gTm8uCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHdyaXRlIHVwIHRoZSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOVjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0JPT0szU182NCYjMzQ7LAogICAgJiMzNDtLVk1fQk9PSzNTXzY0X0hWJiMzNDssCiAgICAmIzM0O1BQQ19QT1dFUk5WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NCwgS1ZNX0JPT0szU182NF9IViwgUFBDX1BPV0VSTlYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBGaWxlczogQSBRdWljayBEZWJ1ZyoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYXJlIHlvdSB0ZWxsaW5nIG1lIHRoZXNlIGNvbmZpZ3VyYXRpb25zICphcmVuJiMzOTt0KiBzaG93aW5nIHVwPyBUaGF0JiMzOTtzIHVudXN1YWwuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgcHJvcGVybHkuIElzIHRoZXJlIGEgc3ludGF4IGVycm9yIEkgbWlzc2VkPyBQZXJoYXBzIGEgY29uZGl0aW9uYWwgdGhhdCYjMzk7cyB1bmludGVudGlvbmFsbHkgcHJldmVudGluZyB0aGUgb3B0aW9ucyBmcm9tIGJlaW5nIGV4cG9zZWQ/IFRpbWUgZm9yIGEgZGVlcCBkaXZlIGJhY2sgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzIOKAkyBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgY291bGQgYmUgc29tZXRoaW5nIHNpbGx5IGxpa2UgYSBtaXNzaW5nIGBzb3VyY2VgIGRpcmVjdGl2ZSwgYW4gaW5jb3JyZWN0IGBkZXBlbmRzIG9uYCwgb3IgcGVyaGFwcyBhIG1pc3BsYWNlZCBjb21tZW50LiBJIG5lZWQgdG8gZXhoYXVzdCBhbGwgdGhlIG9idmlvdXMgY3VscHJpdHMgZmlyc3QsIGJlZm9yZSBjb25zaWRlcmluZyBhbnl0aGluZyBtb3JlIGNvbXBsZXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yOT1jb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NDU9Y29uZmlnIEtWTV9CT09LM1NfMzJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDExNAoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFRvb2wgUmVzdWx0cyoqCgpPa2F5LCBzbyB0aGUgdG9vbCBpcyBzYXlpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJiMzOTt0IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhhdCYjMzk7cyBhIGJpdCBwZXJwbGV4aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbWF5YmUgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIHg4Nl82NCB0cmVlIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJiMzOTt0IGFsd2F5cyByZXByZXNlbnRhdGl2ZS4gSSBrbm93IHRoZSB0b29sICpzaG91bGQqIGJlIGNoZWNraW5nIHRoZSBlbnRpcmUga2VybmVsIHRyZWUsIGJ1dCBwZXJoYXBzIGl0cyBjb25maWd1cmF0aW9uIGNoZWNrcyBhcmUgbGltaXRlZCB0byB4ODYgY29uZmlndXJhdGlvbnMsIG9yIGFyZSBzZW5zaXRpdmUgdG8gYXJjaGl0ZWN0dXJlPwoKV2FpdCwgaG9sZCBvbiwgYHNldC1yZXN1bHRzYCBhY3R1YWxseSBoYXMgaXRzIG93biBpbnRlcm5hbCBsb2dpYyBmb3IgdmFsaWRhdGluZyBjb25maWdzIGFnYWluc3QgdGhlIGtlcm5lbCB0cmVlLiBJZiBpdCYjMzk7cyBzYXlpbmcgc29tZXRoaW5nICpkb2VzbiYjMzk7dCogZXhpc3QsIHRoZW4gaXQgcHJvYmFibHkgbWVhbnMgaXQmIzM5O3MgZ2VudWluZWx5IHVuYXZhaWxhYmxlIGluIHRoZSB0cmVlLCBhdCBsZWFzdCBmb3IgdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlLCB4ODZfNjQuCgpTaW5jZSB0aGlzIHBhdGNoIGlzIGZvciBQb3dlclBDLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNsdWRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBhcmNoLXNwZWNpZmljLCBhbmQgdGhhdCB0aGUgdG9vbCBkb2VzbiYjMzk7dCBhY2NlcHQuIElmIHRoZSB0b29sIGlzIHJlamVjdGluZyBjZXJ0YWluIGNvbmZpZ3MsIG1heWJlIEkgc2hvdWxkIG9taXQgdGhlbSBhbHRvZ2V0aGVyLCBvciBvbmx5IGluY2x1ZGUgY29uZmlncyB0aGF0IGFyZSB2YWxpZCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcz8KClJpZ2h0LCBgc2V0LXJlc3VsdHNgIHNwZWNpZmljYWxseSByZWplY3RlZCBgS1ZNX0JPT0szU182NGAsIGBLVk1fQk9PSzNTXzY0X0hWYCwgYW5kIGBQUENfUE9XRVJOVmAuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlIGJhc2ljIGBLVk1gIGNvbmZpZ3VyYXRpb24gaXMgYWNjZXB0ZWQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyB0aGUgYmFzZSBvZiBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjE6MjMuNjI2MTExMzE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5MTUzOTEyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjIzLjYyNjExNjQzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNDAyMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWVmZDAxOTQ1NmIyNzUyOTNmOTUyZGM0ODRkOWRmYzhmNmVmNzMwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIwOjIxOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbmluZGV4IGUzMDAzYTI0MWQ1YjAuLjIyZmVkYjBhYTM0YjQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuQEAgLTY1NjYsNiArNjU2Niw4NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXFxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcXG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxcbiBcXG4rNC4xNDUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rOkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTXFxuKzpBcmNoaXRlY3R1cmVzOiBwb3dlcnBjXFxuKzpUeXBlOiB2bSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dClcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxcbitcXG4rRXJyb3JzIGluY2x1ZGU6XFxuK1xcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yXFxuKyAgICAgICAgICAgd3JpdHRlbiB0byB1c2Vyc3BhY2VcXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXFxuKyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkXFxuKyAgICAgICAgICAgaXMgbm9uLXplcm8sIG9yIGlmIHRoZSBiYWNrZW5kIGZhaWxzIHRvIHJldHJpZXZlIG9yIG1hcFxcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xcbisgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZVxcbisgICAgICAgICAgIChuZXcgdXNlcnNwYWNlIG9uIG9sZCBrZXJuZWwpOyB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0c1xcbisgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXFxuKyAgICAgICAgICAgcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXFxuKyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcXG4rICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXFxuK3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cXG4rXFxuK1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXFxuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cXG4rS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxcbitcXG4rOjpcXG4rXFxuKyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xcbitcXHRfX3U2NFxcdHNpemU7XFx0XFx0XFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xcbitcXHRfX3U2NFxcdGZsYWdzO1xcdFxcdFxcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rICB9O1xcbitcXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xcbitgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLlxcbitUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxcbitmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LlxcbitcXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXFxuK3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nOiBpZiB1c2Vyc3BhY2UgcGFzc2VzIGEgc3RydWN0IHNtYWxsZXJcXG4rdGhhbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbiAoYGBzaXplIFxcdTAwM2U9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLFxcbit0aGUga2VybmVsIHplcm8tcGFkcyB1bmtub3duIHRyYWlsaW5nIGZpZWxkcy4gSWYgdXNlcnNwYWNlIHBhc3NlcyBhIGxhcmdlclxcbitzdHJ1Y3QgKGBgc2l6ZSBcXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXFxuK2JhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBhbmQgcmV0dXJucyBgYC1FMkJJR2BgLFxcbithbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGlzY292ZXIgdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIGFuZCByZXRyeS5cXG4rYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgICgyNCkgaXMgYSBmcm96ZW4gY29uc3RhbnQgbWFya2luZyB0aGVcXG4rc2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi5cXG4rXFxuK1RoZSBgYGNvbXBhdF9jYXBhYmlsaXRpZXNgYCBiaXQgZmllbGQgZGVzY3JpYmVzIHRoZSBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eVxcbittb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpY1xcbitwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3RcXG4rc2lnbmlmaWNhbnQgYml0KTpcXG4rXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZVxcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgIChiaXQgMykgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTEgcHJvY2Vzc29yIG1vZGVcXG4rXFxuKy4uIG5vdGU6OlxcbitcXG4rICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxcbisgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcXG4rXFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MilgYFxcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjEpYGBcXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYwKWBgXFxuK1xcbisgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFxcdTAwM2NsaW51eC9rdm0uaFxcdTAwM2VgYCByYXRoZXJcXG4rICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuXFxuK1xcbiAuLiBfa3ZtX3J1bjpcXG4gXFxuIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxcbmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcXG5AQCAtMzE5LDYgKzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcXG4gXFx0Ym9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpO1xcbiBcXHRpbnQgKCpjcmVhdGVfdm1fZGVidWdmcykoc3RydWN0IGt2bSAqa3ZtKTtcXG4gXFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XFxuK1xcdGludCAoKmdldF9jb21wYXRfY2Fwcykoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcyk7XFxuIH07XFxuIFxcbiBleHRlcm4gc3RydWN0IGt2bXBwY19vcHMgKmt2bXBwY19odl9vcHM7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XFxuIFxcdF9fdTY0XFx0YmVoYXZpb3VyX21hc2s7XFx0XFx0LyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi9cXG4gfTtcXG4gXFxuKy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xcbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XFxuK1xcdF9fdTY0XFx0c2l6ZTtcXHRcXHRcXHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXFxuK1xcdF9fdTY0XFx0ZmxhZ3M7XFx0XFx0XFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rfTtcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFxcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXFxuK1xcbisvKlxcbisgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cXG4rICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNjIpXFxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYwKVxcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcXHRcXHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXFxuIC8qXFxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5pbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXFxuQEAgLTY1MTAsNiArNjUxMCw2MSBAQCBzdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcXG4re1xcbitcXHRzd2l0Y2ggKGNwdV92ZXJzaW9uKSB7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMTpcXG4rXFx0XFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMDtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzAwOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcXG4rXFx0bG9uZyByYyA9IC1FSU5WQUw7XFxuK1xcdHUzMiBjcHVfdmVyc2lvbiA9IDA7XFxuK1xcbitcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuK1xcdFxcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XFxuK1xcdFxcdFxcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XFxuK1xcdFxcdFxcdHJjID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcXFwiY3B1XFxcIikge1xcbitcXHRcXHRcXHRcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcXFwiY3B1LXZlcnNpb25cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjcHVfdmVyc2lvbikpIHtcXG4rXFx0XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghY3B1X3ZlcnNpb24pXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZjYXBhYmlsaXRpZXMpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGhvc3RfY2Fwcy1cXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xcbiBcXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXFxuIFxcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcXG5AQCAtNjU1Miw2ICs2NjA3LDcgQEAgc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuIFxcdC5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsXFxuIFxcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcXG4gXFx0LmNyZWF0ZV92bV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnNfaHYsXFxuK1xcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuaW5kZXggMDAzMDIzOTlmYzM3Yi4uZWQwY2Q3YjgzYjYzZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuQEAgLTY5Nyw2ICs2OTcsMTMgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbisjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcXG4rXFx0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcXG4rXFx0XFx0ciA9IDA7XFxuK1xcdFxcdGlmIChodl9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcXG4rXFx0XFx0XFx0ciA9IDE7XFxuK1xcdFxcdGJyZWFrO1xcbisjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ciA9IDA7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yNDYzLDYgKzI0NzAsNzAgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0ga3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZXN2bV9vZmYoa3ZtKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4rXFx0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcXG4rXFx0XFx0dTY0IHVzaXplO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmVhZCB0aGUgc2l6ZSBmaWVsZCBmaXJzdCB0byBkcml2ZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIuXFxuK1xcdFxcdCAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIgPSAtRUZBVUxUO1xcbitcXHRcXHRpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsXFxuK1xcdFxcdCAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZFxcbitcXHRcXHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxcbitcXHRcXHQgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmICh1c2l6ZSBcXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyIGtlcm5lbC5cXG4rXFx0XFx0ICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2hcXG4rXFx0XFx0ICogb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh1c2l6ZSBcXHUwMDNlIHNpemVvZihob3N0X2NhcHMpKSB7XFxuK1xcdFxcdFxcdGhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7XFxuK1xcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRpZiAocHV0X3VzZXIoaG9zdF9jYXBzLnNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdHIgPSAtRTJCSUc7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxcbitcXHRcXHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XFxuK1xcdFxcdCAqICAgdXNpemUgXFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcXHUwMDI2aG9zdF9jYXBzLCBzaXplb2YoaG9zdF9jYXBzKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhcmdwLCB1c2l6ZSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmIChob3N0X2NhcHMuZmxhZ3MpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0ciA9IC1FTk9UVFk7XFxuK1xcdFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRyID0ga3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcyhcXHUwMDI2aG9zdF9jYXBzKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcXG4rXFx0XFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZob3N0X2NhcHMsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxcbiBcXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcXG4gXFx0X191MzIgaXJxY2hpcDtcXG5AQCAtMTM0MSw2ICsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcXG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9DT1VOVEVSX09GRlNFVCAqL1xcbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcdF9JTyhLVk1JTywgIDB4YjgpXFxuIFxcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cXG4gI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRVxcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjI0LjIzODIwNjk1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg1MzAzMjg1OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZWZkMDE5NDU2YjI3NTI5M2Y5NTJkYzQ4NGQ5ZGZjOGY2ZWY3MzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMDoyMToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggZTMwMDNhMjQxZDViMC4uMjJmZWRiMGFhMzRiNCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuKzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbis6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbitcbitFcnJvcnMgaW5jbHVkZTpcbitcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbisgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbisgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplXG4rICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHNcbisgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXG4rICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcbisgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcbit3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbitcbitUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXG4rXG4rOjpcbitcbisgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbisgIH07XG4rXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4rVGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnRcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4rXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxuK3RoYW4gdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24gKGBgc2l6ZSBcdTAwM2U9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLFxuK3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXG4rc3RydWN0IChgYHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXG4rYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsXG4rYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmQgcmV0cnkuXG4rYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgICgyNCkgaXMgYSBmcm96ZW4gY29uc3RhbnQgbWFya2luZyB0aGVcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxuK1xuK1RoZSBgYGNvbXBhdF9jYXBhYmlsaXRpZXNgYCBiaXQgZmllbGQgZGVzY3JpYmVzIHRoZSBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eVxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXG4rcHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0XG4rc2lnbmlmaWNhbnQgYml0KTpcbitcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGVcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuK1xuKy4uIG5vdGU6OlxuK1xuKyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJ3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3RcbisgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbitcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYyKWBgXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjApYGBcbitcbisgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4rICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuXG4rXG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXG5AQCAtMzE5LDYgKzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4rXHRpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpO1xuIH07XG4gXG4gZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzO1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDA3N2M1NDM3ZjUyMTkuLjkxM2E2NGI5MDFhM2QgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDI0IEBAIHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyIHtcbiBcdF9fdTY0XHRiZWhhdmlvdXJfbWFzaztcdFx0LyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi9cbiB9O1xuIFxuKy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xuK3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0X191NjRcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XHQvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovXG4rfTtcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXHQyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqL1xuK1xuKy8qXG4rICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuXG4rICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxuKyAqL1xuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYyKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjApXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLXHRcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcbitcdFx0XHRcdFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcbitcdFx0XHRcdFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExKVxuIC8qXG4gICogVmFsdWVzIGZvciBjaGFyYWN0ZXIgYW5kIGNoYXJhY3Rlcl9tYXNrLlxuICAqIFRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHZhbHVlcyB1c2VkIGJ5IEhfR0VUX0NQVV9DSEFSQUNURVJJU1RJQ1MuXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbmluZGV4IDYxZGJlZWEzMTdmM2IuLjc3NTU4ZjZlZWQ4NjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5AQCAtNjUxMCw2ICs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcbit7XG4rXHRzd2l0Y2ggKGNwdV92ZXJzaW9uKSB7XG4rXHRjYXNlIFBWUl9BUkNIXzMxX1AxMTpcbitcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFBWUl9BUkNIXzMxOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgUFZSX0FSQ0hfMzAwOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbitcdGxvbmcgcmMgPSAtRUlOVkFMO1xuK1x0dTMyIGNwdV92ZXJzaW9uID0gMDtcbitcbitcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbitcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbitcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuK1x0XHRcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XG4rXHRcdFx0cmMgPSAwO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgXCJjcHVcIikge1xuK1x0XHRcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCJjcHUtdmVyc2lvblwiLFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjcHVfdmVyc2lvbikpIHtcbitcdFx0XHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4rXHRcdFx0aWYgKCFjcHVfdmVyc2lvbilcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0aG9zdF9jYXBzLVx1MDAzZWNvbXBhdF9jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMgXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0LmdldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzX2h2LFxuIFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxuQEAgLTY1NTIsNiArNjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuK1x0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuaW5kZXggMDAzMDIzOTlmYzM3Yi4uZWQwY2Q3YjgzYjYzZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuQEAgLTY5Nyw2ICs2OTcsMTMgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4rI2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG4rXHRjYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOlxuK1x0XHRyID0gMDtcbitcdFx0aWYgKGh2X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcbitcdFx0XHRyID0gMTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMjQ2Myw2ICsyNDcwLDcwIEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlc3ZtX29mZihrdm0pO1xuIFx0XHRicmVhaztcbiBcdH1cbitcdGNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6IHtcbitcdFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XG4rXHRcdHU2NCB1c2l6ZTtcbitcbitcdFx0LypcbitcdFx0ICogUmVhZCB0aGUgc2l6ZSBmaWVsZCBmaXJzdCB0byBkcml2ZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIuXG4rXHRcdCAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC5cbitcdFx0ICovXG4rXHRcdHIgPSAtRUZBVUxUO1xuK1x0XHRpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuK1x0XHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcbitcdFx0ICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWxcbitcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbitcdFx0ICovXG4rXHRcdHIgPSAtRUlOVkFMO1xuK1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlciBrZXJuZWwuXG4rXHRcdCAqIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc28gdXNlcnNwYWNlIGtub3dzIHdoaWNoXG4rXHRcdCAqIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLCB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuXG4rXHRcdCAqL1xuK1x0XHRpZiAodXNpemUgXHUwMDNlIHNpemVvZihob3N0X2NhcHMpKSB7XG4rXHRcdFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcbitcdFx0XHRyID0gLUVGQVVMVDtcbitcdFx0XHRpZiAocHV0X3VzZXIoaG9zdF9jYXBzLnNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHIgPSAtRTJCSUc7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0LypcbitcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbitcdFx0ICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weVxuK1x0XHQgKiAgIHVzaXplIFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxuK1x0XHQgKi9cbitcdFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxuK1x0XHRcdFx0XHQgIGFyZ3AsIHVzaXplKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmIChob3N0X2NhcHMuZmxhZ3MpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSAtRU5PVFRZO1xuK1x0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMoXHUwMDI2aG9zdF9jYXBzKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdGhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7XG4rXHRcdHIgPSBjb3B5X3N0cnVjdF90b191c2VyKGFyZ3AsIHVzaXplLCBcdTAwMjZob3N0X2NhcHMsXG4rXHRcdFx0XHRcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OiB7XG4gXHRcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VhcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuKyNkZWZpbmUgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgMjUwXG4gXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcbiBcdF9fdTMyIGlycWNoaXA7XG5AQCAtMTM0MSw2ICsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcbiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovXG4gI2RlZmluZSBLVk1fQVJNX1NFVF9DT1VOVEVSX09GRlNFVCBfSU9XKEtWTUlPLCAgMHhiNSwgc3RydWN0IGt2bV9hcm1fY291bnRlcl9vZmZzZXQpXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuKyNkZWZpbmUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcdF9JTyhLVk1JTywgIDB4YjgpXG4gXG4gLyogaW9jdGwgZm9yIHZtIGZkICovXG4gI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRVx0ICBfSU9XUihLVk1JTywgIDB4ZTAsIHN0cnVjdCBrdm1fY3JlYXRlX2RldmljZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjI0LjIzODIwODQ2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzM0Nzg5NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwgZm9yIFBvd2VyUEMsIGltcGxlbWVudGVkIGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gVGhpcyBpb2N0bCwgYmFzZWQgb24gYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYCwgYWltcyB0byBleHBvc2UgaG9zdCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgZnV6eiB0aGlzPyBUaGUgY3J1Y2lhbCB0aGluZyBpcyB3aGV0aGVyIHRoaXMgaXMgcmVhY2hhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGFyY2hpdGVjdHVyZSBpcyBQb3dlclBDLiBUaGUgaW9jdGwgaXMgb25seSBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgIGlzIHN1cHBvcnRlZC4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIHRlbGxzIHVzIGl0IHJldHVybnMgMSBpZiBgaHZfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtaHZfb25fcHNlcmllcygpYC4gYGh2X2VuYWJsZWRgIGlzIEtWTSBIViwgYW5kIGBrdm1odl9vbl9wc2VyaWVzKClgIGNoZWNrcyBpZiB3ZSdyZSBvbiBhIHBzZXJpZXMgbWFjaGluZS4gTm93LCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgYnkgYSBzdGFuZGFyZCBRRU1VIGNvbmZpZyBmb3IgZnV6emluZz9cblxuU3l6a2FsbGVyIHN1cHBvcnRzIGZ1enppbmcgcHBjNjRsZSwgYW5kIGl0IHVzZXMgUUVNVS4gVGhhdCdzIGdvb2QuIFRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBRRU1VLCBieSBkZWZhdWx0LCB1c2VzIHRoZSBgcHNlcmllc2AgbWFjaGluZSB0eXBlIGZvciBwcGM2NGxlIHdoZW4gS1ZNIGlzIGVuYWJsZWQuIE9rYXksIGJ1dCBob3cgYWJvdXQgS1ZNIEhWLCBjYW4gUUVNVSBydW4gS1ZNIEhWPyBZZXMsIFBvd2VyUEMgc3VwcG9ydHMgbmVzdGVkIEtWTSwgYW5kIGV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSBLVk0gSFYsIHdlIGNhbiBmdXp6IGl0IGlmIHdlIGhhdmUgS1ZNLlxuXG5UaGUgY2F0Y2ggaXMsIHdoaWxlIHN5emthbGxlciB1c3VhbGx5IGZvY3VzZXMgb24geDg2LCBpdCAqZG9lcyogc3VwcG9ydCBvdGhlciBhcmNoaXRlY3R1cmVzIGlmIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBMZXQncyByZW1lbWJlciB0aGUgcHJvbXB0J3MgY29uZGl0aW9uOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBCdXQsIGlmIHdlJ3JlIGZ1enppbmcgKktWTSogb24gUG93ZXJQQywgZXZlbiBpbnNpZGUgUUVNVSwgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGZ1enplcyBLVk0uIEl0J3MgYSBWTSBpb2N0bCwgd2hpY2ggbWVhbnMgdGhpcyBpb2N0bCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgc2hvdWxkIGJlIGZ1enplZCBhcyBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5TbywgbGV0J3MgZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC4gSXQncyBnb2luZyB0byBiZSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AsIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLCBhbmQgdGhlIGlvY3RsIGhhbmRsZXIgd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAgdGhhdCBkZWFscyB3aXRoIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIEkndmUgY29uZmlybWVkIHRoYXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGhhbmRsZXIuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWdzLiBXZSBvYnZpb3VzbHkgbmVlZCBgQ09ORklHX0tWTWAsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gYmUgZWl0aGVyIGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgb3IgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC4gTGV0J3MgY29uZmlybSB3aXRoIGEgcXVpY2sgc2VhcmNoIGluIGBLY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjM5LjU3MzAwMjM2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg4OTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mzg9Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjYtXFx0c2VsZWN0IEtWTVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2NzpcXHRzZWxlY3QgS1ZNX0JPT0szU19QUl9QT1NTSUJMRSBpZiAhS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02OC1cXHRzZWxlY3QgUFBDXzY0U19IQVNIX01NVVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODEtXFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFxcdTAwMjZcXHUwMDI2IFBQQ19QT1dFUk5WXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgyOlxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgzLVxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTEyOT1jb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzEtXFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTMyOlxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzMtXFx0aGVscFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE0Mj1jb25maWcgS1ZNX0JPT0szU19IVl9QOF9USU1JTkdcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDQtXFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQ1OlxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcXHUwMDI2XFx1MDAyNiBERUJVR19GUyBcXHUwMDI2XFx1MDAyNiAhS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQ2LVxcdGhlbHBcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xNTc9Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXFxcIiBpZiBFWFBFUlRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU5OlxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNjAtXFx0ZGVmYXVsdCAhRVhQRVJUXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MjUxPWNvbmZpZyBLVk1fWElWRVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1My1cXHRkZWZhdWx0IHlcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjU0OlxcdGRlcGVuZHMgb24gS1ZNX1hJQ1MgXFx1MDAyNlxcdTAwMjYgUFBDX1hJVkVfTkFUSVZFIFxcdTAwMjZcXHUwMDI2IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMTozOS42NDU4OTY4ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI3MDUzNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugc2VsZWN0aW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBhdXRvbWF0aWNhbGx5IGltcGxpZXMgdGhhdCBgS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgYWxzbyBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIGxvZ2ljIHN0YW5kcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gb2YgYEtWTV9CT09LM1NfNjRfSFZgIGl0c2VsZi4gVGhlIHRleHQgaW5kaWNhdGVzIHRoYXQgYEtWTV9CT09LM1NfNjRfSFZgIGhhcyBhIGRlcGVuZGVuY3ksIHNvIGxldCdzIGRpZyBpbnRvIHRoYXQuIEFjY29yZGluZyB0byB0aGUgdGV4dCwgaXQgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYCBiZWluZyBzZXQuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgbGV0J3MgcXVpY2tseSBjaGVjayB3aGF0IGBLVk1fQk9PSzNTXzY0YCBpcyBhbGwgYWJvdXQuIFVuZGVyc3RhbmRpbmcgaXRzIGF0dHJpYnV0ZXMgd2lsbCBjbGFyaWZ5IHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjQ2LjA3Mjk1MzYxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgwNTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU182NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTI5PWNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NDU9Y29uZmlnIEtWTV9CT09LM1NfMzJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMTo0Ni4xMzQ3NjU0NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2NTY2MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gQm9vazNTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEtWTSBjb25maWd1cmF0aW9uczogYEtWTV9CT09LM1NfNjRgIGFuZCBgS1ZNX0JPT0szU182NF9IVmAuIEltbWVkaWF0ZWx5LCBJIG5vdGljZSB0aGUgZGlmZmVyZW5jZSwgcGFydGljdWxhcmx5IHRoZSBgX0hWYCBzdWZmaXguIExldCdzIHNlZS4uLiBBaCwgcmlnaHQsIHRoZSBzZWNvbmQgb25lLCBgS1ZNX0JPT0szU182NF9IVmAsIHNlZW1zIHRvIGJlIGRlcGVuZGVudCBvbiBgUFBDX1BPV0VSTlZgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCBsaWtlbHkgaW1wbGllcyBhIGh5cGVydmlzb3Itc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvciBmZWF0dXJlIHNldC4gQmV0dGVyIGRvdWJsZS1jaGVjayBgUFBDX1BPV0VSTlZgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IHRoYXQncyBicmluZ2luZyB0byB0aGUgdGFibGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjQ5LjgxMTMzNDIxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU5NjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFBDX1BPV0VSTlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gUFBDNjQgXFx1MDAyNlxcdTAwMjYgUFBDX0JPT0szU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMTo0OS44NjI5MzcxNDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk5NzcyNzk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQb3dlclBDIENvbXBhdGliaWxpdHkgRmVhdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBQb3dlclBDIEtWTSBwbGF0Zm9ybSwgc3BlY2lmaWNhbGx5IGBQUENfUE9XRVJOVmAuIFRoZSBjb25maWd1cmF0aW9ucyBuZWVkZWQgc2VlbSB0byBiZSBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBJIHF1aWNrbHkgY29uZmlybSB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgY29uZmlybWVkIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpcyBpbmRlZWQgcHJlc2VudCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoZXJlZm9yZSwgYEtWTV9CT09LM1NfNjRfSFZgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBrdm1fYXJjaF92bV9pb2N0bGAgYmVjYXVzZSBpdCdzIHRoZSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBoYW5kbGVzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoYXQgZnVuY3Rpb24gY2FsbHMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCB3aGljaCBpcyBhc3NpZ25lZCB0byBga3ZtX29wc19odi5nZXRfY29tcGF0X2NhcHNgLCBzbyBpdCBzZWVtcyBsaWtlIGEgdmFsaWQgZW50cnkgcG9pbnQuXG5cbkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIHdoaWNoIGZ1bmN0aW9uIHRvIGNob29zZS4gSSBuZWVkIHRvIGJhbGFuY2UgY2xhcml0eSB3aXRoIGFkaGVyaW5nIHRvIHRoZSBcIm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50XCIgcnVsZS4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCBhcmUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgd2l0aGluIGBib29rM3NfaHYuY2AuIFRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IGBrdm1fYXJjaF92bV9pb2N0bGAsIGFuZCB3aGlsZSBpdCdzIGEgZ2VuZXJhbCBlbnRyeSBwb2ludCwgaXQncyBhbHNvIHdoZXJlIHRoZSBwYXRjaCdzIHNwZWNpZmljIGNhc2UgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC5cblxuSSBjaGVja2VkIGFnYWluLCBhbmQgeWVzLCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgIGFyZSBkZWZpbml0ZWx5IHN0YXRpYywgYXMgdGhlIHBhdGNoIGNvbmZpcm1zIHRoaXMuIFNpbmNlIHRoZSBwcm9tcHQgZmF2b3JzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucywgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzZWVtcyB0byBiZSB0aGUgYmV0dGVyIGNob2ljZSBzaW5jZSBpdCBpcyBub3Qgc3RhdGljLiBPbiBzZWNvbmQgbG9vaywgSSBzaG91bGQgaW5jbHVkZSBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgd2hpY2ggaXMgYWxzbyBtb2RpZmllZCBhbmQgbm9uLXN0YXRpYy4gVGhlcmVmb3JlIEkgd2lsbCBnbyB3aXRoIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgbWFrZSBzdXJlIG15IHJlYXNvbmluZyBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMjowMy44NjA2Njk2MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODMzNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIyOTQ9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NwdV9jaGFyKHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyICpjcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIzNjItXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjM2MzppbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIyOjAzLjkzNDUwOTMwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyNjY4MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBLVk0gaW9jdGwgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ20gY29uZmlybWluZyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCwgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJdCBtZWFucyBpdCdzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSAqb3V0c2lkZSogdGhlIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLCB3aGljaCBpcyBhIGtleSBkZXNpZ24gY2hvaWNlIGluIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gaGFuZGxpbmcgVk0tc3BlY2lmaWMgaW9jdGxzLlxuXG5BbmQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLi4uIFllcywgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGlzIGFsc28gbm9uLXN0YXRpYywganVzdCBhcyBJIHN1c3BlY3RlZC4gVGhhdCdzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZS4gSXQncyB1c2VkIGZvciB2YWxpZGF0aW5nIGFuZCBtYW5hZ2luZyBLVk0gZXh0ZW5zaW9ucywgc28gaXQgcmVxdWlyZXMgYnJvYWRlciB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZnJvbSB0aGUgdXNlcnNwYWNlIHNpZGUsIHRvIGRldGVybWluZSB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIHRvIGEgc3BlY2lmaWMgVk0uIFRoaXMgYXJjaGl0ZWN0dXJlIG9mIHRoZSBpb2N0bCBmdW5jdGlvbnMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlc2UgZGVzaWduIGNob2ljZXMgYXJlIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQgdG8gc2VlIGluIGEgd2VsbC1zdHJ1Y3R1cmVkIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMjowOC40MDcxODIwOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTU2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NDc4PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy01MDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6NTAyOmludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNTAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjI6MDguNDcyNzQ0NzUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODY2MjQ1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUG93ZXJQQyBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0YXNrZWQgd2l0aCBvdXRsaW5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIHRoaXMgUG93ZXJQQyBLVk0gcGF0Y2guIExldCdzIGJyZWFrIGRvd24gbXkgdGhvdWdodCBwcm9jZXNzLlxuXG5GaXJzdCwgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYC4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLlxuXG5SaWdodCwgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBXYWl0LCBhIHF1aWNrIGNoZWNrIHJlbWluZHMgbWUgdGhhdCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gR29vZCwgZ290IHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBlbmFibGluZyB0aGUgY29ycmVjdCBjb25maWdzIHdoZW4gSSBzZXQgdGhpcyB1cC5cblxuVGhlcmUncyBhbHNvIHRoYXQgYCNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKWAgaW4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBBaCwgcmlnaHQsIHRoYXQncyByZWxhdGVkIHRvIGBLVk1fQk9PSzNTXzY0X0hWYCwgc2luY2UgYEtWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHNlbGVjdGVkIGJ5IGl0LiBTbywgZW5hYmxpbmcgYEtWTV9CT09LM1NfNjRfSFZgIGVmZmVjdGl2ZWx5IGNvdmVycyB0aGF0IGNvbmRpdGlvbmFsIGNoZWNrLiBFeGNlbGxlbnQuIEknbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCdzIGV4cGxpY2l0bHkgc2V0LlxuXG5TaW5jZSBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHRoZSBvbmx5IG9uZSB1c2VkLCBJIGNhbiBmZWVsIGNvbmZpZGVudCBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0aGUgbW9zdCByZWxldmFudC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcGF0Y2gncyBwdXJwb3NlLiBJdCdzIGludHJvZHVjaW5nIGEgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwgZm9yIFBvd2VyUEMgdG8gcXVlcnkgQ1BVIGNvbXBhdGliaWxpdHkuIFRoaXMgbWVhbnMgaXQncyBtb2RpZnlpbmcgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZGluZyBhIG5ldyBjYXBhYmlsaXR5IGNoZWNrLiBUaGlzIGlzIHVzZXItc3BhY2UgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBBUEksIHNvIGZ1enppbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJlIHByb3BlciBoYW5kbGluZyBvZiB1c2VyIGlucHV0LCBzcGVjaWZpY2FsbHkgc2l6ZXMgYW5kIGZsYWdzIHBhc3NlZCB0byB0aGlzIG5ldyBpb2N0bC5cblxuT2theSwgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gSSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBJIGhhZCBhIG1vbWVudCBvZiBkb3VidCBhYm91dCBga3ZtX2FyY2hfdm1faW9jdGxgIGJlaW5nIHRvbyBnZW5lcmljLCBidXQgc2luY2UgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgKmFsbCogUG93ZXJQQyBWTSBpb2N0bHMgYW5kIHRoZSBuZXcgaW9jdGwgaGFuZGxpbmcgaXMgZGlyZWN0bHkgaW50ZWdyYXRlZCB3aXRoaW4gaXQgKHRoZSBgY2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzpgIGlzIGluc2lkZSB0aGUgc3dpdGNoIGluIGBrdm1fYXJjaF92bV9pb2N0bGApLCBJJ20gY29uZmlkZW50IHRoYXQgaXMgdGhlIHJpZ2h0IGNob2ljZS5cblxuVGhlIGFjdHVhbCBjYXBhYmlsaXR5IG1hcHBpbmcgbG9naWMgaXMgd2l0aGluIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIHRoZSBndWlkYW5jZSwgSSBjYW4ndCBsaXN0IGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBpZiB0aGVyZSdzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2VlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpYC4gU2luY2UgaXQgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCB3b24ndCBiZSBpbmxpbmVkIGFuZCBpdCB3aWxsIGhhdmUgYSBzcGVjaWZpYyBzeW1ib2wgYWRkcmVzcy4gU3RpbGwsIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQuXG5cbklzIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbj8gTm8uXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gd3JpdGUgdXAgdGhlIHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxMiwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjI6MjguMzM4OTk1NzIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDYyMTU2LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOViIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9CT09LM1NfNjRcIixcbiAgICBcIktWTV9CT09LM1NfNjRfSFZcIixcbiAgICBcIlBQQ19QT1dFUk5WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQsIEtWTV9CT09LM1NfNjRfSFYsIFBQQ19QT1dFUk5WXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIyOjI4LjQ3MzQ3NTEzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODU0NDY4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maWd1cmF0aW9uIEZpbGVzOiBBIFF1aWNrIERlYnVnKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGFyZSB5b3UgdGVsbGluZyBtZSB0aGVzZSBjb25maWd1cmF0aW9ucyAqYXJlbid0KiBzaG93aW5nIHVwPyBUaGF0J3MgdW51c3VhbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSB2YXJpYWJsZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBwcm9wZXJseS4gSXMgdGhlcmUgYSBzeW50YXggZXJyb3IgSSBtaXNzZWQ/IFBlcmhhcHMgYSBjb25kaXRpb25hbCB0aGF0J3MgdW5pbnRlbnRpb25hbGx5IHByZXZlbnRpbmcgdGhlIG9wdGlvbnMgZnJvbSBiZWluZyBleHBvc2VkPyBUaW1lIGZvciBhIGRlZXAgZGl2ZSBiYWNrIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyDigJMgbGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG92ZXJsb29rIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUgYnVpbGQgc3lzdGVtLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc2lsbHkgbGlrZSBhIG1pc3NpbmcgYHNvdXJjZWAgZGlyZWN0aXZlLCBhbiBpbmNvcnJlY3QgYGRlcGVuZHMgb25gLCBvciBwZXJoYXBzIGEgbWlzcGxhY2VkIGNvbW1lbnQuIEkgbmVlZCB0byBleGhhdXN0IGFsbCB0aGUgb2J2aW91cyBjdWxwcml0cyBmaXJzdCwgYmVmb3JlIGNvbnNpZGVyaW5nIGFueXRoaW5nIG1vcmUgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjI6MzcuMzI3OTQ2MzAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk4MTMwOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mjk9Y29uZmlnIEtWTV9CT09LM1NfMzJfSEFORExFUlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz00NT1jb25maWcgS1ZNX0JPT0szU18zMlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIyOjM5LjcyNjA4MzkwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjgzNjM3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBUb29sIFJlc3VsdHMqKlxuXG5Pa2F5LCBzbyB0aGUgdG9vbCBpcyBzYXlpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJ3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0J3MgYSBiaXQgcGVycGxleGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIG1heWJlIGl0J3MgY2hlY2tpbmcgdGhlIHg4Nl82NCB0cmVlIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJ3QgYWx3YXlzIHJlcHJlc2VudGF0aXZlLiBJIGtub3cgdGhlIHRvb2wgKnNob3VsZCogYmUgY2hlY2tpbmcgdGhlIGVudGlyZSBrZXJuZWwgdHJlZSwgYnV0IHBlcmhhcHMgaXRzIGNvbmZpZ3VyYXRpb24gY2hlY2tzIGFyZSBsaW1pdGVkIHRvIHg4NiBjb25maWd1cmF0aW9ucywgb3IgYXJlIHNlbnNpdGl2ZSB0byBhcmNoaXRlY3R1cmU/XG5cbldhaXQsIGhvbGQgb24sIGBzZXQtcmVzdWx0c2AgYWN0dWFsbHkgaGFzIGl0cyBvd24gaW50ZXJuYWwgbG9naWMgZm9yIHZhbGlkYXRpbmcgY29uZmlncyBhZ2FpbnN0IHRoZSBrZXJuZWwgdHJlZS4gSWYgaXQncyBzYXlpbmcgc29tZXRoaW5nICpkb2Vzbid0KiBleGlzdCwgdGhlbiBpdCBwcm9iYWJseSBtZWFucyBpdCdzIGdlbnVpbmVseSB1bmF2YWlsYWJsZSBpbiB0aGUgdHJlZSwgYXQgbGVhc3QgZm9yIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSwgeDg2XzY0LlxuXG5TaW5jZSB0aGlzIHBhdGNoIGlzIGZvciBQb3dlclBDLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNsdWRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBhcmNoLXNwZWNpZmljLCBhbmQgdGhhdCB0aGUgdG9vbCBkb2Vzbid0IGFjY2VwdC4gSWYgdGhlIHRvb2wgaXMgcmVqZWN0aW5nIGNlcnRhaW4gY29uZmlncywgbWF5YmUgSSBzaG91bGQgb21pdCB0aGVtIGFsdG9nZXRoZXIsIG9yIG9ubHkgaW5jbHVkZSBjb25maWdzIHRoYXQgYXJlIHZhbGlkIGFjcm9zcyBhcmNoaXRlY3R1cmVzP1xuXG5SaWdodCwgYHNldC1yZXN1bHRzYCBzcGVjaWZpY2FsbHkgcmVqZWN0ZWQgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRoZSBiYXNpYyBgS1ZNYCBjb25maWd1cmF0aW9uIGlzIGFjY2VwdGVkLiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBiYXNlIG9mIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTE0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMjo0OS40MDk3MjQ2NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE3NjQ2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcmt2z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 20:19:46 +0000 UTC FinishedAt: 2026-08-06 20:22:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "7fe6ec21-a191-4629-9759-add5e40fe457" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_vm_ioctl_check_extension" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWVmZDAxOTQ1NmIyNzUyOTNmOTUyZGM0ODRkOWRmYzhmNmVmNzMwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMjA6MjE6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5pbmRleCBlMzAwM2EyNDFkNWIwLi4yMmZlZGIwYWEzNGI0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC02NTY2LDYgJiM0Mzs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuJiM0Mzs0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0Mzs6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcbiYjNDM7OlR5cGU6IHZtIGlvY3RsXG4mIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxuJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXG4mIzQzO1xuJiM0MztFcnJvcnMgaW5jbHVkZTpcbiYjNDM7XG4mIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbiYjNDM7ICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxuJiM0MzsgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW5cbiYjNDM7ICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbiYjNDM7ICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXG4mIzQzOyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzXG4mIzQzOyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZVxuJiM0MzsgICAgICAgICAgIChuZXcgdXNlcnNwYWNlIG9uIG9sZCBrZXJuZWwpOyB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0c1xuJiM0MzsgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXG4mIzQzOyAgICAgICAgICAgcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXG4mIzQzOyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXG4mIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbiYjNDM7ICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcbiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXG4mIzQzO3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxuJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbiYjNDM7XG4mIzQzO1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXG4mIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbiYjNDM7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxuJiM0MztcbiYjNDM7OjpcbiYjNDM7XG4mIzQzOyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xuJiM0MztcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbiYjNDM7XHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0MzsgIH07XG4mIzQzO1xuJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXG4mIzQzO2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4mIzQzO1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50XG4mIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXG4mIzQzO2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4mIzQzO1xuJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcbiYjNDM7dG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxuJiM0Mzt0aGFuIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIChgYHNpemUgXHUwMDNlPSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgKSxcbiYjNDM7dGhlIGtlcm5lbCB6ZXJvLXBhZHMgdW5rbm93biB0cmFpbGluZyBmaWVsZHMuIElmIHVzZXJzcGFjZSBwYXNzZXMgYSBsYXJnZXJcbiYjNDM7c3RydWN0IChgYHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXG4mIzQzO2JhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBhbmQgcmV0dXJucyBgYC1FMkJJR2BgLFxuJiM0MzthbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGlzY292ZXIgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3Qgc2l6ZSBhbmQgcmV0cnkuXG4mIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlXG4mIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uXG4mIzQzO1xuJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHlcbiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWNcbiYjNDM7cHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MztzaWduaWZpY2FudCBiaXQpOlxuJiM0MztcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcbiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuJiM0MztcbiYjNDM7Li4gbm90ZTo6XG4mIzQzO1xuJiM0MzsgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxuJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbiYjNDM7XG4mIzQzOyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjIpYGBcbiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYwKWBgXG4mIzQzO1xuJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4mIzQzOyAgIHRoYW4gaGFyZGNvZGluZyBiaXQgcG9zaXRpb25zLlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxuaW5kZXggMDk1M2YyZGFhNDY2MC4uMTY5ZWE2YTdmYmFkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiAmIzQzOzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4mIzQzO1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIge1xuIFx0X191NjRcdGJlaGF2aW91cl9tYXNrO1x0XHQvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqL1xuIH07XG4gXG4mIzQzOy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xuJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4mIzQzO1x0X191NjRcdHNpemU7XHRcdFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xuJiM0MztcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuJiM0MztcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuJiM0Mzt9O1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXHQyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuXG4mIzQzOyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYyKVxuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MClcbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLXHRcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXG4gLypcbiAgKiBWYWx1ZXMgZm9yIGNoYXJhY3RlciBhbmQgY2hhcmFjdGVyX21hc2suXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYi4uNzc1NThmNmVlZDg2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuJiM0MztcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzE6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbiYjNDM7XHRsb25nIHJjID0gLUVJTlZBTDtcbiYjNDM7XHR1MzIgY3B1X3ZlcnNpb24gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG4mIzQzO1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuJiM0MztcdFx0XHRjYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzO1xuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFwmIzM0O2NwdVwmIzM0Oykge1xuJiM0MztcdFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwmIzM0O2NwdS12ZXJzaW9uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3B1X3ZlcnNpb24pKSB7XG4mIzQzO1x0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFjcHVfdmVyc2lvbilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuJiM0MztcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2IuLmVkMGNkN2I4M2I2M2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC02OTcsNiAmIzQzOzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcbiYjNDM7XHRcdHIgPSAwO1xuJiM0MztcdFx0aWYgKGh2X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcbiYjNDM7XHRcdFx0ciA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3MCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZXN2bV9vZmYoa3ZtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuJiM0MztcdFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XG4mIzQzO1x0XHR1NjQgdXNpemU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLlxuJiM0MztcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuJiM0MztcdFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXG4mIzQzO1x0XHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxuJiM0MztcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIga2VybmVsLlxuJiM0MztcdFx0ICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2hcbiYjNDM7XHRcdCAqIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLCB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh1c2l6ZSBcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcykpIHtcbiYjNDM7XHRcdFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcbiYjNDM7XHRcdFx0ciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGlmIChwdXRfdXNlcihob3N0X2NhcHMuc2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRyID0gLUUyQklHO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbiYjNDM7XHRcdCAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHlcbiYjNDM7XHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoXHUwMDI2aG9zdF9jYXBzLCBzaXplb2YoaG9zdF9jYXBzKSxcbiYjNDM7XHRcdFx0XHRcdCAgYXJncCwgdXNpemUpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cbiYjNDM7XHRcdHIgPSAtRUlOVkFMO1xuJiM0MztcdFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFx0ciA9IC1FTk9UVFk7XG4mIzQzO1x0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMoXHUwMDI2aG9zdF9jYXBzKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xuJiM0MztcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbiYjNDM7XHRcdFx0XHRcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGRlZmF1bHQ6IHtcbiBcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWFyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlLi43MGUzNmU2YTBhZDRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbkBAIC05OTcsNiAmIzQzOzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuJiM0MzsjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNDEsNiAmIzQzOzEzNDIsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfQ09VTlRFUl9PRkZTRVQgKi9cbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcbiAjZGVmaW5lIEtWTV9BUk1fR0VUX1JFR19XUklUQUJMRV9NQVNLUyBfSU9SKEtWTUlPLCAgMHhiNiwgc3RydWN0IHJlZ19tYXNrX3JhbmdlKVxuJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXHRfSU8oS1ZNSU8sICAweGI4KVxuIFxuIC8qIGlvY3RsIGZvciB2bSBmZCAqL1xuICNkZWZpbmUgS1ZNX0NSRUFURV9ERVZJQ0VcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWVmZDAxOTQ1NmIyNzUyOTNmOTUyZGM0ODRkOWRmYzhmNmVmNzMwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMjA6MjE6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKaW5kZXggZTMwMDNhMjQxZDViMC4uMjJmZWRiMGFhMzRiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdApAQCAtNjU2Niw2ICYjNDM7NjU2Niw4NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFCiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5CiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuCiAKJiM0Mzs0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHBvd2VycGMKJiM0Mzs6VHlwZTogdm0gaW9jdGwKJiM0Mzs6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCiYjNDM7CiYjNDM7RXJyb3JzIGluY2x1ZGU6CiYjNDM7CiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yCiYjNDM7ICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZQomIzQzOyAgRUlOVkFMICAgaWYgdGhlIGBgc2l6ZWBgIGZpZWxkIGlzIHNtYWxsZXIgdGhhbgomIzQzOyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkCiYjNDM7ICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwCiYjNDM7ICAgICAgICAgICBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMKJiM0MzsgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUKJiM0MzsgICAgICAgICAgIChuZXcgdXNlcnNwYWNlIG9uIG9sZCBrZXJuZWwpOyB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0cwomIzQzOyAgICAgICAgICAgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW4KJiM0MzsgICAgICAgICAgIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZQomIzQzOyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgCiYjNDM7ICAgICAgICAgICBvcGVyYXRpb24gKGUuZy4sIG9uIG5vbi1IViBLVk0gaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZQomIzQzOyAgICAgICAgICAgcmVxdWlyZWQgS1ZNIG9wZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUpCiYjNDM7ICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztJQk0gUE9XRVIgc3lzdGVtIHNlcnZlci1iYXNlZCBwcm9jZXNzb3JzIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IG1vZGUgZmVhdHVyZQomIzQzO3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllcgomIzQzO2dlbmVyYXRpb25zIHN1Y2ggYXMgKE4tMSkgYW5kIChOLTIpLgomIzQzOwomIzQzO1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzCiYjNDM7c3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvbgomIzQzO0tWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy4KJiM0MzsKJiM0Mzs6OgomIzQzOwomIzQzOyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgewomIzQzOwlfX3U2NAlzaXplOwkJCS8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KJiM0MzsJX191NjQJZmxhZ3M7CQkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqLwomIzQzOwlfX3U2NAljb21wYXRfY2FwYWJpbGl0aWVzOwkvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovCiYjNDM7ICB9OwomIzQzOwomIzQzO0JlZm9yZSBjYWxsaW5nIHRoaXMgaW9jdGwsIHVzZXJzcGFjZSBtdXN0IHNldCB0aGUgYGBzaXplYGAgZmllbGQgdG8KJiM0MztgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLgomIzQzO1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50CiYjNDM7dW5pbml0aWFsaXplZCBzdGFjayB2YWx1ZXMgZnJvbSBiZWluZyBzaWxlbnRseSBhY2NlcHRlZCwga2VlcGluZyB0aGUKJiM0MztmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LgomIzQzOwomIzQzO1RoZSBpb2N0bCB1c2VzIGBgY29weV9zdHJ1Y3RfZnJvbV91c2VyKClgYCBhbmQgYGBjb3B5X3N0cnVjdF90b191c2VyKClgYAomIzQzO3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nOiBpZiB1c2Vyc3BhY2UgcGFzc2VzIGEgc3RydWN0IHNtYWxsZXIKJiM0Mzt0aGFuIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIChgYHNpemUgJmd0Oz0gS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCksCiYjNDM7dGhlIGtlcm5lbCB6ZXJvLXBhZHMgdW5rbm93biB0cmFpbGluZyBmaWVsZHMuIElmIHVzZXJzcGFjZSBwYXNzZXMgYSBsYXJnZXIKJiM0MztzdHJ1Y3QgKGBgc2l6ZSAmZ3Q7IHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzCiYjNDM7YmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsCiYjNDM7YWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgYW5kIHJldHJ5LgomIzQzO2BgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCAoMjQpIGlzIGEgZnJvemVuIGNvbnN0YW50IG1hcmtpbmcgdGhlCiYjNDM7c2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi4KJiM0MzsKJiM0MztUaGUgYGBjb21wYXRfY2FwYWJpbGl0aWVzYGAgYml0IGZpZWxkIGRlc2NyaWJlcyB0aGUgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkKJiM0Mzttb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpYwomIzQzO3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3QKJiM0MztzaWduaWZpY2FudCBiaXQpOgomIzQzOwomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZQomIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCAoYml0IDMpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjExIHByb2Nlc3NvciBtb2RlCiYjNDM7CiYjNDM7Li4gbm90ZTo6CiYjNDM7CiYjNDM7ICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3QKJiM0MzsgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczoKJiM0MzsKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgJmx0OyZsdDsgNjIpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjEpYGAKJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgJmx0OyZsdDsgNjApYGAKJiM0MzsKJiM0MzsgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYCZsdDtsaW51eC9rdm0uaCZndDtgYCByYXRoZXIKJiM0MzsgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy4KJiM0MzsKIC4uIF9rdm1fcnVuOgogCiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtMzE5LDYgJiM0MzszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7CiAJYm9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpOwogCWludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pOwogCWludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpOwomIzQzOwlpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaApAQCAtNDM3LDYgJiM0Mzs0MzcsMjQgQEAgc3RydWN0IGt2bV9wcGNfY3B1X2NoYXIgewogCV9fdTY0CWJlaGF2aW91cl9tYXNrOwkJLyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi8KIH07CiAKJiM0MzsvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi8KJiM0MztzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7CiYjNDM7CV9fdTY0CXNpemU7CQkJLyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqLwomIzQzOwlfX3U2NAlmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwlfX3U2NAljb21wYXRfY2FwYWJpbGl0aWVzOwkvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovCiYjNDM7fTsKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwCTI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy4KJiM0MzsgKiBUaGVzZSBiaXRzIGluZGljYXRlIHdoaWNoIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5IG1vZGVzIGFyZSBzdXBwb3J0ZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5CSgxVUxMICZsdDsmbHQ7IDYyKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAJKDFVTEwgJmx0OyZsdDsgNjEpCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMQkoMVVMTCAmbHQ7Jmx0OyA2MCkKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0sJCShLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXAomIzQzOwkJCQkJIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExKQogLyoKICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay4KICAqIFRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHZhbHVlcyB1c2VkIGJ5IEhfR0VUX0NQVV9DSEFSQUNURVJJU1RJQ1MuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwppbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKQEAgLTY1MTAsNiAmIzQzOzY1MTAsNjEgQEAgc3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKHUzMiBjcHVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjcHVfdmVyc2lvbikgewomIzQzOwljYXNlIFBWUl9BUkNIXzMxX1AxMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTE7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMToKJiM0MzsJCSpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMDA6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDsKJiM0MzsJbG9uZyByYyA9IC1FSU5WQUw7CiYjNDM7CXUzMiBjcHVfdmVyc2lvbiA9IDA7CiYjNDM7CiYjNDM7CWlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHsKJiM0MzsJCWlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7CiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKJiM0MzsJCQljYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzOwomIzQzOwkJCXJjID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAmIzM0O2NwdSYjMzQ7KSB7CiYjNDM7CQkJCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7Y3B1LXZlcnNpb24mIzM0OywKJiM0MzsJCQkJCQkJICAmYW1wO2NwdV92ZXJzaW9uKSkgewomIzQzOwkJCQkJb2Zfbm9kZV9wdXQobnApOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFjcHVfdmVyc2lvbikKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkJCSAgICAmYW1wO2NhcGFiaWxpdGllcyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaG9zdF9jYXBzLSZndDtjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzICZhbXA7IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsCiAJLnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LApAQCAtNjU1Miw2ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0gewogCS5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsCiAJLmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LAogCS5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LAomIzQzOwkuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcywKIH07CiAKIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggMDAzMDIzOTlmYzM3Yi4uZWQwY2Q3YjgzYjYzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTY5Nyw2ICYjNDM7Njk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJCQl9CiAJCX0KIAkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpCiYjNDM7CWNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6CiYjNDM7CQlyID0gMDsKJiM0MzsJCWlmIChodl9lbmFibGVkICZhbXA7JmFtcDsga3ZtaHZfb25fcHNlcmllcygpKQomIzQzOwkJCXIgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovCiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMjQ2Myw2ICYjNDM7MjQ3MCw3MCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7c3ZtX29mZihrdm0pOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6IHsKJiM0MzsJCXN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9OwomIzQzOwkJdTY0IHVzaXplOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQgdGhlIHNpemUgZmllbGQgZmlyc3QgdG8gZHJpdmUgY29weV9zdHJ1Y3RfZnJvbV91c2VyLgomIzQzOwkJICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LgomIzQzOwkJICovCiYjNDM7CQlyID0gLUVGQVVMVDsKJiM0MzsJCWlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWwKJiM0MzsJCSAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZAomIzQzOwkJICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWwKJiM0MzsJCSAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKHVzaXplICZsdDsgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIga2VybmVsLgomIzQzOwkJICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2gKJiM0MzsJCSAqIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLCB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1c2l6ZSAmZ3Q7IHNpemVvZihob3N0X2NhcHMpKSB7CiYjNDM7CQkJaG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTsKJiM0MzsJCQlyID0gLUVGQVVMVDsKJiM0MzsJCQlpZiAocHV0X3VzZXIoaG9zdF9jYXBzLnNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSkKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJciA9IC1FMkJJRzsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OgomIzQzOwkJICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weQomIzQzOwkJICogICB1c2l6ZSAmbHQ7ICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpCiYjNDM7CQkgKi8KJiM0MzsJCXIgPSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoJmFtcDtob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLAomIzQzOwkJCQkJICBhcmdwLCB1c2l6ZSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCS8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi8KJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKGhvc3RfY2Fwcy5mbGFncykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSAtRU5PVFRZOwomIzQzOwkJaWYgKCFrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpOwomIzQzOwkJciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsICZhbXA7aG9zdF9jYXBzLAomIzQzOwkJCQkJc2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAlkZWZhdWx0OiB7CiAJCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKIAkJciA9IGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDthcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDQxOTAxMTA5N2ZhOGUuLjcwZTM2ZTZhMGFkNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTAKIAogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKIAlfX3UzMiBpcnFjaGlwOwpAQCAtMTM0MSw2ICYjNDM7MTM0Miw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7CiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovCiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldCkKICNkZWZpbmUgS1ZNX0FSTV9HRVRfUkVHX1dSSVRBQkxFX01BU0tTIF9JT1IoS1ZNSU8sICAweGI2LCBzdHJ1Y3QgcmVnX21hc2tfcmFuZ2UpCiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCV9JTyhLVk1JTywgIDB4YjgpCiAKIC8qIGlvY3RsIGZvciB2bSBmZCAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRQkgIF9JT1dSKEtWTUlPLCAgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogODI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsIGZvciBQb3dlclBDLCBpbXBsZW1lbnRlZCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgIGFuZCBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoaXMgaW9jdGwsIGJhc2VkIG9uIGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2AsIGFpbXMgdG8gZXhwb3NlIGhvc3QgcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5IGZ1enogdGhpcz8gVGhlIGNydWNpYWwgdGhpbmcgaXMgd2hldGhlciB0aGlzIGlzIHJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGFyY2hpdGVjdHVyZSBpcyBQb3dlclBDLiBUaGUgaW9jdGwgaXMgb25seSBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgIGlzIHN1cHBvcnRlZC4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIHRlbGxzIHVzIGl0IHJldHVybnMgMSBpZiBgaHZfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bWh2X29uX3BzZXJpZXMoKWAuIGBodl9lbmFibGVkYCBpcyBLVk0gSFYsIGFuZCBga3ZtaHZfb25fcHNlcmllcygpYCBjaGVja3MgaWYgd2UmIzM5O3JlIG9uIGEgcHNlcmllcyBtYWNoaW5lLiBOb3csIGNhbiB0aGlzIGJlIHRyaWdnZXJlZCBieSBhIHN0YW5kYXJkIFFFTVUgY29uZmlnIGZvciBmdXp6aW5nPwoKU3l6a2FsbGVyIHN1cHBvcnRzIGZ1enppbmcgcHBjNjRsZSwgYW5kIGl0IHVzZXMgUUVNVS4gVGhhdCYjMzk7cyBnb29kLiBUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgUUVNVSwgYnkgZGVmYXVsdCwgdXNlcyB0aGUgYHBzZXJpZXNgIG1hY2hpbmUgdHlwZSBmb3IgcHBjNjRsZSB3aGVuIEtWTSBpcyBlbmFibGVkLiBPa2F5LCBidXQgaG93IGFib3V0IEtWTSBIViwgY2FuIFFFTVUgcnVuIEtWTSBIVj8gWWVzLCBQb3dlclBDIHN1cHBvcnRzIG5lc3RlZCBLVk0sIGFuZCBldmVuIGlmIHdlIGRvbiYjMzk7dCBoYXZlIEtWTSBIViwgd2UgY2FuIGZ1enogaXQgaWYgd2UgaGF2ZSBLVk0uCgpUaGUgY2F0Y2ggaXMsIHdoaWxlIHN5emthbGxlciB1c3VhbGx5IGZvY3VzZXMgb24geDg2LCBpdCAqZG9lcyogc3VwcG9ydCBvdGhlciBhcmNoaXRlY3R1cmVzIGlmIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBMZXQmIzM5O3MgcmVtZW1iZXIgdGhlIHByb21wdCYjMzk7cyBjb25kaXRpb246ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIEJ1dCwgaWYgd2UmIzM5O3JlIGZ1enppbmcgKktWTSogb24gUG93ZXJQQywgZXZlbiBpbnNpZGUgUUVNVSwgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGZ1enplcyBLVk0uIEl0JiMzOTtzIGEgVk0gaW9jdGwsIHdoaWNoIG1lYW5zIHRoaXMgaW9jdGwsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AsIHNob3VsZCBiZSBmdXp6ZWQgYXMgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClNvLCBsZXQmIzM5O3MgZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCwgYW5kIHRoZSBpb2N0bCBoYW5kbGVyIHdpdGhpbiBga3ZtX2FyY2hfdm1faW9jdGxgIHRoYXQgZGVhbHMgd2l0aCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGluZGVlZCB0aGUgcmlnaHQgaGFuZGxlci4KCkZpbmFsbHksIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWdzLiBXZSBvYnZpb3VzbHkgbmVlZCBgQ09ORklHX0tWTWAsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGVpdGhlciBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIG9yIGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAuIExldCYjMzk7cyBjb25maXJtIHdpdGggYSBxdWljayBzZWFyY2ggaW4gYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9CT09LM1NfSFZfUE9TU0lCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTM4PWNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTY2LVx0c2VsZWN0IEtWTVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjY3Olx0c2VsZWN0IEtWTV9CT09LM1NfUFJfUE9TU0lCTEUgaWYgIUtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02OC1cdHNlbGVjdCBQUENfNjRTX0hBU0hfTU1VXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFx1MDAyNlx1MDAyNiBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgyOlx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04My1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xMjk9Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMS1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTMyOlx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMy1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTQyPWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDQtXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcdTAwMjZcdTAwMjYgREVCVUdfRlMgXHUwMDI2XHUwMDI2ICFLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0Ni1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTU3PWNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTk6XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNjAtXHRkZWZhdWx0ICFFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MjUxPWNvbmZpZyBLVk1fWElWRVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTMtXHRkZWZhdWx0IHlcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTQ6XHRkZXBlbmRzIG9uIEtWTV9YSUNTIFx1MDAyNlx1MDAyNiBQUENfWElWRV9OQVRJVkUgXHUwMDI2XHUwMDI2IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugc2VsZWN0aW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBhdXRvbWF0aWNhbGx5IGltcGxpZXMgdGhhdCBgS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgYWxzbyBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIGxvZ2ljIHN0YW5kcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gb2YgYEtWTV9CT09LM1NfNjRfSFZgIGl0c2VsZi4gVGhlIHRleHQgaW5kaWNhdGVzIHRoYXQgYEtWTV9CT09LM1NfNjRfSFZgIGhhcyBhIGRlcGVuZGVuY3ksIHNvIGxldCYjMzk7cyBkaWcgaW50byB0aGF0LiBBY2NvcmRpbmcgdG8gdGhlIHRleHQsIGl0IGRlcGVuZHMgb24gYm90aCBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAgYmVpbmcgc2V0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGF0IGBLVk1fQk9PSzNTXzY0YCBpcyBhbGwgYWJvdXQuIFVuZGVyc3RhbmRpbmcgaXRzIGF0dHJpYnV0ZXMgd2lsbCBjbGFyaWZ5IHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mjk9Y29uZmlnIEtWTV9CT09LM1NfMzJfSEFORExFUlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzUtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTQ1PWNvbmZpZyBLVk1fQk9PSzNTXzMyXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBCb29rM1MgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBLVk0gY29uZmlndXJhdGlvbnM6IGBLVk1fQk9PSzNTXzY0YCBhbmQgYEtWTV9CT09LM1NfNjRfSFZgLiBJbW1lZGlhdGVseSwgSSBub3RpY2UgdGhlIGRpZmZlcmVuY2UsIHBhcnRpY3VsYXJseSB0aGUgYF9IVmAgc3VmZml4LiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCByaWdodCwgdGhlIHNlY29uZCBvbmUsIGBLVk1fQk9PSzNTXzY0X0hWYCwgc2VlbXMgdG8gYmUgZGVwZW5kZW50IG9uIGBQUENfUE9XRVJOVmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IGxpa2VseSBpbXBsaWVzIGEgaHlwZXJ2aXNvci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGZlYXR1cmUgc2V0LiBCZXR0ZXIgZG91YmxlLWNoZWNrIGBQUENfUE9XRVJOVmAgdG8gY29uZmlybSBleGFjdGx5IHdoYXQgdGhhdCYjMzk7cyBicmluZ2luZyB0byB0aGUgdGFibGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19QT1dFUk5WJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMy1cdGRlcGVuZHMgb24gUFBDNjQgXHUwMDI2XHUwMDI2IFBQQ19CT09LM1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBvd2VyUEMgQ29tcGF0aWJpbGl0eSBGZWF0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgUG93ZXJQQyBLVk0gcGxhdGZvcm0sIHNwZWNpZmljYWxseSBgUFBDX1BPV0VSTlZgLiBUaGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHNlZW0gdG8gYmUgYEtWTWAsIGBLVk1fQk9PSzNTXzY0YCwgYEtWTV9CT09LM1NfNjRfSFZgLCBhbmQgYFBQQ19QT1dFUk5WYC4gSSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNvbmZpcm1lZCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaXMgaW5kZWVkIHByZXNlbnQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBUaGVyZWZvcmUsIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBoYW5kbGVzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoYXQgZnVuY3Rpb24gY2FsbHMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCB3aGljaCBpcyBhc3NpZ25lZCB0byBga3ZtX29wc19odi5nZXRfY29tcGF0X2NhcHNgLCBzbyBpdCBzZWVtcyBsaWtlIGEgdmFsaWQgZW50cnkgcG9pbnQuCgpJIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyB3aGljaCBmdW5jdGlvbiB0byBjaG9vc2UuIEkgbmVlZCB0byBiYWxhbmNlIGNsYXJpdHkgd2l0aCBhZGhlcmluZyB0byB0aGUgJiMzNDtub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCYjMzQ7IHJ1bGUuIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgYXJlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhpbiBgYm9vazNzX2h2LmNgLiBUaGUgcGF0Y2ggKmRvZXMqIG1vZGlmeSBga3ZtX2FyY2hfdm1faW9jdGxgLCBhbmQgd2hpbGUgaXQmIzM5O3MgYSBnZW5lcmFsIGVudHJ5IHBvaW50LCBpdCYjMzk7cyBhbHNvIHdoZXJlIHRoZSBwYXRjaCYjMzk7cyBzcGVjaWZpYyBjYXNlIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQuCgpJIGNoZWNrZWQgYWdhaW4sIGFuZCB5ZXMsIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgYXJlIGRlZmluaXRlbHkgc3RhdGljLCBhcyB0aGUgcGF0Y2ggY29uZmlybXMgdGhpcy4gU2luY2UgdGhlIHByb21wdCBmYXZvcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLCBga3ZtX2FyY2hfdm1faW9jdGxgIHNlZW1zIHRvIGJlIHRoZSBiZXR0ZXIgY2hvaWNlIHNpbmNlIGl0IGlzIG5vdCBzdGF0aWMuIE9uIHNlY29uZCBsb29rLCBJIHNob3VsZCBpbmNsdWRlIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCB3aGljaCBpcyBhbHNvIG1vZGlmaWVkIGFuZCBub24tc3RhdGljLiBUaGVyZWZvcmUgSSB3aWxsIGdvIHdpdGggYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgbWFrZSBzdXJlIG15IHJlYXNvbmluZyBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMjk0PXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jcHVfY2hhcihzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciAqY3ApXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2Mi1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjIzNjM6aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbnNpZGVyaW5nIEtWTSBpb2N0bCBGdW5jdGlvbiBWaXNpYmlsaXR5KioKClJpZ2h0LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGluZGVlZCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSAqb3V0c2lkZSogdGhlIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbiwgd2hpY2ggaXMgYSBrZXkgZGVzaWduIGNob2ljZSBpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIGl0cyByb2xlIGluIGhhbmRsaW5nIFZNLXNwZWNpZmljIGlvY3Rscy4KCkFuZCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suLi4gWWVzLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaXMgYWxzbyBub24tc3RhdGljLCBqdXN0IGFzIEkgc3VzcGVjdGVkLiBUaGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZS4gSXQmIzM5O3MgdXNlZCBmb3IgdmFsaWRhdGluZyBhbmQgbWFuYWdpbmcgS1ZNIGV4dGVuc2lvbnMsIHNvIGl0IHJlcXVpcmVzIGJyb2FkZXIgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0sIGFuZCBwb3RlbnRpYWxseSBldmVuIGZyb20gdGhlIHVzZXJzcGFjZSBzaWRlLCB0byBkZXRlcm1pbmUgd2hpY2ggZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSB0byBhIHNwZWNpZmljIFZNLiBUaGlzIGFyY2hpdGVjdHVyZSBvZiB0aGUgaW9jdGwgZnVuY3Rpb25zIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXNlIGRlc2lnbiBjaG9pY2VzIGFyZSBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdGVkIHRvIHNlZSBpbiBhIHdlbGwtc3RydWN0dXJlZCBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz00Nzg9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy01MDEtXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo1MDI6aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTUwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjEyCgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDg4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBvd2VyUEMgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBvdXRsaW5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIHRoaXMgUG93ZXJQQyBLVk0gcGF0Y2guIExldCYjMzk7cyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2Vzcy4KCkZpcnN0LCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgpSaWdodCwgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBXYWl0LCBhIHF1aWNrIGNoZWNrIHJlbWluZHMgbWUgdGhhdCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gR29vZCwgZ290IHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBlbmFibGluZyB0aGUgY29ycmVjdCBjb25maWdzIHdoZW4gSSBzZXQgdGhpcyB1cC4KClRoZXJlJiMzOTtzIGFsc28gdGhhdCBgI2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpYCBpbiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAuIEFoLCByaWdodCwgdGhhdCYjMzk7cyByZWxhdGVkIHRvIGBLVk1fQk9PSzNTXzY0X0hWYCwgc2luY2UgYEtWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHNlbGVjdGVkIGJ5IGl0LiBTbywgZW5hYmxpbmcgYEtWTV9CT09LM1NfNjRfSFZgIGVmZmVjdGl2ZWx5IGNvdmVycyB0aGF0IGNvbmRpdGlvbmFsIGNoZWNrLiBFeGNlbGxlbnQuIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgZXhwbGljaXRseSBzZXQuCgpTaW5jZSBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHRoZSBvbmx5IG9uZSB1c2VkLCBJIGNhbiBmZWVsIGNvbmZpZGVudCBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0aGUgbW9zdCByZWxldmFudC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsIGZvciBQb3dlclBDIHRvIHF1ZXJ5IENQVSBjb21wYXRpYmlsaXR5LiBUaGlzIG1lYW5zIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgY29yZSBLVk0gVk0gaW9jdGwgaGFuZGxlciBhbmQgYWRkaW5nIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgdXNlci1zcGFjZSBhY2Nlc3NpYmxlIHZpYSB0aGUgS1ZNIEFQSSwgc28gZnV6emluZyBpcyBjcml0aWNhbCB0byBlbnN1cmUgcHJvcGVyIGhhbmRsaW5nIG9mIHVzZXIgaW5wdXQsIHNwZWNpZmljYWxseSBzaXplcyBhbmQgZmxhZ3MgcGFzc2VkIHRvIHRoaXMgbmV3IGlvY3RsLgoKT2theSwgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYC4gSSBoYWQgYSBtb21lbnQgb2YgZG91YnQgYWJvdXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBiZWluZyB0b28gZ2VuZXJpYywgYnV0IHNpbmNlIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciAqYWxsKiBQb3dlclBDIFZNIGlvY3RscyBhbmQgdGhlIG5ldyBpb2N0bCBoYW5kbGluZyBpcyBkaXJlY3RseSBpbnRlZ3JhdGVkIHdpdGhpbiBpdCAodGhlIGBjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOmAgaXMgaW5zaWRlIHRoZSBzd2l0Y2ggaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCksIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaXMgdGhlIHJpZ2h0IGNob2ljZS4KClRoZSBhY3R1YWwgY2FwYWJpbGl0eSBtYXBwaW5nIGxvZ2ljIGlzIHdpdGhpbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEhvd2V2ZXIsIGFjY29yZGluZyB0byB0aGUgZ3VpZGFuY2UsIEkgY2FuJiMzOTt0IGxpc3QgYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uIGlmIHRoZXJlJiMzOTtzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2VlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKCZhbXA7aG9zdF9jYXBzKWAuIFNpbmNlIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQgYW5kIGl0IHdpbGwgaGF2ZSBhIHNwZWNpZmljIHN5bWJvbCBhZGRyZXNzLiBTdGlsbCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludC4KCklzIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbj8gTm8uCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHdyaXRlIHVwIHRoZSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOVjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0JPT0szU182NCYjMzQ7LAogICAgJiMzNDtLVk1fQk9PSzNTXzY0X0hWJiMzNDssCiAgICAmIzM0O1BQQ19QT1dFUk5WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NCwgS1ZNX0JPT0szU182NF9IViwgUFBDX1BPV0VSTlYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBGaWxlczogQSBRdWljayBEZWJ1ZyoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYXJlIHlvdSB0ZWxsaW5nIG1lIHRoZXNlIGNvbmZpZ3VyYXRpb25zICphcmVuJiMzOTt0KiBzaG93aW5nIHVwPyBUaGF0JiMzOTtzIHVudXN1YWwuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgcHJvcGVybHkuIElzIHRoZXJlIGEgc3ludGF4IGVycm9yIEkgbWlzc2VkPyBQZXJoYXBzIGEgY29uZGl0aW9uYWwgdGhhdCYjMzk7cyB1bmludGVudGlvbmFsbHkgcHJldmVudGluZyB0aGUgb3B0aW9ucyBmcm9tIGJlaW5nIGV4cG9zZWQ/IFRpbWUgZm9yIGEgZGVlcCBkaXZlIGJhY2sgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzIOKAkyBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgY291bGQgYmUgc29tZXRoaW5nIHNpbGx5IGxpa2UgYSBtaXNzaW5nIGBzb3VyY2VgIGRpcmVjdGl2ZSwgYW4gaW5jb3JyZWN0IGBkZXBlbmRzIG9uYCwgb3IgcGVyaGFwcyBhIG1pc3BsYWNlZCBjb21tZW50LiBJIG5lZWQgdG8gZXhoYXVzdCBhbGwgdGhlIG9idmlvdXMgY3VscHJpdHMgZmlyc3QsIGJlZm9yZSBjb25zaWRlcmluZyBhbnl0aGluZyBtb3JlIGNvbXBsZXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yOT1jb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NDU9Y29uZmlnIEtWTV9CT09LM1NfMzJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDExNAoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFRvb2wgUmVzdWx0cyoqCgpPa2F5LCBzbyB0aGUgdG9vbCBpcyBzYXlpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJiMzOTt0IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhhdCYjMzk7cyBhIGJpdCBwZXJwbGV4aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbWF5YmUgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIHg4Nl82NCB0cmVlIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJiMzOTt0IGFsd2F5cyByZXByZXNlbnRhdGl2ZS4gSSBrbm93IHRoZSB0b29sICpzaG91bGQqIGJlIGNoZWNraW5nIHRoZSBlbnRpcmUga2VybmVsIHRyZWUsIGJ1dCBwZXJoYXBzIGl0cyBjb25maWd1cmF0aW9uIGNoZWNrcyBhcmUgbGltaXRlZCB0byB4ODYgY29uZmlndXJhdGlvbnMsIG9yIGFyZSBzZW5zaXRpdmUgdG8gYXJjaGl0ZWN0dXJlPwoKV2FpdCwgaG9sZCBvbiwgYHNldC1yZXN1bHRzYCBhY3R1YWxseSBoYXMgaXRzIG93biBpbnRlcm5hbCBsb2dpYyBmb3IgdmFsaWRhdGluZyBjb25maWdzIGFnYWluc3QgdGhlIGtlcm5lbCB0cmVlLiBJZiBpdCYjMzk7cyBzYXlpbmcgc29tZXRoaW5nICpkb2VzbiYjMzk7dCogZXhpc3QsIHRoZW4gaXQgcHJvYmFibHkgbWVhbnMgaXQmIzM5O3MgZ2VudWluZWx5IHVuYXZhaWxhYmxlIGluIHRoZSB0cmVlLCBhdCBsZWFzdCBmb3IgdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlLCB4ODZfNjQuCgpTaW5jZSB0aGlzIHBhdGNoIGlzIGZvciBQb3dlclBDLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNsdWRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBhcmNoLXNwZWNpZmljLCBhbmQgdGhhdCB0aGUgdG9vbCBkb2VzbiYjMzk7dCBhY2NlcHQuIElmIHRoZSB0b29sIGlzIHJlamVjdGluZyBjZXJ0YWluIGNvbmZpZ3MsIG1heWJlIEkgc2hvdWxkIG9taXQgdGhlbSBhbHRvZ2V0aGVyLCBvciBvbmx5IGluY2x1ZGUgY29uZmlncyB0aGF0IGFyZSB2YWxpZCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcz8KClJpZ2h0LCBgc2V0LXJlc3VsdHNgIHNwZWNpZmljYWxseSByZWplY3RlZCBgS1ZNX0JPT0szU182NGAsIGBLVk1fQk9PSzNTXzY0X0hWYCwgYW5kIGBQUENfUE9XRVJOVmAuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlIGJhc2ljIGBLVk1gIGNvbmZpZ3VyYXRpb24gaXMgYWNjZXB0ZWQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyB0aGUgYmFzZSBvZiBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjE6MjMuNjI2MTExMzE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5MTUzOTEyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjIzLjYyNjExNjQzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNDAyMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWVmZDAxOTQ1NmIyNzUyOTNmOTUyZGM0ODRkOWRmYzhmNmVmNzMwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIwOjIxOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbmluZGV4IGUzMDAzYTI0MWQ1YjAuLjIyZmVkYjBhYTM0YjQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuQEAgLTY1NjYsNiArNjU2Niw4NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXFxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcXG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxcbiBcXG4rNC4xNDUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rOkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTXFxuKzpBcmNoaXRlY3R1cmVzOiBwb3dlcnBjXFxuKzpUeXBlOiB2bSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKGluL291dClcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxcbitcXG4rRXJyb3JzIGluY2x1ZGU6XFxuK1xcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yXFxuKyAgICAgICAgICAgd3JpdHRlbiB0byB1c2Vyc3BhY2VcXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXFxuKyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkXFxuKyAgICAgICAgICAgaXMgbm9uLXplcm8sIG9yIGlmIHRoZSBiYWNrZW5kIGZhaWxzIHRvIHJldHJpZXZlIG9yIG1hcFxcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xcbisgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZVxcbisgICAgICAgICAgIChuZXcgdXNlcnNwYWNlIG9uIG9sZCBrZXJuZWwpOyB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGl0c1xcbisgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXFxuKyAgICAgICAgICAgcmV0cnkgd2l0aCB0aGUgY29ycmVjdCBzaXplXFxuKyAgRU5PVFRZICAgaWYgdGhlIGJhY2tlbmQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYGdldF9jb21wYXRfY2Fwc2BgXFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcXG4rICAgICAgICAgICByZXF1aXJlZCBLVk0gb3BlcmF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSlcXG4rICA9PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0lCTSBQT1dFUiBzeXN0ZW0gc2VydmVyLWJhc2VkIHByb2Nlc3NvcnMgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgbW9kZSBmZWF0dXJlXFxuK3doZXJlIGFuIE50aCBnZW5lcmF0aW9uIHByb2Nlc3NvciBjYW4gb3BlcmF0ZSBpbiBtb2RlcyBjb25zaXN0ZW50IHdpdGggZWFybGllclxcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cXG4rXFxuK1RoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzXFxuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cXG4rS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlxcbitcXG4rOjpcXG4rXFxuKyAgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMge1xcbitcXHRfX3U2NFxcdHNpemU7XFx0XFx0XFx0LyogU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSAqL1xcbitcXHRfX3U2NFxcdGZsYWdzO1xcdFxcdFxcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rICB9O1xcbitcXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xcbitgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLlxcbitUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxcbitmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LlxcbitcXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXFxuK3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nOiBpZiB1c2Vyc3BhY2UgcGFzc2VzIGEgc3RydWN0IHNtYWxsZXJcXG4rdGhhbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbiAoYGBzaXplIFxcdTAwM2U9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLFxcbit0aGUga2VybmVsIHplcm8tcGFkcyB1bmtub3duIHRyYWlsaW5nIGZpZWxkcy4gSWYgdXNlcnNwYWNlIHBhc3NlcyBhIGxhcmdlclxcbitzdHJ1Y3QgKGBgc2l6ZSBcXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXFxuK2JhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBhbmQgcmV0dXJucyBgYC1FMkJJR2BgLFxcbithbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGlzY292ZXIgdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplIGFuZCByZXRyeS5cXG4rYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgICgyNCkgaXMgYSBmcm96ZW4gY29uc3RhbnQgbWFya2luZyB0aGVcXG4rc2l6ZSBvZiB0aGUgaW5pdGlhbCBzdHJ1Y3QgdmVyc2lvbi5cXG4rXFxuK1RoZSBgYGNvbXBhdF9jYXBhYmlsaXRpZXNgYCBiaXQgZmllbGQgZGVzY3JpYmVzIHRoZSBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eVxcbittb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuIFRoZSBmb2xsb3dpbmcgYml0cyBpbmRpY2F0ZSBzdXBwb3J0IGZvciBzcGVjaWZpY1xcbitwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3RcXG4rc2lnbmlmaWNhbnQgYml0KTpcXG4rXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZVxcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgIChiaXQgMykgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTEgcHJvY2Vzc29yIG1vZGVcXG4rXFxuKy4uIG5vdGU6OlxcbitcXG4rICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIChiaXQgMCBpcyB0aGUgbW9zdFxcbisgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcXG4rXFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgID0gYGAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MilgYFxcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCA9IGBgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjEpYGBcXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYwKWBgXFxuK1xcbisgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFxcdTAwM2NsaW51eC9rdm0uaFxcdTAwM2VgYCByYXRoZXJcXG4rICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuXFxuK1xcbiAuLiBfa3ZtX3J1bjpcXG4gXFxuIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxcbmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcXG5AQCAtMzE5LDYgKzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcXG4gXFx0Ym9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpO1xcbiBcXHRpbnQgKCpjcmVhdGVfdm1fZGVidWdmcykoc3RydWN0IGt2bSAqa3ZtKTtcXG4gXFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XFxuK1xcdGludCAoKmdldF9jb21wYXRfY2Fwcykoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcyk7XFxuIH07XFxuIFxcbiBleHRlcm4gc3RydWN0IGt2bXBwY19vcHMgKmt2bXBwY19odl9vcHM7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5pbmRleCAwNzdjNTQzN2Y1MjE5Li45MTNhNjRiOTAxYTNkIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XFxuIFxcdF9fdTY0XFx0YmVoYXZpb3VyX21hc2s7XFx0XFx0LyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi9cXG4gfTtcXG4gXFxuKy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xcbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XFxuK1xcdF9fdTY0XFx0c2l6ZTtcXHRcXHRcXHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXFxuK1xcdF9fdTY0XFx0ZmxhZ3M7XFx0XFx0XFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rfTtcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFxcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXFxuK1xcbisvKlxcbisgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cXG4rICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNjIpXFxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYwKVxcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcXHRcXHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXFxuIC8qXFxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5pbmRleCA2MWRiZWVhMzE3ZjNiLi43NzU1OGY2ZWVkODY0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXFxuQEAgLTY1MTAsNiArNjUxMCw2MSBAQCBzdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcXG4re1xcbitcXHRzd2l0Y2ggKGNwdV92ZXJzaW9uKSB7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMTpcXG4rXFx0XFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMDtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzAwOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcXG4rXFx0bG9uZyByYyA9IC1FSU5WQUw7XFxuK1xcdHUzMiBjcHVfdmVyc2lvbiA9IDA7XFxuK1xcbitcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuK1xcdFxcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XFxuK1xcdFxcdFxcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XFxuK1xcdFxcdFxcdHJjID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcXFwiY3B1XFxcIikge1xcbitcXHRcXHRcXHRcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcXFwiY3B1LXZlcnNpb25cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjcHVfdmVyc2lvbikpIHtcXG4rXFx0XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghY3B1X3ZlcnNpb24pXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZjYXBhYmlsaXRpZXMpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGhvc3RfY2Fwcy1cXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xcbiBcXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXFxuIFxcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcXG5AQCAtNjU1Miw2ICs2NjA3LDcgQEAgc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuIFxcdC5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsXFxuIFxcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcXG4gXFx0LmNyZWF0ZV92bV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnNfaHYsXFxuK1xcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuaW5kZXggMDAzMDIzOTlmYzM3Yi4uZWQwY2Q3YjgzYjYzZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuQEAgLTY5Nyw2ICs2OTcsMTMgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbisjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcXG4rXFx0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcXG4rXFx0XFx0ciA9IDA7XFxuK1xcdFxcdGlmIChodl9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcXG4rXFx0XFx0XFx0ciA9IDE7XFxuK1xcdFxcdGJyZWFrO1xcbisjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ciA9IDA7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yNDYzLDYgKzI0NzAsNzAgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0ga3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZXN2bV9vZmYoa3ZtKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4rXFx0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcXG4rXFx0XFx0dTY0IHVzaXplO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmVhZCB0aGUgc2l6ZSBmaWVsZCBmaXJzdCB0byBkcml2ZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIuXFxuK1xcdFxcdCAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIgPSAtRUZBVUxUO1xcbitcXHRcXHRpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsXFxuK1xcdFxcdCAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZFxcbitcXHRcXHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxcbitcXHRcXHQgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmICh1c2l6ZSBcXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyIGtlcm5lbC5cXG4rXFx0XFx0ICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2hcXG4rXFx0XFx0ICogb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh1c2l6ZSBcXHUwMDNlIHNpemVvZihob3N0X2NhcHMpKSB7XFxuK1xcdFxcdFxcdGhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7XFxuK1xcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRpZiAocHV0X3VzZXIoaG9zdF9jYXBzLnNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdHIgPSAtRTJCSUc7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxcbitcXHRcXHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XFxuK1xcdFxcdCAqICAgdXNpemUgXFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcXHUwMDI2aG9zdF9jYXBzLCBzaXplb2YoaG9zdF9jYXBzKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhcmdwLCB1c2l6ZSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmIChob3N0X2NhcHMuZmxhZ3MpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0ciA9IC1FTk9UVFk7XFxuK1xcdFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRyID0ga3ZtLVxcdTAwM2VhcmNoLmt2bV9vcHMtXFx1MDAzZWdldF9jb21wYXRfY2FwcyhcXHUwMDI2aG9zdF9jYXBzKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcXG4rXFx0XFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFxcdTAwMjZob3N0X2NhcHMsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxcbiBcXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcXG4gXFx0X191MzIgaXJxY2hpcDtcXG5AQCAtMTM0MSw2ICsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcXG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9DT1VOVEVSX09GRlNFVCAqL1xcbiAjZGVmaW5lIEtWTV9BUk1fU0VUX0NPVU5URVJfT0ZGU0VUIF9JT1coS1ZNSU8sICAweGI1LCBzdHJ1Y3Qga3ZtX2FybV9jb3VudGVyX29mZnNldClcXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcdF9JTyhLVk1JTywgIDB4YjgpXFxuIFxcbiAvKiBpb2N0bCBmb3Igdm0gZmQgKi9cXG4gI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRVxcdCAgX0lPV1IoS1ZNSU8sICAweGUwLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjI0LjIzODIwNjk1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg1MzAzMjg1OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZWZkMDE5NDU2YjI3NTI5M2Y5NTJkYzQ4NGQ5ZGZjOGY2ZWY3MzA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMDoyMToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggZTMwMDNhMjQxZDViMC4uMjJmZWRiMGFhMzRiNCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuKzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbis6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbitcbitFcnJvcnMgaW5jbHVkZTpcbitcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbisgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbisgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplXG4rICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHNcbisgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXG4rICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcbisgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tSFYgS1ZNIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGVcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcbit3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbitcbitUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXG4rXG4rOjpcbitcbisgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbisgIH07XG4rXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4rVGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnRcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4rXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxuK3RoYW4gdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24gKGBgc2l6ZSBcdTAwM2U9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLFxuK3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXG4rc3RydWN0IChgYHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXG4rYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsXG4rYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmQgcmV0cnkuXG4rYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgICgyNCkgaXMgYSBmcm96ZW4gY29uc3RhbnQgbWFya2luZyB0aGVcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxuK1xuK1RoZSBgYGNvbXBhdF9jYXBhYmlsaXRpZXNgYCBiaXQgZmllbGQgZGVzY3JpYmVzIHRoZSBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eVxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXG4rcHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0XG4rc2lnbmlmaWNhbnQgYml0KTpcbitcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGVcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuK1xuKy4uIG5vdGU6OlxuK1xuKyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJ3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3RcbisgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbitcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYyKWBgXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjApYGBcbitcbisgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4rICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuXG4rXG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbmluZGV4IDA5NTNmMmRhYTQ2NjAuLjE2OWVhNmE3ZmJhZDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXG5AQCAtMzE5LDYgKzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4rXHRpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpO1xuIH07XG4gXG4gZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzO1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDA3N2M1NDM3ZjUyMTkuLjkxM2E2NGI5MDFhM2QgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDI0IEBAIHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyIHtcbiBcdF9fdTY0XHRiZWhhdmlvdXJfbWFzaztcdFx0LyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi9cbiB9O1xuIFxuKy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xuK3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0X191NjRcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XHQvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovXG4rfTtcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwXHQyNCAvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqL1xuK1xuKy8qXG4rICogQ2FwYWJpbGl0eSBiaXRzIGZvciBjb21wYXRfY2FwYWJpbGl0aWVzIGZpZWxkIGluIGt2bV9wcGNfY29tcGF0X2NhcHMuXG4rICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxuKyAqL1xuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYyKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjApXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLXHRcdChLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5IHwgXFxcbitcdFx0XHRcdFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcbitcdFx0XHRcdFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExKVxuIC8qXG4gICogVmFsdWVzIGZvciBjaGFyYWN0ZXIgYW5kIGNoYXJhY3Rlcl9tYXNrLlxuICAqIFRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHZhbHVlcyB1c2VkIGJ5IEhfR0VUX0NQVV9DSEFSQUNURVJJU1RJQ1MuXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbmluZGV4IDYxZGJlZWEzMTdmM2IuLjc3NTU4ZjZlZWQ4NjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5AQCAtNjUxMCw2ICs2NTEwLDYxIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXModTMyIGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcbit7XG4rXHRzd2l0Y2ggKGNwdV92ZXJzaW9uKSB7XG4rXHRjYXNlIFBWUl9BUkNIXzMxX1AxMTpcbitcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFBWUl9BUkNIXzMxOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgUFZSX0FSQ0hfMzAwOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbitcdGxvbmcgcmMgPSAtRUlOVkFMO1xuK1x0dTMyIGNwdV92ZXJzaW9uID0gMDtcbitcbitcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbitcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbitcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuK1x0XHRcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XG4rXHRcdFx0cmMgPSAwO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgXCJjcHVcIikge1xuK1x0XHRcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCJjcHUtdmVyc2lvblwiLFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjcHVfdmVyc2lvbikpIHtcbitcdFx0XHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4rXHRcdFx0aWYgKCFjcHVfdmVyc2lvbilcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0aG9zdF9jYXBzLVx1MDAzZWNvbXBhdF9jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMgXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0LmdldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzX2h2LFxuIFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxuQEAgLTY1NTIsNiArNjYwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuK1x0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuaW5kZXggMDAzMDIzOTlmYzM3Yi4uZWQwY2Q3YjgzYjYzZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuQEAgLTY5Nyw2ICs2OTcsMTMgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4rI2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG4rXHRjYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOlxuK1x0XHRyID0gMDtcbitcdFx0aWYgKGh2X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bWh2X29uX3BzZXJpZXMoKSlcbitcdFx0XHRyID0gMTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMjQ2Myw2ICsyNDcwLDcwIEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlc3ZtX29mZihrdm0pO1xuIFx0XHRicmVhaztcbiBcdH1cbitcdGNhc2UgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFM6IHtcbitcdFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XG4rXHRcdHU2NCB1c2l6ZTtcbitcbitcdFx0LypcbitcdFx0ICogUmVhZCB0aGUgc2l6ZSBmaWVsZCBmaXJzdCB0byBkcml2ZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIuXG4rXHRcdCAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC5cbitcdFx0ICovXG4rXHRcdHIgPSAtRUZBVUxUO1xuK1x0XHRpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LypcbitcdFx0ICogRW5mb3JjZSBhIG1pbmltdW06IHJlamVjdCBidWZmZXJzIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbFxuK1x0XHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcbitcdFx0ICogYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3RydWN0IHRvIHN0aWxsIHdvcmsgb24gYSBuZXdlciBrZXJuZWxcbitcdFx0ICogdGhhdCBoYXMgZ3Jvd24gdGhlIHN0cnVjdCB3aXRoIGFwcGVuZGVkIGZpZWxkcy5cbitcdFx0ICovXG4rXHRcdHIgPSAtRUlOVkFMO1xuK1x0XHRpZiAodXNpemUgXHUwMDNjIEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlciBrZXJuZWwuXG4rXHRcdCAqIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc28gdXNlcnNwYWNlIGtub3dzIHdoaWNoXG4rXHRcdCAqIG9sZGVyIHN0cnVjdCB0byByZXRyeSB3aXRoLCB0aGVuIGZhaWwgd2l0aCAtRTJCSUcuXG4rXHRcdCAqL1xuK1x0XHRpZiAodXNpemUgXHUwMDNlIHNpemVvZihob3N0X2NhcHMpKSB7XG4rXHRcdFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcbitcdFx0XHRyID0gLUVGQVVMVDtcbitcdFx0XHRpZiAocHV0X3VzZXIoaG9zdF9jYXBzLnNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSlcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHIgPSAtRTJCSUc7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0LypcbitcdFx0ICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDpcbitcdFx0ICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weVxuK1x0XHQgKiAgIHVzaXplIFx1MDAzYyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKVxuK1x0XHQgKi9cbitcdFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxuK1x0XHRcdFx0XHQgIGFyZ3AsIHVzaXplKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdC8qIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm8gKi9cbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmIChob3N0X2NhcHMuZmxhZ3MpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSAtRU5PVFRZO1xuK1x0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMoXHUwMDI2aG9zdF9jYXBzKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdGhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7XG4rXHRcdHIgPSBjb3B5X3N0cnVjdF90b191c2VyKGFyZ3AsIHVzaXplLCBcdTAwMjZob3N0X2NhcHMsXG4rXHRcdFx0XHRcdHNpemVvZihob3N0X2NhcHMpLCBOVUxMKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OiB7XG4gXHRcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VhcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uNzBlMzZlNmEwYWQ0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuKyNkZWZpbmUgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgMjUwXG4gXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcbiBcdF9fdTMyIGlycWNoaXA7XG5AQCAtMTM0MSw2ICsxMzQyLDggQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcbiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUICovXG4gI2RlZmluZSBLVk1fQVJNX1NFVF9DT1VOVEVSX09GRlNFVCBfSU9XKEtWTUlPLCAgMHhiNSwgc3RydWN0IGt2bV9hcm1fY291bnRlcl9vZmZzZXQpXG4gI2RlZmluZSBLVk1fQVJNX0dFVF9SRUdfV1JJVEFCTEVfTUFTS1MgX0lPUihLVk1JTywgIDB4YjYsIHN0cnVjdCByZWdfbWFza19yYW5nZSlcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuKyNkZWZpbmUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcdF9JTyhLVk1JTywgIDB4YjgpXG4gXG4gLyogaW9jdGwgZm9yIHZtIGZkICovXG4gI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRVx0ICBfSU9XUihLVk1JTywgIDB4ZTAsIHN0cnVjdCBrdm1fY3JlYXRlX2RldmljZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjI0LjIzODIwODQ2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzM0Nzg5NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwgZm9yIFBvd2VyUEMsIGltcGxlbWVudGVkIGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gVGhpcyBpb2N0bCwgYmFzZWQgb24gYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYCwgYWltcyB0byBleHBvc2UgaG9zdCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgZnV6eiB0aGlzPyBUaGUgY3J1Y2lhbCB0aGluZyBpcyB3aGV0aGVyIHRoaXMgaXMgcmVhY2hhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGFyY2hpdGVjdHVyZSBpcyBQb3dlclBDLiBUaGUgaW9jdGwgaXMgb25seSBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgIGlzIHN1cHBvcnRlZC4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIHRlbGxzIHVzIGl0IHJldHVybnMgMSBpZiBgaHZfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtaHZfb25fcHNlcmllcygpYC4gYGh2X2VuYWJsZWRgIGlzIEtWTSBIViwgYW5kIGBrdm1odl9vbl9wc2VyaWVzKClgIGNoZWNrcyBpZiB3ZSdyZSBvbiBhIHBzZXJpZXMgbWFjaGluZS4gTm93LCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgYnkgYSBzdGFuZGFyZCBRRU1VIGNvbmZpZyBmb3IgZnV6emluZz9cblxuU3l6a2FsbGVyIHN1cHBvcnRzIGZ1enppbmcgcHBjNjRsZSwgYW5kIGl0IHVzZXMgUUVNVS4gVGhhdCdzIGdvb2QuIFRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBRRU1VLCBieSBkZWZhdWx0LCB1c2VzIHRoZSBgcHNlcmllc2AgbWFjaGluZSB0eXBlIGZvciBwcGM2NGxlIHdoZW4gS1ZNIGlzIGVuYWJsZWQuIE9rYXksIGJ1dCBob3cgYWJvdXQgS1ZNIEhWLCBjYW4gUUVNVSBydW4gS1ZNIEhWPyBZZXMsIFBvd2VyUEMgc3VwcG9ydHMgbmVzdGVkIEtWTSwgYW5kIGV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSBLVk0gSFYsIHdlIGNhbiBmdXp6IGl0IGlmIHdlIGhhdmUgS1ZNLlxuXG5UaGUgY2F0Y2ggaXMsIHdoaWxlIHN5emthbGxlciB1c3VhbGx5IGZvY3VzZXMgb24geDg2LCBpdCAqZG9lcyogc3VwcG9ydCBvdGhlciBhcmNoaXRlY3R1cmVzIGlmIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBMZXQncyByZW1lbWJlciB0aGUgcHJvbXB0J3MgY29uZGl0aW9uOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBCdXQsIGlmIHdlJ3JlIGZ1enppbmcgKktWTSogb24gUG93ZXJQQywgZXZlbiBpbnNpZGUgUUVNVSwgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGZ1enplcyBLVk0uIEl0J3MgYSBWTSBpb2N0bCwgd2hpY2ggbWVhbnMgdGhpcyBpb2N0bCwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgc2hvdWxkIGJlIGZ1enplZCBhcyBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5TbywgbGV0J3MgZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC4gSXQncyBnb2luZyB0byBiZSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AsIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLCBhbmQgdGhlIGlvY3RsIGhhbmRsZXIgd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAgdGhhdCBkZWFscyB3aXRoIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIEkndmUgY29uZmlybWVkIHRoYXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGhhbmRsZXIuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWdzLiBXZSBvYnZpb3VzbHkgbmVlZCBgQ09ORklHX0tWTWAsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gYmUgZWl0aGVyIGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgb3IgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC4gTGV0J3MgY29uZmlybSB3aXRoIGEgcXVpY2sgc2VhcmNoIGluIGBLY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjM5LjU3MzAwMjM2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg4OTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mzg9Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjYtXFx0c2VsZWN0IEtWTVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2NzpcXHRzZWxlY3QgS1ZNX0JPT0szU19QUl9QT1NTSUJMRSBpZiAhS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02OC1cXHRzZWxlY3QgUFBDXzY0U19IQVNIX01NVVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODEtXFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFxcdTAwMjZcXHUwMDI2IFBQQ19QT1dFUk5WXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgyOlxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgzLVxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTEyOT1jb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzEtXFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTMyOlxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzMtXFx0aGVscFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE0Mj1jb25maWcgS1ZNX0JPT0szU19IVl9QOF9USU1JTkdcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDQtXFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQ1OlxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcXHUwMDI2XFx1MDAyNiBERUJVR19GUyBcXHUwMDI2XFx1MDAyNiAhS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQ2LVxcdGhlbHBcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xNTc9Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXFxcIiBpZiBFWFBFUlRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU5OlxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNjAtXFx0ZGVmYXVsdCAhRVhQRVJUXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MjUxPWNvbmZpZyBLVk1fWElWRVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1My1cXHRkZWZhdWx0IHlcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjU0OlxcdGRlcGVuZHMgb24gS1ZNX1hJQ1MgXFx1MDAyNlxcdTAwMjYgUFBDX1hJVkVfTkFUSVZFIFxcdTAwMjZcXHUwMDI2IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMTozOS42NDU4OTY4ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI3MDUzNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugc2VsZWN0aW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBhdXRvbWF0aWNhbGx5IGltcGxpZXMgdGhhdCBgS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgYWxzbyBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIGxvZ2ljIHN0YW5kcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gb2YgYEtWTV9CT09LM1NfNjRfSFZgIGl0c2VsZi4gVGhlIHRleHQgaW5kaWNhdGVzIHRoYXQgYEtWTV9CT09LM1NfNjRfSFZgIGhhcyBhIGRlcGVuZGVuY3ksIHNvIGxldCdzIGRpZyBpbnRvIHRoYXQuIEFjY29yZGluZyB0byB0aGUgdGV4dCwgaXQgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYCBiZWluZyBzZXQuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgbGV0J3MgcXVpY2tseSBjaGVjayB3aGF0IGBLVk1fQk9PSzNTXzY0YCBpcyBhbGwgYWJvdXQuIFVuZGVyc3RhbmRpbmcgaXRzIGF0dHJpYnV0ZXMgd2lsbCBjbGFyaWZ5IHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjQ2LjA3Mjk1MzYxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgwNTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU182NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTI5PWNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NDU9Y29uZmlnIEtWTV9CT09LM1NfMzJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMTo0Ni4xMzQ3NjU0NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2NTY2MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gQm9vazNTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEtWTSBjb25maWd1cmF0aW9uczogYEtWTV9CT09LM1NfNjRgIGFuZCBgS1ZNX0JPT0szU182NF9IVmAuIEltbWVkaWF0ZWx5LCBJIG5vdGljZSB0aGUgZGlmZmVyZW5jZSwgcGFydGljdWxhcmx5IHRoZSBgX0hWYCBzdWZmaXguIExldCdzIHNlZS4uLiBBaCwgcmlnaHQsIHRoZSBzZWNvbmQgb25lLCBgS1ZNX0JPT0szU182NF9IVmAsIHNlZW1zIHRvIGJlIGRlcGVuZGVudCBvbiBgUFBDX1BPV0VSTlZgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCBsaWtlbHkgaW1wbGllcyBhIGh5cGVydmlzb3Itc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvciBmZWF0dXJlIHNldC4gQmV0dGVyIGRvdWJsZS1jaGVjayBgUFBDX1BPV0VSTlZgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IHRoYXQncyBicmluZ2luZyB0byB0aGUgdGFibGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIxOjQ5LjgxMTMzNDIxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU5NjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFBDX1BPV0VSTlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gUFBDNjQgXFx1MDAyNlxcdTAwMjYgUFBDX0JPT0szU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMTo0OS44NjI5MzcxNDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk5NzcyNzk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQb3dlclBDIENvbXBhdGliaWxpdHkgRmVhdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBQb3dlclBDIEtWTSBwbGF0Zm9ybSwgc3BlY2lmaWNhbGx5IGBQUENfUE9XRVJOVmAuIFRoZSBjb25maWd1cmF0aW9ucyBuZWVkZWQgc2VlbSB0byBiZSBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBJIHF1aWNrbHkgY29uZmlybSB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgY29uZmlybWVkIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpcyBpbmRlZWQgcHJlc2VudCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoZXJlZm9yZSwgYEtWTV9CT09LM1NfNjRfSFZgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBrdm1fYXJjaF92bV9pb2N0bGAgYmVjYXVzZSBpdCdzIHRoZSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBoYW5kbGVzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoYXQgZnVuY3Rpb24gY2FsbHMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCB3aGljaCBpcyBhc3NpZ25lZCB0byBga3ZtX29wc19odi5nZXRfY29tcGF0X2NhcHNgLCBzbyBpdCBzZWVtcyBsaWtlIGEgdmFsaWQgZW50cnkgcG9pbnQuXG5cbkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIHdoaWNoIGZ1bmN0aW9uIHRvIGNob29zZS4gSSBuZWVkIHRvIGJhbGFuY2UgY2xhcml0eSB3aXRoIGFkaGVyaW5nIHRvIHRoZSBcIm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50XCIgcnVsZS4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYCBhcmUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgd2l0aGluIGBib29rM3NfaHYuY2AuIFRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IGBrdm1fYXJjaF92bV9pb2N0bGAsIGFuZCB3aGlsZSBpdCdzIGEgZ2VuZXJhbCBlbnRyeSBwb2ludCwgaXQncyBhbHNvIHdoZXJlIHRoZSBwYXRjaCdzIHNwZWNpZmljIGNhc2UgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC5cblxuSSBjaGVja2VkIGFnYWluLCBhbmQgeWVzLCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgIGFyZSBkZWZpbml0ZWx5IHN0YXRpYywgYXMgdGhlIHBhdGNoIGNvbmZpcm1zIHRoaXMuIFNpbmNlIHRoZSBwcm9tcHQgZmF2b3JzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucywgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzZWVtcyB0byBiZSB0aGUgYmV0dGVyIGNob2ljZSBzaW5jZSBpdCBpcyBub3Qgc3RhdGljLiBPbiBzZWNvbmQgbG9vaywgSSBzaG91bGQgaW5jbHVkZSBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgd2hpY2ggaXMgYWxzbyBtb2RpZmllZCBhbmQgbm9uLXN0YXRpYy4gVGhlcmVmb3JlIEkgd2lsbCBnbyB3aXRoIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgbWFrZSBzdXJlIG15IHJlYXNvbmluZyBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMjowMy44NjA2Njk2MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODMzNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIyOTQ9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NwdV9jaGFyKHN0cnVjdCBrdm1fcHBjX2NwdV9jaGFyICpjcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIzNjItXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjM2MzppbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjM2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIyOjAzLjkzNDUwOTMwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyNjY4MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBLVk0gaW9jdGwgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ20gY29uZmlybWluZyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCwgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJdCBtZWFucyBpdCdzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSAqb3V0c2lkZSogdGhlIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLCB3aGljaCBpcyBhIGtleSBkZXNpZ24gY2hvaWNlIGluIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gaGFuZGxpbmcgVk0tc3BlY2lmaWMgaW9jdGxzLlxuXG5BbmQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLi4uIFllcywgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGlzIGFsc28gbm9uLXN0YXRpYywganVzdCBhcyBJIHN1c3BlY3RlZC4gVGhhdCdzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZS4gSXQncyB1c2VkIGZvciB2YWxpZGF0aW5nIGFuZCBtYW5hZ2luZyBLVk0gZXh0ZW5zaW9ucywgc28gaXQgcmVxdWlyZXMgYnJvYWRlciB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZnJvbSB0aGUgdXNlcnNwYWNlIHNpZGUsIHRvIGRldGVybWluZSB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIHRvIGEgc3BlY2lmaWMgVk0uIFRoaXMgYXJjaGl0ZWN0dXJlIG9mIHRoZSBpb2N0bCBmdW5jdGlvbnMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlc2UgZGVzaWduIGNob2ljZXMgYXJlIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQgdG8gc2VlIGluIGEgd2VsbC1zdHJ1Y3R1cmVkIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMjowOC40MDcxODIwOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTU2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NDc4PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy01MDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6NTAyOmludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNTAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjI6MDguNDcyNzQ0NzUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODY2MjQ1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUG93ZXJQQyBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0YXNrZWQgd2l0aCBvdXRsaW5pbmcgdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIHRoaXMgUG93ZXJQQyBLVk0gcGF0Y2guIExldCdzIGJyZWFrIGRvd24gbXkgdGhvdWdodCBwcm9jZXNzLlxuXG5GaXJzdCwgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYC4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLlxuXG5SaWdodCwgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgS1ZNYCwgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBXYWl0LCBhIHF1aWNrIGNoZWNrIHJlbWluZHMgbWUgdGhhdCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kcyBvbiBib3RoIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gR29vZCwgZ290IHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBlbmFibGluZyB0aGUgY29ycmVjdCBjb25maWdzIHdoZW4gSSBzZXQgdGhpcyB1cC5cblxuVGhlcmUncyBhbHNvIHRoYXQgYCNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKWAgaW4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBBaCwgcmlnaHQsIHRoYXQncyByZWxhdGVkIHRvIGBLVk1fQk9PSzNTXzY0X0hWYCwgc2luY2UgYEtWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHNlbGVjdGVkIGJ5IGl0LiBTbywgZW5hYmxpbmcgYEtWTV9CT09LM1NfNjRfSFZgIGVmZmVjdGl2ZWx5IGNvdmVycyB0aGF0IGNvbmRpdGlvbmFsIGNoZWNrLiBFeGNlbGxlbnQuIEknbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCdzIGV4cGxpY2l0bHkgc2V0LlxuXG5TaW5jZSBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIHRoZSBvbmx5IG9uZSB1c2VkLCBJIGNhbiBmZWVsIGNvbmZpZGVudCBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0aGUgbW9zdCByZWxldmFudC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcGF0Y2gncyBwdXJwb3NlLiBJdCdzIGludHJvZHVjaW5nIGEgbmV3IGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwgZm9yIFBvd2VyUEMgdG8gcXVlcnkgQ1BVIGNvbXBhdGliaWxpdHkuIFRoaXMgbWVhbnMgaXQncyBtb2RpZnlpbmcgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZGluZyBhIG5ldyBjYXBhYmlsaXR5IGNoZWNrLiBUaGlzIGlzIHVzZXItc3BhY2UgYWNjZXNzaWJsZSB2aWEgdGhlIEtWTSBBUEksIHNvIGZ1enppbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJlIHByb3BlciBoYW5kbGluZyBvZiB1c2VyIGlucHV0LCBzcGVjaWZpY2FsbHkgc2l6ZXMgYW5kIGZsYWdzIHBhc3NlZCB0byB0aGlzIG5ldyBpb2N0bC5cblxuT2theSwgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gSSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBJIGhhZCBhIG1vbWVudCBvZiBkb3VidCBhYm91dCBga3ZtX2FyY2hfdm1faW9jdGxgIGJlaW5nIHRvbyBnZW5lcmljLCBidXQgc2luY2UgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgKmFsbCogUG93ZXJQQyBWTSBpb2N0bHMgYW5kIHRoZSBuZXcgaW9jdGwgaGFuZGxpbmcgaXMgZGlyZWN0bHkgaW50ZWdyYXRlZCB3aXRoaW4gaXQgKHRoZSBgY2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzpgIGlzIGluc2lkZSB0aGUgc3dpdGNoIGluIGBrdm1fYXJjaF92bV9pb2N0bGApLCBJJ20gY29uZmlkZW50IHRoYXQgaXMgdGhlIHJpZ2h0IGNob2ljZS5cblxuVGhlIGFjdHVhbCBjYXBhYmlsaXR5IG1hcHBpbmcgbG9naWMgaXMgd2l0aGluIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIHRoZSBndWlkYW5jZSwgSSBjYW4ndCBsaXN0IGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBpZiB0aGVyZSdzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2VlIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpYC4gU2luY2UgaXQgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCB3b24ndCBiZSBpbmxpbmVkIGFuZCBpdCB3aWxsIGhhdmUgYSBzcGVjaWZpYyBzeW1ib2wgYWRkcmVzcy4gU3RpbGwsIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQuXG5cbklzIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbj8gTm8uXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gd3JpdGUgdXAgdGhlIHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxMiwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjI6MjguMzM4OTk1NzIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDYyMTU2LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0LCBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOViIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9CT09LM1NfNjRcIixcbiAgICBcIktWTV9CT09LM1NfNjRfSFZcIixcbiAgICBcIlBQQ19QT1dFUk5WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFZNIGlvY3RsIGhhbmRsZXIgYW5kIGFkZHMgYSBuZXcgY2FwYWJpbGl0eSBjaGVjay4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk0gQVBJIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGlvY3RsIGhhbmRsZXMgdXNlciBpbnB1dHMgKGxpa2Ugc2l6ZXMgYW5kIGZsYWdzKSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQsIEtWTV9CT09LM1NfNjRfSFYsIFBQQ19QT1dFUk5WXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIyOjI4LjQ3MzQ3NTEzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODU0NDY4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maWd1cmF0aW9uIEZpbGVzOiBBIFF1aWNrIERlYnVnKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGFyZSB5b3UgdGVsbGluZyBtZSB0aGVzZSBjb25maWd1cmF0aW9ucyAqYXJlbid0KiBzaG93aW5nIHVwPyBUaGF0J3MgdW51c3VhbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSB2YXJpYWJsZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBwcm9wZXJseS4gSXMgdGhlcmUgYSBzeW50YXggZXJyb3IgSSBtaXNzZWQ/IFBlcmhhcHMgYSBjb25kaXRpb25hbCB0aGF0J3MgdW5pbnRlbnRpb25hbGx5IHByZXZlbnRpbmcgdGhlIG9wdGlvbnMgZnJvbSBiZWluZyBleHBvc2VkPyBUaW1lIGZvciBhIGRlZXAgZGl2ZSBiYWNrIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyDigJMgbGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG92ZXJsb29rIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUgYnVpbGQgc3lzdGVtLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc2lsbHkgbGlrZSBhIG1pc3NpbmcgYHNvdXJjZWAgZGlyZWN0aXZlLCBhbiBpbmNvcnJlY3QgYGRlcGVuZHMgb25gLCBvciBwZXJoYXBzIGEgbWlzcGxhY2VkIGNvbW1lbnQuIEkgbmVlZCB0byBleGhhdXN0IGFsbCB0aGUgb2J2aW91cyBjdWxwcml0cyBmaXJzdCwgYmVmb3JlIGNvbnNpZGVyaW5nIGFueXRoaW5nIG1vcmUgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MjI6MzcuMzI3OTQ2MzAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk4MTMwOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mjk9Y29uZmlnIEtWTV9CT09LM1NfMzJfSEFORExFUlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz00NT1jb25maWcgS1ZNX0JPT0szU18zMlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjIyOjM5LjcyNjA4MzkwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjgzNjM3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBUb29sIFJlc3VsdHMqKlxuXG5Pa2F5LCBzbyB0aGUgdG9vbCBpcyBzYXlpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJ3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0J3MgYSBiaXQgcGVycGxleGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIG1heWJlIGl0J3MgY2hlY2tpbmcgdGhlIHg4Nl82NCB0cmVlIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJ3QgYWx3YXlzIHJlcHJlc2VudGF0aXZlLiBJIGtub3cgdGhlIHRvb2wgKnNob3VsZCogYmUgY2hlY2tpbmcgdGhlIGVudGlyZSBrZXJuZWwgdHJlZSwgYnV0IHBlcmhhcHMgaXRzIGNvbmZpZ3VyYXRpb24gY2hlY2tzIGFyZSBsaW1pdGVkIHRvIHg4NiBjb25maWd1cmF0aW9ucywgb3IgYXJlIHNlbnNpdGl2ZSB0byBhcmNoaXRlY3R1cmU/XG5cbldhaXQsIGhvbGQgb24sIGBzZXQtcmVzdWx0c2AgYWN0dWFsbHkgaGFzIGl0cyBvd24gaW50ZXJuYWwgbG9naWMgZm9yIHZhbGlkYXRpbmcgY29uZmlncyBhZ2FpbnN0IHRoZSBrZXJuZWwgdHJlZS4gSWYgaXQncyBzYXlpbmcgc29tZXRoaW5nICpkb2Vzbid0KiBleGlzdCwgdGhlbiBpdCBwcm9iYWJseSBtZWFucyBpdCdzIGdlbnVpbmVseSB1bmF2YWlsYWJsZSBpbiB0aGUgdHJlZSwgYXQgbGVhc3QgZm9yIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSwgeDg2XzY0LlxuXG5TaW5jZSB0aGlzIHBhdGNoIGlzIGZvciBQb3dlclBDLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNsdWRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBhcmNoLXNwZWNpZmljLCBhbmQgdGhhdCB0aGUgdG9vbCBkb2Vzbid0IGFjY2VwdC4gSWYgdGhlIHRvb2wgaXMgcmVqZWN0aW5nIGNlcnRhaW4gY29uZmlncywgbWF5YmUgSSBzaG91bGQgb21pdCB0aGVtIGFsdG9nZXRoZXIsIG9yIG9ubHkgaW5jbHVkZSBjb25maWdzIHRoYXQgYXJlIHZhbGlkIGFjcm9zcyBhcmNoaXRlY3R1cmVzP1xuXG5SaWdodCwgYHNldC1yZXN1bHRzYCBzcGVjaWZpY2FsbHkgcmVqZWN0ZWQgYEtWTV9CT09LM1NfNjRgLCBgS1ZNX0JPT0szU182NF9IVmAsIGFuZCBgUFBDX1BPV0VSTlZgLiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRoZSBiYXNpYyBgS1ZNYCBjb25maWd1cmF0aW9uIGlzIGFjY2VwdGVkLiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBiYXNlIG9mIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTE0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoyMjo0OS40MDk3MjQ2NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE3NjQ2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBWTSBpb2N0bCBoYW5kbGVyIGFuZCBhZGRzIGEgbmV3IGNhcGFiaWxpdHkgY2hlY2suIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNIEFQSSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBpb2N0bCBoYW5kbGVzIHVzZXIgaW5wdXRzIChsaWtlIHNpemVzIGFuZCBmbGFncykgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcmt2z[1] Phase: Succeeded StartedAt: 2026-08-06 20:23:01 +0000 UTC FinishedAt: 2026-08-06 20:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 20:23:01 +0000 UTC FinishedAt: 2026-08-06 20:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2] Phase: Succeeded StartedAt: 2026-08-06 20:23:01 +0000 UTC FinishedAt: 2026-08-06 21:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 20:23:01 +0000 UTC FinishedAt: 2026-08-06 21:14:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 20:23:01 +0000 UTC FinishedAt: 2026-08-06 20:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 20:23:01 +0000 UTC FinishedAt: 2026-08-06 20:23:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowcmt2z/series-workflowcmt2z-convert-artifact-1602117509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 20:23:11 +0000 UTC FinishedAt: 2026-08-06 20:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 20:23:11 +0000 UTC FinishedAt: 2026-08-06 20:44:29 +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:*2d22b603-4be9-4380-8d54-33a940945bbf,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-workflowcmt2z/series-workflowcmt2z-convert-artifact-1602117509/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": "667397af-236b-4580-a266-20697577a801", "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-workflowcmt2z/series-workflowcmt2z-build-action-1346181931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 20:23:11 +0000 UTC FinishedAt: 2026-08-06 20:44:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2d22b603-4be9-4380-8d54-33a940945bbf,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-workflowcmt2z/series-workflowcmt2z-convert-artifact-1602117509/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": "667397af-236b-4580-a266-20697577a801", "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-workflowcmt2z/series-workflowcmt2z-build-action-1346181931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 20:44:29 +0000 UTC FinishedAt: 2026-08-06 20:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 20:44:29 +0000 UTC FinishedAt: 2026-08-06 20:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 20:44:29 +0000 UTC FinishedAt: 2026-08-06 20:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 20:44:29 +0000 UTC FinishedAt: 2026-08-06 20:44:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowcmt2z/series-workflowcmt2z-convert-artifact-981109856/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 20:44:39 +0000 UTC FinishedAt: 2026-08-06 20:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 20:44:39 +0000 UTC FinishedAt: 2026-08-06 20:45:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*667397af-236b-4580-a266-20697577a801,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-workflowcmt2z/series-workflowcmt2z-build-action-1346181931/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-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 20:46:29 +0000 UTC FinishedAt: 2026-08-06 20:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 20:46:29 +0000 UTC FinishedAt: 2026-08-06 20:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 20:46:29 +0000 UTC FinishedAt: 2026-08-06 21:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 20:46:29 +0000 UTC FinishedAt: 2026-08-06 21:07: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:*2d22b603-4be9-4380-8d54-33a940945bbf,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-workflowcmt2z/series-workflowcmt2z-convert-artifact-981109856/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": "33a41522-47ee-480d-b637-f16c56a312eb", "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-workflowcmt2z/series-workflowcmt2z-build-action-2498558236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 20:46:29 +0000 UTC FinishedAt: 2026-08-06 21:07:06 +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:*2d22b603-4be9-4380-8d54-33a940945bbf,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-workflowcmt2z/series-workflowcmt2z-convert-artifact-981109856/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": "33a41522-47ee-480d-b637-f16c56a312eb", "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-workflowcmt2z/series-workflowcmt2z-build-action-2498558236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 21:07:16 +0000 UTC FinishedAt: 2026-08-06 21:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 21:07:16 +0000 UTC FinishedAt: 2026-08-06 21:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 21:07:16 +0000 UTC FinishedAt: 2026-08-06 21:09:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 21:07:16 +0000 UTC FinishedAt: 2026-08-06 21:09:20 +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:*33a41522-47ee-480d-b637-f16c56a312eb,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-workflowcmt2z/series-workflowcmt2z-build-action-2498558236/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-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:14:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"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:*667397af-236b-4580-a266-20697577a801,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*33a41522-47ee-480d-b637-f16c56a312eb,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-workflowcmt2z/series-workflowcmt2z-build-action-1346181931/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-workflowcmt2z/series-workflowcmt2z-build-action-2498558236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:09:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"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-workflowcmt2z/series-workflowcmt2z-convert-artifact-1586408121/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:09:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:09:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 21:09:30 +0000 UTC FinishedAt: 2026-08-06 21:09:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 21:09:40 +0000 UTC FinishedAt: 2026-08-06 21:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmt2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_check_extension"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7fe6ec21-a191-4629-9759-add5e40fe457","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 21:09:40 +0000 UTC FinishedAt: 2026-08-06 21:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*667397af-236b-4580-a266-20697577a801,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*33a41522-47ee-480d-b637-f16c56a312eb,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-workflowcmt2z/series-workflowcmt2z-build-action-1346181931/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-workflowcmt2z/series-workflowcmt2z-build-action-2498558236/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-workflowcmt2z/series-workflowcmt2z-convert-artifact-1586408121/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,}