Name: series-workflow28k7r Phase: Succeeded StartedAt: 2026-09-15 11:27:01 +0000 UTC FinishedAt: 2026-09-15 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[0] Phase: Succeeded StartedAt: 2026-09-15 11:27:01 +0000 UTC FinishedAt: 2026-09-15 11:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 11:27:01 +0000 UTC FinishedAt: 2026-09-15 11:52:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE", "EVENTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE", "EVENTFD" ], "series_id": "189afd96-17fb-4251-b89e-b185cda5460a" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_scsi_send_evt", "vhost_scsi_complete_events", "__vhost_scsi_complete_events", "vhost_scsi_evt_work", "vhost_scsi_evt_handle_kick", "vhost_scsi_do_plug", "vhost_scsi_do_evt_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfc2VuZF9ldnQmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF93b3JrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fcGx1ZyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX2V2dF93b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmVjdXJzaXZlIG11dGV4IGRlYWRsb2NrIGFuZCBhbiBldmVudCBvcmRlcmluZyBpc3N1ZSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYzpcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVx1MDAzZW11dGV4IChlLmcuLCBmcm9tIHZob3N0X3Njc2lfZG9fcGx1ZygpIG9yIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKCkpLiBJZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCBpdCBjYWxsZWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSwgd2hpY2ggYXR0ZW1wdGVkIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYWdhaW4sIHJlc3VsdGluZyBpbiBhIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhlIHBhdGNoIHNwbGl0cyBvdXQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpICh3aGljaCBhc3N1bWVzIHZxLVx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxuMi4gRXZlbnQgb3JkZXJpbmc6IEl0IGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByb2Nlc3MgZXZlbnRzIGluIEZJRk8gb3JkZXIgcmF0aGVyIHRoYW4gTElGTyBvcmRlci5cblxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2YTJkNzQzMzk1YTQ0NTQzOWZiZDgzZjNjNjk0MDg0MTU3ZTZiYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0ODoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICYjNDM7NjMwLDI2IEBAIHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbiBcdHZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4mIzQzO1x0bGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbGlzdF9kZWxfYWxsKFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHtcbiBcdFx0aWYgKCFkcm9wKVxuIFx0XHRcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7XG4gXHRcdHZob3N0X3Njc2lfZnJlZV9ldnQodnMsIGV2dCk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gfVxuIFxuQEAgLTE4MjksNyAmIzQzOzE4MzYsNyBAQCB2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXG4gXHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuIFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF93b3JrKSlcbi1cdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuJiM0MztcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfc2VuZF9ldnQmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF93b3JrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fcGx1ZyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX2V2dF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBldmVudCBjb21wbGV0aW9uIGFuZCBkaXNwYXRjaCBsb2dpYyBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSXQgc3BsaXRzIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgaW50byBhbiB1bmxvY2tlZCBoZWxwZXIgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aGVuIHZxLVx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCBieSBjYWxsZXJzIG9mIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgYW5kIGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByZXNlcnZlIGV2ZW50IG9yZGVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvZGV2L3Zob3N0LXNjc2kgYW5kIHZpcnRxdWV1ZSBraWNrcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDdhMWYzOWEzMjdkYTYuLjljZDE4MWNiMWNjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC02MzAsMTkgJiM0Mzs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KQogCXZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pOwogfQogCi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovCiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnMtJmd0O3Zxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7CiAJc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0OwogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiAKLQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHsKIAkJaWYgKCFkcm9wKQogCQkJdmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTsKIAkJdmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIH0KIApAQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAogCWxsaXN0X2FkZCgmYW1wO2V2dC0mZ3Q7bGlzdCwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCk7CiAJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKLQkJdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwomIzQzOwkJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzUyCgkJCQkJCQlvdXRwdXQ6IDEwNQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBTQ1NJIHZpcnR1YWwgaG9zdCBkcml2ZXIgcmVzaWRlcywgc28gdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGhvc3QgaW50ZXJhY3RzIHdpdGggdmlydHVhbCBTQ1NJIGRldmljZXMuIEdvb2QuIExldCYjMzk7cyBkZWx2ZSBpbi4KCk15IGd1dCByZWFjdGlvbiBpcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mICp3aGVyZSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgbGFyZ2VyIGNvZGUgc3RydWN0dXJlLiBJJiMzOTtsbCB1c2UgdG9vbHMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIOKAkyBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgZmlsZSBpZiBuZWVkZWQsIG9yIGBncmVwcGVyYCDigJMgdG8gcGlucG9pbnQgdGhlIG1vZGlmaWNhdGlvbnMgYXJvdW5kIHRoZSBtb3N0IGxpa2VseSBhcmVhcyBmb3IgdGhpcyBjaGFuZ2UuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgNjMwIGFuZCAxODI5IG1pZ2h0IGJlIHByaW1lIHNwb3RzLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUuIEkgbmVlZCB0byBnZXQgY29udGV4dCwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBpbiBjYXNlIHRoaXMgY2hhbmdlIGlzIGNvbmRpdGlvbmFsLiBJcyBgdmhvc3Qtc2NzaWAgZXZlbiBlbmFibGVkPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBiZWZvcmUgZGlnZ2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSBmYWxzZTtcbiA2MjE6XHRcdH1cbiA2MjI6XHRcbiA2MjM6XHRcdGV2ZW50cCA9IHZxLVx1MDAzZWlvdltvdXRdLmlvdl9iYXNlO1xuIDYyNDpcdFx0cmV0ID0gX19jb3B5X3RvX3VzZXIoZXZlbnRwLCBldmVudCwgc2l6ZW9mKCpldmVudCkpO1xuIDYyNTpcdFx0aWYgKCFyZXQpXG4gNjI2Olx0XHRcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSwgaGVhZCwgMCk7XG4gNjI3Olx0XHRlbHNlXG4gNjI4Olx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXG5cJiMzNDspO1xuIDYyOTpcdFxuIDYzMDpcdFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gNjMxOlx0fVxuIDYzMjpcdFxuIDYzMzpcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiA2MzQ6XHRzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIDYzNTpcdHtcbiA2MzY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiA2Mzc6XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gNjM4Olx0XG4gNjM5Olx0XHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIDY0MDpcdFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIDY0MTpcdFx0XHRpZiAoIWRyb3ApXG4gNjQyOlx0XHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiA2NDM6XHRcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiA2NDQ6XHRcdH1cbiA2NDU6XHR9XG4gNjQ2Olx0XG4gNjQ3Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4gNjQ4Olx0e1xuIDY0OTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDY1MDpcdFxuIDY1MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjUyOlx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiA2NTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjU0Olx0fVxuIDY1NTpcdFxuIDY1NjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4gNjU3Olx0e1xuIDY1ODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxuIDY1OTpcdFx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuIDY2MDpcdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbiA2NjE6XHR9XG4gNjYyOlx0XG4gNjYzOlx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcbiA2NjQ6XHR7XG4gNjY1Olx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIgPSBjbWQtXHUwMDNlcmVhZF9pdGVyO1xuIDY2NjpcdFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiA2Njc6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDY2ODpcdFx0c2l6ZV90IGxlbjtcbiA2Njk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcbjE4MjE6XHRcdGlmICghZXZ0KVxuMTgyMjpcdFx0XHRyZXR1cm47XG4xODIzOlx0XG4xODI0Olx0XHRpZiAodHBnIFx1MDAyNlx1MDAyNiBsdW4pIHtcbjE4MjU6XHRcdFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xuMTgyNjpcdFx0XHQvKlxuMTgyNzpcdFx0XHQgKiBOb3RlOiBldnQtXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXG4xODI4Olx0XHRcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cbjE4Mjk6XHRcdFx0ICovXG4xODMwOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xuMTgzMTpcdFx0XHRldnQtXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVx1MDAzZXRwb3J0X3RwZ3Q7XG4xODMyOlx0XHRcdGlmIChsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZT0gMjU2KVxuMTgzMzpcdFx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZVx1MDAzZSA4IHwgMHg0MCA7XG4xODM0Olx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAyNiAweEZGO1xuMTgzNTpcdFx0fVxuMTgzNjpcdFxuMTgzNzpcdFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbjE4Mzg6XHRcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4xODM5Olx0XHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuMTg0MDpcdH1cbjE4NDE6XHRcbjE4NDI6XHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbjE4NDM6XHR7XG4xODQ0Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxuMTg0NTpcdFx0XHRcdFx0XHRcdHBvbGwud29yayk7XG4xODQ2Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcbjE4NDc6XHRcbjE4NDg6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuMTg0OTpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4xODUwOlx0XHRcdGdvdG8gb3V0O1xuMTg1MTpcdFxuMTg1MjpcdFx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG4xODUzOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxuMTg1NDpcdFx0XHRcdFx0ICAgIDApO1xuMTg1NTpcdG91dDpcbjE4NTY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODU3Olx0fVxuMTg1ODpcdFxuMTg1OTpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1NDU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz0zND1jb25maWcgVkhPU1RfTkVUXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjQ2OmNvbmZpZyBWSE9TVF9TQ1NJXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgVkhPU1RfU0NTSSBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBWSE9TVF9TQ1NJYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgcGFydGljdWxhciB2aG9zdCB0YXJnZXQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB2aG9zdCBmcmFtZXdvcmsuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGNoYW5nZWQgc2V0dGluZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQsIHBhcnRpY3VsYXJseSBhcm91bmQgc2VjdXJpdHkgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nLCBvciBoaWRkZW4gZmVhdHVyZXMgdGhhdCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHRoYXQgY291bGQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIGluIGEgcGFydGljdWxhciB2aXJ0dWFsaXplZCBzZXR1cD8gVGltZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxuICA0MTpcdFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICA0NDpcdFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDQ5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNTA6XHRcdHNlbGVjdCBTR19QT09MXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXG4gIDU0Olx0XHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFZIT1NUX1ZTT0NLXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDU5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNjA6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDYxOlx0XHRkZWZhdWx0IG5cbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXG4gIDY0Olx0XHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IHN1aXRhYmxlIGZvciBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBDb21taXQgRGV0YWlscyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIGNvbW1pdC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCBhbmQgd2h5LiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29tbWl0IG1lc3NhZ2UuIEEgd2VsbC13cml0dGVuIG9uZSBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBoaWdoLWxldmVsIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSB1cGRhdGUuIEnigJltIGhvcGluZyBpdOKAmXMgaW5mb3JtYXRpdmUgYW5kIGRvZXNuJiMzOTt0IGp1c3Qgc2F5IOKAnGZpeGVkIGEgYnVnLuKAnSBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGxpbmUsIGNvbnNpZGVyaW5nIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uCgpUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBmdWxsIGNvbW1pdCBsb2cuIFNvLCBJIHdpbGwgcnVuIGBnaXQgbG9nYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgaGlzdG9yeSBhbmQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBldm9sdXRpb24gb2YgdGhpcyBjb2RlLCBhcyB3ZWxsIGFzIGFueSByZWxhdGVkIGNvbW1pdHMgdGhhdCBtaWdodCBwcm92aWRlIGZ1cnRoZXIgY2x1ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVkIGZsYWdzLiBBIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgY29tbWl0IGhpc3RvcnkgaXMgdml0YWwgZm9yIHByb3BlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxpc3RfcmV2ZXJzZV9vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTYzND1zdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzOC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzOTpcdGxsbm9kZSA9IGxsaXN0X3JldmVyc2Vfb3JkZXIobGxpc3RfZGVsX2FsbChcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDAtXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFNpbmNlIEkgYWxyZWFkeSBrbm93IHRoZSBmdW5jdGlvbiBpdHNlbGYsIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7V2hvJiMzOTtzIGNhbGxpbmcgaXQ/JiMzNDsgVGhpcyBpcyBhIGtleSBlbnRyeSBwb2ludCwgbGlrZWx5IGZvciBzaWduYWxpbmcgc29tZXRoaW5nIGltcG9ydGFudCB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZnJhbWV3b3JrLCBwcm9iYWJseSBhbiBldmVudCByZWxhdGVkIHRvIHRoZSBTQ1NJIHRyYW5zcG9ydC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHBpbnBvaW50IHRoZSBleGFjdCBldmVudHMgb3IgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgZXZlbnQgc2VuZHMuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIHRoZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGZyb20gYSBjb250cm9sIHBsYW5lIGFzcGVjdC4gV2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlIHN5c3RlbSB0aGF0JiMzOTtzIHByb21wdGluZyB0aGlzIGNhbGw/IFRoZSBtb3JlIEkgdW5kZXJzdGFuZCBhYm91dCB0aGUgY2FsbGVycywgdGhlIGJldHRlciBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW1zLiBOb3cgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBpdCBzZWVtcyB3ZSYjMzk7cmUgZ3JhYmJpbmcgYHZxLSZndDttdXRleGAgZmlyc3QgdGhpbmcuIE1ha2VzIHNlbnNlLCBwcm90ZWN0cyB0aGUgdnEgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4gVGhlbiB3ZSBjYWxsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC4gIEluc2lkZSBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIHdlJiMzOTtyZSBhZGRpbmcgYW4gZXZlbnQgdG8gYSBsaXN0IGFuZCAqY29uZGl0aW9uYWxseSogcXVldWluZyB3b3JrLiBTcGVjaWZpY2FsbHksIGlmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5zIGZhbHNlLCB3ZSBjYWxsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLiBBaCwgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLgoKQmVmb3JlLCBpZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJuZWQgZmFsc2UsIGl0IHdvdWxkIGNhbGwgIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIE5vdyB0aGUgcmVkIGZsYWcgaXMgdXAhIFdoeT8gQmVjYXVzZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGl0c2VsZiBsb2NrcyBgdnEtJmd0O211dGV4YCEgQmluZ28hCgpJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSBpbiB0aGUgZmlyc3QgY2FsbCBhZnRlciB3ZSBsb2NrZWQgYHZxLSZndDttdXRleGAsICB3ZSBlbmQgdXAgaW4gYSBkZWFkbG9jayEgIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgaGFzIHRoZSBsb2NrIGFuZCB0aGVuIHdlICpyZS1lbnRlciogYW5kIGF0dGVtcHQgdG8gZ3JhYiBpdCBhZ2Fpbi4gIENsYXNzaWMuCgpOb3csIGhvbGQgb24uIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBoYXZlIGJlZW4gcHJldHR5IGNvbW1vbiwgd2FzIGl0IG1pc3NlZD8gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgY29kZSBwYXRoIHRoYXQgY2FuIGF2b2lkIGl0PyBMZXQgbWUgY2hlY2sgdG8gc2VlIGlmIGB2cS0mZ3Q7bXV0ZXhgIG1pZ2h0IGFscmVhZHkgYmUgaGVsZCBpbiBgdmhvc3Rfc2NzaV9kb19wbHVnYD8gVGltZSB0byBqdW1wIG92ZXIgdG8gbGluZXMgMjUwMC0yNTQwIG9mIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTAwOlx0XHRyZXR1cm4gXCYjMzQ7VW5rbm93blwmIzM0OztcbjI1MDE6XHR9XG4yNTAyOlx0XG4yNTAzOlx0c3RhdGljIHZvaWRcbjI1MDQ6XHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4yNTA1Olx0XHRcdCAgc3RydWN0IHNlX2x1biAqbHVuLCBib29sIHBsdWcpXG4yNTA2Olx0e1xuMjUwNzpcdFxuMjUwODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gdHBnLVx1MDAzZXZob3N0X3Njc2k7XG4yNTA5Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbjI1MTA6XHRcdHUzMiByZWFzb247XG4yNTExOlx0XG4yNTEyOlx0XHRpZiAoIXZzKVxuMjUxMzpcdFx0XHRyZXR1cm47XG4yNTE0Olx0XG4yNTE1Olx0XHRpZiAocGx1ZylcbjI1MTY6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcbjI1MTc6XHRcdGVsc2VcbjI1MTg6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFTU9WRUQ7XG4yNTE5Olx0XG4yNTIwOlx0XHR2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4yNTIxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MjI6XHRcdC8qXG4yNTIzOlx0XHQgKiBXZSBjYW4mIzM5O3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcbjI1MjQ6XHRcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXG4yNTI1Olx0XHQgKi9cbjI1MjY6XHRcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxuMjUyNzpcdFx0XHRnb3RvIHVubG9jaztcbjI1Mjg6XHRcbjI1Mjk6XHRcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbjI1MzA6XHRcdFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIHRwZywgbHVuLFxuMjUzMTpcdFx0XHRcdFx0ICAgVklSVElPX1NDU0lfVF9UUkFOU1BPUlRfUkVTRVQsIHJlYXNvbik7XG4yNTMyOlx0dW5sb2NrOlxuMjUzMzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MzQ6XHR9XG4yNTM1Olx0XG4yNTM2Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXG4yNTM3Olx0e1xuMjUzODpcdFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCB0cnVlKTtcbjI1Mzk6XHR9XG4yNTQwOlx0XG4yNTQxOlx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3R1bnBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcbjI1NDI6XHR7XG4yNTQzOlx0XHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIGZhbHNlKTtcbjI1NDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGZ1bmN0aW9uIGNhbGxzLCBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7dmUgbm90aWNlZCBhIHNpZ25pZmljYW50IHBhdHRlcm46IGluIGJvdGggYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AsIHRoZSBgdnEtJmd0O211dGV4YCBpcyBjb25zaXN0ZW50bHkgaGVsZCAqYmVmb3JlKiBjYWxsaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC4gVGhpcyBtZWFucyB0aGF0IGB2cS0mZ3Q7bXV0ZXhgIGlzIEFMV0FZUyBsb2NrZWQgd2hlbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKVGhlIGtleSBpc3N1ZSwgYXMgSSBzZWUgaXQsIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBDYWxsaW5nIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgIGZyb20gd2l0aGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCAqd2hlbiogYCF2aG9zdF92cV93b3JrX3F1ZXVlYCB3YXMgYSBodWdlIHJlZCBmbGFnIGJlY2F1c2UgaXQgaW50cm9kdWNlZCBhIHBvdGVudGlhbCBzZWxmLWRlYWRsb2NrLiBUaGF0JiMzOTtzIGJlY2F1c2UgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpdHNlbGYgd2FzIGF0dGVtcHRpbmcgdG8gbG9jayB0aGUgc2FtZSBgdnEtJmd0O211dGV4YCBpdCB3YXMgYWxyZWFkeSBob2xkaW5nLiBDbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLgoKVGhlIG90aGVyIHRoaW5nIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIG1lIGlzIHRoZSBjaGFuZ2UgdGhhdCB3YXMgbWFkZSB3aXRoIHRoZSBwYXRjaCwgdGhlIGFkZGl0aW9uIG9mIGBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpYCBpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoaXMgaW5kaWNhdGVzIGFuIGV4cGxpY2l0IGVmZm9ydCB0byBlbnN1cmUgdGhhdCBldmVudHMgYXJlIG5vdyBwcm9jZXNzZWQgaW4gRklGTyBvcmRlci4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIHRob3VnaCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGhvdyBgdmhvc3Qtc2NzaWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXIgb3IgYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2Vyc3BhY2Ugc2lkZSBpbnRlcmFjdHMgd2l0aCBgdmhvc3Rfc2NzaWAgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgd2hldGhlciBvciBub3QgYC9kZXYvdmhvc3Qtc2NzaWAgZXZlbiBleGlzdHMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIHJlYWNoYWJpbGl0eSBxdWVzdGlvbiBpcyB2aXRhbCBmb3IgcmVwcm9kdWNpbmcgdGhlIGRlYWRsb2NrIGFuZCBvdGhlciBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pc2NfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTg5ND1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9uZXRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5Ny1cdFx0dmhvc3RfbmV0X2VuYWJsZV96Y29weShWSE9TVF9ORVRfVlFfVFgpO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxODk4Olx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3RfbmV0X21pc2MpO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xODk5LX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDc3PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Njc2lfcmVnaXN0ZXIodm9pZClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Nzgte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ3OTpcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgwLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTkwPXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Zzb2NrX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk4LVxuZHJpdmVycy92aG9zdC92c29jay5jOjk5OTpcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3RfdnNvY2tfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwMC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3Qtc2NzaSBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAgaXMgcmVnaXN0ZXJlZCB1c2luZyBgbWlzY19yZWdpc3RlcigmYW1wO3Zob3N0X3Njc2lfbWlzYylgLiBUaGF0IG1lYW5zIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZG93biB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZGV2aWNlIGRyaXZlciBieSBsb29raW5nIGF0IHRoZSBgdmhvc3Rfc2NzaV9taXNjYCBzdHJ1Y3R1cmUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBkZWZpbmVkIGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggbWFuYWdpbmcgdGhlIHZpcnR1YWwgU0NTSSBob3N0IHdpdGhpbiB0aGUgdmhvc3QgZnJhbWV3b3JrLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQhIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG1pc2MgZGV2aWNlIGZyYW1ld29yayBhbmQgaG93IHRoZSBkcml2ZXIgZ2V0cyBpbml0aWFsaXplZCBhbmQgaG93IGl0IGhhbmRsZXMgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX21pc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDcxOnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF9zY3NpX21pc2MgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcyLVx0TUlTQ19EWU5BTUlDX01JTk9SLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3OC17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDc5Olx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODAtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0ODI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kZXJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0ODQ6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgYnVzaW5lc3MuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIGB2aG9zdF9zY3NpX2ZvcHNgIFN0cnVjdHVyZTogRGVjb2RpbmcgdGhlIFNDU0kgVmlydHVhbGl6YXRpb24qKgoKUmlnaHQsIGB2aG9zdF9zY3NpX2ZvcHNgLiBUaGF0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBTQ1NJIGRldmljZSB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIGluIGl0PyBQcm9iYWJseSBwb2ludGVycyB0byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvcmUgU0NTSSBvcGVyYXRpb25zOiBJL08gcmVxdWVzdHMsIHF1ZXVlIG1hbmFnZW1lbnQsIGRldmljZSByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24sIGVycm9yIGhhbmRsaW5n4oCmIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSYjMzk7cmUgYWJzdHJhY3RpbmcgYSBibG9jayBkZXZpY2UuCgpJJiMzOTttIGFzc3VtaW5nIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgaXMgaG93IHRoZSBob3N0IGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHVhbCBTQ1NJIGRldmljZSBwcmVzZW50ZWQgdG8gdGhlIGd1ZXN0LiBJdCYjMzk7cyB0aGUgYnJpZGdlLiBXZSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBtYXBzIHRoZSBndWVzdCYjMzk7cyBTQ1NJIGNvbW1hbmRzIGludG8gc29tZXRoaW5nIHRoZSBob3N0JiMzOTtzIHVuZGVybHlpbmcgc3RvcmFnZSBjYW4gdW5kZXJzdGFuZCDigJMgcHJvYmFibHkgdXNpbmcgdGhlIHVzdWFsIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIHRvIGVmZmljaWVudGx5IGhhbmRsZSBkYXRhIHRyYW5zZmVycy4gQXJlIHdlIGxvb2tpbmcgYXQgYSBzdHJhaWdodCBwYXNzdGhyb3VnaCBvciBpcyB0aGVyZSBzb21lIHRyYW5zbGF0aW9uIGxheWVyPyBIb3BlZnVsbHksIGl0JiMzOTtzIGVmZmljaWVudCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBvdmVyaGVhZCBvZiB2aXJ0dWFsaXphdGlvbi4KClRoZSBkZXNpZ24gc2hvdWxkIGNvbnNpZGVyIHRoZSBzaGFyZWQgbWVtb3J5IGludGVyZmFjZSwgcmlnaHQ/IElzIHRoaXMgYHZob3N0X3Njc2lfZm9wc2Agc3RydWN0dXJlIGludGltYXRlbHkgdGllZCBpbnRvIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24gZm9yIHRoZSByaW5nIGJ1ZmZlcnMgYW5kIHRoZSBkZXNjcmlwdG9ycz8gSXQgaGFzIHRvIGJlLCBvciBpdCYjMzk7ZCBiZSBpbmNyZWRpYmx5IGluZWZmaWNpZW50LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGRhdGEgaXMgcGFzc2VkIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBndWVzdCwgZXNwZWNpYWxseSB0aGUgc3RhdHVzIHJlcG9ydHMuIElzIHRoZXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucz8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBTQ1NJIGlzIGtub3duIGZvciBpdHMgbnVhbmNlZCBlcnJvciBjb2Rlcy4gSG93IGlzIHRoaXMgdmhvc3QgbGF5ZXIgbWFwcGluZyB0aG9zZSBTQ1NJIHNlbnNlIGNvZGVzIGJhY2sgdG8gdGhlIGd1ZXN0PyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMsIGxpa2UgYXV0b21hdGljIHJldHJpZXMsIGltcGxlbWVudGVkIGhlcmU/IEkmIzM5O2QgZXhwZWN0IGdvb2QgZXJyb3IgcHJvcGFnYXRpb24gYW5kIG1hbmFnZW1lbnQgdG8gYmUgY3J1Y2lhbCBmb3IgcmVsaWFiaWxpdHkuIEFuZCB3aGF0IGFib3V0IHNlY3VyaXR5PyBEb2VzIHRoZSBgdmhvc3Rfc2NzaV9mb3BzYCBzdHJ1Y3R1cmUgdGFrZSBhbnkgbWVhc3VyZXMgdG8gdmFsaWRhdGUgdGhlIGNvbW1hbmRzIGNvbWluZyBmcm9tIHRoZSBndWVzdCB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5hdXRob3JpemVkIGFjY2Vzcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ2MDpcdH1cbjI0NjE6XHRcbjI0NjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG4yNDYzOlx0XHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbjI0NjQ6XHRcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcbjI0NjU6XHRcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Njc2lfaW9jdGwsXG4yNDY2Olx0XHQuY29tcGF0X2lvY3RsXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXG4yNDY3Olx0XHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9zY3NpX29wZW4sXG4yNDY4Olx0XHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4yNDY5Olx0fTtcbjI0NzA6XHRcbjI0NzE6XHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3Rfc2NzaV9taXNjID0ge1xuMjQ3MjpcdFx0TUlTQ19EWU5BTUlDX01JTk9SLFxuMjQ3MzpcdFx0XCYjMzQ7dmhvc3Qtc2NzaVwmIzM0OyxcbjI0NzQ6XHRcdFx1MDAyNnZob3N0X3Njc2lfZm9wcyxcbjI0NzU6XHR9O1xuMjQ3NjpcdFxuMjQ3NzpcdHN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Njc2lfcmVnaXN0ZXIodm9pZClcbjI0Nzg6XHR7XG4yNDc5Olx0XHRyZXR1cm4gbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBMYW5kc2NhcGUqKgoKT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAuLi4gdGhpcyBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgYSBtaXNjIGRldmljZSB0aGF0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoLCBhcyBhIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2hlciwgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgZmFjdCB0aGF0IHN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciBvcGVyYXRpb25zIGxpa2UgYG9wZW5hdCR2aG9zdF9zY3NpYCBhbmQgYGlvY3RsJHZob3N0X3Njc2lfKmAgbWVhbnMgaXQmIzM5O3MgYWxyZWFkeSBhIHRhcmdldCBmb3IgZnV6emluZywgbGlrZWx5IGZvciBnb29kIHJlYXNvbi4gTXkgaW50dWl0aW9uIGlzIGNvbmZpcm1lZC4KCkZ1cnRoZXJtb3JlLCB0aGUgVENNIGZhYnJpYyBhbmQgYHRhcmdldF9jb3JlYCBhcmUgdXNpbmcgY29uZmlnZnMgdG8gbWFuYWdlIHRhcmdldCBwb3J0cyBhbmQgTFVOcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2V0dXAsIGFuZCB0aGUgaG90cGx1Zy9ob3R1bnBsdWcgbWVjaGFuaXNtcywgbmFtZWx5IGB2aG9zdF9zY3NpX2hvdHBsdWdgIGFuZCBgdmhvc3Rfc2NzaV9ob3R1bnBsdWdgLCBhcmUgd2hhdCBJ4oCZbSBtb3N0IGludGVyZXN0ZWQgaW4uIFRoZSBpbnRlcnBsYXkgd2l0aCB1c2Vyc3BhY2Uga2lja2luZyB0aGUgZXZlbnQgdmlydHF1ZXVlIHZpYSBgZXZlbnRmZGAgb3IgYGlvY3RsYCBpcyBhbm90aGVyIHByb21pc2luZyBhbmdsZS4gQSBraWNrIGZyb20gdXNlcnNwYWNlIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgdG8gYSBidWcuCgpSaWdodCwgc28gd2hlcmUgZG9lcyBhbGwgdGhpcyBjb252ZXJnZT8gTGV0JiMzOTtzIHRyYWNlIGhvdyB0aGUgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIFNpbmNlIGl0JiMzOTtzIHRoZSB3b3JrIGNhbGxiYWNrLCB0cmlnZ2VyZWQgYnkgdGhlIHZpcnRxdWV1ZSBraWNrLCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgYmVpbmcgKnNldCB1cCouIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEdvdHRhIGRpZyBpbnRvIHdoZXJlIHRoYXQmIzM5O3MgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdCYjMzk7cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzcGVjaWZpYyB2aXJ0cXVldWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODE0PXZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTg0MjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIyOTU9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzNy1cdHZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0NUTF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljaztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMzg6XHR2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxLmhhbmRsZV9raWNrID0gdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzM5LVx0Zm9yIChpID0gVkhPU1RfU0NTSV9WUV9JTzsgaSBcdTAwM2MgbnZxczsgaSYjNDM7JiM0MzspIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gYSBgVkhPU1RfU0NTSV9WUV9FVlRgIGtpY2sgZXZlbnQgdHJpZ2dlcnMgdGhlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBOb3csIEkgbmVlZCB0byBzZWUgd2hhdCBhY3R1YWxseSBoYXBwZW5zICphZnRlciogdGhlIGtpY2suIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGB2aG9zdF9zY3NpX2V2dF93b3JrYCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBBaCwgdGhlcmUgaXQgaXM6IGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO2AuIFRoYXQgbG9va3MgbGlrZSB0aGUgY29yZSB3b3JrLCBwcmVzdW1hYmx5IGNvbXBsZXRpbmcgc29tZSBTQ1NJIGV2ZW50cy4gQnV0IHdoZXJlIGlzIGB2cy0mZ3Q7dnNfZXZlbnRfd29ya2AgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIG91dCB3aGVuIGFuZCBob3cgdGhhdCYjMzk7cyBzZXQgdXAuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZXZlbnRzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yay4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIHdvcmsgcXVldWUgaXMgZXN0YWJsaXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZzX2V2ZW50X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4Olx0c3RydWN0IHZob3N0X3dvcmsgdnNfZXZlbnRfd29yazsgLyogZXZ0IGluamVjdGlvbiB3b3JrIGl0ZW0gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0OS1cdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz02NTY9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTgtXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XHRcdFx0XHRcdCAgICAgdnNfZXZlbnRfd29yayk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MzctXHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzODpcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjk1PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzMwOlx0dmhvc3Rfd29ya19pbml0KFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmssIHZob3N0X3Njc2lfZXZ0X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZob3N0LXNjc2lgIENvZGUgUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgYSBzcGVjaWZpYyBjb2RlIHBhdGggd2l0aGluIHRoZSBgdmhvc3Qtc2NzaWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGV2ZW50IGhhbmRsaW5nIGFuZCB3b3JrIHF1ZXVlIHByb2Nlc3NpbmcuIEkgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgdnMtJmd0O3ZzX2V2ZW50X3dvcmtgIHdpdGggYHZob3N0X3Njc2lfZXZ0X3dvcmtgIGFuZCBob3cgdGhhdCB0cmlnZ2VycyBhIHNlcXVlbmNlOiBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgY2FsbHMgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgd2hpY2ggdGhlbiBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFdpdGhpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIEkmIzM5O20gbm90aW5nIHRoZSB1c2Ugb2YgYW4gYGxsaXN0YCAobG9ja2xlc3MgbGlzdCkgZm9yIGV2ZW50IG1hbmFnZW1lbnQuIEV2ZW50cyBhcmUgYWRkZWQgdXNpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGFuZCBxdWV1ZWQgZm9yIGNvbXBsZXRpb24uIEEga2V5IGRldGFpbCBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZ1bmN0aW9uLCB3aXRoIGEgcG90ZW50aWFsIGZhbGxiYWNrIHBhdGggdG8gdHJpZ2dlciB0aGUgZXZlbnQgY29tcGxldGlvbiBzeW5jaHJvbm91c2x5IGlmIHF1ZXVlaW5nIGZhaWxzLiBBbGwgb2YgdGhpcyBpcyBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgIHdoaWNoIG1ha2VzIGl0IHZlcnkgaW50ZXJlc3RpbmcuCgpHaXZlbiB0aGF0IHRoaXMgaXMgYWxsIGNsZWFybHkgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUga2VybmVsLCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCB0aGF0IHJ1bGVzIG91dCB0aGUgc3RhbmRhcmQganVzdGlmaWNhdGlvbnMgZm9yIGV4Y2x1ZGluZyBpdCBmcm9tIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBub24ta2VybmVsLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHVucmVhY2hhYmxlIHZpYSBleGVjdXRpb24gcGF0aHMuCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6ICoqV29ydGhGdXp6aW5nID0gdHJ1ZSEqKgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZnV6emluZyBpdC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMsIGZvY3VzIHN5bWJvbHMsIGFuZCBmaW5hbGx5IHRoZSBmdXp6aW5nIHJlYXNvbmluZy4gTXkgbmV4dCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgdGhlIGJ1aWxkLiBJIHNlZSB0aGF0IHRoZSBgVkhPU1RfU0NTSWAgZHJpdmVyIHJlbGllcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIFRoaXMgZHJpdmVyIGhhcyBhIGBLY29uZmlnYCBlbnRyeSB0aGF0IGluZGljYXRlcyB0aGF0IGBWSE9TVF9TQ1NJYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gSXQgZGVmYXVsdHMgdG8gYG5gIChub3QgYnVpbHQtaW4pLCBzbyBJIG5lZWQgdG8ga25vdyB3aGVyZSBgVEFSR0VUX0NPUkVgIGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUQVJHRVRfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90YXJnZXQvS2NvbmZpZy0yLVxuZHJpdmVycy90YXJnZXQvS2NvbmZpZzozOm1lbnVjb25maWcgVEFSR0VUX0NPUkVcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBUYXJnZXQgRHJpdmVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHRhcmdldCBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBgZHJpdmVycy90YXJnZXQvS2NvbmZpZ2AgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMSBpcyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBnZW5lcmFsIHNjb3BlIG9mIHdoYXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFyZ2V0IGRyaXZlcnMsIG1heWJlIGluY2x1ZGluZyB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIGFsc28gc29tZSBoZWxwZnVsIGNvbW1lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBzcGVjaWZpYyBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBUYXJnZXQgQ29yZSBNb2QgKFRDTSkgYW5kIENvbmZpZ0ZTIEluZnJhc3RydWN0dXJlXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA2Olx0XHRzZWxlY3QgQ09ORklHRlNfRlNcbiAgIDc6XHRcdHNlbGVjdCBDUkNfVDEwRElGXG4gICA4Olx0XHRzZWxlY3QgU0NTSV9DT01NT05cbiAgIDk6XHRcdHNlbGVjdCBTR0xfQUxMT0NcbiAgMTA6XHRcdGRlZmF1bHQgblxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0U2F5IFkgb3IgTSBoZXJlIHRvIGVuYWJsZSB0aGUgVENNIFN0b3JhZ2UgRW5naW5lIGFuZCBDb25maWdGUyBlbmFibGVkXG4gIDEzOlx0XHRjb250cm9sIHBhdGggZm9yIHRhcmdldF9jb3JlX21vZC4gIFRoaXMgaW5jbHVkZXMgYnVpbHQtaW4gVENNIFJBTURJU0tcbiAgMTQ6XHRcdHN1YnN5c3RlbSBsb2dpYyBmb3IgdmlydHVhbCBMVU4gMCBhY2Nlc3NcbiAgMTU6XHRcbiAgMTY6XHRpZiBUQVJHRVRfQ09SRVxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBUQ01fSUJMT0NLXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtUQ00vSUJMT0NLIFN1YnN5c3RlbSBQbHVnaW4gZm9yIExpbnV4L0JMT0NLXCYjMzQ7XG4gIDIwOlx0XHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00vSUJMT0NLIHN1YnN5c3RlbSBwbHVnaW4gZm9yIG5vbi1idWZmZXJlZFxuICAyMzpcdFx0YWNjZXNzIHRvIExpbnV4L0Jsb2NrIGRldmljZXMgdXNpbmcgQklPXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFRDTV9GSUxFSU9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHNpdHVhdGlvbjoKCioqRGVwZW5kZW5jaWVzIGFuZCBNYWtlZmlsZSBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzLiBgVEFSR0VUX0NPUkVgIGlzIHRoZSBmb3VuZGF0aW9uLCBhbmQgYEJMT0NLYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgaXQuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlbiwgYFZIT1NUX1NDU0lgIHJlbGllcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgKmFuZCogYEVWRU5URkRgLiBTaW5jZSBgRVZFTlRGRGAgaXMgYSBzdGFuZGFyZCBrZXJuZWwgY29uZmlnLCB0aGVyZSYjMzk7cyBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgdGhlcmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdCBhbmQgbGlua2VkIHdpdGhpbiB0aGUgdmhvc3Qgc3Vic3lzdGVtLiBUaGUgTWFrZWZpbGUgd2lsbCBzaG93IG1lIHRoZSBidWlsZCBydWxlcywgYW55IHNwZWNpZmljIGZsYWdzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBub3Qgc2VlaW5nIGhlcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBpZiB0aGUgZGVzY3JpYmVkIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdGx5IGltcGxlbWVudGVkIGFuZCBwb3RlbnRpYWxseSBmaW5kIG90aGVyIGNvbnRyaWJ1dGluZyBmYWN0b3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX1ZIT1NUX05FVCkgJiM0Mzs9IHZob3N0X25ldC5vXG4gICAzOlx0dmhvc3RfbmV0LXkgOj0gbmV0Lm9cbiAgIDQ6XHRcbiAgIDU6XHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgJiM0Mzs9IHZob3N0X3Njc2kub1xuICAgNjpcdHZob3N0X3Njc2kteSA6PSBzY3NpLm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfVkhPU1RfVlNPQ0spICYjNDM7PSB2aG9zdF92c29jay5vXG4gICA5Olx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX1ZIT1NUX1JJTkcpICYjNDM7PSB2cmluZ2gub1xuICAxMjpcdFxuICAxMzpcdG9iai0kKENPTkZJR19WSE9TVF9WRFBBKSAmIzQzOz0gdmhvc3RfdmRwYS5vXG4gIDE0Olx0dmhvc3RfdmRwYS15IDo9IHZkcGEub1xuICAxNTpcdFxuICAxNjpcdG9iai0kKENPTkZJR19WSE9TVClcdCYjNDM7PSB2aG9zdC5vXG4gIDE3Olx0XG4gIDE4Olx0b2JqLSQoQ09ORklHX1ZIT1NUX0lPVExCKSAmIzQzOz0gdmhvc3RfaW90bGIub1xuICAxOTpcdHZob3N0X2lvdGxiLXkgOj0gaW90bGIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg3NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBwYXRjaC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHNldHRpbmcgYENPTkZJR19WSE9TVF9TQ1NJYCBjb21waWxlcyBgc2NzaS5jYCBpbnRvIGB2aG9zdF9zY3NpLm9gLiBNYWtlcyBzZW5zZS4gQW5kIHRoYXQgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBSaWdodCwgc28gYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgIGFyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgaGVyZS4gR29vZCB0byBoYXZlIHRoYXQgZXN0YWJsaXNoZWQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gSSYjMzk7bSBzZWVpbmcgYSBmZXcgc3ltYm9scyBtb2RpZmllZC4gRmlyc3QsIHdlJiMzOTt2ZSBnb3QgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gTG9va3MgbGlrZSBpdCYjMzk7cyBlaXRoZXIgbmV3IG9yIGEgcmVuYW1lZCB2ZXJzaW9uIG9mIHRoZSBvbGQgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gVGhlbiB0aGVyZSBpcyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdoaWNoIGlzIGFsc28gc3RhdGljLCBub3cgYWNxdWlyZXMgYHZxLSZndDttdXRleGAgYW5kIHRoZW4gY2FsbHMgdGhpcyBuZXcgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBGaW5hbGx5IGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aGljaCBpcyBub3cgY2FsbGluZyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYXMgd2VsbC4gSW50ZXJlc3RpbmcsIHNvIHRoZSBvbGQgbG9naWMgaXMgYmVpbmcgcmUgZmFjdG9yZWQgaGVyZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBjYW4gYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggdXN1YWxseSBzaWduYWxzIGlubGluaW5nIHBvdGVudGlhbCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vay4uLiBZZXAsIGl0JiMzOTtzIGBzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gR0NDIG1pZ2h0IGlubGluZSB0aGlzIHRvIG9wdGltaXplLiBJZiBpdCBkb2VzIGdldCBpbmxpbmVkLCBib3RoIGZ1bmN0aW9ucyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2lsbCBiZSBzeW1ib2xzIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGJpdCBtb3JlIGludGVyZXN0aW5nLgoKT2theSwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hvIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy4gV2hhdCYjMzk7cyBjYWxsaW5nIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2A/IEhtbSwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLiBBbmQgYHZob3N0X3Njc2lfc2VuZF9ldnRgPyBUaGF0IG9uZSYjMzk7cyBjYWxsZWQgYnkgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBhbmQgaW5kaXJlY3RseSBieSBgdmhvc3Rfc2NzaV9kb19wbHVnYCB0aHJvdWdoIGB2aG9zdF9zY3NpX2hvdHBsdWdgIGFuZCBgdmhvc3Rfc2NzaV9ob3R1bnBsdWdgLgoKQWxyaWdodCwgSSBzaG91bGQgY2hlY2sgdGhlIGlvY3RsIGhhbmRsZXIgb3IgZW50cnkgcG9pbnRzIGZvciB2aG9zdC1zY3NpIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgY2hlY2sgYHZob3N0X3Njc2lfaW9jdGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTM0PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXR1cF92cV9jbWRzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbWF4X2NtZHMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk4OC0vKlxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTk4OTogKiBDYWxsZWQgZnJvbSB2aG9zdF9zY3NpX2lvY3RsKCkgY29udGV4dCB0byB3YWxrIHRoZSBsaXN0IG9mIGF2YWlsYWJsZVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk5MC0gKiB2aG9zdF9zY3NpX3RwZyB3aXRoIGFuIGFjdGl2ZSBzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1c1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzODU9c3RhdGljIGxvbmdcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODY6dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzODctXHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2NC1cdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NjU6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2Ni1cdC5jb21wYXRfaW9jdGxcdD0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZXZlbnQgaGFuZGxpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgc3Vic3lzdGVtLiBJJiMzOTttIHNlZWluZyBhIGNsdXN0ZXIgb2YgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbjogYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgLiBUaGVzZSBsb29rIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gYHNjc2kuY2AgbWlnaHQgYmUgcmVsZXZhbnQgYW5kIGludGVyY29ubmVjdGVkIHdpdGggdGhlc2UgY29yZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZXJlIGl0IGlzISBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AgaXMgY2FsbGVkIHdpdGhpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGNvbm5lY3Rpb24gdG8gbm90ZS4gTm93LCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljcyBvZiBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AuIFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBldmVudCBwcm9jZXNzaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfZG9fZXZ0X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTU2OT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTcwOnZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU3MS17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9NjM0PXN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQxLVx0XHRpZiAoIWRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDI6XHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0My1cdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MzIKCQkJCQkJCW91dHB1dDogMjU0CgkJCQkJCQl0aG91Z2h0czogNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmhvc3QtU0NTSSBFdmVudCBIYW5kbGluZyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYCwgd2hpY2ggaXMgdGhlIHdvcmsgaGFuZGxlciByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBldmVudCBub3RpZmljYXRpb25zIHRvIHRoZSBndWVzdCYjMzk7cyB2aXJ0cXVldWUuIE15IG5leHQgdGhvdWdodCB3YXMgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGxhbmRzY2FwZS4gSSYjMzk7dmUgbm93IGdvdCBhIGdvb2QgbGlzdDogYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGluIGFkZGl0aW9uIHRvIHRoZSBvcmlnaW5hbC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gY2hlY2tpbmcgZm9yIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBzeW1ib2xzOiBgVkhPU1RfU0NTSWAsIGBUQVJHRVRfQ09SRWAsIGFuZCBgRVZFTlRGRGAuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYFZIT1NUYCBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBWSE9TVF9TQ1NJYCwgd2hpY2ggaXMgZ29vZCB0byBzZWUgaW4gdGhlIEtjb25maWcgZmlsZS4gYEVWRU5URkRgIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGJ1dCBJJiMzOTttIGluY2x1ZGluZyBpdCB0byBiZSBleHRyYSB0aG9yb3VnaC4gVGh1cywgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgVkhPU1RfU0NTSWAsIGBUQVJHRVRfQ09SRWAsIGFuZCBgRVZFTlRGRGAuCgpMZXQmIzM5O3MgcmVjYXAgYW5kIGNvbmZpcm0gb3VyIHVuZGVyc3RhbmRpbmcuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSB2aG9zdC1zY3NpIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIHdpdGhpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBIZXJlJiMzOTtzIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkOgoKMS4gIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaGFzIGJlZW4gc3BsaXQgaW50byBhbiB1bmxvY2tlZCBoZWxwZXIsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgd2hpY2ggYXNzdW1lcyB0aGUgY2FsbGVyIGhvbGRzIGB2cS0mZ3Q7bXV0ZXhgLCBhbmQgdGhlIG9yaWdpbmFsIGxvY2tlZCB3cmFwcGVyLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLgoyLiAgYHZob3N0X3Njc2lfc2VuZF9ldnRgIG5vdyBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaW5zdGVhZCBvZiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdoZW4gZXZlbnQgcXVldWluZyBmYWlscyAoYCF2aG9zdF92cV93b3JrX3F1ZXVlYCkuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgYmVjYXVzZSB0aGUgY2FsbGVycyBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgKGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGB2aG9zdF9zY3NpX2RvX3BsdWdgKSBhbHJlYWR5IGhvbGQgYHZxLSZndDttdXRleGAuCjMuICBUaGUgcGF0Y2ggcmV2ZXJzZXMgdGhlIG9yZGVyIG9mIGV2ZW50cyB3aGVuIHBvcHBpbmcgZnJvbSBgdnMtJmd0O3ZzX2V2ZW50X2xpc3RgIHVzaW5nIGBsbGlzdF9yZXZlcnNlX29yZGVyYCwgc28gaXQmIzM5O3MgY2hhbmdpbmcgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcXVldWVkIGV2ZW50cy4KCkFsbCB0aGlzIGFsdGVyZWQgY29kZSBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBgL2Rldi92aG9zdC1zY3NpYCBpb2N0bC9raWNrIG9wZXJhdGlvbnMgYW5kIFRDTSBTQ1NJIHRhcmdldCBob3RwbHVnIGV2ZW50cywgd2hpY2ggaXMgc3RhbmRhcmQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZWFkbG9ja3MsIG9yZGVyaW5nIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBldmVudCBxdWV1ZSBmbHVzaGluZyBhbmQgZGVsaXZlcnkuCgpPa2F5LCBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCB2ZXJpZmllZC4gSSYjMzk7bSBub3cgY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9kb19wbHVnJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fZXZ0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9kb19wbHVnJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fZXZ0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHJlY3Vyc2l2ZSBtdXRleCBkZWFkbG9jayBhbmQgYW4gZXZlbnQgb3JkZXJpbmcgaXNzdWUgaW4gZHJpdmVycy92aG9zdC9zY3NpLmM6XG4xLiBEZWFkbG9jayBmaXg6IHZob3N0X3Njc2lfc2VuZF9ldnQoKSBpcyBjYWxsZWQgd2hpbGUgaG9sZGluZyB2cS1cdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVx1MDAzZW11dGV4IGFnYWluLCByZXN1bHRpbmcgaW4gYSByZWN1cnNpdmUgZGVhZGxvY2suIFRoZSBwYXRjaCBzcGxpdHMgb3V0IF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSAod2hpY2ggYXNzdW1lcyB2cS1cdTAwM2VtdXRleCBpcyBhbHJlYWR5IGhlbGQpIGFuZCBjYWxscyBpdCBkaXJlY3RseSBmcm9tIHZob3N0X3Njc2lfc2VuZF9ldnQoKS5cbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXG5cbk5laXRoZXIgY2hhbmdlIGFsbG9jYXRlcyBuZXcgbWVtb3J5LCBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIFRoZSBldmVudCBzdHJ1Y3R1cmVzIHByb2Nlc3NlZCBoZXJlIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiBpbiB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCgpLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIHB1cmVseSBsb2NraW5nIGFuZCBvcmRlcmluZzsgZGVhZGxvY2tzIGFuZCBsb2NraW5nIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDdhMWYzOWEzMjdkYTYuLjljZDE4MWNiMWNjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC02MzAsMTkgJiM0Mzs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KQogCXZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pOwogfQogCi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovCiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnMtJmd0O3Zxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7CiAJc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0OwogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiAKLQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHsKIAkJaWYgKCFkcm9wKQogCQkJdmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTsKIAkJdmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIH0KIApAQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAogCWxsaXN0X2FkZCgmYW1wO2V2dC0mZ3Q7bGlzdCwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCk7CiAJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKLQkJdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwomIzQzOwkJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NAoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiBJbml0aWFsIEV2YWx1YXRpb24qKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBzcGluIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZvY3VzLgoKSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UsIHRoZSBjb250ZXh0IGZvciB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgbXkgdXN1YWwgZ28tdG8gdG9vbHMsIGxpa2UgYHJlYWQtZmlsZWAgdG8ganVzdCBsb2FkIHRoZSBmaWxlLCBvciBtYXliZSBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGlmIEkgd2FudCB0byBxdWlja2x5IHplcm8gaW4gb24gc3BlY2lmaWMgY2FsbHMgb3IgdmFyaWFibGVzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoZSBtb2RpZmljYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc29saWQgY29kZSBpbnNwZWN0aW9uLCBhbmQgZ28gZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSBmYWxzZTtcbiA2MjE6XHRcdH1cbiA2MjI6XHRcbiA2MjM6XHRcdGV2ZW50cCA9IHZxLVx1MDAzZWlvdltvdXRdLmlvdl9iYXNlO1xuIDYyNDpcdFx0cmV0ID0gX19jb3B5X3RvX3VzZXIoZXZlbnRwLCBldmVudCwgc2l6ZW9mKCpldmVudCkpO1xuIDYyNTpcdFx0aWYgKCFyZXQpXG4gNjI2Olx0XHRcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSwgaGVhZCwgMCk7XG4gNjI3Olx0XHRlbHNlXG4gNjI4Olx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXG5cJiMzNDspO1xuIDYyOTpcdFxuIDYzMDpcdFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gNjMxOlx0fVxuIDYzMjpcdFxuIDYzMzpcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiA2MzQ6XHRzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIDYzNTpcdHtcbiA2MzY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiA2Mzc6XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gNjM4Olx0XG4gNjM5Olx0XHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIDY0MDpcdFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIDY0MTpcdFx0XHRpZiAoIWRyb3ApXG4gNjQyOlx0XHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiA2NDM6XHRcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiA2NDQ6XHRcdH1cbiA2NDU6XHR9XG4gNjQ2Olx0XG4gNjQ3Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4gNjQ4Olx0e1xuIDY0OTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDY1MDpcdFxuIDY1MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjUyOlx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiA2NTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjU0Olx0fVxuIDY1NTpcdFxuIDY1NjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4gNjU3Olx0e1xuIDY1ODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxuIDY1OTpcdFx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuIDY2MDpcdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbiA2NjE6XHR9XG4gNjYyOlx0XG4gNjYzOlx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcbiA2NjQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcbjE4MjE6XHRcdGlmICghZXZ0KVxuMTgyMjpcdFx0XHRyZXR1cm47XG4xODIzOlx0XG4xODI0Olx0XHRpZiAodHBnIFx1MDAyNlx1MDAyNiBsdW4pIHtcbjE4MjU6XHRcdFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xuMTgyNjpcdFx0XHQvKlxuMTgyNzpcdFx0XHQgKiBOb3RlOiBldnQtXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXG4xODI4Olx0XHRcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cbjE4Mjk6XHRcdFx0ICovXG4xODMwOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xuMTgzMTpcdFx0XHRldnQtXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVx1MDAzZXRwb3J0X3RwZ3Q7XG4xODMyOlx0XHRcdGlmIChsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZT0gMjU2KVxuMTgzMzpcdFx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZVx1MDAzZSA4IHwgMHg0MCA7XG4xODM0Olx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAyNiAweEZGO1xuMTgzNTpcdFx0fVxuMTgzNjpcdFxuMTgzNzpcdFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbjE4Mzg6XHRcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4xODM5Olx0XHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuMTg0MDpcdH1cbjE4NDE6XHRcbjE4NDI6XHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbjE4NDM6XHR7XG4xODQ0Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxuMTg0NTpcdFx0XHRcdFx0XHRcdHBvbGwud29yayk7XG4xODQ2Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcbjE4NDc6XHRcbjE4NDg6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuMTg0OTpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4xODUwOlx0XHRcdGdvdG8gb3V0O1xuMTg1MTpcdFxuMTg1MjpcdFx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG4xODUzOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxuMTg1NDpcdFx0XHRcdFx0ICAgIDApO1xuMTg1NTpcdG91dDpcbjE4NTY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODU3Olx0fVxuMTg1ODpcdFxuMTg1OTpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4xODYwOlx0e1xuMTg2MTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSxcbjE4NjI6XHRcdFx0XHRcdFx0XHRwb2xsLndvcmspO1xuMTg2MzpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHZxLVx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Njc2ksIGRldik7XG4xODY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYW5kIGNhbGxpbmcgY29udGV4dCBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgaXQgb3BlcmF0ZXMgd2l0aGluLgoKKipBbmFseXppbmcgdGhlIEV4ZWN1dGlvbiBDb250ZXh0IG9mIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCoqCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGxlcnMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhdGhzIHRoYXQgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZW4sIGEgZm9jdXNlZCBsb29rIGF0IGxpbmVzIGFyb3VuZCAxODAwLTE4MzAgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBzaG91bGQgcHJvdmlkZSBzb21lIGltbWVkaWF0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBhZGphY2VudCBjb2RlIHdpbGwgY2xhcmlmeSBkYXRhIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIHRoZSBldmVudCBzZW5kaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSBhIGdvb2QgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODAxOlx0fVxuMTgwMjpcdFxuMTgwMzpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY3RsX2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuMTgwNDpcdHtcbjE4MDU6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXG4xODA2Olx0XHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbjE4MDc6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xuMTgwODpcdFxuMTgwOTpcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IFRoZSBoYW5kbGluZyBmdW5jIGZvciBjb250cm9sIHF1ZXVlLlxcblwmIzM0OywgX19mdW5jX18pO1xuMTgxMDpcdFx0dmhvc3Rfc2NzaV9jdGxfaGFuZGxlX3ZxKHZzLCB2cSk7XG4xODExOlx0fVxuMTgxMjpcdFxuMTgxMzpcdHN0YXRpYyB2b2lkXG4xODE0Olx0dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMTgxNTpcdFx0XHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcbjE4MTY6XHRcdFx0ICAgIHUzMiBldmVudCwgdTMyIHJlYXNvbilcbjE4MTc6XHR7XG4xODE4Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcbjE4MTk6XHRcbjE4MjA6XHRcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcbjE4MjE6XHRcdGlmICghZXZ0KVxuMTgyMjpcdFx0XHRyZXR1cm47XG4xODIzOlx0XG4xODI0Olx0XHRpZiAodHBnIFx1MDAyNlx1MDAyNiBsdW4pIHtcbjE4MjU6XHRcdFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xuMTgyNjpcdFx0XHQvKlxuMTgyNzpcdFx0XHQgKiBOb3RlOiBldnQtXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXG4xODI4Olx0XHRcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cbjE4Mjk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHZob3N0X3Njc2lfc2VuZF9ldnQgQ2FsbCBTaXRlcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCYjMzk7cyBiZWhhdmlvdXIgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGNvbnRleHQuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBzb3VyY2UgaXMgaW4gb3JkZXIsIHNwZWNpZmljYWxseSB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBrbm93ICp3aGF0KiB0cmlnZ2VycyB0aGUgZXZlbnQgc2lnbmFsaW5nIGFuZCAqdW5kZXIgd2hhdCBjb25kaXRpb25zKiBpdCYjMzk7cyBpbml0aWF0ZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3J1Y2lhbCB0byB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgZGF0YSBmbG93cyBhcm91bmQgdGhlIGNhbGxzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc2hvdWxkIHF1aWNrbHkgaGVscCBtZSBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgc3Vic3lzdGVtJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZob3N0X3Njc2lfZG9fcGx1Z2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGlzIHZob3N0IFNDU0kgcGx1Zy1pbiBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYHZob3N0X3Njc2lfZG9fcGx1Z2AgYW5kIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMjUwNC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgYXMgaXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUga2lja3Mgb2ZmLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXRpbGl6ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIG92ZXJhbGwgY29udGV4dCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBVbmRlcnN0YW5kaW5nIGhvdyByZXNvdXJjZXMgYXJlIHByb3RlY3RlZCBhbmQgdGhlIGRhdGEgZmxvdyB3aWxsIHByb3ZpZGUgaW5zaWdodHMuIEkgd2lsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBhcmVhcyBvZiBjb25jZXJuIHJlbGF0aW5nIHRvIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUwMDpcdFx0cmV0dXJuIFwmIzM0O1Vua25vd25cJiMzNDs7XG4yNTAxOlx0fVxuMjUwMjpcdFxuMjUwMzpcdHN0YXRpYyB2b2lkXG4yNTA0Olx0dmhvc3Rfc2NzaV9kb19wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxuMjUwNTpcdFx0XHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxuMjUwNjpcdHtcbjI1MDc6XHRcbjI1MDg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHRwZy1cdTAwM2V2aG9zdF9zY3NpO1xuMjUwOTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4yNTEwOlx0XHR1MzIgcmVhc29uO1xuMjUxMTpcdFxuMjUxMjpcdFx0aWYgKCF2cylcbjI1MTM6XHRcdFx0cmV0dXJuO1xuMjUxNDpcdFxuMjUxNTpcdFx0aWYgKHBsdWcpXG4yNTE2Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRVNDQU47XG4yNTE3Olx0XHRlbHNlXG4yNTE4Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xuMjUxOTpcdFxuMjUyMDpcdFx0dnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuMjUyMTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTIyOlx0XHQvKlxuMjUyMzpcdFx0ICogV2UgY2FuJiMzOTt0IHF1ZXVlIGV2ZW50cyBpZiB0aGUgYmFja2VuZCBoYXMgYmVlbiBjbGVhcmVkLCBiZWNhdXNlXG4yNTI0Olx0XHQgKiB3ZSBjb3VsZCBlbmQgdXAgcXVldWVpbmcgYW4gZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoLlxuMjUyNTpcdFx0ICovXG4yNTI2Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbjI1Mjc6XHRcdFx0Z290byB1bmxvY2s7XG4yNTI4Olx0XG4yNTI5Olx0XHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19TQ1NJX0ZfSE9UUExVRykpXG4yNTMwOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbjI1MzE6XHRcdFx0XHRcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xuMjUzMjpcdHVubG9jazpcbjI1MzM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTM0Olx0fVxuMjUzNTpcdFxuMjUzNjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90cGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxuMjUzNzpcdHtcbjI1Mzg6XHRcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XG4yNTM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlY3Vyc2l2ZSBNdXRleCBEZWFkbG9jayBEaXNjb3ZlcmVkIGluIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHZob3N0X3Njc2lgIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgZ2xhcmluZyBpc3N1ZS4gSW4gYm90aCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBhbmQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgdGhlcmUmIzM5O3MgYSBsb2NrIGFjcXVpcmVkOiBgbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleClgLiBOb3csIHRoYXQmIzM5O3MgZmluZSBvbiBpdHMgb3duLiBUaGUgcHJvYmxlbSBpcyB3aGF0ICpoYXBwZW5zKiBpbnNpZGUgdGhvc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGJvdGggb2YgdGhlbSBjYWxsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgLi4uKWAuIEFuZCBpbnNpZGUgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCB3ZSBoYXZlIHRoaXM6CgpgYGBjCglsbGlzdF9hZGQoJmFtcDtldnQtJmd0O2xpc3QsICZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwoJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKCQl2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CmBgYAoKVGhlIGxpZ2h0YnVsYiBnb2VzIG9mZiEgUHJldmlvdXNseSwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpdHNlbGYgd2FzIGNhbGxpbmcgYG11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpYC4gU28sIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIHJldHVybnMgZmFsc2UsIGl0IHRyaWdnZXJzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLCB3aGljaCBhdHRlbXB0cyB0byByZWFjcXVpcmUgYG11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpYCEgQnV0IHRoZSBgdnEtJmd0O211dGV4YCBpcyBhbHJlYWR5IGhlbGQgYnkgdGhlIGNhbGxlcuKAlGVpdGhlciBgdmhvc3Rfc2NzaV9kb19wbHVnYCBvciBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLiBCb29tOiB0aGF0JiMzOTtzIGEgY2xhc3NpYyByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2suCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgdGhpcyBpcyByZXNvbHZlZCBieSB1c2luZyB0aGUgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBnb29kIGRlc2lnbiBjaG9pY2UuCgpBbHNvLCBJIHNlZSB0aGF0IHdlJiMzOTtyZSByZXZlcnNpbmcgdGhlIGxpbmtlZCBsaXN0IGBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdGVtcyBhcmUgYWRkZWQgaW4gTElGTyBvcmRlciB3aXRoIGBsbGlzdF9hZGRgLCBzbyBpdCYjMzk7cyBhIGdvb2Qgd2F5IHRvIGNvbnZlcnQgdGhlIGV2ZW50IHF1ZXVlIHRvIEZJRk8uCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGF0IGB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dGAgZG9lcy4uLiBqdXN0IGluIGNhc2UuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTUzOD1zdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzOTp2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDAtXHRcdCAgICAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxOS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MjA6XHRldnQgPSB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCh2cywgZXZlbnQsIHJlYXNvbik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODIxLVx0aWYgKCFldnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0YCwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWNvbnN0cnVjdGluZyBgdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnRgKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnRgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdmhvc3Qtc2NzaSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGtleSBlbGVtZW50IGluIHRoZSBldmVudCBoYW5kbGluZyBwaXBlbGluZSBmb3IgU0NTSSBjb21tYW5kIGFsbG9jYXRpb24gd2l0aGluIHRoZSB2aXJ0dWFsIGhvc3QgZnJhbWV3b3JrLiBJdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIG1hbmFnZSBhIG5ldyBTQ1NJIGNvbW1hbmQsIGVuc3VyaW5nIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLCBhbmQgcG90ZW50aWFsbHkgcXVldWVpbmcgaXQgZm9yIHByb2Nlc3NpbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllciwgdGhlIEkvTyBwYXRoLCBhbmQgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSB2aG9zdC1zY3NpIGRldmljZSBzdHJ1Y3R1cmUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1hbmQgc3RydWN0dXJlcy4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIHdoZXRoZXIgdGhlcmUgaXMgYW55IHNwaW5sb2NrIHByb3RlY3Rpb24uIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgY29uY3VycmVuY3kgcHJvYmxlbXMgYXJlIHByZXZlbnRlZCB3aXRoaW4gdGhlIGFsbG9jYXRpb24gcGhhc2UuIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBhcmUgaW50cm9kdWNlZC4gQW55IG9wdGltaXphdGlvbnMgb3IgY2xldmVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgaW4gdGhpcyBhbGxvY2F0aW9uPyBHb29kLCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gaGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTM1Olx0XHRrZnJlZShldnQpO1xuIDUzNjpcdH1cbiA1Mzc6XHRcbiA1Mzg6XHRzdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcbiA1Mzk6XHR2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG4gNTQwOlx0XHRcdCAgICAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXG4gNTQxOlx0e1xuIDU0MjpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDU0MzpcdFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XG4gNTQ0Olx0XG4gNTQ1Olx0XHRpZiAodnMtXHUwMDNldnNfZXZlbnRzX25yIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9FVkVOVCkge1xuIDU0NjpcdFx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcbiA1NDc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTQ4Olx0XHR9XG4gNTQ5Olx0XG4gNTUwOlx0XHRldnQgPSBremFsbG9jX29iaigqZXZ0KTtcbiA1NTE6XHRcdGlmICghZXZ0KSB7XG4gNTUyOlx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHZob3N0X3Njc2lfZXZ0XFxuXCYjMzQ7KTtcbiA1NTM6XHRcdFx0dnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IHRydWU7XG4gNTU0Olx0XHRcdHJldHVybiBOVUxMO1xuIDU1NTpcdFx0fVxuIDU1NjpcdFxuIDU1NzpcdFx0ZXZ0LVx1MDAzZWV2ZW50LmV2ZW50ID0gY3B1X3RvX3Zob3N0MzIodnEsIGV2ZW50KTtcbiA1NTg6XHRcdGV2dC1cdTAwM2VldmVudC5yZWFzb24gPSBjcHVfdG9fdmhvc3QzMih2cSwgcmVhc29uKTtcbiA1NTk6XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19uciYjNDM7JiM0Mzs7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXR1cm4gZXZ0O1xuIDU2MjpcdH1cbiA1NjM6XHRcbiA1NjQ6XHRzdGF0aWMgaW50IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcbiA1NjU6XHR7XG4gNTY2Olx0XHRyZXR1cm4gdGFyZ2V0X3B1dF9zZXNzX2NtZChzZV9jbWQpO1xuIDU2NzpcdH1cbiA1Njg6XHRcbiA1Njk6XHRzdGF0aWMgdm9pZFxuIDU3MDpcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbiA1NzE6XHR7XG4gNTcyOlx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4gNTczOlx0XHRzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQgKmV2ZW50ID0gXHUwMDI2ZXZ0LVx1MDAzZWV2ZW50O1xuIDU3NDpcdFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50IF9fdXNlciAqZXZlbnRwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkFuYWx5emluZyBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZXZ0YCBpcyBiZWluZyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKmV2dClgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dCDigJMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWthZ2Ugb3IgdW5pbnRlbmRlZCBiZWhhdmlvciBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBldnRgIGlzIGJlaW5nIHVzZWQgYW5kIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYHZob3N0X3Njc2lfZG9fZXZ0X3dvcmtgIHNwZWNpZmljYWxseSwgbGluZXMgNTcwIHRvIDYzMC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRoaXMgZXZlbnQgaGFuZGxpbmcgc2hvdWxkIHJlc2lkZS4gSSBleHBlY3QgdG8gZmluZCBkZXRhaWxzIHRoZXJlIHJlZ2FyZGluZyBob3cgYGV2dGAgaXMgcHJvY2Vzc2VkLCB3aGF0IHN0YXRlIHRyYW5zaXRpb25zIGl0IHRyaWdnZXJzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHZob3N0LXNjc2kgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24mIzM5O3MgY29udHJvbCBmbG93IGlzIGdvaW5nIHRvIGJlIGtleSB0byBzZWVpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG4gNTcxOlx0e1xuIDU3MjpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDU3MzpcdFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50ICpldmVudCA9IFx1MDAyNmV2dC1cdTAwM2VldmVudDtcbiA1NzQ6XHRcdHN0cnVjdCB2aXJ0aW9fc2NzaV9ldmVudCBfX3VzZXIgKmV2ZW50cDtcbiA1NzU6XHRcdHN0cnVjdCB2aG9zdF9sb2cgKnZxX2xvZztcbiA1NzY6XHRcdHVuc2lnbmVkIGludCBsb2dfbnVtO1xuIDU3NzpcdFx0dW5zaWduZWQgb3V0LCBpbjtcbiA1Nzg6XHRcdGludCBoZWFkLCByZXQ7XG4gNTc5Olx0XG4gNTgwOlx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSkge1xuIDU4MTpcdFx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcbiA1ODI6XHRcdFx0cmV0dXJuO1xuIDU4MzpcdFx0fVxuIDU4NDpcdFxuIDU4NTpcdGFnYWluOlxuIDU4NjpcdFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSk7XG4gNTg3Olx0XG4gNTg4Olx0XHR2cV9sb2cgPSB1bmxpa2VseSh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfRl9MT0dfQUxMKSkgP1xuIDU4OTpcdFx0XHR2cS1cdTAwM2Vsb2cgOiBOVUxMO1xuIDU5MDpcdFxuIDU5MTpcdFx0LypcbiA1OTI6XHRcdCAqIFJlc2V0ICYjMzk7bG9nX251bSYjMzk7IHNpbmNlIHZob3N0X2dldF92cV9kZXNjKCkgbWF5IHJlc2V0IGl0IG9ubHlcbiA1OTM6XHRcdCAqIGFmdGVyIGNlcnRhaW4gY29uZGl0aW9uIGNoZWNrcy5cbiA1OTQ6XHRcdCAqL1xuIDU5NTpcdFx0bG9nX251bSA9IDA7XG4gNTk2Olx0XG4gNTk3Olx0XHRoZWFkID0gdmhvc3RfZ2V0X3ZxX2Rlc2ModnEsIHZxLVx1MDAzZWlvdixcbiA1OTg6XHRcdFx0XHRBUlJBWV9TSVpFKHZxLVx1MDAzZWlvdiksIFx1MDAyNm91dCwgXHUwMDI2aW4sXG4gNTk5Olx0XHRcdFx0dnFfbG9nLCBcdTAwMjZsb2dfbnVtKTtcbiA2MDA6XHRcdGlmIChoZWFkIFx1MDAzYyAwKSB7XG4gNjAxOlx0XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xuIDYwMjpcdFx0XHRyZXR1cm47XG4gNjAzOlx0XHR9XG4gNjA0Olx0XHRpZiAoaGVhZCA9PSB2cS1cdTAwM2VudW0pIHtcbiA2MDU6XHRcdFx0aWYgKHZob3N0X2VuYWJsZV9ub3RpZnkoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSkpXG4gNjA2Olx0XHRcdFx0Z290byBhZ2FpbjtcbiA2MDc6XHRcdFx0dnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IHRydWU7XG4gNjA4Olx0XHRcdHJldHVybjtcbiA2MDk6XHRcdH1cbiA2MTA6XHRcbiA2MTE6XHRcdGlmICgodnEtXHUwMDNlaW92W291dF0uaW92X2xlbiAhPSBzaXplb2Yoc3RydWN0IHZpcnRpb19zY3NpX2V2ZW50KSkpIHtcbiA2MTI6XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtFeHBlY3RpbmcgdmlydGlvX3Njc2lfZXZlbnQsIGdvdCAlenUgYnl0ZXNcXG5cJiMzNDssXG4gNjEzOlx0XHRcdFx0XHR2cS1cdTAwM2Vpb3Zbb3V0XS5pb3ZfbGVuKTtcbiA2MTQ6XHRcdFx0dnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IHRydWU7XG4gNjE1Olx0XHRcdHJldHVybjtcbiA2MTY6XHRcdH1cbiA2MTc6XHRcbiA2MTg6XHRcdGlmICh2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkKSB7XG4gNjE5Olx0XHRcdGV2ZW50LVx1MDAzZWV2ZW50IHw9IGNwdV90b192aG9zdDMyKHZxLCBWSVJUSU9fU0NTSV9UX0VWRU5UU19NSVNTRUQpO1xuIDYyMDpcdFx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gZmFsc2U7XG4gNjIxOlx0XHR9XG4gNjIyOlx0XG4gNjIzOlx0XHRldmVudHAgPSB2cS1cdTAwM2Vpb3Zbb3V0XS5pb3ZfYmFzZTtcbiA2MjQ6XHRcdHJldCA9IF9fY29weV90b191c2VyKGV2ZW50cCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTtcbiA2MjU6XHRcdGlmICghcmV0KVxuIDYyNjpcdFx0XHR2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsKFx1MDAyNnZzLVx1MDAzZWRldiwgdnEsIGhlYWQsIDApO1xuIDYyNzpcdFx0ZWxzZVxuIDYyODpcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhdWx0ZWQgb24gdmhvc3Rfc2NzaV9zZW5kX2V2ZW50XFxuXCYjMzQ7KTtcbiA2Mjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTQKCQkJCQkJCW91dHB1dDogMjk1CgkJCQkJCQl0aG91Z2h0czogOTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIEl0IEhlcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgYSBLTVNBTiBzZXNzaW9uLiBGaXJzdCwgdGhlIGNvcmUgY2hhbmdlOiB3ZSYjMzk7cmUgcmUtYXJyYW5naW5nIGhvdyBTQ1NJIGV2ZW50cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFdlJiMzOTt2ZSBnb3QgYSB3cmFwcGVyIGZvciBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHRvIG1hbmFnZSB0aGUgYHZxLSZndDttdXRleGAgYW5kIGEgc3dpdGNoIHRvIEZJRk8gcHJvY2Vzc2luZyBvZiBldmVudHMgaW5zdGVhZCBvZiBMSUZPLiBUaGUgY3JpdGljYWwgY2hhbmdlIGZvciB1cyBpcyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2hlcmUgdGhlIGZhaWx1cmUgcGF0aCBvZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgbm93IGF2b2lkcyByZS1hY3F1aXJpbmcgYHZxLSZndDttdXRleGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWUsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29kZSB3b3Jrcy4gSSBzZWUgYSBgbGxpc3RfcmV2ZXJzZV9vcmRlcmAsIHdoaWNoIGlzIGNoYW5naW5nIHRoZSBvcmRlciBldmVudHMgYXJlIHByb2Nlc3NlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBzZWUgbm8gY2hhbmdlIG9yIHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGhvdyB0aGUga2VybmVsIGNvbW11bmljYXRlcyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBldmVudHMgYXJlIGBremFsbG9jYCYjMzk7ZCwgYW5kIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0IGxheW91dC4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHdlIGFyZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGNvdWxkIHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBuZXcgYWxsb2NhdGlvbnMgb3IgY2hhbmdlcyB0byBleGlzdGluZyBvbmVzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBvcGVuIHRoZSBkb29yIGZvciB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzLgoKVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBtdXRleCBkZWFkbG9jayBmaXguIFByZXZpb3VzbHksIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWUoKWAgZmFpbGVkLCBpdCB3b3VsZCBjYWxsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpYCB3aGljaCB0cmllZCB0byByZWFjcXVpcmUgYSBsb2NrLiBBIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhpcyB0eXBlIG9mIGxvY2tpbmcgYnVnIGlzIHByZWNpc2VseSB3aGF0IExPQ0tERVAgaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFuZCBpdCYjMzk7cyBhbHJlYWR5IGJ1aWx0IGludG8gc3RhbmRhcmQgS0FTQU4gY29uZmlndXJhdGlvbnMuIFRoZXJlJiMzOTtzIGFsc28gYSBGSUZPIG9yZGVyaW5nIGJ1ZyBmaXguCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBpdCYjMzk7cyBzcXVhcmVseSBpbiB0aGUgZG9tYWluIG9mIGJ1Z3MgdGhhdCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiYjMzk7cyBzdHJlbmd0aCBsaWVzIGluIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzIG5vdCB0aGUgcHJpbWFyeSByaXNrIGhlcmUuCgpHaXZlbiB0aGUgZ3VpZGFuY2UsIGFuZCB0aGUgZmFjdCB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkZWFkbG9jayBhbmQgb3JkZXJpbmcgaXNzdWUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgd2UgYWxyZWFkeSBoYXZlIHRvb2xzIHRvIGRldGVjdCB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmVjdXJzaXZlIG11dGV4IGRlYWRsb2NrIGFuZCBhbiBldmVudCBvcmRlcmluZyBpc3N1ZSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYzpcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVx1MDAzZW11dGV4IChlLmcuLCBmcm9tIHZob3N0X3Njc2lfZG9fcGx1ZygpIG9yIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKCkpLiBJZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCBpdCBjYWxsZWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSwgd2hpY2ggYXR0ZW1wdGVkIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYWdhaW4sIHJlc3VsdGluZyBpbiBhIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhlIHBhdGNoIHNwbGl0cyBvdXQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpICh3aGljaCBhc3N1bWVzIHZxLVx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxuMi4gRXZlbnQgb3JkZXJpbmc6IEl0IGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByb2Nlc3MgZXZlbnRzIGluIEZJRk8gb3JkZXIgcmF0aGVyIHRoYW4gTElGTyBvcmRlci5cblxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHJlY3Vyc2l2ZSBtdXRleCBkZWFkbG9jayBhbmQgYW4gZXZlbnQgb3JkZXJpbmcgaXNzdWUgaW4gZHJpdmVycy92aG9zdC9zY3NpLmM6XG4xLiBEZWFkbG9jayBmaXg6IHZob3N0X3Njc2lfc2VuZF9ldnQoKSBpcyBjYWxsZWQgd2hpbGUgaG9sZGluZyB2cS1cdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVx1MDAzZW11dGV4IGFnYWluLCByZXN1bHRpbmcgaW4gYSByZWN1cnNpdmUgZGVhZGxvY2suIFRoZSBwYXRjaCBzcGxpdHMgb3V0IF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSAod2hpY2ggYXNzdW1lcyB2cS1cdTAwM2VtdXRleCBpcyBhbHJlYWR5IGhlbGQpIGFuZCBjYWxscyBpdCBkaXJlY3RseSBmcm9tIHZob3N0X3Njc2lfc2VuZF9ldnQoKS5cbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXG5cbk5laXRoZXIgY2hhbmdlIGFsbG9jYXRlcyBuZXcgbWVtb3J5LCBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIFRoZSBldmVudCBzdHJ1Y3R1cmVzIHByb2Nlc3NlZCBoZXJlIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiBpbiB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCgpLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIHB1cmVseSBsb2NraW5nIGFuZCBvcmRlcmluZzsgZGVhZGxvY2tzIGFuZCBsb2NraW5nIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE0Ljk0NzUxNzA3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjQ3MjU0Njk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiLFxuICAgIFwiRVZFTlRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3Njc2lfc2VuZF9ldnRcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF93b3JrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX2V2dF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgZXZlbnQgY29tcGxldGlvbiBhbmQgZGlzcGF0Y2ggbG9naWMgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEl0IHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiB2cS1cXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MTQuOTQ3NTIyMDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY5OTI4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjQ4OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuKysrIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxcbiBcXHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cXG4rc3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4ge1xcbi1cXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4gXFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xcbiBcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4tXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpO1xcbitcXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KSk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHtcXG4gXFx0XFx0aWYgKCFkcm9wKVxcbiBcXHRcXHRcXHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xcbiBcXHRcXHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbit7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gfVxcbiBcXG5AQCAtMTgyOSw3ICsxODM2LDcgQEAgdmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbiBcXG4gXFx0bGxpc3RfYWRkKFxcdTAwMjZldnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuIFxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG4tXFx0XFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbitcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE1LjUwNTQ5ODg3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE3MDQ2NjkwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCIsXG4gICAgXCJFVkVOVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X3dvcmtcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX3BsdWdcIixcbiAgICBcInZob3N0X3Njc2lfZG9fZXZ0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgZXZlbnQgY29tcGxldGlvbiBhbmQgZGlzcGF0Y2ggbG9naWMgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEl0IHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiB2cS1cXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4rXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIFx0XHRpZiAoIWRyb3ApXG4gXHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiBcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gfVxuIFxuQEAgLTE4MjksNyArMTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiBcbiBcdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuLVx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4rXHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE1LjUwNTUwMTE2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY5MjcwMjQ1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBTQ1NJIHZpcnR1YWwgaG9zdCBkcml2ZXIgcmVzaWRlcywgc28gdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGhvc3QgaW50ZXJhY3RzIHdpdGggdmlydHVhbCBTQ1NJIGRldmljZXMuIEdvb2QuIExldCdzIGRlbHZlIGluLlxuXG5NeSBndXQgcmVhY3Rpb24gaXMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiAqd2hlcmUqIHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGxhcmdlciBjb2RlIHN0cnVjdHVyZS4gSSdsbCB1c2UgdG9vbHMgSSdtIGZhbWlsaWFyIHdpdGgg4oCTIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBmaWxlIGlmIG5lZWRlZCwgb3IgYGdyZXBwZXJgIOKAkyB0byBwaW5wb2ludCB0aGUgbW9kaWZpY2F0aW9ucyBhcm91bmQgdGhlIG1vc3QgbGlrZWx5IGFyZWFzIGZvciB0aGlzIGNoYW5nZS4gSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDYzMCBhbmQgMTgyOSBtaWdodCBiZSBwcmltZSBzcG90cywgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyBjb2RlLiBJIG5lZWQgdG8gZ2V0IGNvbnRleHQsIHNvIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBpbiBjYXNlIHRoaXMgY2hhbmdlIGlzIGNvbmRpdGlvbmFsLiBJcyBgdmhvc3Qtc2NzaWAgZXZlbiBlbmFibGVkPyBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGJlZm9yZSBkaWdnaW5nIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MiwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjIyLjQzMjUyODU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHRcXHRcXHR2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IGZhbHNlO1xcbiA2MjE6XFx0XFx0fVxcbiA2MjI6XFx0XFxuIDYyMzpcXHRcXHRldmVudHAgPSB2cS1cXHUwMDNlaW92W291dF0uaW92X2Jhc2U7XFxuIDYyNDpcXHRcXHRyZXQgPSBfX2NvcHlfdG9fdXNlcihldmVudHAsIGV2ZW50LCBzaXplb2YoKmV2ZW50KSk7XFxuIDYyNTpcXHRcXHRpZiAoIXJldClcXG4gNjI2OlxcdFxcdFxcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoXFx1MDAyNnZzLVxcdTAwM2VkZXYsIHZxLCBoZWFkLCAwKTtcXG4gNjI3OlxcdFxcdGVsc2VcXG4gNjI4OlxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkZhdWx0ZWQgb24gdmhvc3Rfc2NzaV9zZW5kX2V2ZW50XFxcXG5cXFwiKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuIDYzMTpcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cXG4gNjM0OlxcdHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCwgKnQ7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KSk7XFxuIDY0MDpcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XFxuIDY0MTpcXHRcXHRcXHRpZiAoIWRyb3ApXFxuIDY0MjpcXHRcXHRcXHRcXHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xcbiA2NDM6XFx0XFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG4gNjQ0OlxcdFxcdH1cXG4gNjQ1OlxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDY0ODpcXHR7XFxuIDY0OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gNjUyOlxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xcbiA2NTM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiA2NTQ6XFx0fVxcbiA2NTU6XFx0XFxuIDY1NjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxcbiA2NTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG4gNjYwOlxcdFxcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jb3B5X3NnbF90b19pb3Yoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQpXFxuIDY2NDpcXHR7XFxuIDY2NTpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIgPSBjbWQtXFx1MDAzZXJlYWRfaXRlcjtcXG4gNjY2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIDY2NzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gNjY4OlxcdFxcdHNpemVfdCBsZW47XFxuIDY2OTpcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MjIuNDMyNzcxMDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjA6XFx0XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbjE4MjE6XFx0XFx0aWYgKCFldnQpXFxuMTgyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTgyMzpcXHRcXG4xODI0OlxcdFxcdGlmICh0cGcgXFx1MDAyNlxcdTAwMjYgbHVuKSB7XFxuMTgyNTpcXHRcXHRcXHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXFxuMTgyNjpcXHRcXHRcXHQvKlxcbjE4Mjc6XFx0XFx0XFx0ICogTm90ZTogZXZ0LVxcdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcXG4xODI4OlxcdFxcdFxcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cXG4xODI5OlxcdFxcdFxcdCAqL1xcbjE4MzA6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xcbjE4MzE6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXFx1MDAzZXRwb3J0X3RwZ3Q7XFxuMTgzMjpcXHRcXHRcXHRpZiAobHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZT0gMjU2KVxcbjE4MzM6XFx0XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDNlXFx1MDAzZSA4IHwgMHg0MCA7XFxuMTgzNDpcXHRcXHRcXHRldnQtXFx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwMjYgMHhGRjtcXG4xODM1OlxcdFxcdH1cXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZldnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuMTgzODpcXHRcXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfd29yaykpXFxuMTgzOTpcXHRcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG4xODQwOlxcdH1cXG4xODQxOlxcdFxcbjE4NDI6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuMTg0MzpcXHR7XFxuMTg0NDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxcbjE4NDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cG9sbC53b3JrKTtcXG4xODQ2OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODQ5OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcbjE4NTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg1MTpcXHRcXG4xODUyOlxcdFxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG4xODUzOlxcdFxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbjE4NTQ6XFx0XFx0XFx0XFx0XFx0ICAgIDApO1xcbjE4NTU6XFx0b3V0OlxcbjE4NTY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjE4NTc6XFx0fVxcbjE4NTg6XFx0XFxuMTg1OTpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyMi40MzI5MTg5MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTYxMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9TQ1NJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjIyLjU0MDQ4OTg4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NzQ1MTQ3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVkhPU1RfU0NTSSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBgVkhPU1RfU0NTSWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnRpY3VsYXIgdmhvc3QgdGFyZ2V0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB2aG9zdCBmcmFtZXdvcmsuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBzZXR0aW5ncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZCwgcGFydGljdWxhcmx5IGFyb3VuZCBzZWN1cml0eSBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJIG1pZ2h0IGJlIG1pc3NpbmcsIG9yIGhpZGRlbiBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgdGhhdCBjb3VsZCBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgaW4gYSBwYXJ0aWN1bGFyIHZpcnR1YWxpemVkIHNldHVwPyBUaW1lIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyNS41MTUwMDczMjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcXG4gIDQxOlxcdFxcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNDQ6XFx0XFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgVkhPU1RfU0NTSVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDQ5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNTA6XFx0XFx0c2VsZWN0IFNHX1BPT0xcXG4gIDUxOlxcdFxcdGRlZmF1bHQgblxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcXG4gIDU0OlxcdFxcdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIFZIT1NUX1ZTT0NLXFxuICA1NzpcXHRcXHR0cmlzdGF0ZSBcXFwidmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclxcXCJcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNTk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA2MDpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNjE6XFx0XFx0ZGVmYXVsdCBuXFxuICA2MjpcXHRcXHRoZWxwXFxuICA2MzpcXHRcXHRUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcHJvdmlkZSBBRl9WU09DS1xcbiAgNjQ6XFx0XFx0c29ja2V0cyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGd1ZXN0cy4gIFRoZSBndWVzdHMgbXVzdCBoYXZlIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyNS41MTUxMTI4NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTIxOTg2MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQgc3VpdGFibGUgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgQ29tbWl0IERldGFpbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgY29tbWl0LiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBiZWVuIGNoYW5nZWQgYW5kIHdoeS4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvbW1pdCBtZXNzYWdlLiBBIHdlbGwtd3JpdHRlbiBvbmUgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgaGlnaC1sZXZlbCBjb250ZXh0IGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgdXBkYXRlLiBJ4oCZbSBob3BpbmcgaXTigJlzIGluZm9ybWF0aXZlIGFuZCBkb2Vzbid0IGp1c3Qgc2F5IOKAnGZpeGVkIGEgYnVnLuKAnSBUaGVuLCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYWN0dWFsIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIG1lbnRhbGx5IHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBsaW5lLCBjb25zaWRlcmluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLlxuXG5UbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBmdWxsIGNvbW1pdCBsb2cuIFNvLCBJIHdpbGwgcnVuIGBnaXQgbG9nYC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBoaXN0b3J5IGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGNvZGUsIGFzIHdlbGwgYXMgYW55IHJlbGF0ZWQgY29tbWl0cyB0aGF0IG1pZ2h0IHByb3ZpZGUgZnVydGhlciBjbHVlcy4gSSdsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlZCBmbGFncy4gQSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGNvbW1pdCBoaXN0b3J5IGlzIHZpdGFsIGZvciBwcm9wZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjMyLjYzNzEwMTY3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNjMxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxpc3RfcmV2ZXJzZV9vcmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz02MzQ9c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzOC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2Mzk6XFx0bGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbGlzdF9kZWxfYWxsKFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0MC1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjMyLjcyMTM4NjA2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDE1MDgyNzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBTaW5jZSBJIGFscmVhZHkga25vdyB0aGUgZnVuY3Rpb24gaXRzZWxmLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIldobydzIGNhbGxpbmcgaXQ/XCIgVGhpcyBpcyBhIGtleSBlbnRyeSBwb2ludCwgbGlrZWx5IGZvciBzaWduYWxpbmcgc29tZXRoaW5nIGltcG9ydGFudCB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZnJhbWV3b3JrLCBwcm9iYWJseSBhbiBldmVudCByZWxhdGVkIHRvIHRoZSBTQ1NJIHRyYW5zcG9ydC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHBpbnBvaW50IHRoZSBleGFjdCBldmVudHMgb3IgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgZXZlbnQgc2VuZHMuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIHRoZSB3aGF0J3MgZ29pbmcgb24gZnJvbSBhIGNvbnRyb2wgcGxhbmUgYXNwZWN0LiBXaGF0J3MgaGFwcGVuaW5nIGluIHRoZSBzeXN0ZW0gdGhhdCdzIHByb21wdGluZyB0aGlzIGNhbGw/IFRoZSBtb3JlIEkgdW5kZXJzdGFuZCBhYm91dCB0aGUgY2FsbGVycywgdGhlIGJldHRlciBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW1zLiBOb3cgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjQ2Ljg3MjIxNzg4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MzQ4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODo0Ni45NTA5NTk2MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU0MzM4MjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgaXQgc2VlbXMgd2UncmUgZ3JhYmJpbmcgYHZxLVx1MDAzZW11dGV4YCBmaXJzdCB0aGluZy4gTWFrZXMgc2Vuc2UsIHByb3RlY3RzIHRoZSB2cSBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGVuIHdlIGNhbGwgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiAgSW5zaWRlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgd2UncmUgYWRkaW5nIGFuIGV2ZW50IHRvIGEgbGlzdCBhbmQgKmNvbmRpdGlvbmFsbHkqIHF1ZXVpbmcgd29yay4gU3BlY2lmaWNhbGx5LCBpZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSwgd2UgY2FsbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpYC4gQWgsIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLlxuXG5CZWZvcmUsIGlmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5lZCBmYWxzZSwgaXQgd291bGQgY2FsbCAgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gTm93IHRoZSByZWQgZmxhZyBpcyB1cCEgV2h5PyBCZWNhdXNlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXRzZWxmIGxvY2tzIGB2cS1cdTAwM2VtdXRleGAhIEJpbmdvIVxuXG5JZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSBpbiB0aGUgZmlyc3QgY2FsbCBhZnRlciB3ZSBsb2NrZWQgYHZxLVx1MDAzZW11dGV4YCwgIHdlIGVuZCB1cCBpbiBhIGRlYWRsb2NrISAgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBoYXMgdGhlIGxvY2sgYW5kIHRoZW4gd2UgKnJlLWVudGVyKiBhbmQgYXR0ZW1wdCB0byBncmFiIGl0IGFnYWluLiAgQ2xhc3NpYy5cblxuTm93LCBob2xkIG9uLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgaGF2ZSBiZWVuIHByZXR0eSBjb21tb24sIHdhcyBpdCBtaXNzZWQ/IEFtIEkgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGNvZGUgcGF0aCB0aGF0IGNhbiBhdm9pZCBpdD8gTGV0IG1lIGNoZWNrIHRvIHNlZSBpZiBgdnEtXHUwMDNlbXV0ZXhgIG1pZ2h0IGFscmVhZHkgYmUgaGVsZCBpbiBgdmhvc3Rfc2NzaV9kb19wbHVnYD8gVGltZSB0byBqdW1wIG92ZXIgdG8gbGluZXMgMjUwMC0yNTQwIG9mIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NTAuNDk0MzU1ODY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTAwOlxcdFxcdHJldHVybiBcXFwiVW5rbm93blxcXCI7XFxuMjUwMTpcXHR9XFxuMjUwMjpcXHRcXG4yNTAzOlxcdHN0YXRpYyB2b2lkXFxuMjUwNDpcXHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuMjUwNTpcXHRcXHRcXHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxcbjI1MDY6XFx0e1xcbjI1MDc6XFx0XFxuMjUwODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSB0cGctXFx1MDAzZXZob3N0X3Njc2k7XFxuMjUwOTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG4yNTEwOlxcdFxcdHUzMiByZWFzb247XFxuMjUxMTpcXHRcXG4yNTEyOlxcdFxcdGlmICghdnMpXFxuMjUxMzpcXHRcXHRcXHRyZXR1cm47XFxuMjUxNDpcXHRcXG4yNTE1OlxcdFxcdGlmIChwbHVnKVxcbjI1MTY6XFx0XFx0XFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcXG4yNTE3OlxcdFxcdGVsc2VcXG4yNTE4OlxcdFxcdFxcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHR2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4yNTIxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMjUyMjpcXHRcXHQvKlxcbjI1MjM6XFx0XFx0ICogV2UgY2FuJ3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcXG4yNTI0OlxcdFxcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXFxuMjUyNTpcXHRcXHQgKi9cXG4yNTI2OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcbjI1Mjc6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMjUyODpcXHRcXG4yNTI5OlxcdFxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG4yNTMwOlxcdFxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG4yNTMxOlxcdFxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcbjI1MzI6XFx0dW5sb2NrOlxcbjI1MzM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjI1MzQ6XFx0fVxcbjI1MzU6XFx0XFxuMjUzNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcXG4yNTM3OlxcdHtcXG4yNTM4OlxcdFxcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XFxuMjUzOTpcXHR9XFxuMjU0MDpcXHRcXG4yNTQxOlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90dW5wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXFxuMjU0MjpcXHR7XFxuMjU0MzpcXHRcXHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIGZhbHNlKTtcXG4yNTQ0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NTAuNDk0NTU1Mzg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MjM2MDM0MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGZ1bmN0aW9uIGNhbGxzLCBJJ3ZlIGdvdCBhIHByZXR0eSBnb29kIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIEkndmUgbm90aWNlZCBhIHNpZ25pZmljYW50IHBhdHRlcm46IGluIGJvdGggYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AsIHRoZSBgdnEtXHUwMDNlbXV0ZXhgIGlzIGNvbnNpc3RlbnRseSBoZWxkICpiZWZvcmUqIGNhbGxpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBUaGlzIG1lYW5zIHRoYXQgYHZxLVx1MDAzZW11dGV4YCBpcyBBTFdBWVMgbG9ja2VkIHdoZW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgIGlzIGFjdHVhbGx5IGV4ZWN1dGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5UaGUga2V5IGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIENhbGxpbmcgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKWAgZnJvbSB3aXRoaW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgICp3aGVuKiBgIXZob3N0X3ZxX3dvcmtfcXVldWVgIHdhcyBhIGh1Z2UgcmVkIGZsYWcgYmVjYXVzZSBpdCBpbnRyb2R1Y2VkIGEgcG90ZW50aWFsIHNlbGYtZGVhZGxvY2suIFRoYXQncyBiZWNhdXNlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXRzZWxmIHdhcyBhdHRlbXB0aW5nIHRvIGxvY2sgdGhlIHNhbWUgYHZxLVx1MDAzZW11dGV4YCBpdCB3YXMgYWxyZWFkeSBob2xkaW5nLiBDbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLlxuXG5UaGUgb3RoZXIgdGhpbmcgdGhhdCdzIGltcG9ydGFudCB0byBtZSBpcyB0aGUgY2hhbmdlIHRoYXQgd2FzIG1hZGUgd2l0aCB0aGUgcGF0Y2gsIHRoZSBhZGRpdGlvbiBvZiBgbGxpc3RfcmV2ZXJzZV9vcmRlcihsbGlzdF9kZWxfYWxsKFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpKWAgaW4gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGluZGljYXRlcyBhbiBleHBsaWNpdCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQgZXZlbnRzIGFyZSBub3cgcHJvY2Vzc2VkIGluIEZJRk8gb3JkZXIuIFRoYXQncyBhIGdvb2QgdGhpbmcsIHRob3VnaCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgYSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBob3cgYHZob3N0LXNjc2lgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gYSB0ZXN0aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyIG9yIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlcnNwYWNlIHNpZGUgaW50ZXJhY3RzIHdpdGggYHZob3N0X3Njc2lgIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIHdoZXRoZXIgb3Igbm90IGAvZGV2L3Zob3N0LXNjc2lgIGV2ZW4gZXhpc3RzIGFuZCBob3cgaXQncyB1c2VkLiBUaGlzIHJlYWNoYWJpbGl0eSBxdWVzdGlvbiBpcyB2aXRhbCBmb3IgcmVwcm9kdWNpbmcgdGhlIGRlYWRsb2NrIGFuZCBvdGhlciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OTowNy43MzA1OTI1ODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDMwMzIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaXNjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xODk0PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X25ldF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4OTctXFx0XFx0dmhvc3RfbmV0X2VuYWJsZV96Y29weShWSE9TVF9ORVRfVlFfVFgpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg5ODpcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3RfbmV0X21pc2MpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5OS19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDc3PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Njc2lfcmVnaXN0ZXIodm9pZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDc4LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDc5OlxcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODAtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTk5MD1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF92c29ja19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk4LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5OTk6XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3RfdnNvY2tfbWlzYyk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OTowNy44NDA5MDA3NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcxNjU2NzEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIHZob3N0LXNjc2kgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAgaXMgcmVnaXN0ZXJlZCB1c2luZyBgbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9zY3NpX21pc2MpYC4gVGhhdCBtZWFucyBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGRldmljZSBkcml2ZXIgYnkgbG9va2luZyBhdCB0aGUgYHZob3N0X3Njc2lfbWlzY2Agc3RydWN0dXJlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGRlZmluZWQgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIG1hbmFnaW5nIHRoZSB2aXJ0dWFsIFNDU0kgaG9zdCB3aXRoaW4gdGhlIHZob3N0IGZyYW1ld29yay4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQhIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbWlzYyBkZXZpY2UgZnJhbWV3b3JrIGFuZCBob3cgdGhlIGRyaXZlciBnZXRzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaGFuZGxlcyBvcGVyYXRpb25zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjExLjU1NzQ3MDI1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MDAxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9taXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NzE6c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X3Njc2lfbWlzYyA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcyLVxcdE1JU0NfRFlOQU1JQ19NSU5PUixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Nzgte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0Nzk6XFx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4MC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDgyPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZGVyZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODMte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0ODQ6XFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToxMS42MzcxNzY5MjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYwNDgyMTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgYnVzaW5lc3MuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIGB2aG9zdF9zY3NpX2ZvcHNgIFN0cnVjdHVyZTogRGVjb2RpbmcgdGhlIFNDU0kgVmlydHVhbGl6YXRpb24qKlxuXG5SaWdodCwgYHZob3N0X3Njc2lfZm9wc2AuIFRoYXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIHNwZWNpZmljYWxseSB0YWlsb3JlZCBmb3IgU0NTSSBkZXZpY2UgdmlydHVhbGl6YXRpb24gd2l0aGluIHRoZSB2aG9zdCBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcyB0aGluZy4gV2hhdCdzIGluIGl0PyBQcm9iYWJseSBwb2ludGVycyB0byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvcmUgU0NTSSBvcGVyYXRpb25zOiBJL08gcmVxdWVzdHMsIHF1ZXVlIG1hbmFnZW1lbnQsIGRldmljZSByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24sIGVycm9yIGhhbmRsaW5n4oCmIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBhYnN0cmFjdGluZyBhIGJsb2NrIGRldmljZS5cblxuSSdtIGFzc3VtaW5nIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgaXMgaG93IHRoZSBob3N0IGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHVhbCBTQ1NJIGRldmljZSBwcmVzZW50ZWQgdG8gdGhlIGd1ZXN0LiBJdCdzIHRoZSBicmlkZ2UuIFdlJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgbWFwcyB0aGUgZ3Vlc3QncyBTQ1NJIGNvbW1hbmRzIGludG8gc29tZXRoaW5nIHRoZSBob3N0J3MgdW5kZXJseWluZyBzdG9yYWdlIGNhbiB1bmRlcnN0YW5kIOKAkyBwcm9iYWJseSB1c2luZyB0aGUgdXN1YWwgc2NhdHRlci1nYXRoZXIgbGlzdHMgdG8gZWZmaWNpZW50bHkgaGFuZGxlIGRhdGEgdHJhbnNmZXJzLiBBcmUgd2UgbG9va2luZyBhdCBhIHN0cmFpZ2h0IHBhc3N0aHJvdWdoIG9yIGlzIHRoZXJlIHNvbWUgdHJhbnNsYXRpb24gbGF5ZXI/IEhvcGVmdWxseSwgaXQncyBlZmZpY2llbnQsIGdpdmVuIHRoZSBwb3RlbnRpYWwgb3ZlcmhlYWQgb2YgdmlydHVhbGl6YXRpb24uXG5cblRoZSBkZXNpZ24gc2hvdWxkIGNvbnNpZGVyIHRoZSBzaGFyZWQgbWVtb3J5IGludGVyZmFjZSwgcmlnaHQ/IElzIHRoaXMgYHZob3N0X3Njc2lfZm9wc2Agc3RydWN0dXJlIGludGltYXRlbHkgdGllZCBpbnRvIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24gZm9yIHRoZSByaW5nIGJ1ZmZlcnMgYW5kIHRoZSBkZXNjcmlwdG9ycz8gSXQgaGFzIHRvIGJlLCBvciBpdCdkIGJlIGluY3JlZGlibHkgaW5lZmZpY2llbnQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBkYXRhIGlzIHBhc3NlZCBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgZ3Vlc3QsIGVzcGVjaWFsbHkgdGhlIHN0YXR1cyByZXBvcnRzLiBJcyB0aGVyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnM/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIFNDU0kgaXMga25vd24gZm9yIGl0cyBudWFuY2VkIGVycm9yIGNvZGVzLiBIb3cgaXMgdGhpcyB2aG9zdCBsYXllciBtYXBwaW5nIHRob3NlIFNDU0kgc2Vuc2UgY29kZXMgYmFjayB0byB0aGUgZ3Vlc3Q/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucywgbGlrZSBhdXRvbWF0aWMgcmV0cmllcywgaW1wbGVtZW50ZWQgaGVyZT8gSSdkIGV4cGVjdCBnb29kIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBtYW5hZ2VtZW50IHRvIGJlIGNydWNpYWwgZm9yIHJlbGlhYmlsaXR5LiBBbmQgd2hhdCBhYm91dCBzZWN1cml0eT8gRG9lcyB0aGUgYHZob3N0X3Njc2lfZm9wc2Agc3RydWN0dXJlIHRha2UgYW55IG1lYXN1cmVzIHRvIHZhbGlkYXRlIHRoZSBjb21tYW5kcyBjb21pbmcgZnJvbSB0aGUgZ3Vlc3QgdG8gcHJldmVudCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuYXV0aG9yaXplZCBhY2Nlc3M/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MTUuMjQyMDAxNjIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDYwOlxcdH1cXG4yNDYxOlxcdFxcbjI0NjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xcbjI0NjM6XFx0XFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuMjQ2NDpcXHRcXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9zY3NpX3JlbGVhc2UsXFxuMjQ2NTpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxcbjI0NjY6XFx0XFx0LmNvbXBhdF9pb2N0bFxcdD0gY29tcGF0X3B0cl9pb2N0bCxcXG4yNDY3OlxcdFxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Njc2lfb3BlbixcXG4yNDY4OlxcdFxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbjI0Njk6XFx0fTtcXG4yNDcwOlxcdFxcbjI0NzE6XFx0c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X3Njc2lfbWlzYyA9IHtcXG4yNDcyOlxcdFxcdE1JU0NfRFlOQU1JQ19NSU5PUixcXG4yNDczOlxcdFxcdFxcXCJ2aG9zdC1zY3NpXFxcIixcXG4yNDc0OlxcdFxcdFxcdTAwMjZ2aG9zdF9zY3NpX2ZvcHMsXFxuMjQ3NTpcXHR9O1xcbjI0NzY6XFx0XFxuMjQ3NzpcXHRzdGF0aWMgaW50IF9faW5pdCB2aG9zdF9zY3NpX3JlZ2lzdGVyKHZvaWQpXFxuMjQ3ODpcXHR7XFxuMjQ3OTpcXHRcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MTUuMjQyMTY4ODUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0MTM0MDIwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYC9kZXYvdmhvc3Qtc2NzaWAgTGFuZHNjYXBlKipcblxuT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAuLi4gdGhpcyBpcyBpbnRlcmVzdGluZy4gSXQncyBhIG1pc2MgZGV2aWNlIHRoYXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCwgYXMgYSB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoZXIsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3Igb3BlcmF0aW9ucyBsaWtlIGBvcGVuYXQkdmhvc3Rfc2NzaWAgYW5kIGBpb2N0bCR2aG9zdF9zY3NpXypgIG1lYW5zIGl0J3MgYWxyZWFkeSBhIHRhcmdldCBmb3IgZnV6emluZywgbGlrZWx5IGZvciBnb29kIHJlYXNvbi4gTXkgaW50dWl0aW9uIGlzIGNvbmZpcm1lZC5cblxuRnVydGhlcm1vcmUsIHRoZSBUQ00gZmFicmljIGFuZCBgdGFyZ2V0X2NvcmVgIGFyZSB1c2luZyBjb25maWdmcyB0byBtYW5hZ2UgdGFyZ2V0IHBvcnRzIGFuZCBMVU5zLiBUaGF0J3MgYSBjbGFzc2ljIHNldHVwLCBhbmQgdGhlIGhvdHBsdWcvaG90dW5wbHVnIG1lY2hhbmlzbXMsIG5hbWVseSBgdmhvc3Rfc2NzaV9ob3RwbHVnYCBhbmQgYHZob3N0X3Njc2lfaG90dW5wbHVnYCwgYXJlIHdoYXQgSeKAmW0gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGUgaW50ZXJwbGF5IHdpdGggdXNlcnNwYWNlIGtpY2tpbmcgdGhlIGV2ZW50IHZpcnRxdWV1ZSB2aWEgYGV2ZW50ZmRgIG9yIGBpb2N0bGAgaXMgYW5vdGhlciBwcm9taXNpbmcgYW5nbGUuIEEga2ljayBmcm9tIHVzZXJzcGFjZSBpcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IHRvIGEgYnVnLlxuXG5SaWdodCwgc28gd2hlcmUgZG9lcyBhbGwgdGhpcyBjb252ZXJnZT8gTGV0J3MgdHJhY2UgaG93IHRoZSBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gU2luY2UgaXQncyB0aGUgd29yayBjYWxsYmFjaywgdHJpZ2dlcmVkIGJ5IHRoZSB2aXJ0cXVldWUga2ljaywgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgYmVpbmcgKnNldCB1cCouIFRoYXQncyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gR290dGEgZGlnIGludG8gd2hlcmUgdGhhdCdzIGluaXRpYWxpemVkIGFuZCBob3cgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzcGVjaWZpYyB2aXJ0cXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MjIuNjU1NTc0MDExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE0NDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTg0MS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODQyOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI5NT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMzctXFx0dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0NUTF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzM4OlxcdHZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxLmhhbmRsZV9raWNrID0gdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2s7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzOS1cXHRmb3IgKGkgPSBWSE9TVF9TQ1NJX1ZRX0lPOyBpIFxcdTAwM2MgbnZxczsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjIyLjc1MDcyNDQ0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODQyODczNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBhIGBWSE9TVF9TQ1NJX1ZRX0VWVGAga2ljayBldmVudCB0cmlnZ2VycyB0aGUgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgSSBuZWVkIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgKmFmdGVyKiB0aGUga2ljay4gSSdsbCB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtgLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGNvcmUgd29yaywgcHJlc3VtYWJseSBjb21wbGV0aW5nIHNvbWUgU0NTSSBldmVudHMuIEJ1dCB3aGVyZSBpcyBgdnMtXHUwMDNldnNfZXZlbnRfd29ya2AgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIG91dCB3aGVuIGFuZCBob3cgdGhhdCdzIHNldCB1cC4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGV2ZW50cyBhcmUgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgdmhvc3Qtc2NzaSBmcmFtZXdvcmsuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSB3b3JrIHF1ZXVlIGlzIGVzdGFibGlzaGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjI1LjU5MzYwMjUzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMjY0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNfZXZlbnRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDctXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4OlxcdHN0cnVjdCB2aG9zdF93b3JrIHZzX2V2ZW50X3dvcms7IC8qIGV2dCBpbmplY3Rpb24gd29yayBpdGVtICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ5LVxcdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU4LVxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3Rfc2NzaSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzNy1cXHRsbGlzdF9hZGQoXFx1MDAyNmV2dC1cXHUwMDNlbGlzdCwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM4OlxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI5NT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjMzMDpcXHR2aG9zdF93b3JrX2luaXQoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrLCB2aG9zdF9zY3NpX2V2dF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToyNS42NTQ5MzQzMTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI2NDU5NDg0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZob3N0LXNjc2lgIENvZGUgUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBleGFtaW5pbmcgYSBzcGVjaWZpYyBjb2RlIHBhdGggd2l0aGluIHRoZSBgdmhvc3Qtc2NzaWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGV2ZW50IGhhbmRsaW5nIGFuZCB3b3JrIHF1ZXVlIHByb2Nlc3NpbmcuIEkgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgdnMtXHUwMDNldnNfZXZlbnRfd29ya2Agd2l0aCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgYW5kIGhvdyB0aGF0IHRyaWdnZXJzIGEgc2VxdWVuY2U6IGB2aG9zdF9zY3NpX2V2dF93b3JrYCBjYWxscyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCB0aGVuIGNhbGxzIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gV2l0aGluIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgSSdtIG5vdGluZyB0aGUgdXNlIG9mIGFuIGBsbGlzdGAgKGxvY2tsZXNzIGxpc3QpIGZvciBldmVudCBtYW5hZ2VtZW50LiBFdmVudHMgYXJlIGFkZGVkIHVzaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBhbmQgcXVldWVkIGZvciBjb21wbGV0aW9uLiBBIGtleSBkZXRhaWwgaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmdW5jdGlvbiwgd2l0aCBhIHBvdGVudGlhbCBmYWxsYmFjayBwYXRoIHRvIHRyaWdnZXIgdGhlIGV2ZW50IGNvbXBsZXRpb24gc3luY2hyb25vdXNseSBpZiBxdWV1ZWluZyBmYWlscy4gQWxsIG9mIHRoaXMgaXMgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCB3aGljaCBtYWtlcyBpdCB2ZXJ5IGludGVyZXN0aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYWxsIGNsZWFybHkgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUga2VybmVsLCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCB0aGF0IHJ1bGVzIG91dCB0aGUgc3RhbmRhcmQganVzdGlmaWNhdGlvbnMgZm9yIGV4Y2x1ZGluZyBpdCBmcm9tIGZ1enppbmcuIEl0J3Mgbm90IG5vbi1rZXJuZWwsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgdmlhIGV4ZWN1dGlvbiBwYXRocy5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKldvcnRoRnV6emluZyA9IHRydWUhKipcblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZnV6emluZyBpdC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMsIGZvY3VzIHN5bWJvbHMsIGFuZCBmaW5hbGx5IHRoZSBmdXp6aW5nIHJlYXNvbmluZy4gTXkgbmV4dCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgdGhlIGJ1aWxkLiBJIHNlZSB0aGF0IHRoZSBgVkhPU1RfU0NTSWAgZHJpdmVyIHJlbGllcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIFRoaXMgZHJpdmVyIGhhcyBhIGBLY29uZmlnYCBlbnRyeSB0aGF0IGluZGljYXRlcyB0aGF0IGBWSE9TVF9TQ1NJYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gSXQgZGVmYXVsdHMgdG8gYG5gIChub3QgYnVpbHQtaW4pLCBzbyBJIG5lZWQgdG8ga25vdyB3aGVyZSBgVEFSR0VUX0NPUkVgIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjM4LjMwMDg4NTkzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwOTAzNjc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEFSR0VUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZzozOm1lbnVjb25maWcgVEFSR0VUX0NPUkVcXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MzkuNDA5OTMwNTk3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzUwMDAxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBUYXJnZXQgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdGFyZ2V0IGRyaXZlciBjb25maWd1cmF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYGRyaXZlcnMvdGFyZ2V0L0tjb25maWdgIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMSBpcyBwcm9iYWJseSB3aGVyZSBJJ2xsIGZpbmQgdGhlIGdlbmVyYWwgc2NvcGUgb2Ygd2hhdCdzIGRlZmluZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhcmdldCBkcml2ZXJzLCBtYXliZSBpbmNsdWRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBhbHNvIHNvbWUgaGVscGZ1bCBjb21tZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBzcGVjaWZpYyBwcm9ibGVtLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6NDMuOTQ0OTMzMjc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQ19UMTBESUZcXG4gICA4OlxcdFxcdHNlbGVjdCBTQ1NJX0NPTU1PTlxcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcXG4gIDEzOlxcdFxcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xcbiAgMTQ6XFx0XFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBUQVJHRVRfQ09SRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVENNX0lCTE9DS1xcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIlRDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcXFwiXFxuICAyMDpcXHRcXHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00vSUJMT0NLIHN1YnN5c3RlbSBwbHVnaW4gZm9yIG5vbi1idWZmZXJlZFxcbiAgMjM6XFx0XFx0YWNjZXNzIHRvIExpbnV4L0Jsb2NrIGRldmljZXMgdXNpbmcgQklPXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBUQ01fRklMRUlPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjQzLjk0NTAwODg5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDI1ODIyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBzaXR1YXRpb246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBNYWtlZmlsZSBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRlcGVuZGVuY2llcy4gYFRBUkdFVF9DT1JFYCBpcyB0aGUgZm91bmRhdGlvbiwgYW5kIGBCTE9DS2AgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGl0LiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlbiwgYFZIT1NUX1NDU0lgIHJlbGllcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgKmFuZCogYEVWRU5URkRgLiBTaW5jZSBgRVZFTlRGRGAgaXMgYSBzdGFuZGFyZCBrZXJuZWwgY29uZmlnLCB0aGVyZSdzIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSB0aGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIFRoZSBNYWtlZmlsZSB3aWxsIHNob3cgbWUgdGhlIGJ1aWxkIHJ1bGVzLCBhbnkgc3BlY2lmaWMgZmxhZ3MsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJJ20gbm90IHNlZWluZyBoZXJlLiBUaGlzIHdpbGwgaGVscCBtZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRlc2NyaWJlZCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBhbmQgcG90ZW50aWFsbHkgZmluZCBvdGhlciBjb250cmlidXRpbmcgZmFjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjQ3Ljk3MDgzNDQzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICs9IHZob3N0X25ldC5vXFxuICAgMzpcXHR2aG9zdF9uZXQteSA6PSBuZXQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgKz0gdmhvc3Rfc2NzaS5vXFxuICAgNjpcXHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgKz0gdmhvc3RfdnNvY2sub1xcbiAgIDk6XFx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSArPSB2cmluZ2gub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgKz0gdmhvc3RfdmRwYS5vXFxuICAxNDpcXHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19WSE9TVClcXHQrPSB2aG9zdC5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgKz0gdmhvc3RfaW90bGIub1xcbiAgMTk6XFx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjQ3Ljk3MDkzODkxOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjU5ODQyODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3Qtc2NzaSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBwYXRjaC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHNldHRpbmcgYENPTkZJR19WSE9TVF9TQ1NJYCBjb21waWxlcyBgc2NzaS5jYCBpbnRvIGB2aG9zdF9zY3NpLm9gLiBNYWtlcyBzZW5zZS4gQW5kIHRoYXQgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBSaWdodCwgc28gYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgIGFyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgaGVyZS4gR29vZCB0byBoYXZlIHRoYXQgZXN0YWJsaXNoZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEknbSBzZWVpbmcgYSBmZXcgc3ltYm9scyBtb2RpZmllZC4gRmlyc3QsIHdlJ3ZlIGdvdCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBMb29rcyBsaWtlIGl0J3MgZWl0aGVyIG5ldyBvciBhIHJlbmFtZWQgdmVyc2lvbiBvZiB0aGUgb2xkIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoZW4gdGhlcmUgaXMgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB3aGljaCBpcyBhbHNvIHN0YXRpYywgbm93IGFjcXVpcmVzIGB2cS1cdTAwM2VtdXRleGAgYW5kIHRoZW4gY2FsbHMgdGhpcyBuZXcgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBGaW5hbGx5IGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aGljaCBpcyBub3cgY2FsbGluZyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYXMgd2VsbC4gSW50ZXJlc3RpbmcsIHNvIHRoZSBvbGQgbG9naWMgaXMgYmVpbmcgcmUgZmFjdG9yZWQgaGVyZS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgc2lnbmFscyBpbmxpbmluZyBwb3RlbnRpYWwsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vay4uLiBZZXAsIGl0J3MgYHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBHQ0MgbWlnaHQgaW5saW5lIHRoaXMgdG8gb3B0aW1pemUuIElmIGl0IGRvZXMgZ2V0IGlubGluZWQsIGJvdGggZnVuY3Rpb25zIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYW5kIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aWxsIGJlIHN5bWJvbHMgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCwgd2hpY2ggbWFrZXMgdGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcuXG5cbk9rYXksIGxldCdzIGZpZ3VyZSBvdXQgd2hvIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy4gV2hhdCdzIGNhbGxpbmcgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYD8gSG1tLCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AuIEFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGA/IFRoYXQgb25lJ3MgY2FsbGVkIGJ5IGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgYW5kIGluZGlyZWN0bHkgYnkgYHZob3N0X3Njc2lfZG9fcGx1Z2AgdGhyb3VnaCBgdmhvc3Rfc2NzaV9ob3RwbHVnYCBhbmQgYHZob3N0X3Njc2lfaG90dW5wbHVnYC5cblxuQWxyaWdodCwgSSBzaG91bGQgY2hlY2sgdGhlIGlvY3RsIGhhbmRsZXIgb3IgZW50cnkgcG9pbnRzIGZvciB2aG9zdC1zY3NpIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgY2hlY2sgYHZob3N0X3Njc2lfaW9jdGxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjUyLjYzMDgwNjE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2OTI2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE5MzQ9c3RhdGljIGludCB2aG9zdF9zY3NpX3NldHVwX3ZxX2NtZHMoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCBtYXhfY21kcylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE5ODgtLypcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxOTg5OiAqIENhbGxlZCBmcm9tIHZob3N0X3Njc2lfaW9jdGwoKSBjb250ZXh0IHRvIHdhbGsgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk5MC0gKiB2aG9zdF9zY3NpX3RwZyB3aXRoIGFuIGFjdGl2ZSBzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1c1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjM4NT1zdGF0aWMgbG9uZ1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODY6dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzg3LVxcdFxcdCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjQtXFx0LnJlbGVhc2UgICAgICAgID0gdmhvc3Rfc2NzaV9yZWxlYXNlLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NjU6XFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3Rfc2NzaV9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDY2LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjUyLjc0MjUwNDYwOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzE3NjUxNTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZXZlbnQgaGFuZGxpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgc3Vic3lzdGVtLiBJJ20gc2VlaW5nIGEgY2x1c3RlciBvZiBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuOiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBsYXllcnMgaW4gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBzY3NpLmNgIG1pZ2h0IGJlIHJlbGV2YW50IGFuZCBpbnRlcmNvbm5lY3RlZCB3aXRoIHRoZXNlIGNvcmUgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gQWgsIHRoZXJlIGl0IGlzISBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AgaXMgY2FsbGVkIHdpdGhpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoYXQncyBhbiBpbXBvcnRhbnQgY29ubmVjdGlvbiB0byBub3RlLiBOb3csIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgc3BlY2lmaWNzIG9mIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYC4gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGV2ZW50IHByb2Nlc3NpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6MDUuOTE5MDIzMzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3Mjc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9kb19ldnRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTU2OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU3MDp2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTcxLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTYzND1zdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQxLVxcdFxcdGlmICghZHJvcClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDI6XFx0XFx0XFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDMtXFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6MDYuMDIyNzYxMjY5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0MDYzMDQzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaG9zdC1TQ1NJIEV2ZW50IEhhbmRsaW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYCwgd2hpY2ggaXMgdGhlIHdvcmsgaGFuZGxlciByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBldmVudCBub3RpZmljYXRpb25zIHRvIHRoZSBndWVzdCdzIHZpcnRxdWV1ZS4gTXkgbmV4dCB0aG91Z2h0IHdhcyB0byBtYXAgb3V0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbGFuZHNjYXBlLiBJJ3ZlIG5vdyBnb3QgYSBnb29kIGxpc3Q6IGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AsIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBpbiBhZGRpdGlvbiB0byB0aGUgb3JpZ2luYWwuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGNoZWNraW5nIGZvciB0aGUgbmVjZXNzYXJ5IEtjb25maWcgc3ltYm9sczogYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBhbmQgYEVWRU5URkRgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBWSE9TVGAgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgVkhPU1RfU0NTSWAsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGluIHRoZSBLY29uZmlnIGZpbGUuIGBFVkVOVEZEYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBidXQgSSdtIGluY2x1ZGluZyBpdCB0byBiZSBleHRyYSB0aG9yb3VnaC4gVGh1cywgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgVkhPU1RfU0NTSWAsIGBUQVJHRVRfQ09SRWAsIGFuZCBgRVZFTlRGRGAuXG5cbkxldCdzIHJlY2FwIGFuZCBjb25maXJtIG91ciB1bmRlcnN0YW5kaW5nLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgdmhvc3Qtc2NzaSBldmVudCBoYW5kbGluZyBsb2dpYyB3aXRoaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gSGVyZSdzIHdoYXQncyBiZWVuIGNoYW5nZWQ6XG5cbjEuICBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGhhcyBiZWVuIHNwbGl0IGludG8gYW4gdW5sb2NrZWQgaGVscGVyLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIGFzc3VtZXMgdGhlIGNhbGxlciBob2xkcyBgdnEtXHUwMDNlbXV0ZXhgLCBhbmQgdGhlIG9yaWdpbmFsIGxvY2tlZCB3cmFwcGVyLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLlxuMi4gIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBub3cgY2FsbHMgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGluc3RlYWQgb2YgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB3aGVuIGV2ZW50IHF1ZXVpbmcgZmFpbHMgKGAhdmhvc3RfdnFfd29ya19xdWV1ZWApLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGJlY2F1c2UgdGhlIGNhbGxlcnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgIChgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBgdmhvc3Rfc2NzaV9kb19wbHVnYCkgYWxyZWFkeSBob2xkIGB2cS1cdTAwM2VtdXRleGAuXG4zLiAgVGhlIHBhdGNoIHJldmVyc2VzIHRoZSBvcmRlciBvZiBldmVudHMgd2hlbiBwb3BwaW5nIGZyb20gYHZzLVx1MDAzZXZzX2V2ZW50X2xpc3RgIHVzaW5nIGBsbGlzdF9yZXZlcnNlX29yZGVyYCwgc28gaXQncyBjaGFuZ2luZyB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBxdWV1ZWQgZXZlbnRzLlxuXG5BbGwgdGhpcyBhbHRlcmVkIGNvZGUgaXMgdHJpZ2dlcmVkIHRocm91Z2ggYC9kZXYvdmhvc3Qtc2NzaWAgaW9jdGwva2ljayBvcGVyYXRpb25zIGFuZCBUQ00gU0NTSSB0YXJnZXQgaG90cGx1ZyBldmVudHMsIHdoaWNoIGlzIHN0YW5kYXJkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEdpdmVuIHRoZXNlIGNoYW5nZXMsIGZ1enppbmcgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGVhZGxvY2tzLCBvcmRlcmluZyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZXZlbnQgcXVldWUgZmx1c2hpbmcgYW5kIGRlbGl2ZXJ5LlxuXG5Pa2F5LCBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCB2ZXJpZmllZC4gSSdtIG5vdyBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTMyLCJPdXRwdXRUb2tlbnMiOjI1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDoxMi40MjkwNjg0ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMxMTYzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCIsXG4gICAgXCJFVkVOVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X3dvcmtcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX3BsdWdcIixcbiAgICBcInZob3N0X3Njc2lfZG9fZXZ0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgZXZlbnQgY29tcGxldGlvbiBhbmQgZGlzcGF0Y2ggbG9naWMgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEl0IHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiB2cS1cXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiLFxuICAgIFwiRVZFTlRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3Njc2lfc2VuZF9ldnRcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF93b3JrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX2V2dF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCBieSBjYWxsZXJzIG9mIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgYW5kIGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByZXNlcnZlIGV2ZW50IG9yZGVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvZGV2L3Zob3N0LXNjc2kgYW5kIHZpcnRxdWV1ZSBraWNrcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUwOjEyLjU1MjE5NDIzMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODY3ODU5OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6MTIuNTUyNzc3ODUzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ0ODY3MjcxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4rXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIFx0XHRpZiAoIWRyb3ApXG4gXHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiBcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gfVxuIFxuQEAgLTE4MjksNyArMTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiBcbiBcdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuLVx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4rXHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUwOjEyLjU1Mjc3OTA1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NjExMDIyNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEluaXRpYWwgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc3BpbiB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZm9jdXMuXG5cbkkgbmVlZCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBsb29rcyBsaWtlLCB0aGUgY29udGV4dCBmb3IgdGhlc2UgY2hhbmdlcy4gSSdsbCBwcm9iYWJseSB1c2UgbXkgdXN1YWwgZ28tdG8gdG9vbHMsIGxpa2UgYHJlYWQtZmlsZWAgdG8ganVzdCBsb2FkIHRoZSBmaWxlLCBvciBtYXliZSBJJ2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgaWYgSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBzcGVjaWZpYyBjYWxscyBvciB2YXJpYWJsZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGNvZGUgaW5zcGVjdGlvbiwgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjQsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjI4LjY2MzAwNzE0OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gZmFsc2U7XFxuIDYyMTpcXHRcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGV2ZW50cCA9IHZxLVxcdTAwM2Vpb3Zbb3V0XS5pb3ZfYmFzZTtcXG4gNjI0OlxcdFxcdHJldCA9IF9fY29weV90b191c2VyKGV2ZW50cCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTtcXG4gNjI1OlxcdFxcdGlmICghcmV0KVxcbiA2MjY6XFx0XFx0XFx0dmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChcXHUwMDI2dnMtXFx1MDAzZWRldiwgdnEsIGhlYWQsIDApO1xcbiA2Mjc6XFx0XFx0ZWxzZVxcbiA2Mjg6XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXFxcblxcXCIpO1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcXG4gNjMxOlxcdH1cXG4gNjMyOlxcdFxcbiA2MzM6XFx0LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xcbiA2MzQ6XFx0c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4gNjM1OlxcdHtcXG4gNjM2OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcXG4gNjM3OlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGxsbm9kZSA9IGxsaXN0X3JldmVyc2Vfb3JkZXIobGxpc3RfZGVsX2FsbChcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpKTtcXG4gNjQwOlxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHtcXG4gNjQxOlxcdFxcdFxcdGlmICghZHJvcClcXG4gNjQyOlxcdFxcdFxcdFxcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7XFxuIDY0MzpcXHRcXHRcXHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0fVxcbiA2NDY6XFx0XFxuIDY0NzpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4gNjQ4OlxcdHtcXG4gNjQ5OlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiA2NTI6XFx0XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XFxuIDY1MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuIDY1NDpcXHR9XFxuIDY1NTpcXHRcXG4gNjU2OlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuIDY1NzpcXHR7XFxuIDY1ODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXFxuIDY1OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZzX2V2ZW50X3dvcmspO1xcbiA2NjA6XFx0XFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG4gNjYxOlxcdH1cXG4gNjYyOlxcdFxcbiA2NjM6XFx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcXG4gNjY0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MjguNjYzMjAxNDk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODIwOlxcdFxcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcXG4xODIxOlxcdFxcdGlmICghZXZ0KVxcbjE4MjI6XFx0XFx0XFx0cmV0dXJuO1xcbjE4MjM6XFx0XFxuMTgyNDpcXHRcXHRpZiAodHBnIFxcdTAwMjZcXHUwMDI2IGx1bikge1xcbjE4MjU6XFx0XFx0XFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xcbjE4MjY6XFx0XFx0XFx0LypcXG4xODI3OlxcdFxcdFxcdCAqIE5vdGU6IGV2dC1cXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXFxuMTgyODpcXHRcXHRcXHQgKiBsdW5bNC03XSBuZWVkIHRvIGJlIHplcm8gYWNjb3JkaW5nIHRvIHZpcnRpby1zY3NpIHNwZWMuXFxuMTgyOTpcXHRcXHRcXHQgKi9cXG4xODMwOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzBdID0gMHgwMTtcXG4xODMxOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVxcdTAwM2V0cG9ydF90cGd0O1xcbjE4MzI6XFx0XFx0XFx0aWYgKGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwM2U9IDI1NilcXG4xODMzOlxcdFxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzJdID0gbHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZVxcdTAwM2UgOCB8IDB4NDAgO1xcbjE4MzQ6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDI2IDB4RkY7XFxuMTgzNTpcXHRcXHR9XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2ZXZ0LVxcdTAwM2VsaXN0LCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpO1xcbjE4Mzg6XFx0XFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X3dvcmspKVxcbjE4Mzk6XFx0XFx0XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XFxuMTg0MDpcXHR9XFxuMTg0MTpcXHRcXG4xODQyOlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbjE4NDM6XFx0e1xcbjE4NDQ6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSxcXG4xODQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHBvbGwud29yayk7XFxuMTg0NjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Njc2ksIGRldik7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMTg0OTpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4xODUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRpZiAodnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQpXFxuMTg1MzpcXHRcXHRcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcXG4xODU0OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4xODU1OlxcdG91dDpcXG4xODU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODU3OlxcdH1cXG4xODU4OlxcdFxcbjE4NTk6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4xODYwOlxcdHtcXG4xODYxOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXFxuMTg2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwb2xsLndvcmspO1xcbjE4NjM6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHZxLVxcdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xcbjE4NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjI4LjY2MzM1NTE5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1Njk2MTc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYW5kIGNhbGxpbmcgY29udGV4dCBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgaXQgb3BlcmF0ZXMgd2l0aGluLlxuXG4qKkFuYWx5emluZyB0aGUgRXhlY3V0aW9uIENvbnRleHQgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgKipcblxuSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsZXJzLiBJJ2xsIG5lZWQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhdGhzIHRoYXQgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZW4sIGEgZm9jdXNlZCBsb29rIGF0IGxpbmVzIGFyb3VuZCAxODAwLTE4MzAgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBzaG91bGQgcHJvdmlkZSBzb21lIGltbWVkaWF0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBhZGphY2VudCBjb2RlIHdpbGwgY2xhcmlmeSBkYXRhIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIHRoZSBldmVudCBzZW5kaW5nLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIGEgZ29vZCBpbml0aWFsIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MzYuMjMyOTc3MzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjE4MDE6XFx0fVxcbjE4MDI6XFx0XFxuMTgwMzpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4xODA0OlxcdHtcXG4xODA1OlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXFxuMTgwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwb2xsLndvcmspO1xcbjE4MDc6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHZxLVxcdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xcbjE4MDg6XFx0XFxuMTgwOTpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IFRoZSBoYW5kbGluZyBmdW5jIGZvciBjb250cm9sIHF1ZXVlLlxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjE4MTA6XFx0XFx0dmhvc3Rfc2NzaV9jdGxfaGFuZGxlX3ZxKHZzLCB2cSk7XFxuMTgxMTpcXHR9XFxuMTgxMjpcXHRcXG4xODEzOlxcdHN0YXRpYyB2b2lkXFxuMTgxNDpcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMTgxNTpcXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4xODE2OlxcdFxcdFxcdCAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXFxuMTgxNzpcXHR7XFxuMTgxODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcXG4xODE5OlxcdFxcbjE4MjA6XFx0XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbjE4MjE6XFx0XFx0aWYgKCFldnQpXFxuMTgyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTgyMzpcXHRcXG4xODI0OlxcdFxcdGlmICh0cGcgXFx1MDAyNlxcdTAwMjYgbHVuKSB7XFxuMTgyNTpcXHRcXHRcXHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXFxuMTgyNjpcXHRcXHRcXHQvKlxcbjE4Mjc6XFx0XFx0XFx0ICogTm90ZTogZXZ0LVxcdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcXG4xODI4OlxcdFxcdFxcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cXG4xODI5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTozNi4yMzMyNTI4NjFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgyMzEwNjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB2aG9zdF9zY3NpX3NlbmRfZXZ0IENhbGwgU2l0ZXMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgJ3MgYmVoYXZpb3VyIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBjb250ZXh0LiBBIHF1aWNrIHNlYXJjaCBvZiB0aGUgc291cmNlIGlzIGluIG9yZGVyLCBzcGVjaWZpY2FsbHkgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8ga25vdyAqd2hhdCogdHJpZ2dlcnMgdGhlIGV2ZW50IHNpZ25hbGluZyBhbmQgKnVuZGVyIHdoYXQgY29uZGl0aW9ucyogaXQncyBpbml0aWF0ZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3J1Y2lhbCB0byB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBmb2N1cyBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBkYXRhIGZsb3dzIGFyb3VuZCB0aGUgY2FsbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBzaG91bGQgcXVpY2tseSBoZWxwIG1lIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBzdWJzeXN0ZW0ncyBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjM4LjA1NjM2MjQzNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNTgwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTozOC4xMDU2MjY5ODRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzg5OTg2MjE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdmhvc3Rfc2NzaV9kb19wbHVnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGlzIHZob3N0IFNDU0kgcGx1Zy1pbiBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgdmhvc3Rfc2NzaV9kb19wbHVnYCBhbmQgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAyNTA0LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4sIGFzIGl0J3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUga2lja3Mgb2ZmLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXRpbGl6ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIG92ZXJhbGwgY29udGV4dCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBVbmRlcnN0YW5kaW5nIGhvdyByZXNvdXJjZXMgYXJlIHByb3RlY3RlZCBhbmQgdGhlIGRhdGEgZmxvdyB3aWxsIHByb3ZpZGUgaW5zaWdodHMuIEkgd2lsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBhcmVhcyBvZiBjb25jZXJuIHJlbGF0aW5nIHRvIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6NDIuMDA1NDk1MTRaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1MDA6XFx0XFx0cmV0dXJuIFxcXCJVbmtub3duXFxcIjtcXG4yNTAxOlxcdH1cXG4yNTAyOlxcdFxcbjI1MDM6XFx0c3RhdGljIHZvaWRcXG4yNTA0OlxcdHZob3N0X3Njc2lfZG9fcGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyxcXG4yNTA1OlxcdFxcdFxcdCAgc3RydWN0IHNlX2x1biAqbHVuLCBib29sIHBsdWcpXFxuMjUwNjpcXHR7XFxuMjUwNzpcXHRcXG4yNTA4OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHRwZy1cXHUwMDNldmhvc3Rfc2NzaTtcXG4yNTA5OlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbjI1MTA6XFx0XFx0dTMyIHJlYXNvbjtcXG4yNTExOlxcdFxcbjI1MTI6XFx0XFx0aWYgKCF2cylcXG4yNTEzOlxcdFxcdFxcdHJldHVybjtcXG4yNTE0OlxcdFxcbjI1MTU6XFx0XFx0aWYgKHBsdWcpXFxuMjUxNjpcXHRcXHRcXHRyZWFzb24gPSBWSVJUSU9fU0NTSV9FVlRfUkVTRVRfUkVTQ0FOO1xcbjI1MTc6XFx0XFx0ZWxzZVxcbjI1MTg6XFx0XFx0XFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFTU9WRUQ7XFxuMjUxOTpcXHRcXG4yNTIwOlxcdFxcdHZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbjI1MjE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4yNTIyOlxcdFxcdC8qXFxuMjUyMzpcXHRcXHQgKiBXZSBjYW4ndCBxdWV1ZSBldmVudHMgaWYgdGhlIGJhY2tlbmQgaGFzIGJlZW4gY2xlYXJlZCwgYmVjYXVzZVxcbjI1MjQ6XFx0XFx0ICogd2UgY291bGQgZW5kIHVwIHF1ZXVlaW5nIGFuIGV2ZW50IGFmdGVyIHRoZSBmbHVzaC5cXG4yNTI1OlxcdFxcdCAqL1xcbjI1MjY6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXFxuMjUyNzpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4yNTI4OlxcdFxcbjI1Mjk6XFx0XFx0aWYgKHZob3N0X2hhc19mZWF0dXJlKHZxLCBWSVJUSU9fU0NTSV9GX0hPVFBMVUcpKVxcbjI1MzA6XFx0XFx0XFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIHRwZywgbHVuLFxcbjI1MzE6XFx0XFx0XFx0XFx0XFx0ICAgVklSVElPX1NDU0lfVF9UUkFOU1BPUlRfUkVTRVQsIHJlYXNvbik7XFxuMjUzMjpcXHR1bmxvY2s6XFxuMjUzMzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMjUzNDpcXHR9XFxuMjUzNTpcXHRcXG4yNTM2OlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90cGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxcbjI1Mzc6XFx0e1xcbjI1Mzg6XFx0XFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCB0cnVlKTtcXG4yNTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6NDIuMDA1Njg3MzYxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNzk5ODA0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVjdXJzaXZlIE11dGV4IERlYWRsb2NrIERpc2NvdmVyZWQgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZob3N0X3Njc2lgIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgZ2xhcmluZyBpc3N1ZS4gSW4gYm90aCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBhbmQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgdGhlcmUncyBhIGxvY2sgYWNxdWlyZWQ6IGBtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KWAuIE5vdywgdGhhdCdzIGZpbmUgb24gaXRzIG93bi4gVGhlIHByb2JsZW0gaXMgd2hhdCAqaGFwcGVucyogaW5zaWRlIHRob3NlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBib3RoIG9mIHRoZW0gY2FsbCBgdmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIC4uLilgLiBBbmQgaW5zaWRlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgd2UgaGF2ZSB0aGlzOlxuXG5gYGBjXG5cdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG5cdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5cdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuYGBgXG5cblRoZSBsaWdodGJ1bGIgZ29lcyBvZmYhIFByZXZpb3VzbHksIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXRzZWxmIHdhcyBjYWxsaW5nIGBtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KWAuIFNvLCB3aGVuIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5zIGZhbHNlLCBpdCB0cmlnZ2VycyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpYCwgd2hpY2ggYXR0ZW1wdHMgdG8gcmVhY3F1aXJlIGBtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KWAhIEJ1dCB0aGUgYHZxLVx1MDAzZW11dGV4YCBpcyBhbHJlYWR5IGhlbGQgYnkgdGhlIGNhbGxlcuKAlGVpdGhlciBgdmhvc3Rfc2NzaV9kb19wbHVnYCBvciBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLiBCb29tOiB0aGF0J3MgYSBjbGFzc2ljIHJlY3Vyc2l2ZSBtdXRleCBkZWFkbG9jay5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZSB0aGF0IHRoaXMgaXMgcmVzb2x2ZWQgYnkgdXNpbmcgdGhlIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmdW5jdGlvbiBjYWxsLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgZ29vZCBkZXNpZ24gY2hvaWNlLlxuXG5BbHNvLCBJIHNlZSB0aGF0IHdlJ3JlIHJldmVyc2luZyB0aGUgbGlua2VkIGxpc3QgYGxsaXN0X3JldmVyc2Vfb3JkZXIobGxpc3RfZGVsX2FsbChcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KSlgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGF0IGl0ZW1zIGFyZSBhZGRlZCBpbiBMSUZPIG9yZGVyIHdpdGggYGxsaXN0X2FkZGAsIHNvIGl0J3MgYSBnb29kIHdheSB0byBjb252ZXJ0IHRoZSBldmVudCBxdWV1ZSB0byBGSUZPLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHdoYXQgYHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0YCBkb2VzLi4uIGp1c3QgaW4gY2FzZS4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTo0Ni4yODU2NzA0MjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjA2MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTUzOD1zdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1Mzk6dmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU0MC1cXHRcXHQgICAgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODE5LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MjA6XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MjEtXFx0aWYgKCFldnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjQ2LjMzMDI4NDY3OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTgzNTc2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0YCwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29uc3RydWN0aW5nIGB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dGAqKlxuXG5SaWdodCwgbGV0J3MgcHVsbCB1cCBgdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnRgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdmhvc3Qtc2NzaSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEga2V5IGVsZW1lbnQgaW4gdGhlIGV2ZW50IGhhbmRsaW5nIHBpcGVsaW5lIGZvciBTQ1NJIGNvbW1hbmQgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHZpcnR1YWwgaG9zdCBmcmFtZXdvcmsuIEl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRlZCB0byBtYW5hZ2UgYSBuZXcgU0NTSSBjb21tYW5kLCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHBvdGVudGlhbGx5IHF1ZXVlaW5nIGl0IGZvciBwcm9jZXNzaW5nLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllciwgdGhlIEkvTyBwYXRoLCBhbmQgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSB2aG9zdC1zY3NpIGRldmljZSBzdHJ1Y3R1cmUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1hbmQgc3RydWN0dXJlcy4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBlcnJvciBjb25kaXRpb25zIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byB3aGV0aGVyIHRoZXJlIGlzIGFueSBzcGlubG9jayBwcm90ZWN0aW9uLiBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGF0IGNvbmN1cnJlbmN5IHByb2JsZW1zIGFyZSBwcmV2ZW50ZWQgd2l0aGluIHRoZSBhbGxvY2F0aW9uIHBoYXNlLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBhcmUgaW50cm9kdWNlZC4gQW55IG9wdGltaXphdGlvbnMgb3IgY2xldmVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgaW4gdGhpcyBhbGxvY2F0aW9uPyBHb29kLCBsZXQncyBzZWUgd2hhdCdzIGluIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTo1NS45MTM4NjQ1OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTM1OlxcdFxcdGtmcmVlKGV2dCk7XFxuIDUzNjpcXHR9XFxuIDUzNzpcXHRcXG4gNTM4OlxcdHN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKlxcbiA1Mzk6XFx0dmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxcbiA1NDA6XFx0XFx0XFx0ICAgICAgIHUzMiBldmVudCwgdTMyIHJlYXNvbilcXG4gNTQxOlxcdHtcXG4gNTQyOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbiA1NDM6XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XFxuIDU0NDpcXHRcXG4gNTQ1OlxcdFxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX25yIFxcdTAwM2UgVkhPU1RfU0NTSV9NQVhfRVZFTlQpIHtcXG4gNTQ2OlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcXG4gNTQ3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1NDg6XFx0XFx0fVxcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHRldnQgPSBremFsbG9jX29iaigqZXZ0KTtcXG4gNTUxOlxcdFxcdGlmICghZXZ0KSB7XFxuIDU1MjpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgdmhvc3Rfc2NzaV9ldnRcXFxcblxcXCIpO1xcbiA1NTM6XFx0XFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbiA1NTQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDU1NTpcXHRcXHR9XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGV2dC1cXHUwMDNlZXZlbnQuZXZlbnQgPSBjcHVfdG9fdmhvc3QzMih2cSwgZXZlbnQpO1xcbiA1NTg6XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5yZWFzb24gPSBjcHVfdG9fdmhvc3QzMih2cSwgcmVhc29uKTtcXG4gNTU5OlxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbnIrKztcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0dXJuIGV2dDtcXG4gNTYyOlxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NoZWNrX3N0b3BfZnJlZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXFxuIDU2NTpcXHR7XFxuIDU2NjpcXHRcXHRyZXR1cm4gdGFyZ2V0X3B1dF9zZXNzX2NtZChzZV9jbWQpO1xcbiA1Njc6XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRzdGF0aWMgdm9pZFxcbiA1NzA6XFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxcbiA1NzE6XFx0e1xcbiA1NzI6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuIDU3MzpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQgKmV2ZW50ID0gXFx1MDAyNmV2dC1cXHUwMDNlZXZlbnQ7XFxuIDU3NDpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQgX191c2VyICpldmVudHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjU1LjkxNDc2MzkxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2MzM2NzI4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBldnRgIGlzIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigqZXZ0KWAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0IOKAkyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBwcmFjdGljZSwgcHJldmVudGluZyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha2FnZSBvciB1bmludGVuZGVkIGJlaGF2aW9yIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIHZhbHVlcy4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgZXZ0YCBpcyBiZWluZyB1c2VkIGFuZCBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYHZob3N0X3Njc2lfZG9fZXZ0X3dvcmtgIHNwZWNpZmljYWxseSwgbGluZXMgNTcwIHRvIDYzMC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gdGhpcyBldmVudCBoYW5kbGluZyBzaG91bGQgcmVzaWRlLiBJIGV4cGVjdCB0byBmaW5kIGRldGFpbHMgdGhlcmUgcmVnYXJkaW5nIGhvdyBgZXZ0YCBpcyBwcm9jZXNzZWQsIHdoYXQgc3RhdGUgdHJhbnNpdGlvbnMgaXQgdHJpZ2dlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgdmhvc3Qtc2NzaSBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbidzIGNvbnRyb2wgZmxvdyBpcyBnb2luZyB0byBiZSBrZXkgdG8gc2VlaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MjowNS41NDg0NDAxNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG4gNTcxOlxcdHtcXG4gNTcyOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbiA1NzM6XFx0XFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50ICpldmVudCA9IFxcdTAwMjZldnQtXFx1MDAzZWV2ZW50O1xcbiA1NzQ6XFx0XFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50IF9fdXNlciAqZXZlbnRwO1xcbiA1NzU6XFx0XFx0c3RydWN0IHZob3N0X2xvZyAqdnFfbG9nO1xcbiA1NzY6XFx0XFx0dW5zaWduZWQgaW50IGxvZ19udW07XFxuIDU3NzpcXHRcXHR1bnNpZ25lZCBvdXQsIGluO1xcbiA1Nzg6XFx0XFx0aW50IGhlYWQsIHJldDtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpIHtcXG4gNTgxOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcXG4gNTgyOlxcdFxcdFxcdHJldHVybjtcXG4gNTgzOlxcdFxcdH1cXG4gNTg0OlxcdFxcbiA1ODU6XFx0YWdhaW46XFxuIDU4NjpcXHRcXHR2aG9zdF9kaXNhYmxlX25vdGlmeShcXHUwMDI2dnMtXFx1MDAzZWRldiwgdnEpO1xcbiA1ODc6XFx0XFxuIDU4ODpcXHRcXHR2cV9sb2cgPSB1bmxpa2VseSh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfRl9MT0dfQUxMKSkgP1xcbiA1ODk6XFx0XFx0XFx0dnEtXFx1MDAzZWxvZyA6IE5VTEw7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdC8qXFxuIDU5MjpcXHRcXHQgKiBSZXNldCAnbG9nX251bScgc2luY2Ugdmhvc3RfZ2V0X3ZxX2Rlc2MoKSBtYXkgcmVzZXQgaXQgb25seVxcbiA1OTM6XFx0XFx0ICogYWZ0ZXIgY2VydGFpbiBjb25kaXRpb24gY2hlY2tzLlxcbiA1OTQ6XFx0XFx0ICovXFxuIDU5NTpcXHRcXHRsb2dfbnVtID0gMDtcXG4gNTk2OlxcdFxcbiA1OTc6XFx0XFx0aGVhZCA9IHZob3N0X2dldF92cV9kZXNjKHZxLCB2cS1cXHUwMDNlaW92LFxcbiA1OTg6XFx0XFx0XFx0XFx0QVJSQVlfU0laRSh2cS1cXHUwMDNlaW92KSwgXFx1MDAyNm91dCwgXFx1MDAyNmluLFxcbiA1OTk6XFx0XFx0XFx0XFx0dnFfbG9nLCBcXHUwMDI2bG9nX251bSk7XFxuIDYwMDpcXHRcXHRpZiAoaGVhZCBcXHUwMDNjIDApIHtcXG4gNjAxOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcXG4gNjAyOlxcdFxcdFxcdHJldHVybjtcXG4gNjAzOlxcdFxcdH1cXG4gNjA0OlxcdFxcdGlmIChoZWFkID09IHZxLVxcdTAwM2VudW0pIHtcXG4gNjA1OlxcdFxcdFxcdGlmICh2aG9zdF9lbmFibGVfbm90aWZ5KFxcdTAwMjZ2cy1cXHUwMDNlZGV2LCB2cSkpXFxuIDYwNjpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbiA2MDc6XFx0XFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbiA2MDg6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MDk6XFx0XFx0fVxcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRpZiAoKHZxLVxcdTAwM2Vpb3Zbb3V0XS5pb3ZfbGVuICE9IHNpemVvZihzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQpKSkge1xcbiA2MTI6XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRXhwZWN0aW5nIHZpcnRpb19zY3NpX2V2ZW50LCBnb3QgJXp1IGJ5dGVzXFxcXG5cXFwiLFxcbiA2MTM6XFx0XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWlvdltvdXRdLmlvdl9sZW4pO1xcbiA2MTQ6XFx0XFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbiA2MTU6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MTY6XFx0XFx0fVxcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHRpZiAodnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQpIHtcXG4gNjE5OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2VldmVudCB8PSBjcHVfdG9fdmhvc3QzMih2cSwgVklSVElPX1NDU0lfVF9FVkVOVFNfTUlTU0VEKTtcXG4gNjIwOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gZmFsc2U7XFxuIDYyMTpcXHRcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGV2ZW50cCA9IHZxLVxcdTAwM2Vpb3Zbb3V0XS5pb3ZfYmFzZTtcXG4gNjI0OlxcdFxcdHJldCA9IF9fY29weV90b191c2VyKGV2ZW50cCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTtcXG4gNjI1OlxcdFxcdGlmICghcmV0KVxcbiA2MjY6XFx0XFx0XFx0dmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChcXHUwMDI2dnMtXFx1MDAzZWRldiwgdnEsIGhlYWQsIDApO1xcbiA2Mjc6XFx0XFx0ZWxzZVxcbiA2Mjg6XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXFxcblxcXCIpO1xcbiA2Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUyOjA1LjU0ODU5MzYyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxODcxNDMyNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIEl0IEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIGEgS01TQU4gc2Vzc2lvbi4gRmlyc3QsIHRoZSBjb3JlIGNoYW5nZTogd2UncmUgcmUtYXJyYW5naW5nIGhvdyBTQ1NJIGV2ZW50cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFdlJ3ZlIGdvdCBhIHdyYXBwZXIgZm9yIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gbWFuYWdlIHRoZSBgdnEtXHUwMDNlbXV0ZXhgIGFuZCBhIHN3aXRjaCB0byBGSUZPIHByb2Nlc3Npbmcgb2YgZXZlbnRzIGluc3RlYWQgb2YgTElGTy4gVGhlIGNyaXRpY2FsIGNoYW5nZSBmb3IgdXMgaXMgaW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdoZXJlIHRoZSBmYWlsdXJlIHBhdGggb2YgYHZob3N0X3ZxX3dvcmtfcXVldWVgIG5vdyBhdm9pZHMgcmUtYWNxdWlyaW5nIGB2cS1cdTAwM2VtdXRleGAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjb2RlIHdvcmtzLiBJIHNlZSBhIGBsbGlzdF9yZXZlcnNlX29yZGVyYCwgd2hpY2ggaXMgY2hhbmdpbmcgdGhlIG9yZGVyIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIHNlZSBubyBjaGFuZ2Ugb3IgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgaG93IHRoZSBrZXJuZWwgY29tbXVuaWNhdGVzIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGV2ZW50cyBhcmUgYGt6YWxsb2NgJ2QsIGFuZCB0aGlzIHBhdGNoIGRvZXNuJ3QgdG91Y2ggaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0IGxheW91dC4gSXQgZG9lc24ndCBsb29rIGxpa2Ugd2UgYXJlIGludHJvZHVjaW5nIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgY291bGQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGV4aXN0aW5nIG9uZXMgYXJlIGJlaW5nIGludHJvZHVjZWQuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgb3BlbiB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy5cblxuVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBtdXRleCBkZWFkbG9jayBmaXguIFByZXZpb3VzbHksIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWUoKWAgZmFpbGVkLCBpdCB3b3VsZCBjYWxsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpYCB3aGljaCB0cmllZCB0byByZWFjcXVpcmUgYSBsb2NrLiBBIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhpcyB0eXBlIG9mIGxvY2tpbmcgYnVnIGlzIHByZWNpc2VseSB3aGF0IExPQ0tERVAgaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFuZCBpdCdzIGFscmVhZHkgYnVpbHQgaW50byBzdGFuZGFyZCBLQVNBTiBjb25maWd1cmF0aW9ucy4gVGhlcmUncyBhbHNvIGEgRklGTyBvcmRlcmluZyBidWcgZml4LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBpdCdzIHNxdWFyZWx5IGluIHRoZSBkb21haW4gb2YgYnVncyB0aGF0IEtBU0FOIGFuZCBMT0NLREVQIGFyZSBkZXNpZ25lZCB0byBkZXRlY3QuIEtNU0FOJ3Mgc3RyZW5ndGggbGllcyBpbiBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBub3QgdGhlIHByaW1hcnkgcmlzayBoZXJlLlxuXG5HaXZlbiB0aGUgZ3VpZGFuY2UsIGFuZCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRlYWRsb2NrIGFuZCBvcmRlcmluZyBpc3N1ZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgd2UgYWxyZWFkeSBoYXZlIHRvb2xzIHRvIGRldGVjdCB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTQsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTI6MzcuNDIwMDI5NTM1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow28k7r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 11:27:01 +0000 UTC FinishedAt: 2026-09-15 11:52:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE", "EVENTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE", "EVENTFD" ], "series_id": "189afd96-17fb-4251-b89e-b185cda5460a" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_scsi_send_evt", "vhost_scsi_complete_events", "__vhost_scsi_complete_events", "vhost_scsi_evt_work", "vhost_scsi_evt_handle_kick", "vhost_scsi_do_plug", "vhost_scsi_do_evt_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfc2VuZF9ldnQmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF93b3JrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fcGx1ZyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX2V2dF93b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmVjdXJzaXZlIG11dGV4IGRlYWRsb2NrIGFuZCBhbiBldmVudCBvcmRlcmluZyBpc3N1ZSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYzpcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVx1MDAzZW11dGV4IChlLmcuLCBmcm9tIHZob3N0X3Njc2lfZG9fcGx1ZygpIG9yIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKCkpLiBJZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCBpdCBjYWxsZWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSwgd2hpY2ggYXR0ZW1wdGVkIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYWdhaW4sIHJlc3VsdGluZyBpbiBhIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhlIHBhdGNoIHNwbGl0cyBvdXQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpICh3aGljaCBhc3N1bWVzIHZxLVx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxuMi4gRXZlbnQgb3JkZXJpbmc6IEl0IGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByb2Nlc3MgZXZlbnRzIGluIEZJRk8gb3JkZXIgcmF0aGVyIHRoYW4gTElGTyBvcmRlci5cblxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2YTJkNzQzMzk1YTQ0NTQzOWZiZDgzZjNjNjk0MDg0MTU3ZTZiYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0ODoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICYjNDM7NjMwLDI2IEBAIHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbiBcdHZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4mIzQzO1x0bGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbGlzdF9kZWxfYWxsKFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHtcbiBcdFx0aWYgKCFkcm9wKVxuIFx0XHRcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7XG4gXHRcdHZob3N0X3Njc2lfZnJlZV9ldnQodnMsIGV2dCk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gfVxuIFxuQEAgLTE4MjksNyAmIzQzOzE4MzYsNyBAQCB2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gXG4gXHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuIFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF93b3JrKSlcbi1cdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuJiM0MztcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfc2VuZF9ldnQmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF93b3JrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fcGx1ZyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX2V2dF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBldmVudCBjb21wbGV0aW9uIGFuZCBkaXNwYXRjaCBsb2dpYyBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSXQgc3BsaXRzIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgaW50byBhbiB1bmxvY2tlZCBoZWxwZXIgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aGVuIHZxLVx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCBieSBjYWxsZXJzIG9mIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgYW5kIGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByZXNlcnZlIGV2ZW50IG9yZGVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvZGV2L3Zob3N0LXNjc2kgYW5kIHZpcnRxdWV1ZSBraWNrcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDdhMWYzOWEzMjdkYTYuLjljZDE4MWNiMWNjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC02MzAsMTkgJiM0Mzs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KQogCXZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pOwogfQogCi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovCiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnMtJmd0O3Zxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7CiAJc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0OwogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiAKLQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHsKIAkJaWYgKCFkcm9wKQogCQkJdmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTsKIAkJdmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIH0KIApAQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAogCWxsaXN0X2FkZCgmYW1wO2V2dC0mZ3Q7bGlzdCwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCk7CiAJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKLQkJdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwomIzQzOwkJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzUyCgkJCQkJCQlvdXRwdXQ6IDEwNQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBTQ1NJIHZpcnR1YWwgaG9zdCBkcml2ZXIgcmVzaWRlcywgc28gdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGhvc3QgaW50ZXJhY3RzIHdpdGggdmlydHVhbCBTQ1NJIGRldmljZXMuIEdvb2QuIExldCYjMzk7cyBkZWx2ZSBpbi4KCk15IGd1dCByZWFjdGlvbiBpcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mICp3aGVyZSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgbGFyZ2VyIGNvZGUgc3RydWN0dXJlLiBJJiMzOTtsbCB1c2UgdG9vbHMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIOKAkyBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgZmlsZSBpZiBuZWVkZWQsIG9yIGBncmVwcGVyYCDigJMgdG8gcGlucG9pbnQgdGhlIG1vZGlmaWNhdGlvbnMgYXJvdW5kIHRoZSBtb3N0IGxpa2VseSBhcmVhcyBmb3IgdGhpcyBjaGFuZ2UuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgNjMwIGFuZCAxODI5IG1pZ2h0IGJlIHByaW1lIHNwb3RzLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUuIEkgbmVlZCB0byBnZXQgY29udGV4dCwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBpbiBjYXNlIHRoaXMgY2hhbmdlIGlzIGNvbmRpdGlvbmFsLiBJcyBgdmhvc3Qtc2NzaWAgZXZlbiBlbmFibGVkPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBiZWZvcmUgZGlnZ2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSBmYWxzZTtcbiA2MjE6XHRcdH1cbiA2MjI6XHRcbiA2MjM6XHRcdGV2ZW50cCA9IHZxLVx1MDAzZWlvdltvdXRdLmlvdl9iYXNlO1xuIDYyNDpcdFx0cmV0ID0gX19jb3B5X3RvX3VzZXIoZXZlbnRwLCBldmVudCwgc2l6ZW9mKCpldmVudCkpO1xuIDYyNTpcdFx0aWYgKCFyZXQpXG4gNjI2Olx0XHRcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSwgaGVhZCwgMCk7XG4gNjI3Olx0XHRlbHNlXG4gNjI4Olx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXG5cJiMzNDspO1xuIDYyOTpcdFxuIDYzMDpcdFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gNjMxOlx0fVxuIDYzMjpcdFxuIDYzMzpcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiA2MzQ6XHRzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIDYzNTpcdHtcbiA2MzY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiA2Mzc6XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gNjM4Olx0XG4gNjM5Olx0XHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIDY0MDpcdFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIDY0MTpcdFx0XHRpZiAoIWRyb3ApXG4gNjQyOlx0XHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiA2NDM6XHRcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiA2NDQ6XHRcdH1cbiA2NDU6XHR9XG4gNjQ2Olx0XG4gNjQ3Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4gNjQ4Olx0e1xuIDY0OTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDY1MDpcdFxuIDY1MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjUyOlx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiA2NTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjU0Olx0fVxuIDY1NTpcdFxuIDY1NjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4gNjU3Olx0e1xuIDY1ODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxuIDY1OTpcdFx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuIDY2MDpcdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbiA2NjE6XHR9XG4gNjYyOlx0XG4gNjYzOlx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcbiA2NjQ6XHR7XG4gNjY1Olx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIgPSBjbWQtXHUwMDNlcmVhZF9pdGVyO1xuIDY2NjpcdFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiA2Njc6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDY2ODpcdFx0c2l6ZV90IGxlbjtcbiA2Njk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcbjE4MjE6XHRcdGlmICghZXZ0KVxuMTgyMjpcdFx0XHRyZXR1cm47XG4xODIzOlx0XG4xODI0Olx0XHRpZiAodHBnIFx1MDAyNlx1MDAyNiBsdW4pIHtcbjE4MjU6XHRcdFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xuMTgyNjpcdFx0XHQvKlxuMTgyNzpcdFx0XHQgKiBOb3RlOiBldnQtXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXG4xODI4Olx0XHRcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cbjE4Mjk6XHRcdFx0ICovXG4xODMwOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xuMTgzMTpcdFx0XHRldnQtXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVx1MDAzZXRwb3J0X3RwZ3Q7XG4xODMyOlx0XHRcdGlmIChsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZT0gMjU2KVxuMTgzMzpcdFx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZVx1MDAzZSA4IHwgMHg0MCA7XG4xODM0Olx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAyNiAweEZGO1xuMTgzNTpcdFx0fVxuMTgzNjpcdFxuMTgzNzpcdFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbjE4Mzg6XHRcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4xODM5Olx0XHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuMTg0MDpcdH1cbjE4NDE6XHRcbjE4NDI6XHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbjE4NDM6XHR7XG4xODQ0Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxuMTg0NTpcdFx0XHRcdFx0XHRcdHBvbGwud29yayk7XG4xODQ2Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcbjE4NDc6XHRcbjE4NDg6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuMTg0OTpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4xODUwOlx0XHRcdGdvdG8gb3V0O1xuMTg1MTpcdFxuMTg1MjpcdFx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG4xODUzOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxuMTg1NDpcdFx0XHRcdFx0ICAgIDApO1xuMTg1NTpcdG91dDpcbjE4NTY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODU3Olx0fVxuMTg1ODpcdFxuMTg1OTpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1NDU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz0zND1jb25maWcgVkhPU1RfTkVUXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjQ2OmNvbmZpZyBWSE9TVF9TQ1NJXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgVkhPU1RfU0NTSSBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBWSE9TVF9TQ1NJYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgcGFydGljdWxhciB2aG9zdCB0YXJnZXQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB2aG9zdCBmcmFtZXdvcmsuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGNoYW5nZWQgc2V0dGluZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQsIHBhcnRpY3VsYXJseSBhcm91bmQgc2VjdXJpdHkgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nLCBvciBoaWRkZW4gZmVhdHVyZXMgdGhhdCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHRoYXQgY291bGQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIGluIGEgcGFydGljdWxhciB2aXJ0dWFsaXplZCBzZXR1cD8gVGltZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxuICA0MTpcdFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICA0NDpcdFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDQ5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNTA6XHRcdHNlbGVjdCBTR19QT09MXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXG4gIDU0Olx0XHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFZIT1NUX1ZTT0NLXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDU5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNjA6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDYxOlx0XHRkZWZhdWx0IG5cbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXG4gIDY0Olx0XHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IHN1aXRhYmxlIGZvciBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBDb21taXQgRGV0YWlscyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIGNvbW1pdC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCBhbmQgd2h5LiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29tbWl0IG1lc3NhZ2UuIEEgd2VsbC13cml0dGVuIG9uZSBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBoaWdoLWxldmVsIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSB1cGRhdGUuIEnigJltIGhvcGluZyBpdOKAmXMgaW5mb3JtYXRpdmUgYW5kIGRvZXNuJiMzOTt0IGp1c3Qgc2F5IOKAnGZpeGVkIGEgYnVnLuKAnSBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGxpbmUsIGNvbnNpZGVyaW5nIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uCgpUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBmdWxsIGNvbW1pdCBsb2cuIFNvLCBJIHdpbGwgcnVuIGBnaXQgbG9nYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgaGlzdG9yeSBhbmQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBldm9sdXRpb24gb2YgdGhpcyBjb2RlLCBhcyB3ZWxsIGFzIGFueSByZWxhdGVkIGNvbW1pdHMgdGhhdCBtaWdodCBwcm92aWRlIGZ1cnRoZXIgY2x1ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVkIGZsYWdzLiBBIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgY29tbWl0IGhpc3RvcnkgaXMgdml0YWwgZm9yIHByb3BlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxpc3RfcmV2ZXJzZV9vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTYzND1zdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzOC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzOTpcdGxsbm9kZSA9IGxsaXN0X3JldmVyc2Vfb3JkZXIobGxpc3RfZGVsX2FsbChcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDAtXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFNpbmNlIEkgYWxyZWFkeSBrbm93IHRoZSBmdW5jdGlvbiBpdHNlbGYsIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7V2hvJiMzOTtzIGNhbGxpbmcgaXQ/JiMzNDsgVGhpcyBpcyBhIGtleSBlbnRyeSBwb2ludCwgbGlrZWx5IGZvciBzaWduYWxpbmcgc29tZXRoaW5nIGltcG9ydGFudCB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZnJhbWV3b3JrLCBwcm9iYWJseSBhbiBldmVudCByZWxhdGVkIHRvIHRoZSBTQ1NJIHRyYW5zcG9ydC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHBpbnBvaW50IHRoZSBleGFjdCBldmVudHMgb3IgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgZXZlbnQgc2VuZHMuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIHRoZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGZyb20gYSBjb250cm9sIHBsYW5lIGFzcGVjdC4gV2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlIHN5c3RlbSB0aGF0JiMzOTtzIHByb21wdGluZyB0aGlzIGNhbGw/IFRoZSBtb3JlIEkgdW5kZXJzdGFuZCBhYm91dCB0aGUgY2FsbGVycywgdGhlIGJldHRlciBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW1zLiBOb3cgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBpdCBzZWVtcyB3ZSYjMzk7cmUgZ3JhYmJpbmcgYHZxLSZndDttdXRleGAgZmlyc3QgdGhpbmcuIE1ha2VzIHNlbnNlLCBwcm90ZWN0cyB0aGUgdnEgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4gVGhlbiB3ZSBjYWxsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC4gIEluc2lkZSBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIHdlJiMzOTtyZSBhZGRpbmcgYW4gZXZlbnQgdG8gYSBsaXN0IGFuZCAqY29uZGl0aW9uYWxseSogcXVldWluZyB3b3JrLiBTcGVjaWZpY2FsbHksIGlmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5zIGZhbHNlLCB3ZSBjYWxsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLiBBaCwgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLgoKQmVmb3JlLCBpZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJuZWQgZmFsc2UsIGl0IHdvdWxkIGNhbGwgIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIE5vdyB0aGUgcmVkIGZsYWcgaXMgdXAhIFdoeT8gQmVjYXVzZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGl0c2VsZiBsb2NrcyBgdnEtJmd0O211dGV4YCEgQmluZ28hCgpJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSBpbiB0aGUgZmlyc3QgY2FsbCBhZnRlciB3ZSBsb2NrZWQgYHZxLSZndDttdXRleGAsICB3ZSBlbmQgdXAgaW4gYSBkZWFkbG9jayEgIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgaGFzIHRoZSBsb2NrIGFuZCB0aGVuIHdlICpyZS1lbnRlciogYW5kIGF0dGVtcHQgdG8gZ3JhYiBpdCBhZ2Fpbi4gIENsYXNzaWMuCgpOb3csIGhvbGQgb24uIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBoYXZlIGJlZW4gcHJldHR5IGNvbW1vbiwgd2FzIGl0IG1pc3NlZD8gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgY29kZSBwYXRoIHRoYXQgY2FuIGF2b2lkIGl0PyBMZXQgbWUgY2hlY2sgdG8gc2VlIGlmIGB2cS0mZ3Q7bXV0ZXhgIG1pZ2h0IGFscmVhZHkgYmUgaGVsZCBpbiBgdmhvc3Rfc2NzaV9kb19wbHVnYD8gVGltZSB0byBqdW1wIG92ZXIgdG8gbGluZXMgMjUwMC0yNTQwIG9mIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTAwOlx0XHRyZXR1cm4gXCYjMzQ7VW5rbm93blwmIzM0OztcbjI1MDE6XHR9XG4yNTAyOlx0XG4yNTAzOlx0c3RhdGljIHZvaWRcbjI1MDQ6XHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4yNTA1Olx0XHRcdCAgc3RydWN0IHNlX2x1biAqbHVuLCBib29sIHBsdWcpXG4yNTA2Olx0e1xuMjUwNzpcdFxuMjUwODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gdHBnLVx1MDAzZXZob3N0X3Njc2k7XG4yNTA5Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbjI1MTA6XHRcdHUzMiByZWFzb247XG4yNTExOlx0XG4yNTEyOlx0XHRpZiAoIXZzKVxuMjUxMzpcdFx0XHRyZXR1cm47XG4yNTE0Olx0XG4yNTE1Olx0XHRpZiAocGx1ZylcbjI1MTY6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcbjI1MTc6XHRcdGVsc2VcbjI1MTg6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFTU9WRUQ7XG4yNTE5Olx0XG4yNTIwOlx0XHR2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4yNTIxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MjI6XHRcdC8qXG4yNTIzOlx0XHQgKiBXZSBjYW4mIzM5O3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcbjI1MjQ6XHRcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXG4yNTI1Olx0XHQgKi9cbjI1MjY6XHRcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxuMjUyNzpcdFx0XHRnb3RvIHVubG9jaztcbjI1Mjg6XHRcbjI1Mjk6XHRcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbjI1MzA6XHRcdFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIHRwZywgbHVuLFxuMjUzMTpcdFx0XHRcdFx0ICAgVklSVElPX1NDU0lfVF9UUkFOU1BPUlRfUkVTRVQsIHJlYXNvbik7XG4yNTMyOlx0dW5sb2NrOlxuMjUzMzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MzQ6XHR9XG4yNTM1Olx0XG4yNTM2Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXG4yNTM3Olx0e1xuMjUzODpcdFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCB0cnVlKTtcbjI1Mzk6XHR9XG4yNTQwOlx0XG4yNTQxOlx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3R1bnBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcbjI1NDI6XHR7XG4yNTQzOlx0XHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIGZhbHNlKTtcbjI1NDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGZ1bmN0aW9uIGNhbGxzLCBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7dmUgbm90aWNlZCBhIHNpZ25pZmljYW50IHBhdHRlcm46IGluIGJvdGggYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AsIHRoZSBgdnEtJmd0O211dGV4YCBpcyBjb25zaXN0ZW50bHkgaGVsZCAqYmVmb3JlKiBjYWxsaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC4gVGhpcyBtZWFucyB0aGF0IGB2cS0mZ3Q7bXV0ZXhgIGlzIEFMV0FZUyBsb2NrZWQgd2hlbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKVGhlIGtleSBpc3N1ZSwgYXMgSSBzZWUgaXQsIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBDYWxsaW5nIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgIGZyb20gd2l0aGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCAqd2hlbiogYCF2aG9zdF92cV93b3JrX3F1ZXVlYCB3YXMgYSBodWdlIHJlZCBmbGFnIGJlY2F1c2UgaXQgaW50cm9kdWNlZCBhIHBvdGVudGlhbCBzZWxmLWRlYWRsb2NrLiBUaGF0JiMzOTtzIGJlY2F1c2UgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpdHNlbGYgd2FzIGF0dGVtcHRpbmcgdG8gbG9jayB0aGUgc2FtZSBgdnEtJmd0O211dGV4YCBpdCB3YXMgYWxyZWFkeSBob2xkaW5nLiBDbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLgoKVGhlIG90aGVyIHRoaW5nIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIG1lIGlzIHRoZSBjaGFuZ2UgdGhhdCB3YXMgbWFkZSB3aXRoIHRoZSBwYXRjaCwgdGhlIGFkZGl0aW9uIG9mIGBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpYCBpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoaXMgaW5kaWNhdGVzIGFuIGV4cGxpY2l0IGVmZm9ydCB0byBlbnN1cmUgdGhhdCBldmVudHMgYXJlIG5vdyBwcm9jZXNzZWQgaW4gRklGTyBvcmRlci4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIHRob3VnaCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGhvdyBgdmhvc3Qtc2NzaWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXIgb3IgYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2Vyc3BhY2Ugc2lkZSBpbnRlcmFjdHMgd2l0aCBgdmhvc3Rfc2NzaWAgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgd2hldGhlciBvciBub3QgYC9kZXYvdmhvc3Qtc2NzaWAgZXZlbiBleGlzdHMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIHJlYWNoYWJpbGl0eSBxdWVzdGlvbiBpcyB2aXRhbCBmb3IgcmVwcm9kdWNpbmcgdGhlIGRlYWRsb2NrIGFuZCBvdGhlciBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pc2NfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTg5ND1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9uZXRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5Ny1cdFx0dmhvc3RfbmV0X2VuYWJsZV96Y29weShWSE9TVF9ORVRfVlFfVFgpO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxODk4Olx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3RfbmV0X21pc2MpO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xODk5LX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDc3PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Njc2lfcmVnaXN0ZXIodm9pZClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Nzgte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ3OTpcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgwLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTkwPXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Zzb2NrX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk4LVxuZHJpdmVycy92aG9zdC92c29jay5jOjk5OTpcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3RfdnNvY2tfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwMC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3Qtc2NzaSBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAgaXMgcmVnaXN0ZXJlZCB1c2luZyBgbWlzY19yZWdpc3RlcigmYW1wO3Zob3N0X3Njc2lfbWlzYylgLiBUaGF0IG1lYW5zIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZG93biB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZGV2aWNlIGRyaXZlciBieSBsb29raW5nIGF0IHRoZSBgdmhvc3Rfc2NzaV9taXNjYCBzdHJ1Y3R1cmUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBkZWZpbmVkIGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggbWFuYWdpbmcgdGhlIHZpcnR1YWwgU0NTSSBob3N0IHdpdGhpbiB0aGUgdmhvc3QgZnJhbWV3b3JrLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQhIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG1pc2MgZGV2aWNlIGZyYW1ld29yayBhbmQgaG93IHRoZSBkcml2ZXIgZ2V0cyBpbml0aWFsaXplZCBhbmQgaG93IGl0IGhhbmRsZXMgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX21pc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDcxOnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF9zY3NpX21pc2MgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcyLVx0TUlTQ19EWU5BTUlDX01JTk9SLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3OC17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDc5Olx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODAtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0ODI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kZXJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0ODQ6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgYnVzaW5lc3MuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIGB2aG9zdF9zY3NpX2ZvcHNgIFN0cnVjdHVyZTogRGVjb2RpbmcgdGhlIFNDU0kgVmlydHVhbGl6YXRpb24qKgoKUmlnaHQsIGB2aG9zdF9zY3NpX2ZvcHNgLiBUaGF0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBTQ1NJIGRldmljZSB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIGluIGl0PyBQcm9iYWJseSBwb2ludGVycyB0byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvcmUgU0NTSSBvcGVyYXRpb25zOiBJL08gcmVxdWVzdHMsIHF1ZXVlIG1hbmFnZW1lbnQsIGRldmljZSByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24sIGVycm9yIGhhbmRsaW5n4oCmIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSYjMzk7cmUgYWJzdHJhY3RpbmcgYSBibG9jayBkZXZpY2UuCgpJJiMzOTttIGFzc3VtaW5nIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgaXMgaG93IHRoZSBob3N0IGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHVhbCBTQ1NJIGRldmljZSBwcmVzZW50ZWQgdG8gdGhlIGd1ZXN0LiBJdCYjMzk7cyB0aGUgYnJpZGdlLiBXZSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBtYXBzIHRoZSBndWVzdCYjMzk7cyBTQ1NJIGNvbW1hbmRzIGludG8gc29tZXRoaW5nIHRoZSBob3N0JiMzOTtzIHVuZGVybHlpbmcgc3RvcmFnZSBjYW4gdW5kZXJzdGFuZCDigJMgcHJvYmFibHkgdXNpbmcgdGhlIHVzdWFsIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIHRvIGVmZmljaWVudGx5IGhhbmRsZSBkYXRhIHRyYW5zZmVycy4gQXJlIHdlIGxvb2tpbmcgYXQgYSBzdHJhaWdodCBwYXNzdGhyb3VnaCBvciBpcyB0aGVyZSBzb21lIHRyYW5zbGF0aW9uIGxheWVyPyBIb3BlZnVsbHksIGl0JiMzOTtzIGVmZmljaWVudCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBvdmVyaGVhZCBvZiB2aXJ0dWFsaXphdGlvbi4KClRoZSBkZXNpZ24gc2hvdWxkIGNvbnNpZGVyIHRoZSBzaGFyZWQgbWVtb3J5IGludGVyZmFjZSwgcmlnaHQ/IElzIHRoaXMgYHZob3N0X3Njc2lfZm9wc2Agc3RydWN0dXJlIGludGltYXRlbHkgdGllZCBpbnRvIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24gZm9yIHRoZSByaW5nIGJ1ZmZlcnMgYW5kIHRoZSBkZXNjcmlwdG9ycz8gSXQgaGFzIHRvIGJlLCBvciBpdCYjMzk7ZCBiZSBpbmNyZWRpYmx5IGluZWZmaWNpZW50LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGRhdGEgaXMgcGFzc2VkIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBndWVzdCwgZXNwZWNpYWxseSB0aGUgc3RhdHVzIHJlcG9ydHMuIElzIHRoZXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucz8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBTQ1NJIGlzIGtub3duIGZvciBpdHMgbnVhbmNlZCBlcnJvciBjb2Rlcy4gSG93IGlzIHRoaXMgdmhvc3QgbGF5ZXIgbWFwcGluZyB0aG9zZSBTQ1NJIHNlbnNlIGNvZGVzIGJhY2sgdG8gdGhlIGd1ZXN0PyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMsIGxpa2UgYXV0b21hdGljIHJldHJpZXMsIGltcGxlbWVudGVkIGhlcmU/IEkmIzM5O2QgZXhwZWN0IGdvb2QgZXJyb3IgcHJvcGFnYXRpb24gYW5kIG1hbmFnZW1lbnQgdG8gYmUgY3J1Y2lhbCBmb3IgcmVsaWFiaWxpdHkuIEFuZCB3aGF0IGFib3V0IHNlY3VyaXR5PyBEb2VzIHRoZSBgdmhvc3Rfc2NzaV9mb3BzYCBzdHJ1Y3R1cmUgdGFrZSBhbnkgbWVhc3VyZXMgdG8gdmFsaWRhdGUgdGhlIGNvbW1hbmRzIGNvbWluZyBmcm9tIHRoZSBndWVzdCB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5hdXRob3JpemVkIGFjY2Vzcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ2MDpcdH1cbjI0NjE6XHRcbjI0NjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG4yNDYzOlx0XHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbjI0NjQ6XHRcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcbjI0NjU6XHRcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Njc2lfaW9jdGwsXG4yNDY2Olx0XHQuY29tcGF0X2lvY3RsXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXG4yNDY3Olx0XHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9zY3NpX29wZW4sXG4yNDY4Olx0XHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4yNDY5Olx0fTtcbjI0NzA6XHRcbjI0NzE6XHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3Rfc2NzaV9taXNjID0ge1xuMjQ3MjpcdFx0TUlTQ19EWU5BTUlDX01JTk9SLFxuMjQ3MzpcdFx0XCYjMzQ7dmhvc3Qtc2NzaVwmIzM0OyxcbjI0NzQ6XHRcdFx1MDAyNnZob3N0X3Njc2lfZm9wcyxcbjI0NzU6XHR9O1xuMjQ3NjpcdFxuMjQ3NzpcdHN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Njc2lfcmVnaXN0ZXIodm9pZClcbjI0Nzg6XHR7XG4yNDc5Olx0XHRyZXR1cm4gbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBMYW5kc2NhcGUqKgoKT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAuLi4gdGhpcyBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgYSBtaXNjIGRldmljZSB0aGF0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoLCBhcyBhIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2hlciwgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgZmFjdCB0aGF0IHN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciBvcGVyYXRpb25zIGxpa2UgYG9wZW5hdCR2aG9zdF9zY3NpYCBhbmQgYGlvY3RsJHZob3N0X3Njc2lfKmAgbWVhbnMgaXQmIzM5O3MgYWxyZWFkeSBhIHRhcmdldCBmb3IgZnV6emluZywgbGlrZWx5IGZvciBnb29kIHJlYXNvbi4gTXkgaW50dWl0aW9uIGlzIGNvbmZpcm1lZC4KCkZ1cnRoZXJtb3JlLCB0aGUgVENNIGZhYnJpYyBhbmQgYHRhcmdldF9jb3JlYCBhcmUgdXNpbmcgY29uZmlnZnMgdG8gbWFuYWdlIHRhcmdldCBwb3J0cyBhbmQgTFVOcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2V0dXAsIGFuZCB0aGUgaG90cGx1Zy9ob3R1bnBsdWcgbWVjaGFuaXNtcywgbmFtZWx5IGB2aG9zdF9zY3NpX2hvdHBsdWdgIGFuZCBgdmhvc3Rfc2NzaV9ob3R1bnBsdWdgLCBhcmUgd2hhdCBJ4oCZbSBtb3N0IGludGVyZXN0ZWQgaW4uIFRoZSBpbnRlcnBsYXkgd2l0aCB1c2Vyc3BhY2Uga2lja2luZyB0aGUgZXZlbnQgdmlydHF1ZXVlIHZpYSBgZXZlbnRmZGAgb3IgYGlvY3RsYCBpcyBhbm90aGVyIHByb21pc2luZyBhbmdsZS4gQSBraWNrIGZyb20gdXNlcnNwYWNlIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgdG8gYSBidWcuCgpSaWdodCwgc28gd2hlcmUgZG9lcyBhbGwgdGhpcyBjb252ZXJnZT8gTGV0JiMzOTtzIHRyYWNlIGhvdyB0aGUgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIFNpbmNlIGl0JiMzOTtzIHRoZSB3b3JrIGNhbGxiYWNrLCB0cmlnZ2VyZWQgYnkgdGhlIHZpcnRxdWV1ZSBraWNrLCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgYmVpbmcgKnNldCB1cCouIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEdvdHRhIGRpZyBpbnRvIHdoZXJlIHRoYXQmIzM5O3MgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdCYjMzk7cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzcGVjaWZpYyB2aXJ0cXVldWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODE0PXZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTg0MjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIyOTU9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzNy1cdHZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0NUTF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljaztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMzg6XHR2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxLmhhbmRsZV9raWNrID0gdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzM5LVx0Zm9yIChpID0gVkhPU1RfU0NTSV9WUV9JTzsgaSBcdTAwM2MgbnZxczsgaSYjNDM7JiM0MzspIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gYSBgVkhPU1RfU0NTSV9WUV9FVlRgIGtpY2sgZXZlbnQgdHJpZ2dlcnMgdGhlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBOb3csIEkgbmVlZCB0byBzZWUgd2hhdCBhY3R1YWxseSBoYXBwZW5zICphZnRlciogdGhlIGtpY2suIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGB2aG9zdF9zY3NpX2V2dF93b3JrYCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBBaCwgdGhlcmUgaXQgaXM6IGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO2AuIFRoYXQgbG9va3MgbGlrZSB0aGUgY29yZSB3b3JrLCBwcmVzdW1hYmx5IGNvbXBsZXRpbmcgc29tZSBTQ1NJIGV2ZW50cy4gQnV0IHdoZXJlIGlzIGB2cy0mZ3Q7dnNfZXZlbnRfd29ya2AgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIG91dCB3aGVuIGFuZCBob3cgdGhhdCYjMzk7cyBzZXQgdXAuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZXZlbnRzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yay4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIHdvcmsgcXVldWUgaXMgZXN0YWJsaXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZzX2V2ZW50X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4Olx0c3RydWN0IHZob3N0X3dvcmsgdnNfZXZlbnRfd29yazsgLyogZXZ0IGluamVjdGlvbiB3b3JrIGl0ZW0gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0OS1cdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz02NTY9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTgtXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XHRcdFx0XHRcdCAgICAgdnNfZXZlbnRfd29yayk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MzctXHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzODpcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjk1PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzMwOlx0dmhvc3Rfd29ya19pbml0KFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmssIHZob3N0X3Njc2lfZXZ0X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZob3N0LXNjc2lgIENvZGUgUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgYSBzcGVjaWZpYyBjb2RlIHBhdGggd2l0aGluIHRoZSBgdmhvc3Qtc2NzaWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGV2ZW50IGhhbmRsaW5nIGFuZCB3b3JrIHF1ZXVlIHByb2Nlc3NpbmcuIEkgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgdnMtJmd0O3ZzX2V2ZW50X3dvcmtgIHdpdGggYHZob3N0X3Njc2lfZXZ0X3dvcmtgIGFuZCBob3cgdGhhdCB0cmlnZ2VycyBhIHNlcXVlbmNlOiBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgY2FsbHMgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgd2hpY2ggdGhlbiBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFdpdGhpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIEkmIzM5O20gbm90aW5nIHRoZSB1c2Ugb2YgYW4gYGxsaXN0YCAobG9ja2xlc3MgbGlzdCkgZm9yIGV2ZW50IG1hbmFnZW1lbnQuIEV2ZW50cyBhcmUgYWRkZWQgdXNpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGFuZCBxdWV1ZWQgZm9yIGNvbXBsZXRpb24uIEEga2V5IGRldGFpbCBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZ1bmN0aW9uLCB3aXRoIGEgcG90ZW50aWFsIGZhbGxiYWNrIHBhdGggdG8gdHJpZ2dlciB0aGUgZXZlbnQgY29tcGxldGlvbiBzeW5jaHJvbm91c2x5IGlmIHF1ZXVlaW5nIGZhaWxzLiBBbGwgb2YgdGhpcyBpcyBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgIHdoaWNoIG1ha2VzIGl0IHZlcnkgaW50ZXJlc3RpbmcuCgpHaXZlbiB0aGF0IHRoaXMgaXMgYWxsIGNsZWFybHkgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUga2VybmVsLCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCB0aGF0IHJ1bGVzIG91dCB0aGUgc3RhbmRhcmQganVzdGlmaWNhdGlvbnMgZm9yIGV4Y2x1ZGluZyBpdCBmcm9tIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBub24ta2VybmVsLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHVucmVhY2hhYmxlIHZpYSBleGVjdXRpb24gcGF0aHMuCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6ICoqV29ydGhGdXp6aW5nID0gdHJ1ZSEqKgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZnV6emluZyBpdC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMsIGZvY3VzIHN5bWJvbHMsIGFuZCBmaW5hbGx5IHRoZSBmdXp6aW5nIHJlYXNvbmluZy4gTXkgbmV4dCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgdGhlIGJ1aWxkLiBJIHNlZSB0aGF0IHRoZSBgVkhPU1RfU0NTSWAgZHJpdmVyIHJlbGllcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIFRoaXMgZHJpdmVyIGhhcyBhIGBLY29uZmlnYCBlbnRyeSB0aGF0IGluZGljYXRlcyB0aGF0IGBWSE9TVF9TQ1NJYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gSXQgZGVmYXVsdHMgdG8gYG5gIChub3QgYnVpbHQtaW4pLCBzbyBJIG5lZWQgdG8ga25vdyB3aGVyZSBgVEFSR0VUX0NPUkVgIGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUQVJHRVRfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90YXJnZXQvS2NvbmZpZy0yLVxuZHJpdmVycy90YXJnZXQvS2NvbmZpZzozOm1lbnVjb25maWcgVEFSR0VUX0NPUkVcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBUYXJnZXQgRHJpdmVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHRhcmdldCBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBgZHJpdmVycy90YXJnZXQvS2NvbmZpZ2AgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMSBpcyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBnZW5lcmFsIHNjb3BlIG9mIHdoYXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFyZ2V0IGRyaXZlcnMsIG1heWJlIGluY2x1ZGluZyB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIGFsc28gc29tZSBoZWxwZnVsIGNvbW1lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBzcGVjaWZpYyBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBUYXJnZXQgQ29yZSBNb2QgKFRDTSkgYW5kIENvbmZpZ0ZTIEluZnJhc3RydWN0dXJlXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA2Olx0XHRzZWxlY3QgQ09ORklHRlNfRlNcbiAgIDc6XHRcdHNlbGVjdCBDUkNfVDEwRElGXG4gICA4Olx0XHRzZWxlY3QgU0NTSV9DT01NT05cbiAgIDk6XHRcdHNlbGVjdCBTR0xfQUxMT0NcbiAgMTA6XHRcdGRlZmF1bHQgblxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0U2F5IFkgb3IgTSBoZXJlIHRvIGVuYWJsZSB0aGUgVENNIFN0b3JhZ2UgRW5naW5lIGFuZCBDb25maWdGUyBlbmFibGVkXG4gIDEzOlx0XHRjb250cm9sIHBhdGggZm9yIHRhcmdldF9jb3JlX21vZC4gIFRoaXMgaW5jbHVkZXMgYnVpbHQtaW4gVENNIFJBTURJU0tcbiAgMTQ6XHRcdHN1YnN5c3RlbSBsb2dpYyBmb3IgdmlydHVhbCBMVU4gMCBhY2Nlc3NcbiAgMTU6XHRcbiAgMTY6XHRpZiBUQVJHRVRfQ09SRVxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBUQ01fSUJMT0NLXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtUQ00vSUJMT0NLIFN1YnN5c3RlbSBQbHVnaW4gZm9yIExpbnV4L0JMT0NLXCYjMzQ7XG4gIDIwOlx0XHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00vSUJMT0NLIHN1YnN5c3RlbSBwbHVnaW4gZm9yIG5vbi1idWZmZXJlZFxuICAyMzpcdFx0YWNjZXNzIHRvIExpbnV4L0Jsb2NrIGRldmljZXMgdXNpbmcgQklPXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFRDTV9GSUxFSU9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHNpdHVhdGlvbjoKCioqRGVwZW5kZW5jaWVzIGFuZCBNYWtlZmlsZSBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzLiBgVEFSR0VUX0NPUkVgIGlzIHRoZSBmb3VuZGF0aW9uLCBhbmQgYEJMT0NLYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgaXQuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlbiwgYFZIT1NUX1NDU0lgIHJlbGllcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgKmFuZCogYEVWRU5URkRgLiBTaW5jZSBgRVZFTlRGRGAgaXMgYSBzdGFuZGFyZCBrZXJuZWwgY29uZmlnLCB0aGVyZSYjMzk7cyBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgdGhlcmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdCBhbmQgbGlua2VkIHdpdGhpbiB0aGUgdmhvc3Qgc3Vic3lzdGVtLiBUaGUgTWFrZWZpbGUgd2lsbCBzaG93IG1lIHRoZSBidWlsZCBydWxlcywgYW55IHNwZWNpZmljIGZsYWdzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBub3Qgc2VlaW5nIGhlcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBpZiB0aGUgZGVzY3JpYmVkIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdGx5IGltcGxlbWVudGVkIGFuZCBwb3RlbnRpYWxseSBmaW5kIG90aGVyIGNvbnRyaWJ1dGluZyBmYWN0b3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX1ZIT1NUX05FVCkgJiM0Mzs9IHZob3N0X25ldC5vXG4gICAzOlx0dmhvc3RfbmV0LXkgOj0gbmV0Lm9cbiAgIDQ6XHRcbiAgIDU6XHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgJiM0Mzs9IHZob3N0X3Njc2kub1xuICAgNjpcdHZob3N0X3Njc2kteSA6PSBzY3NpLm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfVkhPU1RfVlNPQ0spICYjNDM7PSB2aG9zdF92c29jay5vXG4gICA5Olx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX1ZIT1NUX1JJTkcpICYjNDM7PSB2cmluZ2gub1xuICAxMjpcdFxuICAxMzpcdG9iai0kKENPTkZJR19WSE9TVF9WRFBBKSAmIzQzOz0gdmhvc3RfdmRwYS5vXG4gIDE0Olx0dmhvc3RfdmRwYS15IDo9IHZkcGEub1xuICAxNTpcdFxuICAxNjpcdG9iai0kKENPTkZJR19WSE9TVClcdCYjNDM7PSB2aG9zdC5vXG4gIDE3Olx0XG4gIDE4Olx0b2JqLSQoQ09ORklHX1ZIT1NUX0lPVExCKSAmIzQzOz0gdmhvc3RfaW90bGIub1xuICAxOTpcdHZob3N0X2lvdGxiLXkgOj0gaW90bGIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg3NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBwYXRjaC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHNldHRpbmcgYENPTkZJR19WSE9TVF9TQ1NJYCBjb21waWxlcyBgc2NzaS5jYCBpbnRvIGB2aG9zdF9zY3NpLm9gLiBNYWtlcyBzZW5zZS4gQW5kIHRoYXQgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBSaWdodCwgc28gYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgIGFyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgaGVyZS4gR29vZCB0byBoYXZlIHRoYXQgZXN0YWJsaXNoZWQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gSSYjMzk7bSBzZWVpbmcgYSBmZXcgc3ltYm9scyBtb2RpZmllZC4gRmlyc3QsIHdlJiMzOTt2ZSBnb3QgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gTG9va3MgbGlrZSBpdCYjMzk7cyBlaXRoZXIgbmV3IG9yIGEgcmVuYW1lZCB2ZXJzaW9uIG9mIHRoZSBvbGQgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gVGhlbiB0aGVyZSBpcyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdoaWNoIGlzIGFsc28gc3RhdGljLCBub3cgYWNxdWlyZXMgYHZxLSZndDttdXRleGAgYW5kIHRoZW4gY2FsbHMgdGhpcyBuZXcgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBGaW5hbGx5IGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aGljaCBpcyBub3cgY2FsbGluZyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYXMgd2VsbC4gSW50ZXJlc3RpbmcsIHNvIHRoZSBvbGQgbG9naWMgaXMgYmVpbmcgcmUgZmFjdG9yZWQgaGVyZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBjYW4gYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggdXN1YWxseSBzaWduYWxzIGlubGluaW5nIHBvdGVudGlhbCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vay4uLiBZZXAsIGl0JiMzOTtzIGBzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gR0NDIG1pZ2h0IGlubGluZSB0aGlzIHRvIG9wdGltaXplLiBJZiBpdCBkb2VzIGdldCBpbmxpbmVkLCBib3RoIGZ1bmN0aW9ucyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2lsbCBiZSBzeW1ib2xzIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGJpdCBtb3JlIGludGVyZXN0aW5nLgoKT2theSwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hvIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy4gV2hhdCYjMzk7cyBjYWxsaW5nIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2A/IEhtbSwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLiBBbmQgYHZob3N0X3Njc2lfc2VuZF9ldnRgPyBUaGF0IG9uZSYjMzk7cyBjYWxsZWQgYnkgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBhbmQgaW5kaXJlY3RseSBieSBgdmhvc3Rfc2NzaV9kb19wbHVnYCB0aHJvdWdoIGB2aG9zdF9zY3NpX2hvdHBsdWdgIGFuZCBgdmhvc3Rfc2NzaV9ob3R1bnBsdWdgLgoKQWxyaWdodCwgSSBzaG91bGQgY2hlY2sgdGhlIGlvY3RsIGhhbmRsZXIgb3IgZW50cnkgcG9pbnRzIGZvciB2aG9zdC1zY3NpIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgY2hlY2sgYHZob3N0X3Njc2lfaW9jdGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTM0PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXR1cF92cV9jbWRzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbWF4X2NtZHMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk4OC0vKlxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTk4OTogKiBDYWxsZWQgZnJvbSB2aG9zdF9zY3NpX2lvY3RsKCkgY29udGV4dCB0byB3YWxrIHRoZSBsaXN0IG9mIGF2YWlsYWJsZVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk5MC0gKiB2aG9zdF9zY3NpX3RwZyB3aXRoIGFuIGFjdGl2ZSBzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1c1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzODU9c3RhdGljIGxvbmdcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODY6dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzODctXHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2NC1cdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NjU6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2Ni1cdC5jb21wYXRfaW9jdGxcdD0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZXZlbnQgaGFuZGxpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgc3Vic3lzdGVtLiBJJiMzOTttIHNlZWluZyBhIGNsdXN0ZXIgb2YgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbjogYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgLiBUaGVzZSBsb29rIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gYHNjc2kuY2AgbWlnaHQgYmUgcmVsZXZhbnQgYW5kIGludGVyY29ubmVjdGVkIHdpdGggdGhlc2UgY29yZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZXJlIGl0IGlzISBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AgaXMgY2FsbGVkIHdpdGhpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGNvbm5lY3Rpb24gdG8gbm90ZS4gTm93LCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljcyBvZiBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AuIFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBldmVudCBwcm9jZXNzaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfZG9fZXZ0X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTU2OT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTcwOnZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU3MS17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9NjM0PXN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQxLVx0XHRpZiAoIWRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDI6XHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0My1cdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MzIKCQkJCQkJCW91dHB1dDogMjU0CgkJCQkJCQl0aG91Z2h0czogNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmhvc3QtU0NTSSBFdmVudCBIYW5kbGluZyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYCwgd2hpY2ggaXMgdGhlIHdvcmsgaGFuZGxlciByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBldmVudCBub3RpZmljYXRpb25zIHRvIHRoZSBndWVzdCYjMzk7cyB2aXJ0cXVldWUuIE15IG5leHQgdGhvdWdodCB3YXMgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGxhbmRzY2FwZS4gSSYjMzk7dmUgbm93IGdvdCBhIGdvb2QgbGlzdDogYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGluIGFkZGl0aW9uIHRvIHRoZSBvcmlnaW5hbC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gY2hlY2tpbmcgZm9yIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBzeW1ib2xzOiBgVkhPU1RfU0NTSWAsIGBUQVJHRVRfQ09SRWAsIGFuZCBgRVZFTlRGRGAuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYFZIT1NUYCBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBWSE9TVF9TQ1NJYCwgd2hpY2ggaXMgZ29vZCB0byBzZWUgaW4gdGhlIEtjb25maWcgZmlsZS4gYEVWRU5URkRgIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGJ1dCBJJiMzOTttIGluY2x1ZGluZyBpdCB0byBiZSBleHRyYSB0aG9yb3VnaC4gVGh1cywgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgVkhPU1RfU0NTSWAsIGBUQVJHRVRfQ09SRWAsIGFuZCBgRVZFTlRGRGAuCgpMZXQmIzM5O3MgcmVjYXAgYW5kIGNvbmZpcm0gb3VyIHVuZGVyc3RhbmRpbmcuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSB2aG9zdC1zY3NpIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIHdpdGhpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBIZXJlJiMzOTtzIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkOgoKMS4gIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaGFzIGJlZW4gc3BsaXQgaW50byBhbiB1bmxvY2tlZCBoZWxwZXIsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgd2hpY2ggYXNzdW1lcyB0aGUgY2FsbGVyIGhvbGRzIGB2cS0mZ3Q7bXV0ZXhgLCBhbmQgdGhlIG9yaWdpbmFsIGxvY2tlZCB3cmFwcGVyLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLgoyLiAgYHZob3N0X3Njc2lfc2VuZF9ldnRgIG5vdyBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaW5zdGVhZCBvZiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdoZW4gZXZlbnQgcXVldWluZyBmYWlscyAoYCF2aG9zdF92cV93b3JrX3F1ZXVlYCkuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgYmVjYXVzZSB0aGUgY2FsbGVycyBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgKGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGB2aG9zdF9zY3NpX2RvX3BsdWdgKSBhbHJlYWR5IGhvbGQgYHZxLSZndDttdXRleGAuCjMuICBUaGUgcGF0Y2ggcmV2ZXJzZXMgdGhlIG9yZGVyIG9mIGV2ZW50cyB3aGVuIHBvcHBpbmcgZnJvbSBgdnMtJmd0O3ZzX2V2ZW50X2xpc3RgIHVzaW5nIGBsbGlzdF9yZXZlcnNlX29yZGVyYCwgc28gaXQmIzM5O3MgY2hhbmdpbmcgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcXVldWVkIGV2ZW50cy4KCkFsbCB0aGlzIGFsdGVyZWQgY29kZSBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBgL2Rldi92aG9zdC1zY3NpYCBpb2N0bC9raWNrIG9wZXJhdGlvbnMgYW5kIFRDTSBTQ1NJIHRhcmdldCBob3RwbHVnIGV2ZW50cywgd2hpY2ggaXMgc3RhbmRhcmQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZWFkbG9ja3MsIG9yZGVyaW5nIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBldmVudCBxdWV1ZSBmbHVzaGluZyBhbmQgZGVsaXZlcnkuCgpPa2F5LCBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCB2ZXJpZmllZC4gSSYjMzk7bSBub3cgY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9kb19wbHVnJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fZXZ0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9kb19wbHVnJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fZXZ0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHJlY3Vyc2l2ZSBtdXRleCBkZWFkbG9jayBhbmQgYW4gZXZlbnQgb3JkZXJpbmcgaXNzdWUgaW4gZHJpdmVycy92aG9zdC9zY3NpLmM6XG4xLiBEZWFkbG9jayBmaXg6IHZob3N0X3Njc2lfc2VuZF9ldnQoKSBpcyBjYWxsZWQgd2hpbGUgaG9sZGluZyB2cS1cdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVx1MDAzZW11dGV4IGFnYWluLCByZXN1bHRpbmcgaW4gYSByZWN1cnNpdmUgZGVhZGxvY2suIFRoZSBwYXRjaCBzcGxpdHMgb3V0IF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSAod2hpY2ggYXNzdW1lcyB2cS1cdTAwM2VtdXRleCBpcyBhbHJlYWR5IGhlbGQpIGFuZCBjYWxscyBpdCBkaXJlY3RseSBmcm9tIHZob3N0X3Njc2lfc2VuZF9ldnQoKS5cbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXG5cbk5laXRoZXIgY2hhbmdlIGFsbG9jYXRlcyBuZXcgbWVtb3J5LCBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIFRoZSBldmVudCBzdHJ1Y3R1cmVzIHByb2Nlc3NlZCBoZXJlIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiBpbiB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCgpLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIHB1cmVseSBsb2NraW5nIGFuZCBvcmRlcmluZzsgZGVhZGxvY2tzIGFuZCBsb2NraW5nIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDdhMWYzOWEzMjdkYTYuLjljZDE4MWNiMWNjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC02MzAsMTkgJiM0Mzs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KQogCXZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pOwogfQogCi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovCiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnMtJmd0O3Zxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7CiAJc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0OwogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiAKLQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHsKIAkJaWYgKCFkcm9wKQogCQkJdmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTsKIAkJdmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIH0KIApAQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAogCWxsaXN0X2FkZCgmYW1wO2V2dC0mZ3Q7bGlzdCwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCk7CiAJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKLQkJdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwomIzQzOwkJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NAoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiBJbml0aWFsIEV2YWx1YXRpb24qKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBzcGluIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZvY3VzLgoKSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UsIHRoZSBjb250ZXh0IGZvciB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgbXkgdXN1YWwgZ28tdG8gdG9vbHMsIGxpa2UgYHJlYWQtZmlsZWAgdG8ganVzdCBsb2FkIHRoZSBmaWxlLCBvciBtYXliZSBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGlmIEkgd2FudCB0byBxdWlja2x5IHplcm8gaW4gb24gc3BlY2lmaWMgY2FsbHMgb3IgdmFyaWFibGVzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoZSBtb2RpZmljYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc29saWQgY29kZSBpbnNwZWN0aW9uLCBhbmQgZ28gZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSBmYWxzZTtcbiA2MjE6XHRcdH1cbiA2MjI6XHRcbiA2MjM6XHRcdGV2ZW50cCA9IHZxLVx1MDAzZWlvdltvdXRdLmlvdl9iYXNlO1xuIDYyNDpcdFx0cmV0ID0gX19jb3B5X3RvX3VzZXIoZXZlbnRwLCBldmVudCwgc2l6ZW9mKCpldmVudCkpO1xuIDYyNTpcdFx0aWYgKCFyZXQpXG4gNjI2Olx0XHRcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSwgaGVhZCwgMCk7XG4gNjI3Olx0XHRlbHNlXG4gNjI4Olx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXG5cJiMzNDspO1xuIDYyOTpcdFxuIDYzMDpcdFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gNjMxOlx0fVxuIDYzMjpcdFxuIDYzMzpcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiA2MzQ6XHRzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIDYzNTpcdHtcbiA2MzY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiA2Mzc6XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gNjM4Olx0XG4gNjM5Olx0XHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIDY0MDpcdFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIDY0MTpcdFx0XHRpZiAoIWRyb3ApXG4gNjQyOlx0XHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiA2NDM6XHRcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiA2NDQ6XHRcdH1cbiA2NDU6XHR9XG4gNjQ2Olx0XG4gNjQ3Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4gNjQ4Olx0e1xuIDY0OTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDY1MDpcdFxuIDY1MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjUyOlx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiA2NTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gNjU0Olx0fVxuIDY1NTpcdFxuIDY1NjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4gNjU3Olx0e1xuIDY1ODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxuIDY1OTpcdFx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuIDY2MDpcdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbiA2NjE6XHR9XG4gNjYyOlx0XG4gNjYzOlx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcbiA2NjQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcbjE4MjE6XHRcdGlmICghZXZ0KVxuMTgyMjpcdFx0XHRyZXR1cm47XG4xODIzOlx0XG4xODI0Olx0XHRpZiAodHBnIFx1MDAyNlx1MDAyNiBsdW4pIHtcbjE4MjU6XHRcdFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xuMTgyNjpcdFx0XHQvKlxuMTgyNzpcdFx0XHQgKiBOb3RlOiBldnQtXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXG4xODI4Olx0XHRcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cbjE4Mjk6XHRcdFx0ICovXG4xODMwOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xuMTgzMTpcdFx0XHRldnQtXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVx1MDAzZXRwb3J0X3RwZ3Q7XG4xODMyOlx0XHRcdGlmIChsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZT0gMjU2KVxuMTgzMzpcdFx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAzZVx1MDAzZSA4IHwgMHg0MCA7XG4xODM0Olx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXHUwMDNldW5wYWNrZWRfbHVuIFx1MDAyNiAweEZGO1xuMTgzNTpcdFx0fVxuMTgzNjpcdFxuMTgzNzpcdFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbjE4Mzg6XHRcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4xODM5Olx0XHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuMTg0MDpcdH1cbjE4NDE6XHRcbjE4NDI6XHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbjE4NDM6XHR7XG4xODQ0Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxuMTg0NTpcdFx0XHRcdFx0XHRcdHBvbGwud29yayk7XG4xODQ2Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcbjE4NDc6XHRcbjE4NDg6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuMTg0OTpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4xODUwOlx0XHRcdGdvdG8gb3V0O1xuMTg1MTpcdFxuMTg1MjpcdFx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG4xODUzOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxuMTg1NDpcdFx0XHRcdFx0ICAgIDApO1xuMTg1NTpcdG91dDpcbjE4NTY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODU3Olx0fVxuMTg1ODpcdFxuMTg1OTpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4xODYwOlx0e1xuMTg2MTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSxcbjE4NjI6XHRcdFx0XHRcdFx0XHRwb2xsLndvcmspO1xuMTg2MzpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHZxLVx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Njc2ksIGRldik7XG4xODY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYW5kIGNhbGxpbmcgY29udGV4dCBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgaXQgb3BlcmF0ZXMgd2l0aGluLgoKKipBbmFseXppbmcgdGhlIEV4ZWN1dGlvbiBDb250ZXh0IG9mIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCoqCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGxlcnMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhdGhzIHRoYXQgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZW4sIGEgZm9jdXNlZCBsb29rIGF0IGxpbmVzIGFyb3VuZCAxODAwLTE4MzAgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBzaG91bGQgcHJvdmlkZSBzb21lIGltbWVkaWF0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBhZGphY2VudCBjb2RlIHdpbGwgY2xhcmlmeSBkYXRhIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIHRoZSBldmVudCBzZW5kaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSBhIGdvb2QgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODAxOlx0fVxuMTgwMjpcdFxuMTgwMzpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY3RsX2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuMTgwNDpcdHtcbjE4MDU6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXG4xODA2Olx0XHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbjE4MDc6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xuMTgwODpcdFxuMTgwOTpcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IFRoZSBoYW5kbGluZyBmdW5jIGZvciBjb250cm9sIHF1ZXVlLlxcblwmIzM0OywgX19mdW5jX18pO1xuMTgxMDpcdFx0dmhvc3Rfc2NzaV9jdGxfaGFuZGxlX3ZxKHZzLCB2cSk7XG4xODExOlx0fVxuMTgxMjpcdFxuMTgxMzpcdHN0YXRpYyB2b2lkXG4xODE0Olx0dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMTgxNTpcdFx0XHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcbjE4MTY6XHRcdFx0ICAgIHUzMiBldmVudCwgdTMyIHJlYXNvbilcbjE4MTc6XHR7XG4xODE4Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcbjE4MTk6XHRcbjE4MjA6XHRcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcbjE4MjE6XHRcdGlmICghZXZ0KVxuMTgyMjpcdFx0XHRyZXR1cm47XG4xODIzOlx0XG4xODI0Olx0XHRpZiAodHBnIFx1MDAyNlx1MDAyNiBsdW4pIHtcbjE4MjU6XHRcdFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xuMTgyNjpcdFx0XHQvKlxuMTgyNzpcdFx0XHQgKiBOb3RlOiBldnQtXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXG4xODI4Olx0XHRcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cbjE4Mjk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHZob3N0X3Njc2lfc2VuZF9ldnQgQ2FsbCBTaXRlcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCYjMzk7cyBiZWhhdmlvdXIgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGNvbnRleHQuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBzb3VyY2UgaXMgaW4gb3JkZXIsIHNwZWNpZmljYWxseSB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBrbm93ICp3aGF0KiB0cmlnZ2VycyB0aGUgZXZlbnQgc2lnbmFsaW5nIGFuZCAqdW5kZXIgd2hhdCBjb25kaXRpb25zKiBpdCYjMzk7cyBpbml0aWF0ZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3J1Y2lhbCB0byB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgZGF0YSBmbG93cyBhcm91bmQgdGhlIGNhbGxzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc2hvdWxkIHF1aWNrbHkgaGVscCBtZSBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgc3Vic3lzdGVtJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZob3N0X3Njc2lfZG9fcGx1Z2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGlzIHZob3N0IFNDU0kgcGx1Zy1pbiBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYHZob3N0X3Njc2lfZG9fcGx1Z2AgYW5kIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMjUwNC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgYXMgaXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUga2lja3Mgb2ZmLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXRpbGl6ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIG92ZXJhbGwgY29udGV4dCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBVbmRlcnN0YW5kaW5nIGhvdyByZXNvdXJjZXMgYXJlIHByb3RlY3RlZCBhbmQgdGhlIGRhdGEgZmxvdyB3aWxsIHByb3ZpZGUgaW5zaWdodHMuIEkgd2lsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBhcmVhcyBvZiBjb25jZXJuIHJlbGF0aW5nIHRvIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUwMDpcdFx0cmV0dXJuIFwmIzM0O1Vua25vd25cJiMzNDs7XG4yNTAxOlx0fVxuMjUwMjpcdFxuMjUwMzpcdHN0YXRpYyB2b2lkXG4yNTA0Olx0dmhvc3Rfc2NzaV9kb19wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxuMjUwNTpcdFx0XHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxuMjUwNjpcdHtcbjI1MDc6XHRcbjI1MDg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHRwZy1cdTAwM2V2aG9zdF9zY3NpO1xuMjUwOTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4yNTEwOlx0XHR1MzIgcmVhc29uO1xuMjUxMTpcdFxuMjUxMjpcdFx0aWYgKCF2cylcbjI1MTM6XHRcdFx0cmV0dXJuO1xuMjUxNDpcdFxuMjUxNTpcdFx0aWYgKHBsdWcpXG4yNTE2Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRVNDQU47XG4yNTE3Olx0XHRlbHNlXG4yNTE4Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xuMjUxOTpcdFxuMjUyMDpcdFx0dnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuMjUyMTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTIyOlx0XHQvKlxuMjUyMzpcdFx0ICogV2UgY2FuJiMzOTt0IHF1ZXVlIGV2ZW50cyBpZiB0aGUgYmFja2VuZCBoYXMgYmVlbiBjbGVhcmVkLCBiZWNhdXNlXG4yNTI0Olx0XHQgKiB3ZSBjb3VsZCBlbmQgdXAgcXVldWVpbmcgYW4gZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoLlxuMjUyNTpcdFx0ICovXG4yNTI2Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbjI1Mjc6XHRcdFx0Z290byB1bmxvY2s7XG4yNTI4Olx0XG4yNTI5Olx0XHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19TQ1NJX0ZfSE9UUExVRykpXG4yNTMwOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbjI1MzE6XHRcdFx0XHRcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xuMjUzMjpcdHVubG9jazpcbjI1MzM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTM0Olx0fVxuMjUzNTpcdFxuMjUzNjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90cGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxuMjUzNzpcdHtcbjI1Mzg6XHRcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XG4yNTM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlY3Vyc2l2ZSBNdXRleCBEZWFkbG9jayBEaXNjb3ZlcmVkIGluIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHZob3N0X3Njc2lgIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgZ2xhcmluZyBpc3N1ZS4gSW4gYm90aCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBhbmQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgdGhlcmUmIzM5O3MgYSBsb2NrIGFjcXVpcmVkOiBgbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleClgLiBOb3csIHRoYXQmIzM5O3MgZmluZSBvbiBpdHMgb3duLiBUaGUgcHJvYmxlbSBpcyB3aGF0ICpoYXBwZW5zKiBpbnNpZGUgdGhvc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGJvdGggb2YgdGhlbSBjYWxsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgLi4uKWAuIEFuZCBpbnNpZGUgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCB3ZSBoYXZlIHRoaXM6CgpgYGBjCglsbGlzdF9hZGQoJmFtcDtldnQtJmd0O2xpc3QsICZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwoJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKCQl2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CmBgYAoKVGhlIGxpZ2h0YnVsYiBnb2VzIG9mZiEgUHJldmlvdXNseSwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpdHNlbGYgd2FzIGNhbGxpbmcgYG11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpYC4gU28sIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIHJldHVybnMgZmFsc2UsIGl0IHRyaWdnZXJzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLCB3aGljaCBhdHRlbXB0cyB0byByZWFjcXVpcmUgYG11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpYCEgQnV0IHRoZSBgdnEtJmd0O211dGV4YCBpcyBhbHJlYWR5IGhlbGQgYnkgdGhlIGNhbGxlcuKAlGVpdGhlciBgdmhvc3Rfc2NzaV9kb19wbHVnYCBvciBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLiBCb29tOiB0aGF0JiMzOTtzIGEgY2xhc3NpYyByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2suCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgdGhpcyBpcyByZXNvbHZlZCBieSB1c2luZyB0aGUgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBnb29kIGRlc2lnbiBjaG9pY2UuCgpBbHNvLCBJIHNlZSB0aGF0IHdlJiMzOTtyZSByZXZlcnNpbmcgdGhlIGxpbmtlZCBsaXN0IGBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCkpYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdGVtcyBhcmUgYWRkZWQgaW4gTElGTyBvcmRlciB3aXRoIGBsbGlzdF9hZGRgLCBzbyBpdCYjMzk7cyBhIGdvb2Qgd2F5IHRvIGNvbnZlcnQgdGhlIGV2ZW50IHF1ZXVlIHRvIEZJRk8uCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGF0IGB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dGAgZG9lcy4uLiBqdXN0IGluIGNhc2UuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTUzOD1zdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzOTp2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDAtXHRcdCAgICAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxOS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MjA6XHRldnQgPSB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCh2cywgZXZlbnQsIHJlYXNvbik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODIxLVx0aWYgKCFldnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0YCwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWNvbnN0cnVjdGluZyBgdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnRgKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnRgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdmhvc3Qtc2NzaSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGtleSBlbGVtZW50IGluIHRoZSBldmVudCBoYW5kbGluZyBwaXBlbGluZSBmb3IgU0NTSSBjb21tYW5kIGFsbG9jYXRpb24gd2l0aGluIHRoZSB2aXJ0dWFsIGhvc3QgZnJhbWV3b3JrLiBJdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIG1hbmFnZSBhIG5ldyBTQ1NJIGNvbW1hbmQsIGVuc3VyaW5nIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLCBhbmQgcG90ZW50aWFsbHkgcXVldWVpbmcgaXQgZm9yIHByb2Nlc3NpbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllciwgdGhlIEkvTyBwYXRoLCBhbmQgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSB2aG9zdC1zY3NpIGRldmljZSBzdHJ1Y3R1cmUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1hbmQgc3RydWN0dXJlcy4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIHdoZXRoZXIgdGhlcmUgaXMgYW55IHNwaW5sb2NrIHByb3RlY3Rpb24uIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgY29uY3VycmVuY3kgcHJvYmxlbXMgYXJlIHByZXZlbnRlZCB3aXRoaW4gdGhlIGFsbG9jYXRpb24gcGhhc2UuIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBhcmUgaW50cm9kdWNlZC4gQW55IG9wdGltaXphdGlvbnMgb3IgY2xldmVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgaW4gdGhpcyBhbGxvY2F0aW9uPyBHb29kLCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gaGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTM1Olx0XHRrZnJlZShldnQpO1xuIDUzNjpcdH1cbiA1Mzc6XHRcbiA1Mzg6XHRzdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcbiA1Mzk6XHR2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG4gNTQwOlx0XHRcdCAgICAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXG4gNTQxOlx0e1xuIDU0MjpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDU0MzpcdFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XG4gNTQ0Olx0XG4gNTQ1Olx0XHRpZiAodnMtXHUwMDNldnNfZXZlbnRzX25yIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9FVkVOVCkge1xuIDU0NjpcdFx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcbiA1NDc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTQ4Olx0XHR9XG4gNTQ5Olx0XG4gNTUwOlx0XHRldnQgPSBremFsbG9jX29iaigqZXZ0KTtcbiA1NTE6XHRcdGlmICghZXZ0KSB7XG4gNTUyOlx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHZob3N0X3Njc2lfZXZ0XFxuXCYjMzQ7KTtcbiA1NTM6XHRcdFx0dnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IHRydWU7XG4gNTU0Olx0XHRcdHJldHVybiBOVUxMO1xuIDU1NTpcdFx0fVxuIDU1NjpcdFxuIDU1NzpcdFx0ZXZ0LVx1MDAzZWV2ZW50LmV2ZW50ID0gY3B1X3RvX3Zob3N0MzIodnEsIGV2ZW50KTtcbiA1NTg6XHRcdGV2dC1cdTAwM2VldmVudC5yZWFzb24gPSBjcHVfdG9fdmhvc3QzMih2cSwgcmVhc29uKTtcbiA1NTk6XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19uciYjNDM7JiM0Mzs7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXR1cm4gZXZ0O1xuIDU2MjpcdH1cbiA1NjM6XHRcbiA1NjQ6XHRzdGF0aWMgaW50IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcbiA1NjU6XHR7XG4gNTY2Olx0XHRyZXR1cm4gdGFyZ2V0X3B1dF9zZXNzX2NtZChzZV9jbWQpO1xuIDU2NzpcdH1cbiA1Njg6XHRcbiA1Njk6XHRzdGF0aWMgdm9pZFxuIDU3MDpcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbiA1NzE6XHR7XG4gNTcyOlx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4gNTczOlx0XHRzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQgKmV2ZW50ID0gXHUwMDI2ZXZ0LVx1MDAzZWV2ZW50O1xuIDU3NDpcdFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50IF9fdXNlciAqZXZlbnRwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkFuYWx5emluZyBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZXZ0YCBpcyBiZWluZyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKmV2dClgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dCDigJMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWthZ2Ugb3IgdW5pbnRlbmRlZCBiZWhhdmlvciBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBldnRgIGlzIGJlaW5nIHVzZWQgYW5kIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYHZob3N0X3Njc2lfZG9fZXZ0X3dvcmtgIHNwZWNpZmljYWxseSwgbGluZXMgNTcwIHRvIDYzMC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRoaXMgZXZlbnQgaGFuZGxpbmcgc2hvdWxkIHJlc2lkZS4gSSBleHBlY3QgdG8gZmluZCBkZXRhaWxzIHRoZXJlIHJlZ2FyZGluZyBob3cgYGV2dGAgaXMgcHJvY2Vzc2VkLCB3aGF0IHN0YXRlIHRyYW5zaXRpb25zIGl0IHRyaWdnZXJzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHZob3N0LXNjc2kgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24mIzM5O3MgY29udHJvbCBmbG93IGlzIGdvaW5nIHRvIGJlIGtleSB0byBzZWVpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG4gNTcxOlx0e1xuIDU3MjpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuIDU3MzpcdFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50ICpldmVudCA9IFx1MDAyNmV2dC1cdTAwM2VldmVudDtcbiA1NzQ6XHRcdHN0cnVjdCB2aXJ0aW9fc2NzaV9ldmVudCBfX3VzZXIgKmV2ZW50cDtcbiA1NzU6XHRcdHN0cnVjdCB2aG9zdF9sb2cgKnZxX2xvZztcbiA1NzY6XHRcdHVuc2lnbmVkIGludCBsb2dfbnVtO1xuIDU3NzpcdFx0dW5zaWduZWQgb3V0LCBpbjtcbiA1Nzg6XHRcdGludCBoZWFkLCByZXQ7XG4gNTc5Olx0XG4gNTgwOlx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSkge1xuIDU4MTpcdFx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcbiA1ODI6XHRcdFx0cmV0dXJuO1xuIDU4MzpcdFx0fVxuIDU4NDpcdFxuIDU4NTpcdGFnYWluOlxuIDU4NjpcdFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSk7XG4gNTg3Olx0XG4gNTg4Olx0XHR2cV9sb2cgPSB1bmxpa2VseSh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfRl9MT0dfQUxMKSkgP1xuIDU4OTpcdFx0XHR2cS1cdTAwM2Vsb2cgOiBOVUxMO1xuIDU5MDpcdFxuIDU5MTpcdFx0LypcbiA1OTI6XHRcdCAqIFJlc2V0ICYjMzk7bG9nX251bSYjMzk7IHNpbmNlIHZob3N0X2dldF92cV9kZXNjKCkgbWF5IHJlc2V0IGl0IG9ubHlcbiA1OTM6XHRcdCAqIGFmdGVyIGNlcnRhaW4gY29uZGl0aW9uIGNoZWNrcy5cbiA1OTQ6XHRcdCAqL1xuIDU5NTpcdFx0bG9nX251bSA9IDA7XG4gNTk2Olx0XG4gNTk3Olx0XHRoZWFkID0gdmhvc3RfZ2V0X3ZxX2Rlc2ModnEsIHZxLVx1MDAzZWlvdixcbiA1OTg6XHRcdFx0XHRBUlJBWV9TSVpFKHZxLVx1MDAzZWlvdiksIFx1MDAyNm91dCwgXHUwMDI2aW4sXG4gNTk5Olx0XHRcdFx0dnFfbG9nLCBcdTAwMjZsb2dfbnVtKTtcbiA2MDA6XHRcdGlmIChoZWFkIFx1MDAzYyAwKSB7XG4gNjAxOlx0XHRcdHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xuIDYwMjpcdFx0XHRyZXR1cm47XG4gNjAzOlx0XHR9XG4gNjA0Olx0XHRpZiAoaGVhZCA9PSB2cS1cdTAwM2VudW0pIHtcbiA2MDU6XHRcdFx0aWYgKHZob3N0X2VuYWJsZV9ub3RpZnkoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cSkpXG4gNjA2Olx0XHRcdFx0Z290byBhZ2FpbjtcbiA2MDc6XHRcdFx0dnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IHRydWU7XG4gNjA4Olx0XHRcdHJldHVybjtcbiA2MDk6XHRcdH1cbiA2MTA6XHRcbiA2MTE6XHRcdGlmICgodnEtXHUwMDNlaW92W291dF0uaW92X2xlbiAhPSBzaXplb2Yoc3RydWN0IHZpcnRpb19zY3NpX2V2ZW50KSkpIHtcbiA2MTI6XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtFeHBlY3RpbmcgdmlydGlvX3Njc2lfZXZlbnQsIGdvdCAlenUgYnl0ZXNcXG5cJiMzNDssXG4gNjEzOlx0XHRcdFx0XHR2cS1cdTAwM2Vpb3Zbb3V0XS5pb3ZfbGVuKTtcbiA2MTQ6XHRcdFx0dnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IHRydWU7XG4gNjE1Olx0XHRcdHJldHVybjtcbiA2MTY6XHRcdH1cbiA2MTc6XHRcbiA2MTg6XHRcdGlmICh2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkKSB7XG4gNjE5Olx0XHRcdGV2ZW50LVx1MDAzZWV2ZW50IHw9IGNwdV90b192aG9zdDMyKHZxLCBWSVJUSU9fU0NTSV9UX0VWRU5UU19NSVNTRUQpO1xuIDYyMDpcdFx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gZmFsc2U7XG4gNjIxOlx0XHR9XG4gNjIyOlx0XG4gNjIzOlx0XHRldmVudHAgPSB2cS1cdTAwM2Vpb3Zbb3V0XS5pb3ZfYmFzZTtcbiA2MjQ6XHRcdHJldCA9IF9fY29weV90b191c2VyKGV2ZW50cCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTtcbiA2MjU6XHRcdGlmICghcmV0KVxuIDYyNjpcdFx0XHR2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsKFx1MDAyNnZzLVx1MDAzZWRldiwgdnEsIGhlYWQsIDApO1xuIDYyNzpcdFx0ZWxzZVxuIDYyODpcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhdWx0ZWQgb24gdmhvc3Rfc2NzaV9zZW5kX2V2ZW50XFxuXCYjMzQ7KTtcbiA2Mjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTQKCQkJCQkJCW91dHB1dDogMjk1CgkJCQkJCQl0aG91Z2h0czogOTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIEl0IEhlcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgYSBLTVNBTiBzZXNzaW9uLiBGaXJzdCwgdGhlIGNvcmUgY2hhbmdlOiB3ZSYjMzk7cmUgcmUtYXJyYW5naW5nIGhvdyBTQ1NJIGV2ZW50cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFdlJiMzOTt2ZSBnb3QgYSB3cmFwcGVyIGZvciBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHRvIG1hbmFnZSB0aGUgYHZxLSZndDttdXRleGAgYW5kIGEgc3dpdGNoIHRvIEZJRk8gcHJvY2Vzc2luZyBvZiBldmVudHMgaW5zdGVhZCBvZiBMSUZPLiBUaGUgY3JpdGljYWwgY2hhbmdlIGZvciB1cyBpcyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2hlcmUgdGhlIGZhaWx1cmUgcGF0aCBvZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgbm93IGF2b2lkcyByZS1hY3F1aXJpbmcgYHZxLSZndDttdXRleGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWUsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29kZSB3b3Jrcy4gSSBzZWUgYSBgbGxpc3RfcmV2ZXJzZV9vcmRlcmAsIHdoaWNoIGlzIGNoYW5naW5nIHRoZSBvcmRlciBldmVudHMgYXJlIHByb2Nlc3NlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBzZWUgbm8gY2hhbmdlIG9yIHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGhvdyB0aGUga2VybmVsIGNvbW11bmljYXRlcyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBldmVudHMgYXJlIGBremFsbG9jYCYjMzk7ZCwgYW5kIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0IGxheW91dC4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHdlIGFyZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGNvdWxkIHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBuZXcgYWxsb2NhdGlvbnMgb3IgY2hhbmdlcyB0byBleGlzdGluZyBvbmVzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBvcGVuIHRoZSBkb29yIGZvciB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzLgoKVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBtdXRleCBkZWFkbG9jayBmaXguIFByZXZpb3VzbHksIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWUoKWAgZmFpbGVkLCBpdCB3b3VsZCBjYWxsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpYCB3aGljaCB0cmllZCB0byByZWFjcXVpcmUgYSBsb2NrLiBBIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhpcyB0eXBlIG9mIGxvY2tpbmcgYnVnIGlzIHByZWNpc2VseSB3aGF0IExPQ0tERVAgaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFuZCBpdCYjMzk7cyBhbHJlYWR5IGJ1aWx0IGludG8gc3RhbmRhcmQgS0FTQU4gY29uZmlndXJhdGlvbnMuIFRoZXJlJiMzOTtzIGFsc28gYSBGSUZPIG9yZGVyaW5nIGJ1ZyBmaXguCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBpdCYjMzk7cyBzcXVhcmVseSBpbiB0aGUgZG9tYWluIG9mIGJ1Z3MgdGhhdCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiYjMzk7cyBzdHJlbmd0aCBsaWVzIGluIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzIG5vdCB0aGUgcHJpbWFyeSByaXNrIGhlcmUuCgpHaXZlbiB0aGUgZ3VpZGFuY2UsIGFuZCB0aGUgZmFjdCB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkZWFkbG9jayBhbmQgb3JkZXJpbmcgaXNzdWUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgd2UgYWxyZWFkeSBoYXZlIHRvb2xzIHRvIGRldGVjdCB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmVjdXJzaXZlIG11dGV4IGRlYWRsb2NrIGFuZCBhbiBldmVudCBvcmRlcmluZyBpc3N1ZSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYzpcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVx1MDAzZW11dGV4IChlLmcuLCBmcm9tIHZob3N0X3Njc2lfZG9fcGx1ZygpIG9yIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKCkpLiBJZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCBpdCBjYWxsZWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSwgd2hpY2ggYXR0ZW1wdGVkIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYWdhaW4sIHJlc3VsdGluZyBpbiBhIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhlIHBhdGNoIHNwbGl0cyBvdXQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpICh3aGljaCBhc3N1bWVzIHZxLVx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxuMi4gRXZlbnQgb3JkZXJpbmc6IEl0IGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByb2Nlc3MgZXZlbnRzIGluIEZJRk8gb3JkZXIgcmF0aGVyIHRoYW4gTElGTyBvcmRlci5cblxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHJlY3Vyc2l2ZSBtdXRleCBkZWFkbG9jayBhbmQgYW4gZXZlbnQgb3JkZXJpbmcgaXNzdWUgaW4gZHJpdmVycy92aG9zdC9zY3NpLmM6XG4xLiBEZWFkbG9jayBmaXg6IHZob3N0X3Njc2lfc2VuZF9ldnQoKSBpcyBjYWxsZWQgd2hpbGUgaG9sZGluZyB2cS1cdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVx1MDAzZW11dGV4IGFnYWluLCByZXN1bHRpbmcgaW4gYSByZWN1cnNpdmUgZGVhZGxvY2suIFRoZSBwYXRjaCBzcGxpdHMgb3V0IF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSAod2hpY2ggYXNzdW1lcyB2cS1cdTAwM2VtdXRleCBpcyBhbHJlYWR5IGhlbGQpIGFuZCBjYWxscyBpdCBkaXJlY3RseSBmcm9tIHZob3N0X3Njc2lfc2VuZF9ldnQoKS5cbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXG5cbk5laXRoZXIgY2hhbmdlIGFsbG9jYXRlcyBuZXcgbWVtb3J5LCBhbHRlcnMgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIFRoZSBldmVudCBzdHJ1Y3R1cmVzIHByb2Nlc3NlZCBoZXJlIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiBpbiB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dCgpLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIHB1cmVseSBsb2NraW5nIGFuZCBvcmRlcmluZzsgZGVhZGxvY2tzIGFuZCBsb2NraW5nIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE0Ljk0NzUxNzA3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjQ3MjU0Njk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiLFxuICAgIFwiRVZFTlRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3Njc2lfc2VuZF9ldnRcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF93b3JrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX2V2dF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgZXZlbnQgY29tcGxldGlvbiBhbmQgZGlzcGF0Y2ggbG9naWMgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEl0IHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiB2cS1cXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MTQuOTQ3NTIyMDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY5OTI4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjQ4OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuKysrIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxcbiBcXHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cXG4rc3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4ge1xcbi1cXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4gXFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xcbiBcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4tXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpO1xcbitcXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KSk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHtcXG4gXFx0XFx0aWYgKCFkcm9wKVxcbiBcXHRcXHRcXHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xcbiBcXHRcXHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbit7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gfVxcbiBcXG5AQCAtMTgyOSw3ICsxODM2LDcgQEAgdmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbiBcXG4gXFx0bGxpc3RfYWRkKFxcdTAwMjZldnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuIFxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG4tXFx0XFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbitcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE1LjUwNTQ5ODg3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE3MDQ2NjkwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCIsXG4gICAgXCJFVkVOVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X3dvcmtcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX3BsdWdcIixcbiAgICBcInZob3N0X3Njc2lfZG9fZXZ0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgZXZlbnQgY29tcGxldGlvbiBhbmQgZGlzcGF0Y2ggbG9naWMgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEl0IHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiB2cS1cXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4rXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIFx0XHRpZiAoIWRyb3ApXG4gXHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiBcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gfVxuIFxuQEAgLTE4MjksNyArMTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiBcbiBcdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuLVx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4rXHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE1LjUwNTUwMTE2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY5MjcwMjQ1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBTQ1NJIHZpcnR1YWwgaG9zdCBkcml2ZXIgcmVzaWRlcywgc28gdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGhvc3QgaW50ZXJhY3RzIHdpdGggdmlydHVhbCBTQ1NJIGRldmljZXMuIEdvb2QuIExldCdzIGRlbHZlIGluLlxuXG5NeSBndXQgcmVhY3Rpb24gaXMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiAqd2hlcmUqIHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGxhcmdlciBjb2RlIHN0cnVjdHVyZS4gSSdsbCB1c2UgdG9vbHMgSSdtIGZhbWlsaWFyIHdpdGgg4oCTIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBmaWxlIGlmIG5lZWRlZCwgb3IgYGdyZXBwZXJgIOKAkyB0byBwaW5wb2ludCB0aGUgbW9kaWZpY2F0aW9ucyBhcm91bmQgdGhlIG1vc3QgbGlrZWx5IGFyZWFzIGZvciB0aGlzIGNoYW5nZS4gSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDYzMCBhbmQgMTgyOSBtaWdodCBiZSBwcmltZSBzcG90cywgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyBjb2RlLiBJIG5lZWQgdG8gZ2V0IGNvbnRleHQsIHNvIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBpbiBjYXNlIHRoaXMgY2hhbmdlIGlzIGNvbmRpdGlvbmFsLiBJcyBgdmhvc3Qtc2NzaWAgZXZlbiBlbmFibGVkPyBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGJlZm9yZSBkaWdnaW5nIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MiwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjIyLjQzMjUyODU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHRcXHRcXHR2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZCA9IGZhbHNlO1xcbiA2MjE6XFx0XFx0fVxcbiA2MjI6XFx0XFxuIDYyMzpcXHRcXHRldmVudHAgPSB2cS1cXHUwMDNlaW92W291dF0uaW92X2Jhc2U7XFxuIDYyNDpcXHRcXHRyZXQgPSBfX2NvcHlfdG9fdXNlcihldmVudHAsIGV2ZW50LCBzaXplb2YoKmV2ZW50KSk7XFxuIDYyNTpcXHRcXHRpZiAoIXJldClcXG4gNjI2OlxcdFxcdFxcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoXFx1MDAyNnZzLVxcdTAwM2VkZXYsIHZxLCBoZWFkLCAwKTtcXG4gNjI3OlxcdFxcdGVsc2VcXG4gNjI4OlxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkZhdWx0ZWQgb24gdmhvc3Rfc2NzaV9zZW5kX2V2ZW50XFxcXG5cXFwiKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuIDYzMTpcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cXG4gNjM0OlxcdHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCwgKnQ7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KSk7XFxuIDY0MDpcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XFxuIDY0MTpcXHRcXHRcXHRpZiAoIWRyb3ApXFxuIDY0MjpcXHRcXHRcXHRcXHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xcbiA2NDM6XFx0XFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG4gNjQ0OlxcdFxcdH1cXG4gNjQ1OlxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDY0ODpcXHR7XFxuIDY0OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gNjUyOlxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xcbiA2NTM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiA2NTQ6XFx0fVxcbiA2NTU6XFx0XFxuIDY1NjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxcbiA2NTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG4gNjYwOlxcdFxcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jb3B5X3NnbF90b19pb3Yoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQpXFxuIDY2NDpcXHR7XFxuIDY2NTpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIgPSBjbWQtXFx1MDAzZXJlYWRfaXRlcjtcXG4gNjY2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIDY2NzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gNjY4OlxcdFxcdHNpemVfdCBsZW47XFxuIDY2OTpcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MjIuNDMyNzcxMDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjA6XFx0XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbjE4MjE6XFx0XFx0aWYgKCFldnQpXFxuMTgyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTgyMzpcXHRcXG4xODI0OlxcdFxcdGlmICh0cGcgXFx1MDAyNlxcdTAwMjYgbHVuKSB7XFxuMTgyNTpcXHRcXHRcXHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXFxuMTgyNjpcXHRcXHRcXHQvKlxcbjE4Mjc6XFx0XFx0XFx0ICogTm90ZTogZXZ0LVxcdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcXG4xODI4OlxcdFxcdFxcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cXG4xODI5OlxcdFxcdFxcdCAqL1xcbjE4MzA6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xcbjE4MzE6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXFx1MDAzZXRwb3J0X3RwZ3Q7XFxuMTgzMjpcXHRcXHRcXHRpZiAobHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZT0gMjU2KVxcbjE4MzM6XFx0XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDNlXFx1MDAzZSA4IHwgMHg0MCA7XFxuMTgzNDpcXHRcXHRcXHRldnQtXFx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwMjYgMHhGRjtcXG4xODM1OlxcdFxcdH1cXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZldnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuMTgzODpcXHRcXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfd29yaykpXFxuMTgzOTpcXHRcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG4xODQwOlxcdH1cXG4xODQxOlxcdFxcbjE4NDI6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuMTg0MzpcXHR7XFxuMTg0NDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxcbjE4NDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cG9sbC53b3JrKTtcXG4xODQ2OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODQ5OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcbjE4NTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg1MTpcXHRcXG4xODUyOlxcdFxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG4xODUzOlxcdFxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbjE4NTQ6XFx0XFx0XFx0XFx0XFx0ICAgIDApO1xcbjE4NTU6XFx0b3V0OlxcbjE4NTY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjE4NTc6XFx0fVxcbjE4NTg6XFx0XFxuMTg1OTpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyMi40MzI5MTg5MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTYxMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9TQ1NJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjIyLjU0MDQ4OTg4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NzQ1MTQ3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVkhPU1RfU0NTSSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBgVkhPU1RfU0NTSWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnRpY3VsYXIgdmhvc3QgdGFyZ2V0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB2aG9zdCBmcmFtZXdvcmsuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBzZXR0aW5ncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZCwgcGFydGljdWxhcmx5IGFyb3VuZCBzZWN1cml0eSBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJIG1pZ2h0IGJlIG1pc3NpbmcsIG9yIGhpZGRlbiBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgdGhhdCBjb3VsZCBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgaW4gYSBwYXJ0aWN1bGFyIHZpcnR1YWxpemVkIHNldHVwPyBUaW1lIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyNS41MTUwMDczMjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcXG4gIDQxOlxcdFxcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNDQ6XFx0XFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgVkhPU1RfU0NTSVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDQ5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNTA6XFx0XFx0c2VsZWN0IFNHX1BPT0xcXG4gIDUxOlxcdFxcdGRlZmF1bHQgblxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcXG4gIDU0OlxcdFxcdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIFZIT1NUX1ZTT0NLXFxuICA1NzpcXHRcXHR0cmlzdGF0ZSBcXFwidmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclxcXCJcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNTk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA2MDpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNjE6XFx0XFx0ZGVmYXVsdCBuXFxuICA2MjpcXHRcXHRoZWxwXFxuICA2MzpcXHRcXHRUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcHJvdmlkZSBBRl9WU09DS1xcbiAgNjQ6XFx0XFx0c29ja2V0cyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGd1ZXN0cy4gIFRoZSBndWVzdHMgbXVzdCBoYXZlIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyNS41MTUxMTI4NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTIxOTg2MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQgc3VpdGFibGUgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgQ29tbWl0IERldGFpbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgY29tbWl0LiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBiZWVuIGNoYW5nZWQgYW5kIHdoeS4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvbW1pdCBtZXNzYWdlLiBBIHdlbGwtd3JpdHRlbiBvbmUgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgaGlnaC1sZXZlbCBjb250ZXh0IGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgdXBkYXRlLiBJ4oCZbSBob3BpbmcgaXTigJlzIGluZm9ybWF0aXZlIGFuZCBkb2Vzbid0IGp1c3Qgc2F5IOKAnGZpeGVkIGEgYnVnLuKAnSBUaGVuLCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYWN0dWFsIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIG1lbnRhbGx5IHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBsaW5lLCBjb25zaWRlcmluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLlxuXG5UbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBmdWxsIGNvbW1pdCBsb2cuIFNvLCBJIHdpbGwgcnVuIGBnaXQgbG9nYC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBoaXN0b3J5IGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGNvZGUsIGFzIHdlbGwgYXMgYW55IHJlbGF0ZWQgY29tbWl0cyB0aGF0IG1pZ2h0IHByb3ZpZGUgZnVydGhlciBjbHVlcy4gSSdsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlZCBmbGFncy4gQSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGNvbW1pdCBoaXN0b3J5IGlzIHZpdGFsIGZvciBwcm9wZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjMyLjYzNzEwMTY3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNjMxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxpc3RfcmV2ZXJzZV9vcmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz02MzQ9c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzOC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2Mzk6XFx0bGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbGlzdF9kZWxfYWxsKFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0MC1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjMyLjcyMTM4NjA2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDE1MDgyNzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBTaW5jZSBJIGFscmVhZHkga25vdyB0aGUgZnVuY3Rpb24gaXRzZWxmLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIldobydzIGNhbGxpbmcgaXQ/XCIgVGhpcyBpcyBhIGtleSBlbnRyeSBwb2ludCwgbGlrZWx5IGZvciBzaWduYWxpbmcgc29tZXRoaW5nIGltcG9ydGFudCB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZnJhbWV3b3JrLCBwcm9iYWJseSBhbiBldmVudCByZWxhdGVkIHRvIHRoZSBTQ1NJIHRyYW5zcG9ydC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHBpbnBvaW50IHRoZSBleGFjdCBldmVudHMgb3IgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgZXZlbnQgc2VuZHMuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIHRoZSB3aGF0J3MgZ29pbmcgb24gZnJvbSBhIGNvbnRyb2wgcGxhbmUgYXNwZWN0LiBXaGF0J3MgaGFwcGVuaW5nIGluIHRoZSBzeXN0ZW0gdGhhdCdzIHByb21wdGluZyB0aGlzIGNhbGw/IFRoZSBtb3JlIEkgdW5kZXJzdGFuZCBhYm91dCB0aGUgY2FsbGVycywgdGhlIGJldHRlciBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW1zLiBOb3cgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjQ2Ljg3MjIxNzg4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MzQ4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODo0Ni45NTA5NTk2MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU0MzM4MjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgaXQgc2VlbXMgd2UncmUgZ3JhYmJpbmcgYHZxLVx1MDAzZW11dGV4YCBmaXJzdCB0aGluZy4gTWFrZXMgc2Vuc2UsIHByb3RlY3RzIHRoZSB2cSBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGVuIHdlIGNhbGwgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiAgSW5zaWRlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgd2UncmUgYWRkaW5nIGFuIGV2ZW50IHRvIGEgbGlzdCBhbmQgKmNvbmRpdGlvbmFsbHkqIHF1ZXVpbmcgd29yay4gU3BlY2lmaWNhbGx5LCBpZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSwgd2UgY2FsbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpYC4gQWgsIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLlxuXG5CZWZvcmUsIGlmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5lZCBmYWxzZSwgaXQgd291bGQgY2FsbCAgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gTm93IHRoZSByZWQgZmxhZyBpcyB1cCEgV2h5PyBCZWNhdXNlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXRzZWxmIGxvY2tzIGB2cS1cdTAwM2VtdXRleGAhIEJpbmdvIVxuXG5JZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSBpbiB0aGUgZmlyc3QgY2FsbCBhZnRlciB3ZSBsb2NrZWQgYHZxLVx1MDAzZW11dGV4YCwgIHdlIGVuZCB1cCBpbiBhIGRlYWRsb2NrISAgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBoYXMgdGhlIGxvY2sgYW5kIHRoZW4gd2UgKnJlLWVudGVyKiBhbmQgYXR0ZW1wdCB0byBncmFiIGl0IGFnYWluLiAgQ2xhc3NpYy5cblxuTm93LCBob2xkIG9uLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgaGF2ZSBiZWVuIHByZXR0eSBjb21tb24sIHdhcyBpdCBtaXNzZWQ/IEFtIEkgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGNvZGUgcGF0aCB0aGF0IGNhbiBhdm9pZCBpdD8gTGV0IG1lIGNoZWNrIHRvIHNlZSBpZiBgdnEtXHUwMDNlbXV0ZXhgIG1pZ2h0IGFscmVhZHkgYmUgaGVsZCBpbiBgdmhvc3Rfc2NzaV9kb19wbHVnYD8gVGltZSB0byBqdW1wIG92ZXIgdG8gbGluZXMgMjUwMC0yNTQwIG9mIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NTAuNDk0MzU1ODY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTAwOlxcdFxcdHJldHVybiBcXFwiVW5rbm93blxcXCI7XFxuMjUwMTpcXHR9XFxuMjUwMjpcXHRcXG4yNTAzOlxcdHN0YXRpYyB2b2lkXFxuMjUwNDpcXHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuMjUwNTpcXHRcXHRcXHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxcbjI1MDY6XFx0e1xcbjI1MDc6XFx0XFxuMjUwODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSB0cGctXFx1MDAzZXZob3N0X3Njc2k7XFxuMjUwOTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG4yNTEwOlxcdFxcdHUzMiByZWFzb247XFxuMjUxMTpcXHRcXG4yNTEyOlxcdFxcdGlmICghdnMpXFxuMjUxMzpcXHRcXHRcXHRyZXR1cm47XFxuMjUxNDpcXHRcXG4yNTE1OlxcdFxcdGlmIChwbHVnKVxcbjI1MTY6XFx0XFx0XFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcXG4yNTE3OlxcdFxcdGVsc2VcXG4yNTE4OlxcdFxcdFxcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHR2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4yNTIxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMjUyMjpcXHRcXHQvKlxcbjI1MjM6XFx0XFx0ICogV2UgY2FuJ3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcXG4yNTI0OlxcdFxcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXFxuMjUyNTpcXHRcXHQgKi9cXG4yNTI2OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcbjI1Mjc6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMjUyODpcXHRcXG4yNTI5OlxcdFxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG4yNTMwOlxcdFxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG4yNTMxOlxcdFxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcbjI1MzI6XFx0dW5sb2NrOlxcbjI1MzM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjI1MzQ6XFx0fVxcbjI1MzU6XFx0XFxuMjUzNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcXG4yNTM3OlxcdHtcXG4yNTM4OlxcdFxcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XFxuMjUzOTpcXHR9XFxuMjU0MDpcXHRcXG4yNTQxOlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90dW5wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXFxuMjU0MjpcXHR7XFxuMjU0MzpcXHRcXHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIGZhbHNlKTtcXG4yNTQ0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NTAuNDk0NTU1Mzg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MjM2MDM0MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGZ1bmN0aW9uIGNhbGxzLCBJJ3ZlIGdvdCBhIHByZXR0eSBnb29kIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIEkndmUgbm90aWNlZCBhIHNpZ25pZmljYW50IHBhdHRlcm46IGluIGJvdGggYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AsIHRoZSBgdnEtXHUwMDNlbXV0ZXhgIGlzIGNvbnNpc3RlbnRseSBoZWxkICpiZWZvcmUqIGNhbGxpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBUaGlzIG1lYW5zIHRoYXQgYHZxLVx1MDAzZW11dGV4YCBpcyBBTFdBWVMgbG9ja2VkIHdoZW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgIGlzIGFjdHVhbGx5IGV4ZWN1dGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5UaGUga2V5IGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIENhbGxpbmcgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKWAgZnJvbSB3aXRoaW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgICp3aGVuKiBgIXZob3N0X3ZxX3dvcmtfcXVldWVgIHdhcyBhIGh1Z2UgcmVkIGZsYWcgYmVjYXVzZSBpdCBpbnRyb2R1Y2VkIGEgcG90ZW50aWFsIHNlbGYtZGVhZGxvY2suIFRoYXQncyBiZWNhdXNlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXRzZWxmIHdhcyBhdHRlbXB0aW5nIHRvIGxvY2sgdGhlIHNhbWUgYHZxLVx1MDAzZW11dGV4YCBpdCB3YXMgYWxyZWFkeSBob2xkaW5nLiBDbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLlxuXG5UaGUgb3RoZXIgdGhpbmcgdGhhdCdzIGltcG9ydGFudCB0byBtZSBpcyB0aGUgY2hhbmdlIHRoYXQgd2FzIG1hZGUgd2l0aCB0aGUgcGF0Y2gsIHRoZSBhZGRpdGlvbiBvZiBgbGxpc3RfcmV2ZXJzZV9vcmRlcihsbGlzdF9kZWxfYWxsKFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpKWAgaW4gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGluZGljYXRlcyBhbiBleHBsaWNpdCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQgZXZlbnRzIGFyZSBub3cgcHJvY2Vzc2VkIGluIEZJRk8gb3JkZXIuIFRoYXQncyBhIGdvb2QgdGhpbmcsIHRob3VnaCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgYSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBob3cgYHZob3N0LXNjc2lgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gYSB0ZXN0aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyIG9yIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlcnNwYWNlIHNpZGUgaW50ZXJhY3RzIHdpdGggYHZob3N0X3Njc2lgIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIHdoZXRoZXIgb3Igbm90IGAvZGV2L3Zob3N0LXNjc2lgIGV2ZW4gZXhpc3RzIGFuZCBob3cgaXQncyB1c2VkLiBUaGlzIHJlYWNoYWJpbGl0eSBxdWVzdGlvbiBpcyB2aXRhbCBmb3IgcmVwcm9kdWNpbmcgdGhlIGRlYWRsb2NrIGFuZCBvdGhlciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OTowNy43MzA1OTI1ODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDMwMzIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaXNjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xODk0PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X25ldF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4OTctXFx0XFx0dmhvc3RfbmV0X2VuYWJsZV96Y29weShWSE9TVF9ORVRfVlFfVFgpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg5ODpcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3RfbmV0X21pc2MpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5OS19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDc3PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Njc2lfcmVnaXN0ZXIodm9pZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDc4LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDc5OlxcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODAtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTk5MD1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF92c29ja19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk4LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5OTk6XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3RfdnNvY2tfbWlzYyk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OTowNy44NDA5MDA3NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcxNjU2NzEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIHZob3N0LXNjc2kgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAgaXMgcmVnaXN0ZXJlZCB1c2luZyBgbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9zY3NpX21pc2MpYC4gVGhhdCBtZWFucyBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGRldmljZSBkcml2ZXIgYnkgbG9va2luZyBhdCB0aGUgYHZob3N0X3Njc2lfbWlzY2Agc3RydWN0dXJlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGRlZmluZWQgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIG1hbmFnaW5nIHRoZSB2aXJ0dWFsIFNDU0kgaG9zdCB3aXRoaW4gdGhlIHZob3N0IGZyYW1ld29yay4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQhIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbWlzYyBkZXZpY2UgZnJhbWV3b3JrIGFuZCBob3cgdGhlIGRyaXZlciBnZXRzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaGFuZGxlcyBvcGVyYXRpb25zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjExLjU1NzQ3MDI1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MDAxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9taXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NzE6c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X3Njc2lfbWlzYyA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcyLVxcdE1JU0NfRFlOQU1JQ19NSU5PUixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Nzgte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0Nzk6XFx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4MC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDgyPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZGVyZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODMte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0ODQ6XFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToxMS42MzcxNzY5MjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYwNDgyMTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgYnVzaW5lc3MuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIGB2aG9zdF9zY3NpX2ZvcHNgIFN0cnVjdHVyZTogRGVjb2RpbmcgdGhlIFNDU0kgVmlydHVhbGl6YXRpb24qKlxuXG5SaWdodCwgYHZob3N0X3Njc2lfZm9wc2AuIFRoYXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIHNwZWNpZmljYWxseSB0YWlsb3JlZCBmb3IgU0NTSSBkZXZpY2UgdmlydHVhbGl6YXRpb24gd2l0aGluIHRoZSB2aG9zdCBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcyB0aGluZy4gV2hhdCdzIGluIGl0PyBQcm9iYWJseSBwb2ludGVycyB0byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvcmUgU0NTSSBvcGVyYXRpb25zOiBJL08gcmVxdWVzdHMsIHF1ZXVlIG1hbmFnZW1lbnQsIGRldmljZSByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24sIGVycm9yIGhhbmRsaW5n4oCmIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBhYnN0cmFjdGluZyBhIGJsb2NrIGRldmljZS5cblxuSSdtIGFzc3VtaW5nIHRoaXMgYHZob3N0X3Njc2lfZm9wc2AgaXMgaG93IHRoZSBob3N0IGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHVhbCBTQ1NJIGRldmljZSBwcmVzZW50ZWQgdG8gdGhlIGd1ZXN0LiBJdCdzIHRoZSBicmlkZ2UuIFdlJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgbWFwcyB0aGUgZ3Vlc3QncyBTQ1NJIGNvbW1hbmRzIGludG8gc29tZXRoaW5nIHRoZSBob3N0J3MgdW5kZXJseWluZyBzdG9yYWdlIGNhbiB1bmRlcnN0YW5kIOKAkyBwcm9iYWJseSB1c2luZyB0aGUgdXN1YWwgc2NhdHRlci1nYXRoZXIgbGlzdHMgdG8gZWZmaWNpZW50bHkgaGFuZGxlIGRhdGEgdHJhbnNmZXJzLiBBcmUgd2UgbG9va2luZyBhdCBhIHN0cmFpZ2h0IHBhc3N0aHJvdWdoIG9yIGlzIHRoZXJlIHNvbWUgdHJhbnNsYXRpb24gbGF5ZXI/IEhvcGVmdWxseSwgaXQncyBlZmZpY2llbnQsIGdpdmVuIHRoZSBwb3RlbnRpYWwgb3ZlcmhlYWQgb2YgdmlydHVhbGl6YXRpb24uXG5cblRoZSBkZXNpZ24gc2hvdWxkIGNvbnNpZGVyIHRoZSBzaGFyZWQgbWVtb3J5IGludGVyZmFjZSwgcmlnaHQ/IElzIHRoaXMgYHZob3N0X3Njc2lfZm9wc2Agc3RydWN0dXJlIGludGltYXRlbHkgdGllZCBpbnRvIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24gZm9yIHRoZSByaW5nIGJ1ZmZlcnMgYW5kIHRoZSBkZXNjcmlwdG9ycz8gSXQgaGFzIHRvIGJlLCBvciBpdCdkIGJlIGluY3JlZGlibHkgaW5lZmZpY2llbnQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBkYXRhIGlzIHBhc3NlZCBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgZ3Vlc3QsIGVzcGVjaWFsbHkgdGhlIHN0YXR1cyByZXBvcnRzLiBJcyB0aGVyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnM/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIFNDU0kgaXMga25vd24gZm9yIGl0cyBudWFuY2VkIGVycm9yIGNvZGVzLiBIb3cgaXMgdGhpcyB2aG9zdCBsYXllciBtYXBwaW5nIHRob3NlIFNDU0kgc2Vuc2UgY29kZXMgYmFjayB0byB0aGUgZ3Vlc3Q/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucywgbGlrZSBhdXRvbWF0aWMgcmV0cmllcywgaW1wbGVtZW50ZWQgaGVyZT8gSSdkIGV4cGVjdCBnb29kIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBtYW5hZ2VtZW50IHRvIGJlIGNydWNpYWwgZm9yIHJlbGlhYmlsaXR5LiBBbmQgd2hhdCBhYm91dCBzZWN1cml0eT8gRG9lcyB0aGUgYHZob3N0X3Njc2lfZm9wc2Agc3RydWN0dXJlIHRha2UgYW55IG1lYXN1cmVzIHRvIHZhbGlkYXRlIHRoZSBjb21tYW5kcyBjb21pbmcgZnJvbSB0aGUgZ3Vlc3QgdG8gcHJldmVudCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuYXV0aG9yaXplZCBhY2Nlc3M/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MTUuMjQyMDAxNjIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDYwOlxcdH1cXG4yNDYxOlxcdFxcbjI0NjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xcbjI0NjM6XFx0XFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuMjQ2NDpcXHRcXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9zY3NpX3JlbGVhc2UsXFxuMjQ2NTpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxcbjI0NjY6XFx0XFx0LmNvbXBhdF9pb2N0bFxcdD0gY29tcGF0X3B0cl9pb2N0bCxcXG4yNDY3OlxcdFxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Njc2lfb3BlbixcXG4yNDY4OlxcdFxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbjI0Njk6XFx0fTtcXG4yNDcwOlxcdFxcbjI0NzE6XFx0c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X3Njc2lfbWlzYyA9IHtcXG4yNDcyOlxcdFxcdE1JU0NfRFlOQU1JQ19NSU5PUixcXG4yNDczOlxcdFxcdFxcXCJ2aG9zdC1zY3NpXFxcIixcXG4yNDc0OlxcdFxcdFxcdTAwMjZ2aG9zdF9zY3NpX2ZvcHMsXFxuMjQ3NTpcXHR9O1xcbjI0NzY6XFx0XFxuMjQ3NzpcXHRzdGF0aWMgaW50IF9faW5pdCB2aG9zdF9zY3NpX3JlZ2lzdGVyKHZvaWQpXFxuMjQ3ODpcXHR7XFxuMjQ3OTpcXHRcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MTUuMjQyMTY4ODUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0MTM0MDIwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYC9kZXYvdmhvc3Qtc2NzaWAgTGFuZHNjYXBlKipcblxuT2theSwgc28gYC9kZXYvdmhvc3Qtc2NzaWAuLi4gdGhpcyBpcyBpbnRlcmVzdGluZy4gSXQncyBhIG1pc2MgZGV2aWNlIHRoYXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCwgYXMgYSB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoZXIsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3Igb3BlcmF0aW9ucyBsaWtlIGBvcGVuYXQkdmhvc3Rfc2NzaWAgYW5kIGBpb2N0bCR2aG9zdF9zY3NpXypgIG1lYW5zIGl0J3MgYWxyZWFkeSBhIHRhcmdldCBmb3IgZnV6emluZywgbGlrZWx5IGZvciBnb29kIHJlYXNvbi4gTXkgaW50dWl0aW9uIGlzIGNvbmZpcm1lZC5cblxuRnVydGhlcm1vcmUsIHRoZSBUQ00gZmFicmljIGFuZCBgdGFyZ2V0X2NvcmVgIGFyZSB1c2luZyBjb25maWdmcyB0byBtYW5hZ2UgdGFyZ2V0IHBvcnRzIGFuZCBMVU5zLiBUaGF0J3MgYSBjbGFzc2ljIHNldHVwLCBhbmQgdGhlIGhvdHBsdWcvaG90dW5wbHVnIG1lY2hhbmlzbXMsIG5hbWVseSBgdmhvc3Rfc2NzaV9ob3RwbHVnYCBhbmQgYHZob3N0X3Njc2lfaG90dW5wbHVnYCwgYXJlIHdoYXQgSeKAmW0gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGUgaW50ZXJwbGF5IHdpdGggdXNlcnNwYWNlIGtpY2tpbmcgdGhlIGV2ZW50IHZpcnRxdWV1ZSB2aWEgYGV2ZW50ZmRgIG9yIGBpb2N0bGAgaXMgYW5vdGhlciBwcm9taXNpbmcgYW5nbGUuIEEga2ljayBmcm9tIHVzZXJzcGFjZSBpcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IHRvIGEgYnVnLlxuXG5SaWdodCwgc28gd2hlcmUgZG9lcyBhbGwgdGhpcyBjb252ZXJnZT8gTGV0J3MgdHJhY2UgaG93IHRoZSBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gU2luY2UgaXQncyB0aGUgd29yayBjYWxsYmFjaywgdHJpZ2dlcmVkIGJ5IHRoZSB2aXJ0cXVldWUga2ljaywgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgYmVpbmcgKnNldCB1cCouIFRoYXQncyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gR290dGEgZGlnIGludG8gd2hlcmUgdGhhdCdzIGluaXRpYWxpemVkIGFuZCBob3cgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzcGVjaWZpYyB2aXJ0cXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MjIuNjU1NTc0MDExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE0NDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTg0MS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODQyOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI5NT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMzctXFx0dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0NUTF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzM4OlxcdHZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxLmhhbmRsZV9raWNrID0gdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2s7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzOS1cXHRmb3IgKGkgPSBWSE9TVF9TQ1NJX1ZRX0lPOyBpIFxcdTAwM2MgbnZxczsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjIyLjc1MDcyNDQ0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODQyODczNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBhIGBWSE9TVF9TQ1NJX1ZRX0VWVGAga2ljayBldmVudCB0cmlnZ2VycyB0aGUgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgSSBuZWVkIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgKmFmdGVyKiB0aGUga2ljay4gSSdsbCB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtgLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGNvcmUgd29yaywgcHJlc3VtYWJseSBjb21wbGV0aW5nIHNvbWUgU0NTSSBldmVudHMuIEJ1dCB3aGVyZSBpcyBgdnMtXHUwMDNldnNfZXZlbnRfd29ya2AgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIG91dCB3aGVuIGFuZCBob3cgdGhhdCdzIHNldCB1cC4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGV2ZW50cyBhcmUgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgdmhvc3Qtc2NzaSBmcmFtZXdvcmsuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSB3b3JrIHF1ZXVlIGlzIGVzdGFibGlzaGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjI1LjU5MzYwMjUzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMjY0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNfZXZlbnRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDctXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4OlxcdHN0cnVjdCB2aG9zdF93b3JrIHZzX2V2ZW50X3dvcms7IC8qIGV2dCBpbmplY3Rpb24gd29yayBpdGVtICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ5LVxcdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU4LVxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3Rfc2NzaSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzNy1cXHRsbGlzdF9hZGQoXFx1MDAyNmV2dC1cXHUwMDNlbGlzdCwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM4OlxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI5NT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjMzMDpcXHR2aG9zdF93b3JrX2luaXQoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrLCB2aG9zdF9zY3NpX2V2dF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToyNS42NTQ5MzQzMTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI2NDU5NDg0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZob3N0LXNjc2lgIENvZGUgUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBleGFtaW5pbmcgYSBzcGVjaWZpYyBjb2RlIHBhdGggd2l0aGluIHRoZSBgdmhvc3Qtc2NzaWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGV2ZW50IGhhbmRsaW5nIGFuZCB3b3JrIHF1ZXVlIHByb2Nlc3NpbmcuIEkgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgdnMtXHUwMDNldnNfZXZlbnRfd29ya2Agd2l0aCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgYW5kIGhvdyB0aGF0IHRyaWdnZXJzIGEgc2VxdWVuY2U6IGB2aG9zdF9zY3NpX2V2dF93b3JrYCBjYWxscyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCB0aGVuIGNhbGxzIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gV2l0aGluIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgSSdtIG5vdGluZyB0aGUgdXNlIG9mIGFuIGBsbGlzdGAgKGxvY2tsZXNzIGxpc3QpIGZvciBldmVudCBtYW5hZ2VtZW50LiBFdmVudHMgYXJlIGFkZGVkIHVzaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBhbmQgcXVldWVkIGZvciBjb21wbGV0aW9uLiBBIGtleSBkZXRhaWwgaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmdW5jdGlvbiwgd2l0aCBhIHBvdGVudGlhbCBmYWxsYmFjayBwYXRoIHRvIHRyaWdnZXIgdGhlIGV2ZW50IGNvbXBsZXRpb24gc3luY2hyb25vdXNseSBpZiBxdWV1ZWluZyBmYWlscy4gQWxsIG9mIHRoaXMgaXMgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCB3aGljaCBtYWtlcyBpdCB2ZXJ5IGludGVyZXN0aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYWxsIGNsZWFybHkgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUga2VybmVsLCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCB0aGF0IHJ1bGVzIG91dCB0aGUgc3RhbmRhcmQganVzdGlmaWNhdGlvbnMgZm9yIGV4Y2x1ZGluZyBpdCBmcm9tIGZ1enppbmcuIEl0J3Mgbm90IG5vbi1rZXJuZWwsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgdmlhIGV4ZWN1dGlvbiBwYXRocy5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKldvcnRoRnV6emluZyA9IHRydWUhKipcblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZnV6emluZyBpdC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMsIGZvY3VzIHN5bWJvbHMsIGFuZCBmaW5hbGx5IHRoZSBmdXp6aW5nIHJlYXNvbmluZy4gTXkgbmV4dCBzdGVwIGlzIHRvIGFuYWx5emUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgdGhlIGJ1aWxkLiBJIHNlZSB0aGF0IHRoZSBgVkhPU1RfU0NTSWAgZHJpdmVyIHJlbGllcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIFRoaXMgZHJpdmVyIGhhcyBhIGBLY29uZmlnYCBlbnRyeSB0aGF0IGluZGljYXRlcyB0aGF0IGBWSE9TVF9TQ1NJYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gSXQgZGVmYXVsdHMgdG8gYG5gIChub3QgYnVpbHQtaW4pLCBzbyBJIG5lZWQgdG8ga25vdyB3aGVyZSBgVEFSR0VUX0NPUkVgIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjM4LjMwMDg4NTkzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwOTAzNjc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEFSR0VUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZzozOm1lbnVjb25maWcgVEFSR0VUX0NPUkVcXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MzkuNDA5OTMwNTk3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzUwMDAxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBUYXJnZXQgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdGFyZ2V0IGRyaXZlciBjb25maWd1cmF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYGRyaXZlcnMvdGFyZ2V0L0tjb25maWdgIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMSBpcyBwcm9iYWJseSB3aGVyZSBJJ2xsIGZpbmQgdGhlIGdlbmVyYWwgc2NvcGUgb2Ygd2hhdCdzIGRlZmluZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhcmdldCBkcml2ZXJzLCBtYXliZSBpbmNsdWRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBhbHNvIHNvbWUgaGVscGZ1bCBjb21tZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBzcGVjaWZpYyBwcm9ibGVtLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6NDMuOTQ0OTMzMjc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQ19UMTBESUZcXG4gICA4OlxcdFxcdHNlbGVjdCBTQ1NJX0NPTU1PTlxcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcXG4gIDEzOlxcdFxcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xcbiAgMTQ6XFx0XFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBUQVJHRVRfQ09SRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVENNX0lCTE9DS1xcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIlRDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcXFwiXFxuICAyMDpcXHRcXHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00vSUJMT0NLIHN1YnN5c3RlbSBwbHVnaW4gZm9yIG5vbi1idWZmZXJlZFxcbiAgMjM6XFx0XFx0YWNjZXNzIHRvIExpbnV4L0Jsb2NrIGRldmljZXMgdXNpbmcgQklPXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBUQ01fRklMRUlPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjQzLjk0NTAwODg5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDI1ODIyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBzaXR1YXRpb246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBNYWtlZmlsZSBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRlcGVuZGVuY2llcy4gYFRBUkdFVF9DT1JFYCBpcyB0aGUgZm91bmRhdGlvbiwgYW5kIGBCTE9DS2AgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGl0LiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlbiwgYFZIT1NUX1NDU0lgIHJlbGllcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgKmFuZCogYEVWRU5URkRgLiBTaW5jZSBgRVZFTlRGRGAgaXMgYSBzdGFuZGFyZCBrZXJuZWwgY29uZmlnLCB0aGVyZSdzIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSB0aGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIFRoZSBNYWtlZmlsZSB3aWxsIHNob3cgbWUgdGhlIGJ1aWxkIHJ1bGVzLCBhbnkgc3BlY2lmaWMgZmxhZ3MsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJJ20gbm90IHNlZWluZyBoZXJlLiBUaGlzIHdpbGwgaGVscCBtZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRlc2NyaWJlZCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBhbmQgcG90ZW50aWFsbHkgZmluZCBvdGhlciBjb250cmlidXRpbmcgZmFjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjQ3Ljk3MDgzNDQzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICs9IHZob3N0X25ldC5vXFxuICAgMzpcXHR2aG9zdF9uZXQteSA6PSBuZXQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgKz0gdmhvc3Rfc2NzaS5vXFxuICAgNjpcXHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgKz0gdmhvc3RfdnNvY2sub1xcbiAgIDk6XFx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSArPSB2cmluZ2gub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgKz0gdmhvc3RfdmRwYS5vXFxuICAxNDpcXHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19WSE9TVClcXHQrPSB2aG9zdC5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgKz0gdmhvc3RfaW90bGIub1xcbiAgMTk6XFx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjQ3Ljk3MDkzODkxOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjU5ODQyODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3Qtc2NzaSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBwYXRjaC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHNldHRpbmcgYENPTkZJR19WSE9TVF9TQ1NJYCBjb21waWxlcyBgc2NzaS5jYCBpbnRvIGB2aG9zdF9zY3NpLm9gLiBNYWtlcyBzZW5zZS4gQW5kIHRoYXQgY29uZmlnIG9wdGlvbiByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBSaWdodCwgc28gYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgIGFyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgaGVyZS4gR29vZCB0byBoYXZlIHRoYXQgZXN0YWJsaXNoZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEknbSBzZWVpbmcgYSBmZXcgc3ltYm9scyBtb2RpZmllZC4gRmlyc3QsIHdlJ3ZlIGdvdCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBMb29rcyBsaWtlIGl0J3MgZWl0aGVyIG5ldyBvciBhIHJlbmFtZWQgdmVyc2lvbiBvZiB0aGUgb2xkIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoZW4gdGhlcmUgaXMgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB3aGljaCBpcyBhbHNvIHN0YXRpYywgbm93IGFjcXVpcmVzIGB2cS1cdTAwM2VtdXRleGAgYW5kIHRoZW4gY2FsbHMgdGhpcyBuZXcgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBGaW5hbGx5IGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aGljaCBpcyBub3cgY2FsbGluZyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYXMgd2VsbC4gSW50ZXJlc3RpbmcsIHNvIHRoZSBvbGQgbG9naWMgaXMgYmVpbmcgcmUgZmFjdG9yZWQgaGVyZS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgc2lnbmFscyBpbmxpbmluZyBwb3RlbnRpYWwsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vay4uLiBZZXAsIGl0J3MgYHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBHQ0MgbWlnaHQgaW5saW5lIHRoaXMgdG8gb3B0aW1pemUuIElmIGl0IGRvZXMgZ2V0IGlubGluZWQsIGJvdGggZnVuY3Rpb25zIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYW5kIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aWxsIGJlIHN5bWJvbHMgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCwgd2hpY2ggbWFrZXMgdGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcuXG5cbk9rYXksIGxldCdzIGZpZ3VyZSBvdXQgd2hvIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy4gV2hhdCdzIGNhbGxpbmcgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYD8gSG1tLCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AuIEFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGA/IFRoYXQgb25lJ3MgY2FsbGVkIGJ5IGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgYW5kIGluZGlyZWN0bHkgYnkgYHZob3N0X3Njc2lfZG9fcGx1Z2AgdGhyb3VnaCBgdmhvc3Rfc2NzaV9ob3RwbHVnYCBhbmQgYHZob3N0X3Njc2lfaG90dW5wbHVnYC5cblxuQWxyaWdodCwgSSBzaG91bGQgY2hlY2sgdGhlIGlvY3RsIGhhbmRsZXIgb3IgZW50cnkgcG9pbnRzIGZvciB2aG9zdC1zY3NpIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgY2hlY2sgYHZob3N0X3Njc2lfaW9jdGxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjUyLjYzMDgwNjE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2OTI2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE5MzQ9c3RhdGljIGludCB2aG9zdF9zY3NpX3NldHVwX3ZxX2NtZHMoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCBtYXhfY21kcylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE5ODgtLypcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxOTg5OiAqIENhbGxlZCBmcm9tIHZob3N0X3Njc2lfaW9jdGwoKSBjb250ZXh0IHRvIHdhbGsgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk5MC0gKiB2aG9zdF9zY3NpX3RwZyB3aXRoIGFuIGFjdGl2ZSBzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1c1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjM4NT1zdGF0aWMgbG9uZ1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODY6dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzg3LVxcdFxcdCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjQtXFx0LnJlbGVhc2UgICAgICAgID0gdmhvc3Rfc2NzaV9yZWxlYXNlLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NjU6XFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3Rfc2NzaV9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDY2LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjUyLjc0MjUwNDYwOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzE3NjUxNTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZXZlbnQgaGFuZGxpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgc3Vic3lzdGVtLiBJJ20gc2VlaW5nIGEgY2x1c3RlciBvZiBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuOiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBsYXllcnMgaW4gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBzY3NpLmNgIG1pZ2h0IGJlIHJlbGV2YW50IGFuZCBpbnRlcmNvbm5lY3RlZCB3aXRoIHRoZXNlIGNvcmUgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gQWgsIHRoZXJlIGl0IGlzISBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AgaXMgY2FsbGVkIHdpdGhpbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoYXQncyBhbiBpbXBvcnRhbnQgY29ubmVjdGlvbiB0byBub3RlLiBOb3csIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgc3BlY2lmaWNzIG9mIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYC4gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGV2ZW50IHByb2Nlc3NpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6MDUuOTE5MDIzMzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3Mjc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9kb19ldnRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTU2OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU3MDp2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTcxLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTYzND1zdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQxLVxcdFxcdGlmICghZHJvcClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDI6XFx0XFx0XFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDMtXFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6MDYuMDIyNzYxMjY5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0MDYzMDQzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaG9zdC1TQ1NJIEV2ZW50IEhhbmRsaW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYCwgd2hpY2ggaXMgdGhlIHdvcmsgaGFuZGxlciByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBldmVudCBub3RpZmljYXRpb25zIHRvIHRoZSBndWVzdCdzIHZpcnRxdWV1ZS4gTXkgbmV4dCB0aG91Z2h0IHdhcyB0byBtYXAgb3V0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbGFuZHNjYXBlLiBJJ3ZlIG5vdyBnb3QgYSBnb29kIGxpc3Q6IGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AsIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBpbiBhZGRpdGlvbiB0byB0aGUgb3JpZ2luYWwuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGNoZWNraW5nIGZvciB0aGUgbmVjZXNzYXJ5IEtjb25maWcgc3ltYm9sczogYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBhbmQgYEVWRU5URkRgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBWSE9TVGAgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgVkhPU1RfU0NTSWAsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGluIHRoZSBLY29uZmlnIGZpbGUuIGBFVkVOVEZEYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBidXQgSSdtIGluY2x1ZGluZyBpdCB0byBiZSBleHRyYSB0aG9yb3VnaC4gVGh1cywgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgVkhPU1RfU0NTSWAsIGBUQVJHRVRfQ09SRWAsIGFuZCBgRVZFTlRGRGAuXG5cbkxldCdzIHJlY2FwIGFuZCBjb25maXJtIG91ciB1bmRlcnN0YW5kaW5nLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgdmhvc3Qtc2NzaSBldmVudCBoYW5kbGluZyBsb2dpYyB3aXRoaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gSGVyZSdzIHdoYXQncyBiZWVuIGNoYW5nZWQ6XG5cbjEuICBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGhhcyBiZWVuIHNwbGl0IGludG8gYW4gdW5sb2NrZWQgaGVscGVyLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIGFzc3VtZXMgdGhlIGNhbGxlciBob2xkcyBgdnEtXHUwMDNlbXV0ZXhgLCBhbmQgdGhlIG9yaWdpbmFsIGxvY2tlZCB3cmFwcGVyLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLlxuMi4gIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBub3cgY2FsbHMgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGluc3RlYWQgb2YgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB3aGVuIGV2ZW50IHF1ZXVpbmcgZmFpbHMgKGAhdmhvc3RfdnFfd29ya19xdWV1ZWApLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGJlY2F1c2UgdGhlIGNhbGxlcnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgIChgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBgdmhvc3Rfc2NzaV9kb19wbHVnYCkgYWxyZWFkeSBob2xkIGB2cS1cdTAwM2VtdXRleGAuXG4zLiAgVGhlIHBhdGNoIHJldmVyc2VzIHRoZSBvcmRlciBvZiBldmVudHMgd2hlbiBwb3BwaW5nIGZyb20gYHZzLVx1MDAzZXZzX2V2ZW50X2xpc3RgIHVzaW5nIGBsbGlzdF9yZXZlcnNlX29yZGVyYCwgc28gaXQncyBjaGFuZ2luZyB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBxdWV1ZWQgZXZlbnRzLlxuXG5BbGwgdGhpcyBhbHRlcmVkIGNvZGUgaXMgdHJpZ2dlcmVkIHRocm91Z2ggYC9kZXYvdmhvc3Qtc2NzaWAgaW9jdGwva2ljayBvcGVyYXRpb25zIGFuZCBUQ00gU0NTSSB0YXJnZXQgaG90cGx1ZyBldmVudHMsIHdoaWNoIGlzIHN0YW5kYXJkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEdpdmVuIHRoZXNlIGNoYW5nZXMsIGZ1enppbmcgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGVhZGxvY2tzLCBvcmRlcmluZyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZXZlbnQgcXVldWUgZmx1c2hpbmcgYW5kIGRlbGl2ZXJ5LlxuXG5Pa2F5LCBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCB2ZXJpZmllZC4gSSdtIG5vdyBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTMyLCJPdXRwdXRUb2tlbnMiOjI1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDoxMi40MjkwNjg0ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMxMTYzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCIsXG4gICAgXCJFVkVOVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X3dvcmtcIixcbiAgICBcInZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX3BsdWdcIixcbiAgICBcInZob3N0X3Njc2lfZG9fZXZ0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgZXZlbnQgY29tcGxldGlvbiBhbmQgZGlzcGF0Y2ggbG9naWMgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEl0IHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiB2cS1cXHUwMDNlbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IGNhbGxlcnMgb2Ygdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCBhbmQgYWRkcyBsbGlzdF9yZXZlcnNlX29yZGVyKCkgdG8gcHJlc2VydmUgZXZlbnQgb3JkZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9kZXYvdmhvc3Qtc2NzaSBhbmQgdmlydHF1ZXVlIGtpY2tzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiLFxuICAgIFwiRVZFTlRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3Njc2lfc2VuZF9ldnRcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF93b3JrXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2RvX2V2dF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGRpc3BhdGNoIGxvZ2ljIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJdCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCBieSBjYWxsZXJzIG9mIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgYW5kIGFkZHMgbGxpc3RfcmV2ZXJzZV9vcmRlcigpIHRvIHByZXNlcnZlIGV2ZW50IG9yZGVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvZGV2L3Zob3N0LXNjc2kgYW5kIHZpcnRxdWV1ZSBraWNrcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUwOjEyLjU1MjE5NDIzMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODY3ODU5OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6MTIuNTUyNzc3ODUzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ0ODY3MjcxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNmEyZDc0MzM5NWE0NDU0MzlmYmQ4M2YzYzY5NDA4NDE1N2U2YmE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li45Y2QxODFjYjFjYzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4rXHRsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCkpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIFx0XHRpZiAoIWRyb3ApXG4gXHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiBcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4re1xuK1x0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gfVxuIFxuQEAgLTE4MjksNyArMTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiBcbiBcdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuLVx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4rXHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUwOjEyLjU1Mjc3OTA1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NjExMDIyNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEluaXRpYWwgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc3BpbiB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZm9jdXMuXG5cbkkgbmVlZCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBsb29rcyBsaWtlLCB0aGUgY29udGV4dCBmb3IgdGhlc2UgY2hhbmdlcy4gSSdsbCBwcm9iYWJseSB1c2UgbXkgdXN1YWwgZ28tdG8gdG9vbHMsIGxpa2UgYHJlYWQtZmlsZWAgdG8ganVzdCBsb2FkIHRoZSBmaWxlLCBvciBtYXliZSBJJ2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgaWYgSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBzcGVjaWZpYyBjYWxscyBvciB2YXJpYWJsZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGNvZGUgaW5zcGVjdGlvbiwgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjQsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjI4LjY2MzAwNzE0OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gZmFsc2U7XFxuIDYyMTpcXHRcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGV2ZW50cCA9IHZxLVxcdTAwM2Vpb3Zbb3V0XS5pb3ZfYmFzZTtcXG4gNjI0OlxcdFxcdHJldCA9IF9fY29weV90b191c2VyKGV2ZW50cCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTtcXG4gNjI1OlxcdFxcdGlmICghcmV0KVxcbiA2MjY6XFx0XFx0XFx0dmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChcXHUwMDI2dnMtXFx1MDAzZWRldiwgdnEsIGhlYWQsIDApO1xcbiA2Mjc6XFx0XFx0ZWxzZVxcbiA2Mjg6XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXFxcblxcXCIpO1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcXG4gNjMxOlxcdH1cXG4gNjMyOlxcdFxcbiA2MzM6XFx0LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xcbiA2MzQ6XFx0c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4gNjM1OlxcdHtcXG4gNjM2OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcXG4gNjM3OlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGxsbm9kZSA9IGxsaXN0X3JldmVyc2Vfb3JkZXIobGxpc3RfZGVsX2FsbChcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpKTtcXG4gNjQwOlxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHtcXG4gNjQxOlxcdFxcdFxcdGlmICghZHJvcClcXG4gNjQyOlxcdFxcdFxcdFxcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7XFxuIDY0MzpcXHRcXHRcXHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0fVxcbiA2NDY6XFx0XFxuIDY0NzpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG4gNjQ4OlxcdHtcXG4gNjQ5OlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiA2NTI6XFx0XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XFxuIDY1MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuIDY1NDpcXHR9XFxuIDY1NTpcXHRcXG4gNjU2OlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuIDY1NzpcXHR7XFxuIDY1ODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXFxuIDY1OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZzX2V2ZW50X3dvcmspO1xcbiA2NjA6XFx0XFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG4gNjYxOlxcdH1cXG4gNjYyOlxcdFxcbiA2NjM6XFx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcXG4gNjY0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MjguNjYzMjAxNDk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODIwOlxcdFxcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcXG4xODIxOlxcdFxcdGlmICghZXZ0KVxcbjE4MjI6XFx0XFx0XFx0cmV0dXJuO1xcbjE4MjM6XFx0XFxuMTgyNDpcXHRcXHRpZiAodHBnIFxcdTAwMjZcXHUwMDI2IGx1bikge1xcbjE4MjU6XFx0XFx0XFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xcbjE4MjY6XFx0XFx0XFx0LypcXG4xODI3OlxcdFxcdFxcdCAqIE5vdGU6IGV2dC1cXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXFxuMTgyODpcXHRcXHRcXHQgKiBsdW5bNC03XSBuZWVkIHRvIGJlIHplcm8gYWNjb3JkaW5nIHRvIHZpcnRpby1zY3NpIHNwZWMuXFxuMTgyOTpcXHRcXHRcXHQgKi9cXG4xODMwOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzBdID0gMHgwMTtcXG4xODMxOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVxcdTAwM2V0cG9ydF90cGd0O1xcbjE4MzI6XFx0XFx0XFx0aWYgKGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwM2U9IDI1NilcXG4xODMzOlxcdFxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzJdID0gbHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZVxcdTAwM2UgOCB8IDB4NDAgO1xcbjE4MzQ6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDI2IDB4RkY7XFxuMTgzNTpcXHRcXHR9XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2ZXZ0LVxcdTAwM2VsaXN0LCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpO1xcbjE4Mzg6XFx0XFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X3dvcmspKVxcbjE4Mzk6XFx0XFx0XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XFxuMTg0MDpcXHR9XFxuMTg0MTpcXHRcXG4xODQyOlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbjE4NDM6XFx0e1xcbjE4NDQ6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSxcXG4xODQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHBvbGwud29yayk7XFxuMTg0NjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Njc2ksIGRldik7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMTg0OTpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4xODUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRpZiAodnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQpXFxuMTg1MzpcXHRcXHRcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcXG4xODU0OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4xODU1OlxcdG91dDpcXG4xODU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODU3OlxcdH1cXG4xODU4OlxcdFxcbjE4NTk6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4xODYwOlxcdHtcXG4xODYxOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXFxuMTg2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwb2xsLndvcmspO1xcbjE4NjM6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHZxLVxcdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xcbjE4NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjI4LjY2MzM1NTE5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1Njk2MTc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYW5kIGNhbGxpbmcgY29udGV4dCBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgaXQgb3BlcmF0ZXMgd2l0aGluLlxuXG4qKkFuYWx5emluZyB0aGUgRXhlY3V0aW9uIENvbnRleHQgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgKipcblxuSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsZXJzLiBJJ2xsIG5lZWQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhdGhzIHRoYXQgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFRoZW4sIGEgZm9jdXNlZCBsb29rIGF0IGxpbmVzIGFyb3VuZCAxODAwLTE4MzAgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBzaG91bGQgcHJvdmlkZSBzb21lIGltbWVkaWF0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBhZGphY2VudCBjb2RlIHdpbGwgY2xhcmlmeSBkYXRhIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIHRoZSBldmVudCBzZW5kaW5nLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIGEgZ29vZCBpbml0aWFsIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MzYuMjMyOTc3MzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjE4MDE6XFx0fVxcbjE4MDI6XFx0XFxuMTgwMzpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4xODA0OlxcdHtcXG4xODA1OlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXFxuMTgwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwb2xsLndvcmspO1xcbjE4MDc6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHZxLVxcdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xcbjE4MDg6XFx0XFxuMTgwOTpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IFRoZSBoYW5kbGluZyBmdW5jIGZvciBjb250cm9sIHF1ZXVlLlxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjE4MTA6XFx0XFx0dmhvc3Rfc2NzaV9jdGxfaGFuZGxlX3ZxKHZzLCB2cSk7XFxuMTgxMTpcXHR9XFxuMTgxMjpcXHRcXG4xODEzOlxcdHN0YXRpYyB2b2lkXFxuMTgxNDpcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMTgxNTpcXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4xODE2OlxcdFxcdFxcdCAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXFxuMTgxNzpcXHR7XFxuMTgxODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcXG4xODE5OlxcdFxcbjE4MjA6XFx0XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbjE4MjE6XFx0XFx0aWYgKCFldnQpXFxuMTgyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTgyMzpcXHRcXG4xODI0OlxcdFxcdGlmICh0cGcgXFx1MDAyNlxcdTAwMjYgbHVuKSB7XFxuMTgyNTpcXHRcXHRcXHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXFxuMTgyNjpcXHRcXHRcXHQvKlxcbjE4Mjc6XFx0XFx0XFx0ICogTm90ZTogZXZ0LVxcdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcXG4xODI4OlxcdFxcdFxcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cXG4xODI5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTozNi4yMzMyNTI4NjFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgyMzEwNjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB2aG9zdF9zY3NpX3NlbmRfZXZ0IENhbGwgU2l0ZXMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgJ3MgYmVoYXZpb3VyIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBjb250ZXh0LiBBIHF1aWNrIHNlYXJjaCBvZiB0aGUgc291cmNlIGlzIGluIG9yZGVyLCBzcGVjaWZpY2FsbHkgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8ga25vdyAqd2hhdCogdHJpZ2dlcnMgdGhlIGV2ZW50IHNpZ25hbGluZyBhbmQgKnVuZGVyIHdoYXQgY29uZGl0aW9ucyogaXQncyBpbml0aWF0ZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3J1Y2lhbCB0byB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyBhbnkgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBmb2N1cyBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBkYXRhIGZsb3dzIGFyb3VuZCB0aGUgY2FsbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBzaG91bGQgcXVpY2tseSBoZWxwIG1lIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBzdWJzeXN0ZW0ncyBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjM4LjA1NjM2MjQzNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNTgwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTozOC4xMDU2MjY5ODRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzg5OTg2MjE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdmhvc3Rfc2NzaV9kb19wbHVnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGlzIHZob3N0IFNDU0kgcGx1Zy1pbiBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgdmhvc3Rfc2NzaV9kb19wbHVnYCBhbmQgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAyNTA0LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4sIGFzIGl0J3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUga2lja3Mgb2ZmLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXRpbGl6ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIG92ZXJhbGwgY29udGV4dCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBVbmRlcnN0YW5kaW5nIGhvdyByZXNvdXJjZXMgYXJlIHByb3RlY3RlZCBhbmQgdGhlIGRhdGEgZmxvdyB3aWxsIHByb3ZpZGUgaW5zaWdodHMuIEkgd2lsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBhcmVhcyBvZiBjb25jZXJuIHJlbGF0aW5nIHRvIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6NDIuMDA1NDk1MTRaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1MDA6XFx0XFx0cmV0dXJuIFxcXCJVbmtub3duXFxcIjtcXG4yNTAxOlxcdH1cXG4yNTAyOlxcdFxcbjI1MDM6XFx0c3RhdGljIHZvaWRcXG4yNTA0OlxcdHZob3N0X3Njc2lfZG9fcGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyxcXG4yNTA1OlxcdFxcdFxcdCAgc3RydWN0IHNlX2x1biAqbHVuLCBib29sIHBsdWcpXFxuMjUwNjpcXHR7XFxuMjUwNzpcXHRcXG4yNTA4OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHRwZy1cXHUwMDNldmhvc3Rfc2NzaTtcXG4yNTA5OlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbjI1MTA6XFx0XFx0dTMyIHJlYXNvbjtcXG4yNTExOlxcdFxcbjI1MTI6XFx0XFx0aWYgKCF2cylcXG4yNTEzOlxcdFxcdFxcdHJldHVybjtcXG4yNTE0OlxcdFxcbjI1MTU6XFx0XFx0aWYgKHBsdWcpXFxuMjUxNjpcXHRcXHRcXHRyZWFzb24gPSBWSVJUSU9fU0NTSV9FVlRfUkVTRVRfUkVTQ0FOO1xcbjI1MTc6XFx0XFx0ZWxzZVxcbjI1MTg6XFx0XFx0XFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFTU9WRUQ7XFxuMjUxOTpcXHRcXG4yNTIwOlxcdFxcdHZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbjI1MjE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4yNTIyOlxcdFxcdC8qXFxuMjUyMzpcXHRcXHQgKiBXZSBjYW4ndCBxdWV1ZSBldmVudHMgaWYgdGhlIGJhY2tlbmQgaGFzIGJlZW4gY2xlYXJlZCwgYmVjYXVzZVxcbjI1MjQ6XFx0XFx0ICogd2UgY291bGQgZW5kIHVwIHF1ZXVlaW5nIGFuIGV2ZW50IGFmdGVyIHRoZSBmbHVzaC5cXG4yNTI1OlxcdFxcdCAqL1xcbjI1MjY6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXFxuMjUyNzpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4yNTI4OlxcdFxcbjI1Mjk6XFx0XFx0aWYgKHZob3N0X2hhc19mZWF0dXJlKHZxLCBWSVJUSU9fU0NTSV9GX0hPVFBMVUcpKVxcbjI1MzA6XFx0XFx0XFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIHRwZywgbHVuLFxcbjI1MzE6XFx0XFx0XFx0XFx0XFx0ICAgVklSVElPX1NDU0lfVF9UUkFOU1BPUlRfUkVTRVQsIHJlYXNvbik7XFxuMjUzMjpcXHR1bmxvY2s6XFxuMjUzMzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMjUzNDpcXHR9XFxuMjUzNTpcXHRcXG4yNTM2OlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90cGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxcbjI1Mzc6XFx0e1xcbjI1Mzg6XFx0XFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCB0cnVlKTtcXG4yNTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6NDIuMDA1Njg3MzYxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNzk5ODA0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVjdXJzaXZlIE11dGV4IERlYWRsb2NrIERpc2NvdmVyZWQgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZob3N0X3Njc2lgIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgZ2xhcmluZyBpc3N1ZS4gSW4gYm90aCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBhbmQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgdGhlcmUncyBhIGxvY2sgYWNxdWlyZWQ6IGBtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KWAuIE5vdywgdGhhdCdzIGZpbmUgb24gaXRzIG93bi4gVGhlIHByb2JsZW0gaXMgd2hhdCAqaGFwcGVucyogaW5zaWRlIHRob3NlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBib3RoIG9mIHRoZW0gY2FsbCBgdmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIC4uLilgLiBBbmQgaW5zaWRlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgd2UgaGF2ZSB0aGlzOlxuXG5gYGBjXG5cdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG5cdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5cdFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xuYGBgXG5cblRoZSBsaWdodGJ1bGIgZ29lcyBvZmYhIFByZXZpb3VzbHksIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXRzZWxmIHdhcyBjYWxsaW5nIGBtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KWAuIFNvLCB3aGVuIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5zIGZhbHNlLCBpdCB0cmlnZ2VycyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpYCwgd2hpY2ggYXR0ZW1wdHMgdG8gcmVhY3F1aXJlIGBtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KWAhIEJ1dCB0aGUgYHZxLVx1MDAzZW11dGV4YCBpcyBhbHJlYWR5IGhlbGQgYnkgdGhlIGNhbGxlcuKAlGVpdGhlciBgdmhvc3Rfc2NzaV9kb19wbHVnYCBvciBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLiBCb29tOiB0aGF0J3MgYSBjbGFzc2ljIHJlY3Vyc2l2ZSBtdXRleCBkZWFkbG9jay5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZSB0aGF0IHRoaXMgaXMgcmVzb2x2ZWQgYnkgdXNpbmcgdGhlIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmdW5jdGlvbiBjYWxsLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgZ29vZCBkZXNpZ24gY2hvaWNlLlxuXG5BbHNvLCBJIHNlZSB0aGF0IHdlJ3JlIHJldmVyc2luZyB0aGUgbGlua2VkIGxpc3QgYGxsaXN0X3JldmVyc2Vfb3JkZXIobGxpc3RfZGVsX2FsbChcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KSlgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGF0IGl0ZW1zIGFyZSBhZGRlZCBpbiBMSUZPIG9yZGVyIHdpdGggYGxsaXN0X2FkZGAsIHNvIGl0J3MgYSBnb29kIHdheSB0byBjb252ZXJ0IHRoZSBldmVudCBxdWV1ZSB0byBGSUZPLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHdoYXQgYHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0YCBkb2VzLi4uIGp1c3QgaW4gY2FzZS4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTo0Ni4yODU2NzA0MjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjA2MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTUzOD1zdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1Mzk6dmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU0MC1cXHRcXHQgICAgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODE5LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MjA6XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MjEtXFx0aWYgKCFldnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjQ2LjMzMDI4NDY3OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTgzNTc2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0YCwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29uc3RydWN0aW5nIGB2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dGAqKlxuXG5SaWdodCwgbGV0J3MgcHVsbCB1cCBgdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnRgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdmhvc3Qtc2NzaSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEga2V5IGVsZW1lbnQgaW4gdGhlIGV2ZW50IGhhbmRsaW5nIHBpcGVsaW5lIGZvciBTQ1NJIGNvbW1hbmQgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHZpcnR1YWwgaG9zdCBmcmFtZXdvcmsuIEl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRlZCB0byBtYW5hZ2UgYSBuZXcgU0NTSSBjb21tYW5kLCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHBvdGVudGlhbGx5IHF1ZXVlaW5nIGl0IGZvciBwcm9jZXNzaW5nLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllciwgdGhlIEkvTyBwYXRoLCBhbmQgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSB2aG9zdC1zY3NpIGRldmljZSBzdHJ1Y3R1cmUgYW5kIGFueSBhc3NvY2lhdGVkIGNvbW1hbmQgc3RydWN0dXJlcy4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBlcnJvciBjb25kaXRpb25zIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byB3aGV0aGVyIHRoZXJlIGlzIGFueSBzcGlubG9jayBwcm90ZWN0aW9uLiBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGF0IGNvbmN1cnJlbmN5IHByb2JsZW1zIGFyZSBwcmV2ZW50ZWQgd2l0aGluIHRoZSBhbGxvY2F0aW9uIHBoYXNlLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBhcmUgaW50cm9kdWNlZC4gQW55IG9wdGltaXphdGlvbnMgb3IgY2xldmVyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgaW4gdGhpcyBhbGxvY2F0aW9uPyBHb29kLCBsZXQncyBzZWUgd2hhdCdzIGluIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MTo1NS45MTM4NjQ1OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTM1OlxcdFxcdGtmcmVlKGV2dCk7XFxuIDUzNjpcXHR9XFxuIDUzNzpcXHRcXG4gNTM4OlxcdHN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKlxcbiA1Mzk6XFx0dmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxcbiA1NDA6XFx0XFx0XFx0ICAgICAgIHUzMiBldmVudCwgdTMyIHJlYXNvbilcXG4gNTQxOlxcdHtcXG4gNTQyOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbiA1NDM6XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XFxuIDU0NDpcXHRcXG4gNTQ1OlxcdFxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX25yIFxcdTAwM2UgVkhPU1RfU0NTSV9NQVhfRVZFTlQpIHtcXG4gNTQ2OlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcXG4gNTQ3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1NDg6XFx0XFx0fVxcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHRldnQgPSBremFsbG9jX29iaigqZXZ0KTtcXG4gNTUxOlxcdFxcdGlmICghZXZ0KSB7XFxuIDU1MjpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgdmhvc3Rfc2NzaV9ldnRcXFxcblxcXCIpO1xcbiA1NTM6XFx0XFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbiA1NTQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDU1NTpcXHRcXHR9XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGV2dC1cXHUwMDNlZXZlbnQuZXZlbnQgPSBjcHVfdG9fdmhvc3QzMih2cSwgZXZlbnQpO1xcbiA1NTg6XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5yZWFzb24gPSBjcHVfdG9fdmhvc3QzMih2cSwgcmVhc29uKTtcXG4gNTU5OlxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbnIrKztcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0dXJuIGV2dDtcXG4gNTYyOlxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RhdGljIGludCB2aG9zdF9zY3NpX2NoZWNrX3N0b3BfZnJlZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXFxuIDU2NTpcXHR7XFxuIDU2NjpcXHRcXHRyZXR1cm4gdGFyZ2V0X3B1dF9zZXNzX2NtZChzZV9jbWQpO1xcbiA1Njc6XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRzdGF0aWMgdm9pZFxcbiA1NzA6XFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxcbiA1NzE6XFx0e1xcbiA1NzI6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuIDU3MzpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQgKmV2ZW50ID0gXFx1MDAyNmV2dC1cXHUwMDNlZXZlbnQ7XFxuIDU3NDpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQgX191c2VyICpldmVudHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjU1LjkxNDc2MzkxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2MzM2NzI4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBgdmhvc3Rfc2NzaV9kb19ldnRfd29ya2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBldnRgIGlzIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigqZXZ0KWAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0IOKAkyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBwcmFjdGljZSwgcHJldmVudGluZyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha2FnZSBvciB1bmludGVuZGVkIGJlaGF2aW9yIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIHZhbHVlcy4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgZXZ0YCBpcyBiZWluZyB1c2VkIGFuZCBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYHZob3N0X3Njc2lfZG9fZXZ0X3dvcmtgIHNwZWNpZmljYWxseSwgbGluZXMgNTcwIHRvIDYzMC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gdGhpcyBldmVudCBoYW5kbGluZyBzaG91bGQgcmVzaWRlLiBJIGV4cGVjdCB0byBmaW5kIGRldGFpbHMgdGhlcmUgcmVnYXJkaW5nIGhvdyBgZXZ0YCBpcyBwcm9jZXNzZWQsIHdoYXQgc3RhdGUgdHJhbnNpdGlvbnMgaXQgdHJpZ2dlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgdmhvc3Qtc2NzaSBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbidzIGNvbnRyb2wgZmxvdyBpcyBnb2luZyB0byBiZSBrZXkgdG8gc2VlaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MjowNS41NDg0NDAxNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG4gNTcxOlxcdHtcXG4gNTcyOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbiA1NzM6XFx0XFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50ICpldmVudCA9IFxcdTAwMjZldnQtXFx1MDAzZWV2ZW50O1xcbiA1NzQ6XFx0XFx0c3RydWN0IHZpcnRpb19zY3NpX2V2ZW50IF9fdXNlciAqZXZlbnRwO1xcbiA1NzU6XFx0XFx0c3RydWN0IHZob3N0X2xvZyAqdnFfbG9nO1xcbiA1NzY6XFx0XFx0dW5zaWduZWQgaW50IGxvZ19udW07XFxuIDU3NzpcXHRcXHR1bnNpZ25lZCBvdXQsIGluO1xcbiA1Nzg6XFx0XFx0aW50IGhlYWQsIHJldDtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpIHtcXG4gNTgxOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcXG4gNTgyOlxcdFxcdFxcdHJldHVybjtcXG4gNTgzOlxcdFxcdH1cXG4gNTg0OlxcdFxcbiA1ODU6XFx0YWdhaW46XFxuIDU4NjpcXHRcXHR2aG9zdF9kaXNhYmxlX25vdGlmeShcXHUwMDI2dnMtXFx1MDAzZWRldiwgdnEpO1xcbiA1ODc6XFx0XFxuIDU4ODpcXHRcXHR2cV9sb2cgPSB1bmxpa2VseSh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVkhPU1RfRl9MT0dfQUxMKSkgP1xcbiA1ODk6XFx0XFx0XFx0dnEtXFx1MDAzZWxvZyA6IE5VTEw7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdC8qXFxuIDU5MjpcXHRcXHQgKiBSZXNldCAnbG9nX251bScgc2luY2Ugdmhvc3RfZ2V0X3ZxX2Rlc2MoKSBtYXkgcmVzZXQgaXQgb25seVxcbiA1OTM6XFx0XFx0ICogYWZ0ZXIgY2VydGFpbiBjb25kaXRpb24gY2hlY2tzLlxcbiA1OTQ6XFx0XFx0ICovXFxuIDU5NTpcXHRcXHRsb2dfbnVtID0gMDtcXG4gNTk2OlxcdFxcbiA1OTc6XFx0XFx0aGVhZCA9IHZob3N0X2dldF92cV9kZXNjKHZxLCB2cS1cXHUwMDNlaW92LFxcbiA1OTg6XFx0XFx0XFx0XFx0QVJSQVlfU0laRSh2cS1cXHUwMDNlaW92KSwgXFx1MDAyNm91dCwgXFx1MDAyNmluLFxcbiA1OTk6XFx0XFx0XFx0XFx0dnFfbG9nLCBcXHUwMDI2bG9nX251bSk7XFxuIDYwMDpcXHRcXHRpZiAoaGVhZCBcXHUwMDNjIDApIHtcXG4gNjAxOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcXG4gNjAyOlxcdFxcdFxcdHJldHVybjtcXG4gNjAzOlxcdFxcdH1cXG4gNjA0OlxcdFxcdGlmIChoZWFkID09IHZxLVxcdTAwM2VudW0pIHtcXG4gNjA1OlxcdFxcdFxcdGlmICh2aG9zdF9lbmFibGVfbm90aWZ5KFxcdTAwMjZ2cy1cXHUwMDNlZGV2LCB2cSkpXFxuIDYwNjpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbiA2MDc6XFx0XFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbiA2MDg6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MDk6XFx0XFx0fVxcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRpZiAoKHZxLVxcdTAwM2Vpb3Zbb3V0XS5pb3ZfbGVuICE9IHNpemVvZihzdHJ1Y3QgdmlydGlvX3Njc2lfZXZlbnQpKSkge1xcbiA2MTI6XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRXhwZWN0aW5nIHZpcnRpb19zY3NpX2V2ZW50LCBnb3QgJXp1IGJ5dGVzXFxcXG5cXFwiLFxcbiA2MTM6XFx0XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWlvdltvdXRdLmlvdl9sZW4pO1xcbiA2MTQ6XFx0XFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbiA2MTU6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MTY6XFx0XFx0fVxcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHRpZiAodnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQpIHtcXG4gNjE5OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2VldmVudCB8PSBjcHVfdG9fdmhvc3QzMih2cSwgVklSVElPX1NDU0lfVF9FVkVOVFNfTUlTU0VEKTtcXG4gNjIwOlxcdFxcdFxcdHZzLVxcdTAwM2V2c19ldmVudHNfbWlzc2VkID0gZmFsc2U7XFxuIDYyMTpcXHRcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGV2ZW50cCA9IHZxLVxcdTAwM2Vpb3Zbb3V0XS5pb3ZfYmFzZTtcXG4gNjI0OlxcdFxcdHJldCA9IF9fY29weV90b191c2VyKGV2ZW50cCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTtcXG4gNjI1OlxcdFxcdGlmICghcmV0KVxcbiA2MjY6XFx0XFx0XFx0dmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChcXHUwMDI2dnMtXFx1MDAzZWRldiwgdnEsIGhlYWQsIDApO1xcbiA2Mjc6XFx0XFx0ZWxzZVxcbiA2Mjg6XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXFxcblxcXCIpO1xcbiA2Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUyOjA1LjU0ODU5MzYyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxODcxNDMyNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIEl0IEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIGEgS01TQU4gc2Vzc2lvbi4gRmlyc3QsIHRoZSBjb3JlIGNoYW5nZTogd2UncmUgcmUtYXJyYW5naW5nIGhvdyBTQ1NJIGV2ZW50cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFdlJ3ZlIGdvdCBhIHdyYXBwZXIgZm9yIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gbWFuYWdlIHRoZSBgdnEtXHUwMDNlbXV0ZXhgIGFuZCBhIHN3aXRjaCB0byBGSUZPIHByb2Nlc3Npbmcgb2YgZXZlbnRzIGluc3RlYWQgb2YgTElGTy4gVGhlIGNyaXRpY2FsIGNoYW5nZSBmb3IgdXMgaXMgaW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdoZXJlIHRoZSBmYWlsdXJlIHBhdGggb2YgYHZob3N0X3ZxX3dvcmtfcXVldWVgIG5vdyBhdm9pZHMgcmUtYWNxdWlyaW5nIGB2cS1cdTAwM2VtdXRleGAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjb2RlIHdvcmtzLiBJIHNlZSBhIGBsbGlzdF9yZXZlcnNlX29yZGVyYCwgd2hpY2ggaXMgY2hhbmdpbmcgdGhlIG9yZGVyIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIHNlZSBubyBjaGFuZ2Ugb3IgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgaG93IHRoZSBrZXJuZWwgY29tbXVuaWNhdGVzIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGV2ZW50cyBhcmUgYGt6YWxsb2NgJ2QsIGFuZCB0aGlzIHBhdGNoIGRvZXNuJ3QgdG91Y2ggaW5pdGlhbGl6YXRpb24gb3Igc3RydWN0IGxheW91dC4gSXQgZG9lc24ndCBsb29rIGxpa2Ugd2UgYXJlIGludHJvZHVjaW5nIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgY291bGQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGV4aXN0aW5nIG9uZXMgYXJlIGJlaW5nIGludHJvZHVjZWQuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgb3BlbiB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy5cblxuVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBtdXRleCBkZWFkbG9jayBmaXguIFByZXZpb3VzbHksIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWUoKWAgZmFpbGVkLCBpdCB3b3VsZCBjYWxsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpYCB3aGljaCB0cmllZCB0byByZWFjcXVpcmUgYSBsb2NrLiBBIHJlY3Vyc2l2ZSBkZWFkbG9jay4gVGhpcyB0eXBlIG9mIGxvY2tpbmcgYnVnIGlzIHByZWNpc2VseSB3aGF0IExPQ0tERVAgaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFuZCBpdCdzIGFscmVhZHkgYnVpbHQgaW50byBzdGFuZGFyZCBLQVNBTiBjb25maWd1cmF0aW9ucy4gVGhlcmUncyBhbHNvIGEgRklGTyBvcmRlcmluZyBidWcgZml4LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBpdCdzIHNxdWFyZWx5IGluIHRoZSBkb21haW4gb2YgYnVncyB0aGF0IEtBU0FOIGFuZCBMT0NLREVQIGFyZSBkZXNpZ25lZCB0byBkZXRlY3QuIEtNU0FOJ3Mgc3RyZW5ndGggbGllcyBpbiBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBub3QgdGhlIHByaW1hcnkgcmlzayBoZXJlLlxuXG5HaXZlbiB0aGUgZ3VpZGFuY2UsIGFuZCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRlYWRsb2NrIGFuZCBvcmRlcmluZyBpc3N1ZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgd2UgYWxyZWFkeSBoYXZlIHRvb2xzIHRvIGRldGVjdCB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTQsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTI6MzcuNDIwMDI5NTM1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2sgYW5kIGFuIGV2ZW50IG9yZGVyaW5nIGlzc3VlIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jOlxcbjEuIERlYWRsb2NrIGZpeDogdmhvc3Rfc2NzaV9zZW5kX2V2dCgpIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHZxLVxcdTAwM2VtdXRleCAoZS5nLiwgZnJvbSB2aG9zdF9zY3NpX2RvX3BsdWcoKSBvciB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaygpKS4gSWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgaXQgY2FsbGVkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCksIHdoaWNoIGF0dGVtcHRlZCB0byBhY3F1aXJlIHZxLVxcdTAwM2VtdXRleCBhZ2FpbiwgcmVzdWx0aW5nIGluIGEgcmVjdXJzaXZlIGRlYWRsb2NrLiBUaGUgcGF0Y2ggc3BsaXRzIG91dCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgKHdoaWNoIGFzc3VtZXMgdnEtXFx1MDAzZW11dGV4IGlzIGFscmVhZHkgaGVsZCkgYW5kIGNhbGxzIGl0IGRpcmVjdGx5IGZyb20gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLlxcbjIuIEV2ZW50IG9yZGVyaW5nOiBJdCBhZGRzIGxsaXN0X3JldmVyc2Vfb3JkZXIoKSB0byBwcm9jZXNzIGV2ZW50cyBpbiBGSUZPIG9yZGVyIHJhdGhlciB0aGFuIExJRk8gb3JkZXIuXFxuXFxuTmVpdGhlciBjaGFuZ2UgYWxsb2NhdGVzIG5ldyBtZW1vcnksIGFsdGVycyBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gVGhlIGV2ZW50IHN0cnVjdHVyZXMgcHJvY2Vzc2VkIGhlcmUgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqIGluIHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KCkuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgcHVyZWx5IGxvY2tpbmcgYW5kIG9yZGVyaW5nOyBkZWFkbG9ja3MgYW5kIGxvY2tpbmcgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow28k7r[1] Phase: Succeeded StartedAt: 2026-09-15 11:52:48 +0000 UTC FinishedAt: 2026-09-15 11:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 11:52:48 +0000 UTC FinishedAt: 2026-09-15 11:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2] Phase: Succeeded StartedAt: 2026-09-15 11:52:48 +0000 UTC FinishedAt: 2026-09-15 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 11:52:48 +0000 UTC FinishedAt: 2026-09-15 13:29:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 11:52:48 +0000 UTC FinishedAt: 2026-09-15 11:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 11:52:48 +0000 UTC FinishedAt: 2026-09-15 11:53:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow28k7r/series-workflow28k7r-convert-artifact-242595199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 11:53:09 +0000 UTC FinishedAt: 2026-09-15 12:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 11:53:09 +0000 UTC FinishedAt: 2026-09-15 12:09:56 +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:*97cf3989-2505-4f5a-b2bb-e1e9cb985b59,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-workflow28k7r/series-workflow28k7r-convert-artifact-242595199/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": "d85519d8-65e5-4e22-a665-dde37236f948", "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-workflow28k7r/series-workflow28k7r-build-action-2213318661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 11:53:09 +0000 UTC FinishedAt: 2026-09-15 12:09:48 +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:*97cf3989-2505-4f5a-b2bb-e1e9cb985b59,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-workflow28k7r/series-workflow28k7r-convert-artifact-242595199/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": "d85519d8-65e5-4e22-a665-dde37236f948", "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-workflow28k7r/series-workflow28k7r-build-action-2213318661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 12:09:56 +0000 UTC FinishedAt: 2026-09-15 12:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 12:09:56 +0000 UTC FinishedAt: 2026-09-15 12:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 12:09:56 +0000 UTC FinishedAt: 2026-09-15 12:10:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 12:09:56 +0000 UTC FinishedAt: 2026-09-15 12:10:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow28k7r/series-workflow28k7r-convert-artifact-144666254/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 12:10:06 +0000 UTC FinishedAt: 2026-09-15 12:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 12:10:06 +0000 UTC FinishedAt: 2026-09-15 12:11:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d85519d8-65e5-4e22-a665-dde37236f948,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-workflow28k7r/series-workflow28k7r-build-action-2213318661/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-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 12:12:03 +0000 UTC FinishedAt: 2026-09-15 12:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 12:12:03 +0000 UTC FinishedAt: 2026-09-15 12:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 12:12:03 +0000 UTC FinishedAt: 2026-09-15 12:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 12:12:03 +0000 UTC FinishedAt: 2026-09-15 12:28:15 +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:*97cf3989-2505-4f5a-b2bb-e1e9cb985b59,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-workflow28k7r/series-workflow28k7r-convert-artifact-144666254/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": "20eaa8a1-6a06-44d6-83c1-69c428e2eeac", "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-workflow28k7r/series-workflow28k7r-build-action-2943009826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 12:12:03 +0000 UTC FinishedAt: 2026-09-15 12:28:05 +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:*97cf3989-2505-4f5a-b2bb-e1e9cb985b59,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-workflow28k7r/series-workflow28k7r-convert-artifact-144666254/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": "20eaa8a1-6a06-44d6-83c1-69c428e2eeac", "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-workflow28k7r/series-workflow28k7r-build-action-2943009826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 12:28:15 +0000 UTC FinishedAt: 2026-09-15 12:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 12:28:15 +0000 UTC FinishedAt: 2026-09-15 12:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 12:28:15 +0000 UTC FinishedAt: 2026-09-15 12:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 12:28:15 +0000 UTC FinishedAt: 2026-09-15 12:30:24 +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:*20eaa8a1-6a06-44d6-83c1-69c428e2eeac,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-workflow28k7r/series-workflow28k7r-build-action-2943009826/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-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 13:29:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"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:*d85519d8-65e5-4e22-a665-dde37236f948,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20eaa8a1-6a06-44d6-83c1-69c428e2eeac,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-workflow28k7r/series-workflow28k7r-build-action-2213318661/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-workflow28k7r/series-workflow28k7r-build-action-2943009826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 12:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 12:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"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-workflow28k7r/series-workflow28k7r-convert-artifact-2287633843/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 12:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 12:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 12:30:34 +0000 UTC FinishedAt: 2026-09-15 12:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 12:30:54 +0000 UTC FinishedAt: 2026-09-15 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28k7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_scsi_send_evt","vhost_scsi_complete_events","__vhost_scsi_complete_events","vhost_scsi_evt_work","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug","vhost_scsi_do_evt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE","EVENTFD"],"series_id":"189afd96-17fb-4251-b89e-b185cda5460a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 12:30:54 +0000 UTC FinishedAt: 2026-09-15 13:29:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d85519d8-65e5-4e22-a665-dde37236f948,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20eaa8a1-6a06-44d6-83c1-69c428e2eeac,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-workflow28k7r/series-workflow28k7r-build-action-2213318661/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-workflow28k7r/series-workflow28k7r-build-action-2943009826/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-workflow28k7r/series-workflow28k7r-convert-artifact-2287633843/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,}