Name: series-workflown4fj5 Phase: Succeeded StartedAt: 2026-09-06 06:41:42 +0000 UTC FinishedAt: 2026-09-06 11:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[0] Phase: Succeeded StartedAt: 2026-09-06 06:41:42 +0000 UTC FinishedAt: 2026-09-06 07:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 06:41:42 +0000 UTC FinishedAt: 2026-09-06 07:44:58 +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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_HANDSHAKE", "SUNRPC" ], "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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_HANDSHAKE", "SUNRPC" ], "series_id": "c9ea20b4-6de3-4419-a2e8-11035c3fdd83" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "handshake_req_alloc", "handshake_nl_accept_doit", "handshake_nl_done_doit", "tls_handshake_remote_peerids" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAgICYjMzQ7U1VOUlBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7LAogICAgJiMzNDtoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2RvbmVfZG9pdCYjMzQ7LAogICAgJiMzNDt0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IG5ldGxpbmsgcG9saWN5IHZhbGlkYXRpb24gYW5kIGludGVnZXIgYm91bmRzIGNoZWNraW5nLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIHN0cnVjdCBwYWRkaW5nIG1vZGlmaWNhdGlvbnMsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbnkgZ2VuZXJhbCBib3VuZHMgb3IgbG9naWMgaXNzdWVzIGFyZSBzdWZmaWNpZW50bHkgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRqdXN0cyBOZXRsaW5rIGF0dHJpYnV0ZSB0eXBlcyBhbmQgdmFsaWRhdGlvbiBwb2xpY2llcyBmb3IgdGhlIGdlbmVyaWMgbmV0bGluayBoYW5kc2hha2Ugc2VydmljZSAoYWNjZXB0IGhhbmRsZXIgY2xhc3MgYW5kIHJlbW90ZSBhdXRoIGtleSBJRHMpIGFuZCBmaXhlcyB0aGUgYm91bmRhcnkgY2hlY2sgaW4gaGFuZHNoYWtlX3JlcV9hbGxvYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBwYXJzaW5nIGFuZCBoYW5kc2hha2UgcmVxdWVzdCBhbGxvY2F0aW9uIGxvZ2ljIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgc29ja2V0cyBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjQzOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxuaW5kZXggZmZlYzEyYjQ2NzU5Ny4uMDQ5OGFkYTJkZDk3YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG5AQCAtMjIsNyAmIzQzOzIyLDggQEAgZGVmaW5pdGlvbnM6XG4gICAgIHR5cGU6IGVudW1cbiAgICAgbmFtZTogaGFuZGxlci1jbGFzc1xuICAgICB2YWx1ZS1zdGFydDogMFxuLSAgICBlbnRyaWVzOiBbbm9uZSwgdGxzaGQsIG1heF1cbiYjNDM7ICAgIGVudHJpZXM6IFtub25lLCB0bHNoZF1cbiYjNDM7ICAgIHJlbmRlci1tYXg6IHRydWVcbiAgIC1cbiAgICAgdHlwZTogZW51bVxuICAgICBuYW1lOiBtc2ctdHlwZVxuQEAgLTY3LDcgJiM0Mzs2OCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgZW51bTogYXV0aFxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHBlZXItaWRlbnRpdHlcbi0gICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXG5AQCAtNzksNyAmIzQzOzgwLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiBzdHJpbmdcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBrZXlyaW5nXG4tICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICB0eXBlOiBzMzJcbiAgIC1cbiAgICAgbmFtZTogZG9uZVxuICAgICBhdHRyaWJ1dGVzOlxuQEAgLTkzLDcgJiM0Mzs5NCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcmVtb3RlLWF1dGhcbi0gICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuIFxuIG9wZXJhdGlvbnM6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oXG5pbmRleCBkN2U0MGY1OTQ4ODg2Li5mOTA3YWEwODI1MjA4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbkBAIC0xMyw3ICYjNDM7MTMsMTAgQEBcbiBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzIHtcbiBcdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXG4gXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi1cdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCxcbiYjNDM7XG4mIzQzO1x0LyogcHJpdmF0ZTogKi9cbiYjNDM7XHRfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCxcbiYjNDM7XHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggPSAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKVxuIH07XG4gXG4gZW51bSBoYW5kc2hha2VfbXNnX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvZ2VubC5jIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2dlbmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbkBAIC0xNCwxNCAmIzQzOzE0LDE0IEBAXG4gXG4gLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHtcbi1cdFtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAyKSxcbiYjNDM7XHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG4gfTtcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCAmIzQzOyAxXSA9IHtcbiBcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxuIFx0W0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuLVx0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4mIzQzO1x0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4gfTtcbiBcbiAvKiBPcHMgdGFibGUgZm9yIGhhbmRzaGFrZSAqL1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuaW5kZXggM2RkNTA3NDcwZDVmZS4uNGI5OWFjZDlmOWM3ZSAxMDA2NDRcbi0tLSBhL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jXG5AQCAtNDIsNyAmIzQzOzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xuLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuJiM0MztcdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180ID0ge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jIGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcbmluZGV4IGNkMzBkNTRkMDUwMWQuLmZmNzM5ZWU4MWNiODIgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcbkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmIChwcm90by1cdTAwM2VocF9oYW5kbGVyX2NsYXNzIFx1MDAzYz0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTk9ORSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2U9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWClcbiYjNDM7XHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2UgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICghcHJvdG8tXHUwMDNlaHBfYWNjZXB0IHx8ICFwcm90by1cdTAwM2VocF9kb25lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSEFORFNIQUtFJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRzaGFrZV9yZXFfYWxsb2MmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0JiMzNDssCiAgICAmIzM0O2hhbmRzaGFrZV9ubF9kb25lX2RvaXQmIzM0OywKICAgICYjMzQ7dGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIE5ldGxpbmsgYXR0cmlidXRlIHR5cGVzIGFuZCB2YWxpZGF0aW9uIHBvbGljaWVzIGZvciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBzZXJ2aWNlIChhY2NlcHQgaGFuZGxlciBjbGFzcyBhbmQgcmVtb3RlIGF1dGgga2V5IElEcykgYW5kIGZpeGVzIHRoZSBib3VuZGFyeSBjaGVjayBpbiBoYW5kc2hha2VfcmVxX2FsbG9jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcgYW5kIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJkZDI4ZTg3Y2ZkZjg5OTg2ODJlODU4NGUzNWViMDliYjFjZDFmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDc6NDM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwKaW5kZXggZmZlYzEyYjQ2NzU5Ny4uMDQ5OGFkYTJkZDk3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbApAQCAtMjIsNyAmIzQzOzIyLDggQEAgZGVmaW5pdGlvbnM6CiAgICAgdHlwZTogZW51bQogICAgIG5hbWU6IGhhbmRsZXItY2xhc3MKICAgICB2YWx1ZS1zdGFydDogMAotICAgIGVudHJpZXM6IFtub25lLCB0bHNoZCwgbWF4XQomIzQzOyAgICBlbnRyaWVzOiBbbm9uZSwgdGxzaGRdCiYjNDM7ICAgIHJlbmRlci1tYXg6IHRydWUKICAgLQogICAgIHR5cGU6IGVudW0KICAgICBuYW1lOiBtc2ctdHlwZQpAQCAtNjcsNyAmIzQzOzY4LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIGVudW06IGF1dGgKICAgICAgIC0KICAgICAgICAgbmFtZTogcGVlci1pZGVudGl0eQotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlCkBAIC03OSw3ICYjNDM7ODAsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGtleXJpbmcKLSAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICB0eXBlOiBzMzIKICAgLQogICAgIG5hbWU6IGRvbmUKICAgICBhdHRyaWJ1dGVzOgpAQCAtOTMsNyAmIzQzOzk0LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHMzMgogICAgICAgLQogICAgICAgICBuYW1lOiByZW1vdGUtYXV0aAotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAKIG9wZXJhdGlvbnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmgKaW5kZXggZDdlNDBmNTk0ODg4Ni4uZjkwN2FhMDgyNTIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaApAQCAtMTMsNyAmIzQzOzEzLDEwIEBACiBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzIHsKIAlIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLAogCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELAotCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCwKJiM0MzsKJiM0MzsJLyogcHJpdmF0ZTogKi8KJiM0MzsJX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsCiYjNDM7CUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCA9IChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAtIDEpCiB9OwogCiBlbnVtIGhhbmRzaGFrZV9tc2dfdHlwZSB7CmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2dlbmwuYyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0Ci0tLSBhL25ldC9oYW5kc2hha2UvZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCkBAIC0xNCwxNCAmIzQzOzE0LDE0IEBACiAKIC8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHsKLQlbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksCiYjNDM7CVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKSwKIH07CiAKIC8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7CiAJW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksCiAJW0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LAotCVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzOwlbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSwKIH07CiAKIC8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovCmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMKaW5kZXggM2RkNTA3NDcwZDVmZS4uNGI5OWFjZDlmOWM3ZSAxMDA2NDQKLS0tIGEvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYwpAQCAtNDIsNyAmIzQzOzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0gewogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0gewotCS5ocF9oYW5kbGVyX2NsYXNzCT0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAomIzQzOwkuaHBfaGFuZGxlcl9jbGFzcwk9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwppbmRleCBjZDMwZDU0ZDA1MDFkLi5mZjczOWVlODFjYjgyIDEwMDY0NAotLS0gYS9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90bywKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHByb3RvLSZndDtocF9oYW5kbGVyX2NsYXNzICZsdDs9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpCiAJCXJldHVybiBOVUxMOwotCWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpCiYjNDM7CWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKCFwcm90by0mZ3Q7aHBfYWNjZXB0IHx8ICFwcm90by0mZ3Q7aHBfZG9uZSkKIAkJcmV0dXJuIE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyBUaGlzIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMgYW5kIHRoZSBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBhdCBzeXprYWxsZXI/JiMzNDsgUmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGRvIGEgcXVpY2sgcmlzayBhc3Nlc3NtZW50LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGtlcm5lbCBRQSB0YXNrLCBub3RoaW5nIHRvbyBleG90aWMgaGVyZS4gSSYjMzk7bSBjYWxsaW5nIGl0ICYjMzQ7YmVuaWduIGZ1bGZpbGxtZW50LCYjMzQ7IG1lYW5pbmcgdGhlcmUmIzM5O3Mgbm90aGluZyBpbmhlcmVudGx5IGRhbmdlcm91cyBhYm91dCAqZXZhbHVhdGluZyogaXQuIEl0JiMzOTtzIHNhZmUgZ3JvdW5kLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTt2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0IGNvZGUgaXQgdG91Y2hlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGtleSBmaWxlczogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLCBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCBgbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jYCwgYW5kIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIEludGVyZXN0aW5nLiBUaGUgYGhhbmRzaGFrZWAgc3ViZGlyZWN0b3J5IGlzIHRoZSBrZXkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHJlcG9zaXRvcnkgbm93IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGBuZXQvaGFuZHNoYWtlL2Agc3Vic3lzdGVtLCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZC4gVGhhdCYjMzk7bGwgYmUgbXkgbmV4dCBzdGVwOiBmaWd1cmluZyBvdXQgdGhlIHNjb3BlIG9mIHRoaXMgd29yayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByaWdodCBGb2N1c1N5bWJvbHMsIEVuYWJsZUNvbmZpZ3MsIGFuZCB0byBkZXRlcm1pbmUgdGhlIFJlYXNvbmluZyBmb3IgaWYgdGhpcyB3b3VsZCBiZSBhIGZydWl0ZnVsIGVuZGVhdm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnPTk9Q09ORklHX1NVTlJQQz15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMDpDT05GSUdfTkVUX0hBTkRTSEFLRT15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcbi0tXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlPTExPWhhbmRzaGFrZS15IDo9IGFsZXJ0Lm8gZ2VubC5vIG5ldGxpbmsubyByZXF1ZXN0Lm8gdGxzaGQubyB0cmFjZS5vXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUKSAmIzQzOz0gaGFuZHNoYWtlLXRlc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfSEFORFNIQUtFIERlZmluaXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYE5FVF9IQU5EU0hBS0VgIGlzIGRlZmluZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlnZ2luZyBpbiB0aGUgYG5ldC9oYW5kc2hha2UvYCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hbWUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgY2hlY2sgYEtjb25maWdgIGluIHRoYXQgZGlyZWN0b3J5IGZpcnN0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gT2YgY291cnNlLCBpdCYjMzk7cyBhbHNvIHBvc3NpYmxlIGl0IGlzIGRlZmluZWQgZWxzZXdoZXJlLCBidXQgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBmaXJzdCB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgZXhhY3QgbG9jYXRpb24gYmVmb3JlIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9IQU5EU0hBS0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTI9c291cmNlIFwmIzM0O25ldC94ZHAvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctOTMtXG5uZXQvS2NvbmZpZzo5NDpjb25maWcgTkVUX0hBTkRTSEFLRVxubmV0L0tjb25maWctOTUtXHRib29sXG4tLVxubmV0L0tjb25maWctOTgtXG5uZXQvS2NvbmZpZzo5OTpjb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG5uZXQvS2NvbmZpZy0xMDAtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIFNwYWNlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiB0aGUgc3lzdGVtLCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBsaW5lcyA5MCB0aHJvdWdoIDExMCBvciBzbywgYXMgYSBzdGFydGluZyBwb2ludC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBhcmVhIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBtYWpvciBvcHRpb25zIGJlaW5nIGRlZmluZWQgaW4gdGhpcyBzZWN0aW9uLiBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEtjb25maWcgc3lzdGVtLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIGZlYXR1cmUgc3dpdGNoZXMsIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLi4udGhlIHVzdWFsIEtjb25maWcgY29uc3RydWN0cy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBlbGVtZW50cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGZpbGUuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3MgYXJlIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0c291cmNlIFwmIzM0O25ldC9wc3AvS2NvbmZpZ1wmIzM0O1xuICA4NjpcdHNvdXJjZSBcJiMzNDtuZXQvdW5peC9LY29uZmlnXCYjMzQ7XG4gIDg3Olx0c291cmNlIFwmIzM0O25ldC90bHMvS2NvbmZpZ1wmIzM0O1xuICA4ODpcdHNvdXJjZSBcJiMzNDtuZXQveGZybS9LY29uZmlnXCYjMzQ7XG4gIDg5Olx0c291cmNlIFwmIzM0O25ldC9pdWN2L0tjb25maWdcJiMzNDtcbiAgOTA6XHRzb3VyY2UgXCYjMzQ7bmV0L3NtYy9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnXCYjMzQ7XG4gIDkyOlx0c291cmNlIFwmIzM0O25ldC94ZHAvS2NvbmZpZ1wmIzM0O1xuICA5MzpcdFxuICA5NDpcdGNvbmZpZyBORVRfSEFORFNIQUtFXG4gIDk1Olx0XHRib29sXG4gIDk2Olx0XHRkZXBlbmRzIG9uIFNVTlJQQyB8fCBOVk1FX1RBUkdFVF9UQ1AgfHwgTlZNRV9UQ1BcbiAgOTc6XHRcdGRlZmF1bHQgeVxuICA5ODpcdFxuICA5OTpcdGNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcbiAxMDA6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc21cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuIDEwMTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAxMDI6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIEtVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc20uXG4gMTA1Olx0XG4gMTA2Olx0XHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1Z1xuIDEwNzpcdFx0ICBsb2cgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvclxuIDEwODpcdFx0ICBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uXG4gMTA5Olx0XHQgIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxuIDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzc1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfSEFORFNIQUtFYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYE5FVF9IQU5EU0hBS0VgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IG1pZ2h0IGJlICpzZWxlY3RpbmcqIGl0LiBUaGUgaW5pdGlhbCBjbHVlcyBpbmRpY2F0ZSB0aGF0IGl0JiMzOTtzICpgZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQYCogYW5kIHRoZSBkZWZhdWx0IGlzIHNldCB0byAmIzM5O3kmIzM5Oy4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBlaXRoZXIgU3VuIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCwgTlZNZSBvdmVyIFRDUCBUYXJnZXQsIG9yIGp1c3QgTlZNZSBvdmVyIFRDUCBpbiBnZW5lcmFsLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBwcm90b2NvbHMgd291bGQgYmVuZWZpdCBmcm9tIGEgaGFuZHNoYWtlLgoKTm93LCBJIHdhbnQgdG8gYnJvYWRlbiB0aGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGtub3cgKndoYXQgZWxzZSogbWlnaHQgYmUgc2VsZWN0aW5nIGBORVRfSEFORFNIQUtFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyB1c2FnZSBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBpdHMgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIG90aGVyIGZlYXR1cmVzLCBkcml2ZXJzLCBvciBtb2R1bGVzIHRoYXQgaW1wbGljaXRseSByZWx5IG9uIGl0LCBldmVuIGlmIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGluIHRoZWlyIGRlcGVuZGVuY2llcz8gVGhpcyBpcyB3aGVyZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZWFyY2ggaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgcGljdHVyZSBvZiB0aGUgd2hvbGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfSEFORFNIQUtFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05Mj1zb3VyY2UgXCYjMzQ7bmV0L3hkcC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy05My1cbm5ldC9LY29uZmlnOjk0OmNvbmZpZyBORVRfSEFORFNIQUtFXG5uZXQvS2NvbmZpZy05NS1cdGJvb2xcbi0tXG5uZXQvS2NvbmZpZy05OC1cbm5ldC9LY29uZmlnOjk5OmNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbm5ldC9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc21cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9NYWtlZmlsZT03NT1vYmotJChDT05GSUdfTUNUUClcdFx0JiM0Mzs9IG1jdHAvXG5uZXQvTWFrZWZpbGU6NzY6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0UpXHQmIzQzOz0gaGFuZHNoYWtlL1xubmV0L01ha2VmaWxlLTc3LW9iai0kKENPTkZJR19ORVRfU0hBUEVSKVx0JiM0Mzs9IHNoYXBlci9cbi0tXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZz05PUNPTkZJR19TVU5SUEM9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MTA6Q09ORklHX05FVF9IQU5EU0hBS0U9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MTE6Q09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVD15XG4tLVxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZT0xMT1oYW5kc2hha2UteSA6PSBhbGVydC5vIGdlbmwubyBuZXRsaW5rLm8gcmVxdWVzdC5vIHRsc2hkLm8gdHJhY2Uub1xubmV0L2hhbmRzaGFrZS9NYWtlZmlsZS0xMi1cbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVCkgJiM0Mzs9IGhhbmRzaGFrZS10ZXN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIEhhbmRzaGFrZSBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgaGFuZHNoYWtlIHByb2Nlc3Mgd29ya3MuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBnZW5sLmNgLCBgcmVxdWVzdC5jYCwgYW5kIGBuZXRsaW5rLmNgLCBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L2hhbmRzaGFrZS9gIGRpcmVjdG9yeS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHNwb3QuIEZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGdlbmwuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IuIEkmIzM5O20gc3VyZSBJJiMzOTtsbCBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZSBvbmNlIEkgZGlzc2VjdCB0aGF0IHNwZWNpZmljIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9nZW5sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKChHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBCU0QtMy1DbGF1c2UpXG4gICAyOlx0LyogRG8gbm90IGVkaXQgZGlyZWN0bHksIGF1dG8tZ2VuZXJhdGVkIGZyb206ICovXG4gICAzOlx0LypcdERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbCAqL1xuICAgNDpcdC8qIFlOTC1HRU4ga2VybmVsIHNvdXJjZSAqL1xuICAgNTpcdC8qIFRvIHJlZ2VuZXJhdGUgcnVuOiB0b29scy9uZXQveW5sL3lubC1yZWdlbi5zaCAqL1xuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiAgIDk6XHRcbiAgMTA6XHQjaW5jbHVkZSBcJiMzNDtnZW5sLmhcJiMzNDtcbiAgMTE6XHRcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2hhbmRzaGFrZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHQvKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXG4gIDE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICYjNDM7IDFdID0ge1xuICAxNzpcdFx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxuICAxODpcdH07XG4gIDE5Olx0XG4gIDIwOlx0LyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cbiAgMjE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG4gIDIyOlx0XHRbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTUFYX0VSUk5PKSxcbiAgMjM6XHRcdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcbiAgMjQ6XHRcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuICAyNTpcdH07XG4gIDI2Olx0XG4gIDI3Olx0LyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cbiAgMjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbiAgMjk6XHRcdHtcbiAgMzA6XHRcdFx0LmNtZFx0XHQ9IEhBTkRTSEFLRV9DTURfQUNDRVBULFxuICAzMTpcdFx0XHQuZG9pdFx0XHQ9IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdCxcbiAgMzI6XHRcdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5LFxuICAzMzpcdFx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyxcbiAgMzQ6XHRcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuICAzNTpcdFx0fSxcbiAgMzY6XHRcdHtcbiAgMzc6XHRcdFx0LmNtZFx0XHQ9IEhBTkRTSEFLRV9DTURfRE9ORSxcbiAgMzg6XHRcdFx0LmRvaXRcdFx0PSBoYW5kc2hha2VfbmxfZG9uZV9kb2l0LFxuICAzOTpcdFx0XHQucG9saWN5XHRcdD0gaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5LFxuICA0MDpcdFx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxuICA0MTpcdFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4gIDQyOlx0XHR9LFxuICA0MzpcdH07XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBoYW5kc2hha2VfbmxfbWNncnBzW10gPSB7XG4gIDQ2Olx0XHRbSEFORFNIQUtFX05MR1JQX05PTkVdID0geyBcJiMzNDtub25lXCYjMzQ7LCB9LFxuICA0NzpcdFx0W0hBTkRTSEFLRV9OTEdSUF9UTFNIRF0gPSB7IFwmIzM0O3Rsc2hkXCYjMzQ7LCB9LFxuICA0ODpcdH07XG4gIDQ5Olx0XG4gIDUwOlx0c3RydWN0IGdlbmxfZmFtaWx5IGhhbmRzaGFrZV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTc5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGhhbmRzaGFrZV9yZXFfYWxsb2NgLiBMZXQgbWUgY2hlY2sgd2hlcmUgaXQmIzM5O3MgYWN0dWFsbHkgKmNhbGxlZCogd2l0aGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY29udGV4dCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIGxhcmdlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGl0IGZpdHMgaW50by4KCkFsc28sIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBBIHF1aWNrIGdsYW5jZSBzdWdnZXN0cyB0aGF0IGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AgYW5kIGBuZXRsaW5rLmNgIGFyZSByZWxldmFudCwgc28gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgbmV0d29ya2luZyBoYW5kc2hha2UgYW5kIHdoYXQgYG5ldGxpbmsuY2AgaXMgZG9pbmcuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiB0aGlzIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gZnVuY3Rpb24uIFVsdGltYXRlbHksIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgd2hlbiB0aGVzZSByZXF1ZXN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCB3aGF0IHRoZXkgcmVwcmVzZW50IGluIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9Mjg9c3RhdGljIHZvaWQgdGVzdF9kb25lX2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzItXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MzM6c3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzQtXHRjb25zdCBjaGFyXHRcdFx0KmRlc2M7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTM5LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQwOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMiA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQzLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMyA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00Ny1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0ODpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDktXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTEtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTI6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b181ID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUzLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTU2LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjU3OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNiA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01OC1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy02My1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo2NDpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNjUtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NzA9c3RhdGljIGNvbnN0XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NzE6c3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtc1tdID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTcyLVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjczOlx0XHQuZGVzY1x0XHRcdD0gXCYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyBOVUxMIHByb3RvXCYjMzQ7LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTc0LVx0XHQucHJvdG9cdFx0XHQ9IE5VTEwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTc4LVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjc5Olx0XHQuZGVzY1x0XHRcdD0gXCYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyBDTEFTU19OT05FXCYjMzQ7LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjgwOlx0XHQucHJvdG9cdFx0XHQ9IFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMixcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy04MS1cdFx0LmdmcFx0XHRcdD0gR0ZQX0tFUk5FTCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtODQtXHR7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6ODU6XHRcdC5kZXNjXHRcdFx0PSBcJiMzNDtoYW5kc2hha2VfcmVxX2FsbG9jIENMQVNTX01BWFwmIzM0Oyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo4NjpcdFx0LnByb3RvXHRcdFx0PSBcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzMsXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtODctXHRcdC5nZnBcdFx0XHQ9IEdGUF9LRVJORUwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTkwLVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjkxOlx0XHQuZGVzY1x0XHRcdD0gXCYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyBubyBjYWxsYmFja3NcJiMzNDssXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6OTI6XHRcdC5wcm90b1x0XHRcdD0gXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTkzLVx0XHQuZ2ZwXHRcdFx0PSBHRlBfS0VSTkVMLFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy05Ni1cdHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo5NzpcdFx0LmRlc2NcdFx0XHQ9IFwmIzM0O2hhbmRzaGFrZV9yZXFfYWxsb2Mgbm8gZG9uZSBjYWxsYmFja1wmIzM0Oyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo5ODpcdFx0LnByb3RvXHRcdFx0PSBcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzUsXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtOTktXHRcdC5nZnBcdFx0XHQ9IEdGUF9LRVJORUwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEwMi1cdHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMDM6XHRcdC5kZXNjXHRcdFx0PSBcJiMzNDtoYW5kc2hha2VfcmVxX2FsbG9jIGV4Y2Vzc2l2ZSBwcml2c2l6ZVwmIzM0Oyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMDQ6XHRcdC5wcm90b1x0XHRcdD0gXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b182LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEwNS1cdFx0LmdmcFx0XHRcdD0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTA4LVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEwOTpcdFx0LmRlc2NcdFx0XHQ9IFwmIzM0O2hhbmRzaGFrZV9yZXFfYWxsb2MgYWxsIGdvb2RcJiMzNDssXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTEwOlx0XHQucHJvdG9cdFx0XHQ9IFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMTEtXHRcdC5nZnBcdFx0XHQ9IEdGUF9LRVJORUwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTExNj1zdGF0aWMgdm9pZFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjExNzpoYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0gKnBhcmFtLFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExOC1cdFx0XHQgICAgIGNoYXIgKmRlc2MpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEyMi1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjM6LyogQ3JlYXRlcyB0aGUgZnVuY3Rpb24gaGFuZHNoYWtlX3JlcV9hbGxvY19nZW5fcGFyYW1zICovXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI0OktVTklUX0FSUkFZX1BBUkFNKGhhbmRzaGFrZV9yZXFfYWxsb2MsIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zLFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEyNTpcdFx0ICBoYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjYtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI3OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfYWxsb2NfY2FzZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI4LXtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjk6XHRjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtICpwYXJhbSA9IHRlc3QtXHUwMDNlcGFyYW1fdmFsdWU7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTMwLVx0c3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlc3VsdDtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTM0LVx0LyogQWN0ICovXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTM1Olx0cmVzdWx0ID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhwYXJhbS1cdTAwM2Vwcm90bywgcGFyYW0tXHUwMDNlZ2ZwKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMzYtXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTE2NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE3MC1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxNzE6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTcyLVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTE4Mz1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE4OS1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxOTA6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTkxLVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTIwOD1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTIxNi1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyMTc6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjE4LVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI0NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI1NS1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyNTY6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjU3LVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI4Nj1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5NC1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyOTU6XHRyZXExID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5Ni1cdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXExKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyOTc6XHRyZXEyID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5OC1cdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXEyKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MzI0PXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzMzLVx0LyogQXJyYW5nZSAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjMzNDpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zMzUtXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MzYyPXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QyKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzczLVx0LyogQXJyYW5nZSAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM3NDpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNzUtXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NDEyPXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDIzLVx0LyogQXJyYW5nZSAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQyNDpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MjUtXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NDY4PXN0YXRpYyB2b2lkIHRlc3RfZGVzdHJveV9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3Mi1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0NzM6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19kZXN0cm95ID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3NC1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz00ODA9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9kZXN0cm95X3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDkwLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ5MTpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19kZXN0cm95LCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OTItXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NTE5PXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBoYW5kc2hha2VfYXBpX3Rlc3RfY2FzZXNbXSA9IHtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTIxLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7cmVxX2FsbG9jIEFQSSBmdXp6aW5nXCYjMzQ7LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjUyMjpcdFx0LnJ1bl9jYXNlXHRcdD0gaGFuZHNoYWtlX3JlcV9hbGxvY19jYXNlLFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjUyMzpcdFx0LmdlbmVyYXRlX3BhcmFtc1x0PSBoYW5kc2hha2VfcmVxX2FsbG9jX2dlbl9wYXJhbXMsXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTI0LVx0fSxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTc5PXN0cnVjdCBoYW5kc2hha2VfbmV0ICpoYW5kc2hha2VfcGVybmV0KHN0cnVjdCBuZXQgKm5ldCk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC04MS0vKiByZXF1ZXN0LmMgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODI6c3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfYWxsb2MoY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTgzLVx0XHRcdFx0XHQgIGdmcF90IGZsYWdzKTtcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYz04Nj1zdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEwMi0vKipcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEwMzogKiBoYW5kc2hha2VfcmVxX2FsbG9jIC0gQWxsb2NhdGUgYSBoYW5kc2hha2UgcmVxdWVzdFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTA0LSAqIEBwcm90bzogc2VjdXJpdHkgcHJvdG9jb2xcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMDgtICovXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoxMDk6c3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfYWxsb2MoY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMTAtXHRcdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MpXG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTMwLX1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEzMTpFWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfYWxsb2MpO1xubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTMyLVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0yODY9aW50IHRsc19jbGllbnRfaGVsbG9fYW5vbihjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjkwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI5MTpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI5Mi1cdGlmICghcmVxKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMTI9aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzE2LVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjMxNzpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTMxOC1cdGlmICghcmVxKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNDE9aW50IHRsc19jbGllbnRfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTAtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzUxOlx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzUyLVx0aWYgKCFyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM3NT1pbnQgdGxzX3NlcnZlcl9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzktXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzgwOlx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzgxLVx0aWYgKCFyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQwMz1pbnQgdGxzX3NlcnZlcl9oZWxsb19wc2soY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQwNy1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0MDg6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNnRsc19oYW5kc2hha2VfcHJvdG8sIGZsYWdzKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDktXHRpZiAoIXJlcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgSGFuZHNoYWtlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBgbmV0L2hhbmRzaGFrZS9uZXRsaW5rLmNgLCBidXQgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBUbyBnZXQgYSB0cnVseSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhbmRzaGFrZSBwcm9jZXNzLCBJIHJlYWxseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGJyb2FkZXIgbGFuZHNjYXBlIG9mIGhhbmRzaGFrZS1yZWxhdGVkIGZpbGVzLiBUaGlzIG1lYW5zIHZlbnR1cmluZyBiZXlvbmQgYG5ldGxpbmsuY2AgYW5kIGV4cGxvcmluZyB0aGUgb3RoZXIgZmlsZXMgaW4gdGhlIGAvbmV0L2hhbmRzaGFrZS9gIGRpcmVjdG9yeSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdmVudHVyaW5nIGZ1cnRoZXIgYWZpZWxkIGFzIHdlbGwuIFRoZXJlIG1pZ2h0IGJlIHNvbWUga2V5IGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBtb2R1bGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbnZpc2libGUgaWYgSSYjMzk7bSBvbmx5IGZvY3VzaW5nIG9uIHRoaXMgb25lIGZpbGUuIFRoZSBnb2FsIGhlcmUgaXMgYSBtb3JlIGhvbGlzdGljIHZpZXcgb2YgdGhlIG92ZXJhbGwgaGFuZHNoYWtlIHByb2NlZHVyZSBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBHZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2VcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcjogQ2h1Y2sgTGV2ZXIgXHUwMDNjY2h1Y2subGV2ZXJAb3JhY2xlLmNvbVx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogQ29weXJpZ2h0IChjKSAyMDIzLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLlxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuICAyMDpcdFxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaGFuZHNoYWtlLmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcJiMzNDtoYW5kc2hha2UuaFwmIzM0O1xuICAyNTpcdCNpbmNsdWRlIFwmIzM0O2dlbmwuaFwmIzM0O1xuICAyNjpcdFxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9oYW5kc2hha2UuaFx1MDAzZVxuICAyODpcdFxuICAyOTpcdC8qKlxuICAzMDpcdCAqIGhhbmRzaGFrZV9nZW5sX25vdGlmeSAtIE5vdGlmeSBoYW5kbGVycyB0aGF0IGEgcmVxdWVzdCBpcyB3YWl0aW5nXG4gIDMxOlx0ICogQG5ldDogdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlXG4gIDMyOlx0ICogQHByb3RvOiBoYW5kc2hha2UgcHJvdG9jb2xcbiAgMzM6XHQgKiBAZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRyb2wgZmxhZ3NcbiAgMzQ6XHQgKlxuICAzNTpcdCAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gaWYgbm90aWZpY2F0aW9uIGZhaWxlZC5cbiAgMzY6XHQgKi9cbiAgMzc6XHRpbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG4gIDM4Olx0XHRcdFx0ICBnZnBfdCBmbGFncylcbiAgMzk6XHR7XG4gIDQwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuICA0MTpcdFx0dm9pZCAqaGRyO1xuICA0MjpcdFxuICA0MzpcdFx0LyogRGlzYWJsZSBub3RpZmljYXRpb25zIGR1cmluZyB1bml0IHRlc3RpbmcgKi9cbiAgNDQ6XHRcdGlmICghdGVzdF9iaXQoSEFORFNIQUtFX0ZfUFJPVE9fTk9USUZZLCBcdTAwMjZwcm90by1cdTAwM2VocF9mbGFncykpXG4gIDQ1Olx0XHRcdHJldHVybiAwO1xuICA0NjpcdFxuICA0NzpcdFx0aWYgKCFnZW5sX2hhc19saXN0ZW5lcnMoXHUwMDI2aGFuZHNoYWtlX25sX2ZhbWlseSwgbmV0LFxuICA0ODpcdFx0XHRcdFx0cHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykpXG4gIDQ5Olx0XHRcdHJldHVybiAtRVNSQ0g7XG4gIDUwOlx0XG4gIDUxOlx0XHRtc2cgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgZmxhZ3MpO1xuICA1MjpcdFx0aWYgKCFtc2cpXG4gIDUzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA1NDpcdFxuICA1NTpcdFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCAwLCAwLCBcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCAwLFxuICA1NjpcdFx0XHRcdCAgSEFORFNIQUtFX0NNRF9SRUFEWSk7XG4gIDU3Olx0XHRpZiAoIWhkcilcbiAgNTg6XHRcdFx0Z290byBvdXRfZnJlZTtcbiAgNTk6XHRcbiAgNjA6XHRcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxuICA2MTpcdFx0XHRcdHByb3RvLVx1MDAzZWhwX2hhbmRsZXJfY2xhc3MpIFx1MDAzYyAwKSB7XG4gIDYyOlx0XHRcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcbiAgNjM6XHRcdFx0Z290byBvdXRfZnJlZTtcbiAgNjQ6XHRcdH1cbiAgNjU6XHRcbiAgNjY6XHRcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbiAgNjc6XHRcdHJldHVybiBnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCBuZXQsIG1zZyxcbiAgNjg6XHRcdFx0XHRcdCAgICAgICAwLCBwcm90by1cdTAwM2VocF9oYW5kbGVyX2NsYXNzLCBmbGFncyk7XG4gIDY5Olx0XG4gIDcwOlx0b3V0X2ZyZWU6XG4gIDcxOlx0XHRubG1zZ19mcmVlKG1zZyk7XG4gIDcyOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHQvKipcbiAgNzY6XHQgKiBoYW5kc2hha2VfZ2VubF9wdXQgLSBDcmVhdGUgYSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXJcbiAgNzc6XHQgKiBAbXNnOiBidWZmZXIgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBoZWFkZXJcbiAgNzg6XHQgKiBAaW5mbzogZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgY29udGV4dFxuICA3OTpcdCAqXG4gIDgwOlx0ICogUmV0dXJucyBhIHJlYWR5LXRvLXVzZSBoZWFkZXIsIG9yIE5VTEwuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDQ0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYW5kc2hha2UgcHJvY2VzcywgcGFydGljdWxhcmx5IHRoZSByb2xlIGBuZXRsaW5rLmNgIHBsYXlzIHdpdGhpbiBgbmV0L2hhbmRzaGFrZWAuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBleGFtaW5lIHRoZSByZXN0IG9mIHRoYXQgZmlsZSDigJMgSSBhc3N1bWUgaXQgY29udGFpbnMgbW9yZSBkZXRhaWxzIHRoYW4ganVzdCB3aGF0IEkmIzM5O3ZlIHNlZW4gc28gZmFyLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmaWxlcyBpbnRlcmFjdCB3aXRoIGBuZXRsaW5rLmNgIGFuZCBob3cuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgcmVhZGluZyB0aGUgY29kZTsgaXQmIzM5O3MgYWJvdXQgdHJhY2luZyB0aGUgY29udHJvbCBmbG93LCB1bmRlcnN0YW5kaW5nIGRhdGEgc3RydWN0dXJlcywgYW5kIGdldHRpbmcgYSBob2xpc3RpYyBwaWN0dXJlIG9mIHRoZSBlbnRpcmUgbmV0d29ya2luZyBoYW5kc2hha2UgbWVjaGFuaXNtLiBJJiMzOTttIHRoaW5raW5nIG90aGVyIGhhbmRzaGFrZSByZWxhdGVkIHNvdXJjZSBmaWxlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdCAqL1xuICA4MjpcdHN0cnVjdCBubG1zZ2hkciAqaGFuZHNoYWtlX2dlbmxfcHV0KHN0cnVjdCBza19idWZmICptc2csXG4gIDgzOlx0XHRcdFx0XHQgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiAgODQ6XHR7XG4gIDg1Olx0XHRyZXR1cm4gZ2VubG1zZ19wdXQobXNnLCBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSxcbiAgODY6XHRcdFx0XHQgICBcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCAwLCBpbmZvLVx1MDAzZWdlbmxoZHItXHUwMDNlY21kKTtcbiAgODc6XHR9XG4gIDg4Olx0RVhQT1JUX1NZTUJPTChoYW5kc2hha2VfZ2VubF9wdXQpO1xuICA4OTpcdFxuICA5MDpcdGludCBoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiAgOTE6XHR7XG4gIDkyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuICA5MzpcdFx0c3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuID0gaGFuZHNoYWtlX3Blcm5ldChuZXQpO1xuICA5NDpcdFx0c3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSA9IE5VTEw7XG4gIDk1Olx0XHRpbnQgY2xhc3MsIGVycjtcbiAgOTY6XHRcbiAgOTc6XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuICA5ODpcdFx0aWYgKCFobilcbiAgOTk6XHRcdFx0Z290byBvdXRfc3RhdHVzO1xuIDEwMDpcdFxuIDEwMTpcdFx0ZXJyID0gLUVJTlZBTDtcbiAxMDI6XHRcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcbiAxMDM6XHRcdFx0Z290byBvdXRfc3RhdHVzO1xuIDEwNDpcdFx0Y2xhc3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XG4gMTA1Olx0XG4gMTA2Olx0XHRlcnIgPSAtRUFHQUlOO1xuIDEwNzpcdFx0cmVxID0gaGFuZHNoYWtlX3JlcV9uZXh0KGhuLCBjbGFzcyk7XG4gMTA4Olx0XHRpZiAocmVxKSB7XG4gMTA5Olx0XHRcdEZEX1BSRVBBUkUoZmRmLCBPX0NMT0VYRUMsIHJlcS1cdTAwM2Vocl9maWxlKTtcbiAxMTA6XHRcdFx0aWYgKGZkZi5lcnIpIHtcbiAxMTE6XHRcdFx0XHRmcHV0KHJlcS1cdTAwM2Vocl9maWxlKTsgLyogZHJvcCByZWYgZnJvbSBoYW5kc2hha2VfcmVxX25leHQoKSAqL1xuIDExMjpcdFx0XHRcdGVyciA9IGZkZi5lcnI7XG4gMTEzOlx0XHRcdFx0Z290byBvdXRfY29tcGxldGU7XG4gMTE0Olx0XHRcdH1cbiAxMTU6XHRcbiAxMTY6XHRcdFx0ZXJyID0gcmVxLVx1MDAzZWhyX3Byb3RvLVx1MDAzZWhwX2FjY2VwdChyZXEsIGluZm8sIGZkX3ByZXBhcmVfZmQoZmRmKSk7XG4gMTE3Olx0XHRcdGlmIChlcnIpXG4gMTE4Olx0XHRcdFx0Z290byBvdXRfY29tcGxldGU7IC8qIEF1dG9tYXRpYyBjbGVhbnVwIGhhbmRsZXMgZnB1dCAqL1xuIDExOTpcdFxuIDEyMDpcdFx0XHR0cmFjZV9oYW5kc2hha2VfY21kX2FjY2VwdChuZXQsIHJlcSwgcmVxLVx1MDAzZWhyX3NrLCBmZF9wcmVwYXJlX2ZkKGZkZikpO1xuIDEyMTpcdFx0XHRmZF9wdWJsaXNoKGZkZik7XG4gMTIyOlx0XHRcdHJldHVybiAwO1xuIDEyMzpcdFx0fVxuIDEyNDpcdFxuIDEyNTpcdG91dF9jb21wbGV0ZTpcbiAxMjY6XHRcdGlmIChyZXEpXG4gMTI3Olx0XHRcdGhhbmRzaGFrZV9jb21wbGV0ZShyZXEsIC1FSU8sIE5VTEwpO1xuIDEyODpcdG91dF9zdGF0dXM6XG4gMTI5Olx0XHR0cmFjZV9oYW5kc2hha2VfY21kX2FjY2VwdF9lcnIobmV0LCByZXEsIE5VTEwsIGVycik7XG4gMTMwOlx0XHRyZXR1cm4gZXJyO1xuIDEzMTpcdH1cbiAxMzI6XHRcbiAxMzM6XHRpbnQgaGFuZHNoYWtlX25sX2RvbmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDEzNDpcdHtcbiAxMzU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gMTM2Olx0XHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxO1xuIDEzNzpcdFx0c3RydWN0IHNvY2tldCAqc29jaztcbiAxMzg6XHRcdGludCBmZCwgc3RhdHVzLCBlcnI7XG4gMTM5Olx0XG4gMTQwOlx0XHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRCkpXG4gMTQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0MjpcdFx0ZmQgPSBubGFfZ2V0X3MzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSk7XG4gMTQzOlx0XG4gMTQ0Olx0XHRzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbiAxNDU6XHRcdGlmICghc29jaylcbiAxNDY6XHRcdFx0cmV0dXJuIGVycjtcbiAxNDc6XHRcbiAxNDg6XHRcdHJlcSA9IGhhbmRzaGFrZV9yZXFfaGFzaF9sb29rdXAoc29jay1cdTAwM2Vzayk7XG4gMTQ5Olx0XHRpZiAoIXJlcSkge1xuIDE1MDpcdFx0XHRlcnIgPSAtRUJVU1k7XG4gMTUxOlx0XHRcdHRyYWNlX2hhbmRzaGFrZV9jbWRfZG9uZV9lcnIobmV0LCByZXEsIHNvY2stXHUwMDNlc2ssIGVycik7XG4gMTUyOlx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4gMTUzOlx0XHRcdHJldHVybiBlcnI7XG4gMTU0Olx0XHR9XG4gMTU1Olx0XG4gMTU2Olx0XHR0cmFjZV9oYW5kc2hha2VfY21kX2RvbmUobmV0LCByZXEsIHNvY2stXHUwMDNlc2ssIGZkKTtcbiAxNTc6XHRcbiAxNTg6XHRcdHN0YXR1cyA9IC1FSU87XG4gMTU5Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pXG4gMTYwOlx0XHRcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgKioKCkFscmlnaHQsIHNvIHRoZSBjYWxsIGZvciBhbmFseXNpcyBoYXMgY29tZSBpbiwgYW5kIG15IG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiAmIzM0O0xldCYjMzk7cyBzZWUgdGhlIHJlc3Qgb2YgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgJiMzNDsuLi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgcHJlY2VkaW5nIGZ1bmN0aW9ucyBvciBtb2R1bGVzIHNldCB0aGUgc3RhZ2UgZm9yIHRoaXMgb25lPyBJcyB0aGVyZSBhIGtub3duIGlzc3VlIGFzc29jaWF0ZWQgd2l0aCBpdD8gV2hhdCBhcmUgdGhlIHR5cGljYWwgZmFpbHVyZSBwb2ludHM/CgpNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHJhcGlkbHkgc2NhbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgZ2xhcmluZyByZWQgZmxhZ3MuIEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXNvdXJjZSBsZWFrcz8gRG9lcyB0aGUgY29udHJvbCBmbG93IGhhbmRsZSBhbGwgcG9zc2libGUgaW5wdXQgc3RhdGVzIGNvcnJlY3RseSwgZXNwZWNpYWxseSBlZGdlIGNhc2VzIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGZyb20gc2ltaWxhciBwcm90b2NvbHM/IEkmIzM5O20gbG9va2luZyBmb3IgYSBmYW1pbGlhciBwYXR0ZXJuIG9mIGVycm9ycyB0aGF0IEkmIzM5O3ZlIGRlYWx0IHdpdGggYmVmb3JlIC0gcGVyaGFwcyBpbmNvcnJlY3QgYnVmZmVyIHNpemluZywgcmFjZSBjb25kaXRpb25zLCBvciBpbXByb3BlciBlcnJvciBwcm9wYWdhdGlvbi4KCk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIGFueXRoaW5nIHRoYXQgc2VlbXMgcmVsYXRlZCB0byB0aGUgJiMzNDtOTCYjMzQ7IHBhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgcHJvdG9jb2wgd2l0aCAmIzM5O05MJiMzOTsgaW4gdGhlIG5hbWUgbWlnaHQgcmVmZXIgdG8gYSBzcGVjaWZpYyBzb3J0IG9mIG1lc3NhZ2UgZm9ybWF0LCBvciBhIHNwZWNpZmljIHN0YWdlIG9mIGEgbmV0d29yayBoYW5kc2hha2UuIEFuZCBpZiBpdCYjMzk7cyB0aGUgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgIHBhcnQsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBjb21wbGV0aW9uIGV2ZW50LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgcG9pbnRlcnMgZm9yIHRoZSAmIzM5O2RvaXQmIzM5OyBwYXJ0LCBhbmQgcXVpY2tseSBpZGVudGlmeSBpZiB0aGlzIG1pZ2h0IGJlIHNvbWUga2luZCBvZiB0aHJlYWQgdW5zYWZlIG9wZXJhdGlvbnMuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBkcmlsbCBkb3duIGludG8gYW55IGNhbGxzIHRvIGxvd2VyLWxldmVsIG5ldHdvcmtpbmcgcHJpbWl0aXZlcywgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZXh0ZXJuYWwgaW5mbHVlbmNlcyBvbiBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzOiBhcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVhZGxvY2sgdnVsbmVyYWJpbGl0eT8gQSBtZW1vcnkgY29ycnVwdGlvbiByaXNrPyBPciBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHRoYXQgY291bGQgYnJpbmcgdGhlIHdob2xlIHRoaW5nIGNyYXNoaW5nIGRvd24/IEkmIzM5O2xsIGFsc28gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHBvc3NpYmxlIGlucHV0cyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgdGhlIGVkZ2UgY2FzZXMuCgpJbiBzaG9ydCwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGJlZ2luIGEgbWV0aG9kaWNhbCBkaXNzZWN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjE6XHRcbiAxNjI6XHRcdGhhbmRzaGFrZV9jb21wbGV0ZShyZXEsIHN0YXR1cywgaW5mbyk7XG4gMTYzOlx0XHRzb2NrZmRfcHV0KHNvY2spO1xuIDE2NDpcdFx0cmV0dXJuIDA7XG4gMTY1Olx0fVxuIDE2NjpcdFxuIDE2NzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaGFuZHNoYWtlX25ldF9pZDtcbiAxNjg6XHRcbiAxNjk6XHRzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFuZHNoYWtlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiAxNzA6XHR7XG4gMTcxOlx0XHRzdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGhhbmRzaGFrZV9uZXRfaWQpO1xuIDE3MjpcdFx0dW5zaWduZWQgbG9uZyB0bXA7XG4gMTczOlx0XHRzdHJ1Y3Qgc3lzaW5mbyBzaTtcbiAxNzQ6XHRcbiAxNzU6XHRcdC8qXG4gMTc2Olx0XHQgKiBBcmJpdHJhcnkgbGltaXQgdG8gcHJldmVudCBoYW5kc2hha2VzIHRoYXQgZG8gbm90IG1ha2VcbiAxNzc6XHRcdCAqIHByb2dyZXNzIGZyb20gY2xvZ2dpbmcgdXAgdGhlIHN5c3RlbS4gVGhlIGNhcCBzY2FsZXMgdXBcbiAxNzg6XHRcdCAqIHdpdGggdGhlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgb24gdGhlIHN5c3RlbS5cbiAxNzk6XHRcdCAqL1xuIDE4MDpcdFx0c2lfbWVtaW5mbyhcdTAwMjZzaSk7XG4gMTgxOlx0XHR0bXAgPSBzaS50b3RhbHJhbSAvICgyNSAqIHNpLm1lbV91bml0KTtcbiAxODI6XHRcdGhuLVx1MDAzZWhuX3BlbmRpbmdfbWF4ID0gY2xhbXAodG1wLCAzVUwsIDUwVUwpO1xuIDE4MzpcdFxuIDE4NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aG4tXHUwMDNlaG5fbG9jayk7XG4gMTg1Olx0XHRobi1cdTAwM2Vobl9wZW5kaW5nID0gMDtcbiAxODY6XHRcdGhuLVx1MDAzZWhuX2ZsYWdzID0gMDtcbiAxODc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmhuLVx1MDAzZWhuX3JlcXVlc3RzKTtcbiAxODg6XHRcdHJldHVybiAwO1xuIDE4OTpcdH1cbiAxOTA6XHRcbiAxOTE6XHRzdGF0aWMgdm9pZCBfX25ldF9leGl0IGhhbmRzaGFrZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4gMTkyOlx0e1xuIDE5MzpcdFx0c3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuID0gbmV0X2dlbmVyaWMobmV0LCBoYW5kc2hha2VfbmV0X2lkKTtcbiAxOTQ6XHRcdHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXE7XG4gMTk1Olx0XHRMSVNUX0hFQUQocmVxdWVzdHMpO1xuIDE5NjpcdFxuIDE5NzpcdFx0LypcbiAxOTg6XHRcdCAqIERyYWluIHRoZSBuZXQmIzM5O3MgcGVuZGluZyBsaXN0LiBSZXF1ZXN0cyB0aGF0IGhhdmUgYmVlblxuIDE5OTpcdFx0ICogYWNjZXB0ZWQgYW5kIGFyZSBpbiBwcm9ncmVzcyB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuXG4gMjAwOlx0XHQgKiB0aGUgc29ja2V0IGlzIGNsb3NlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhhbmRzaGFrZSBOZXRsaW5rIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgaGFuZHNoYWtlIG5ldGxpbmsgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCBhbmQgc2VlIHdoYXQmIzM5O3MgYmVlbiB1cGRhdGVkLiAgSSBzZWUgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4gSW4gYG5ldC9oYW5kc2hha2UvZ2VubC5jYCwgdGhlIGBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIYCBhdHRyaWJ1dGUmIzM5O3MgdHlwZSBoYXMgc2hpZnRlZCBmcm9tIGBOTEFfVTMyYCB0byBgTkxBX1MzMmAuIEFuZCBvdmVyIGluIGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAsIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgaGFzIGdvbmUgZnJvbSBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMilgIHRvIGBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKWAuIFRoZXNlIGFyZSBpbnRlcmVzdGluZyBjaGFuZ2VzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zLiBJJiMzOTtsbCBjaGVjayBgaGFuZHNoYWtlLnlhbWxgIGFuZCBgaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oYC4gQWgsIEkgc2VlIGEgY2xlYXIgc2hpZnQgaW4gdGhlIGBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzYC4gIFRoZSBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBkZWZpbml0aW9uIGhhcyBiZWVuIHVwZGF0ZWQsIG5vdyBpdCYjMzk7cyBkZWZpbmVkIGFzIGAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKWAuIFByZXZpb3VzbHksIGl0IHdhcyBzaW1wbHkgdGhlIHVwcGVyIGJvdW5kLiBUaGlzIG1lYW5zIHRoZSBhY2NlcHRhYmxlIHVwcGVyIGxpbWl0IG9mIGhhbmRsZXIgY2xhc3NlcyBoYXMgY2hhbmdlZC4gIFRoaXMgZXhwbGFpbnMgd2h5IHRoZSBgTkxBX1BPTElDWV9NQVhgIHZhbHVlIHdhcyByZWR1Y2VkIGZyb20gMiB0byAxIQoKVGhhdCBzaGlmdCBpbiBlbnVtIGRlZmluaXRpb25zIHRyaWdnZXJlZCBhIHJlbGF0ZWQgY2hhbmdlIGluIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIFRoZSBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC4gVGhlIGNvbXBhcmlzb24gbG9naWMgaXMgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBib3VuZGFyeS4gVGhlIG9sZCBgcHJvdG8tJmd0O2hwX2hhbmRsZXJfY2xhc3MgJmd0Oz0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBjaGVjayBpcyByZXBsYWNlZCB3aXRoIGAmZ3Q7IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGFzIHRoZSB2YWxpZCBoYW5kbGVyIGNsYXNzZXMgY2hhbmdlZC4gSSBhbHNvIHNlZSBhIHRlc3QgY2FzZSwgYGhhbmRzaGFrZS10ZXN0LmNgLCB3aGVyZSBgX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIHJlcGxhY2VzIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLCB0byBtYWtlIHRoZSB0ZXN0IG1hdGNoIHRoZSBuZXcgY2xhc3MgZGVmaW5pdGlvbi4KCkZpbmFsbHksIEkgcmVtZW1iZXIgdGhlIG90aGVyIHJlbGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzOiBgcGVlci1pZGVudGl0eWAsIGBrZXlyaW5nYCwgYW5kIGByZW1vdGUtYXV0aGAuIFRoZSBkb2N1bWVudGF0aW9uIGluIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxgIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXR0cmlidXRlcyB3ZXJlIGNoYW5nZWQgZnJvbSBgdTMyYCB0byBgczMyYC4gVGhhdCBtYWtlcyBzZW5zZSAtIGBrZXlfc2VyaWFsX3RgIGluIHRoZSBrZXJuZWwgaXMgYW4gYGludDMyYCwgc28gdXNpbmcgYSBzaWduZWQgMzItYml0IGludGVnZXIgaXMgdGhlIHJpZ2h0IHR5cGUuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgdG8gc2VlIGhvdyB0aGUgVExTSEQgKFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIYW5kc2hha2UgRGFlbW9uKSBhbmQgdGhlICYjMzQ7ZG9uZSYjMzQ7IGFuZCAmIzM0O2FjY2VwdCYjMzQ7IHBhdGhzIGhhbmRsZSByZW1vdGUgYXV0aGVudGljYXRpb24gYW5kIHRoZSBrZXkgc2VyaWFscywgaW4gb3JkZXIgdG8gY29tcGxldGUgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBTkRTSEFLRV9BXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9nZW5sLmMtMTUtLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICYjNDM7IDFdID0ge1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTc6XHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xOC19O1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMjpcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjM6XHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyNDpcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjUtfTtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zMi1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5LFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MzM6XHRcdC5tYXhhdHRyXHQ9IEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzQtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zOS1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjQwOlx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNDEtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0zNz1pbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNTktXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzo2MDpcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNjEtXHRcdFx0cHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykgXHUwMDNjIDApIHtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz05MD1pbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTAxLVx0ZXJyID0gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEwMjpcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEwMy1cdFx0Z290byBvdXRfc3RhdHVzO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTA0Olx0Y2xhc3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDUtXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MTMzPWludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTM5LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQwOlx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfRE9ORV9TT0NLRkQpKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE0MjpcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0pO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQzLVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE1OC1cdHN0YXR1cyA9IC1FSU87XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNTk6XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjA6XHRcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE2MS1cbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9NjE9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcwLVx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjcxOlx0XHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcyLVx0XHRcdGkmIzQzOyYjNDM7O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04MC1cdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo4MTpcdFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04Mi1cdFx0XHR0cmVxLVx1MDAzZXRoX3BlZXJpZFtpJiM0MzsmIzQzO10gPSBubGFfZ2V0X3UzMihubGEpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xNTE9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9wZWVyX2lkZW50aXR5KHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1Ni1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyZXEtXHUwMDNldGhfbnVtX3BlZXJpZHM7IGkmIzQzOyYjNDM7KVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1NzpcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1BFRVJfSURFTlRJVFksXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTU4LVx0XHRcdFx0dHJlcS1cdTAwM2V0aF9wZWVyaWRbaV0pIFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xNjM9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9jZXJ0aWZpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzEtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTcyOlx0ZW50cnlfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX0NFUlRJRklDQVRFKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzMtXHRpZiAoIWVudHJ5X2F0dHIpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3NS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzY6XHRpZiAobmxhX3B1dF9zMzIobXNnLCBIQU5EU0hBS0VfQV9YNTA5X0NFUlQsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc3LVx0XHRcdHRyZXEtXHUwMDNldGhfY2VydGlmaWNhdGUpIHx8XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTc4Olx0ICAgIG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfWDUwOV9QUklWS0VZLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3OS1cdFx0XHR0cmVxLVx1MDAzZXRoX3ByaXZrZXkpKSB7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTE5Nj1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfYWNjZXB0KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxNS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMTY6XHRyZXQgPSBubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9TT0NLRkQsIGZkKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTctXHRpZiAocmV0IFx1MDAzYyAwKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxOC1cdFx0Z290byBvdXRfY2FuY2VsO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxOTpcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX01FU1NBR0VfVFlQRSwgdHJlcS1cdTAwM2V0aF90eXBlKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjAtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjItXHRpZiAodHJlcS1cdTAwM2V0aF9wZWVybmFtZSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyMzpcdFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUk5BTUUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI0LVx0XHRcdFx0ICAgICB0cmVxLVx1MDAzZXRoX3BlZXJuYW1lKTtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI4LVx0aWYgKHRyZXEtXHUwMDNldGhfdGltZW91dF9tcykge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyOTpcdFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfVElNRU9VVCwgdHJlcS1cdTAwM2V0aF90aW1lb3V0X21zKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzAtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzMy1cdGlmICh0cmVxLVx1MDAzZXRoX2tleXJpbmcpIHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMzQ6XHRcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX0tFWVJJTkcsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjM1LVx0XHRcdFx0ICB0cmVxLVx1MDAzZXRoX2tleXJpbmcpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzktXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQwOlx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfQVVUSF9NT0RFLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0MS1cdFx0XHQgIHRyZXEtXHUwMDNldGhfYXV0aF9tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NzQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA4NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQW5hbHlzaXM6IEdlbmVyaWMgTmV0bGluayBIYW5kc2hha2UgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWxpYWJseSB0YXJnZXQgYW5kIHRyaWdnZXIgdGhlIGdlbmVyaWMgbmV0bGluayBoYW5kc2hha2UgY29kZS4gVGhlIGdvb2QgbmV3cyBpcywgYWJzb2x1dGVseSwgeWVzISBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIGdlbmVyaWMgbmV0bGluayBvcGVyYXRpb25zLCB3aGljaCBhcmUgd2VsbC1kZWZpbmVkIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdYCBjbGVhcmx5IGRlZmluZXMgdGhlIGhhbmRsZXJzOiBgSEFORFNIQUtFX0NNRF9BQ0NFUFRgIG1hcHMgdG8gYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAsIGFuZCBgSEFORFNIQUtFX0NNRF9ET05FYCBnb2VzIHRvIGBoYW5kc2hha2VfbmxfZG9uZV9kb2l0YC4gVGhlc2UgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYGhhbmRzaGFrZV9ubF9mYW1pbHlgIHZpYSBgZ2VubF9yZWdpc3Rlcl9mYW1pbHkoKWAsIG1ha2luZyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMuIEVzc2VudGlhbGx5LCBhbnkgdXNlcnNwYWNlIHByb2Nlc3MsIGluY2x1ZGluZyBzeXprYWxsZXIsIGNhbiBzZW5kIG5ldGxpbmsgbWVzc2FnZXMgdG8gdGhpcyBgaGFuZHNoYWtlYCBmYW1pbHkuCgpTcGVjaWZpY2FsbHksIHdlIGNhbiBjcmFmdCBhbmQgc2VuZCBtZXNzYWdlcyBjb250YWluaW5nIGBIQU5EU0hBS0VfQ01EX0FDQ0VQVGAgYW5kIGBIQU5EU0hBS0VfQ01EX0RPTkVgIGNvbW1hbmRzLiBJIGltbWVkaWF0ZWx5IG5vdGUgdGhlIHBvbGljeSBjaGFuZ2VzLCBhbmQgdGhlc2UgbWVyaXQgY2FyZWZ1bCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuIFRoZSBtb2RpZmljYXRpb24gb2YgIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgZnJvbSBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMilgIHRvIGBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKWAgaW4gYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGZyb20gYE5MQV9VMzJgIHRvIGBOTEFfUzMyYCBpbiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCwgYW5kIHRoZSBib3VuZGFyeSBjaGVjayBjaGFuZ2UgaW4gYGhhbmRzaGFrZV9yZXFfYWxsb2NgIOKAkyB0aGVzZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0byBleHBsb2l0LCBlc3BlY2lhbGx5IGZvciBpbnRlZ2VyIG92ZXJmbG93cyBvciBib3VuZGFyeSBjb25kaXRpb24gdmlvbGF0aW9ucy4KClRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSByZWxhdGVkIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sYCwgYGluY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaGAsIGBuZXQvaGFuZHNoYWtlL2dlbmwuY2AsIGBuZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNgLCBhbmQgYG5ldC9oYW5kc2hha2UvcmVxdWVzdC5jYCB0byBpZGVudGlmeSBvdGhlciBjaGFuZ2VzLgoKTm93LCBmcm9tIGEgZnV6emluZyBhbmdsZSwgdGhlIHRhcmdldCBpcyBjbGVhcmx5IHJlYWNoYWJsZS4gR2VuZXJpYyBuZXRsaW5rIGlzIGEgZnVuZGFtZW50YWwgdXNlcnNwYWNlLWtlcm5lbCBpbnRlcmZhY2UgdXRpbGl6aW5nIGBBRl9ORVRMSU5LYCBhbmQgYE5FVExJTktfR0VORVJJQ2Agc29ja2V0cy4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbW9kaWZpZWQgcG9saWNpZXMgKGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAgYW5kIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgKS4gIFRoZSBmdW5jdGlvbnMgYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAsIGBoYW5kc2hha2VfbmxfZG9uZV9kb2l0YCwgYW5kIGBoYW5kc2hha2VfcmVxX2FsbG9jYCBhcmUsIHRoZXJlZm9yZSwgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSBwYXRocy4gVGhpcyBjb25maXJtcyB0aGUgaW5pdGlhbCAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgYXNzZXNzbWVudC4KCkZpbmFsbHksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgYE5FVF9IQU5EU0hBS0VgLiBUaGUgYEtjb25maWdgIHJldmVhbHMgdGhhdCBpdCYjMzk7cyBgYm9vbGAsIGRlcGVuZGVudCBvbiBgU1VOUlBDIHx8IE5WTUVfVEFSR0VUX1RDUCB8fCBOVk1FX1RDUGAsIGFuZCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5Oy4gQmVjYXVzZSBpdCYjMzk7cyBhIGRpcmVjdCBib29sZWFuLCB0aGUga2VybmVsIHdpbGwgY29tcGlsZSBpbiB0aGlzIGhhbmRzaGFrZSBmdW5jdGlvbmFsaXR5IGlmIGBTVU5SUENgIG9yIGBOVk1FX1RDUGAgaXMgc2VsZWN0ZWQuIFNvLCB0byBlbnN1cmUgYE5FVF9IQU5EU0hBS0VgIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gdmVyaWZ5IGBTVU5SUENgLCBgTlZNRV9UQ1BgLCBvciBgTlZNRV9UQVJHRVRfVENQYCBhcmUgZW5hYmxlZCwgb3IganVzdCBlbmFibGUgYE5FVF9IQU5EU0hBS0VgIGl0c2VsZiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBjb25maWctb3B0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmUgYE5FVF9IQU5EU0hBS0VgLCBgU1VOUlBDYCwgYW5kIGBOVk1FX1RDUGAgaW4gc3l6a2FsbGVyJiMzOTtzIGNvbmZpZyBmb3JtYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjE6Q09ORklHX0tVTklUPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjI6Q09ORklHX1VCU0FOPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjM6Q09ORklHX1NUQUNLVFJBQ0U9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NDpDT05GSUdfTkVUPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjU6Q09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NjpDT05GSUdfSU5FVD15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzo3OkNPTkZJR19NVUxUSVVTRVI9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6ODpDT05GSUdfTkZTX0ZTPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjk6Q09ORklHX1NVTlJQQz15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMDpDT05GSUdfTkVUX0hBTkRTSEFLRT15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcbi0tXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlPTExPWhhbmRzaGFrZS15IDo9IGFsZXJ0Lm8gZ2VubC5vIG5ldGxpbmsubyByZXF1ZXN0Lm8gdGxzaGQubyB0cmFjZS5vXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUKSAmIzQzOz0gaGFuZHNoYWtlLXRlc3Qub1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz05NT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTEwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExMTojaWYgSVNfRU5BQkxFRChDT05GSUdfS0VZUylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTItc3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEhhbmRzaGFrZSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgTkVUX0hBTkRTSEFLRWAgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkmIzM5O2xsIGNvbmZpcm0gaXRzIHByZXNlbmNlIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBLY29uZmlnYCBhbmQgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBuZXRgIGRpcmVjdG9yeS4gSXQgbG9va3MgbGlrZSBlbmFibGluZyBgTkVUX0hBTkRTSEFLRWAgaW4gdGhlIGBNYWtlZmlsZWAgYWRkcyB0aGUgYGhhbmRzaGFrZS9gIGRpcmVjdG9yeSB0byB0aGUgYnVpbGQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIEEgcXVpY2sgbWVudGFsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGxpa2UgdGhvc2UgZm9yIGBTVU5SUENgIG9yIGBOVk1FX1RDUGAgYXJlbiYjMzk7dCBpbnRlcmZlcmluZy4gUHJvdmlkaW5nIGBORVRfSEFORFNIQUtFYCBpbiBFbmFibGVDb25maWdzIGlzIHRoZSBzdGFuZGFyZCB3YXkgdG8gcHJvY2VlZCwgc28gdGhhdCBzZWVtcyBzdWZmaWNpZW50IGZvciBub3cuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uOiBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBhcmUgZGlyZWN0bHkgYWx0ZXJlZCBieSB0aGUgcmVjZW50IGNoYW5nZXMgaW4gdGhlIGBoYW5kc2hha2VgIGNvZGUgb3IgZGlyZWN0bHkgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMuIE15IGluaXRpYWwgc2NhbiBwb2ludHMgdG8gYSBmZXcga2V5IGZ1bmN0aW9uczoKCjEuICBgaGFuZHNoYWtlX3JlcV9hbGxvY2Agd2l0aGluIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AgLSB0aGVyZSYjMzk7cyBhbHRlcmVkIGNvbXBhcmlzb24gbG9naWMgaW4gaGVyZTogYGhwX2hhbmRsZXJfY2xhc3MgJmd0OyBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLgoyLiAgYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAgaW4gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCAtIGl0IHVzZXMgYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgd2hlcmUgdGhlIG1heGltdW0gdmFsdWUgb2YgYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYCBoYXMgY2hhbmdlZCBmcm9tIDIgdG8gMS4KMy4gIGBoYW5kc2hha2VfbmxfZG9uZV9kb2l0YCBpbiBgbmV0L2hhbmRzaGFrZS9uZXRsaW5rLmNgIC0gVGhpcyBvbmUgYWxzbyB1c2VzIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgLCBhbmQgdGhlIHR5cGUgb2YgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGNoYW5nZWQgZnJvbSBgTkxBX1UzMmAgdG8gYE5MQV9TMzJgLgo0LiAgYHRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNgIGluIGBuZXQvaGFuZHNoYWtlL3Rsc2hkLmNgIC0gSGFuZGxlcyBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGAgd2l0aGluIHRoZSBkb25lIGNhbGxiYWNrLCBhbmQgdGhpcyBpcyBhbm90aGVyIGltcG9ydGFudCBwb2ludCB0byBiZSBhd2FyZSBvZi4KCk5leHQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgbmV0L2hhbmRzaGFrZS9gIHRoYXQgYXJlIGFmZmVjdGVkPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2FsbGVycyBvciByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljfF5pbnR8XnZvaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvYWxlcnQuYy0zMy0gKi9cbm5ldC9oYW5kc2hha2UvYWxlcnQuYzozNDppbnQgdGxzX2FsZXJ0X3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgdTggbGV2ZWwsIHU4IGRlc2NyaXB0aW9uKVxubmV0L2hhbmRzaGFrZS9hbGVydC5jLTM1LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmM9ODc9RVhQT1JUX1NZTUJPTCh0bHNfZ2V0X3JlY29yZF90eXBlKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmMtOTYtICovXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmM6OTc6dm9pZCB0bHNfYWxlcnRfcmVjdihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9oYW5kc2hha2UvYWxlcnQuYy05OC1cdFx0ICAgIHU4ICpsZXZlbCwgdTggKmRlc2NyaXB0aW9uKVxuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE1LS8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi9cbm5ldC9oYW5kc2hha2UvZ2VubC5jOjE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHtcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE3LVx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMi1cdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTI3LS8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTI5LVx0e1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTQ0LVxubmV0L2hhbmRzaGFrZS9nZW5sLmM6NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBoYW5kc2hha2VfbmxfbWNncnBzW10gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00Ni1cdFtIQU5EU0hBS0VfTkxHUlBfTk9ORV0gPSB7IFwmIzM0O25vbmVcJiMzNDssIH0sXG4tLVxubmV0L2hhbmRzaGFrZS9nZW5sLmgtMTUtXG5uZXQvaGFuZHNoYWtlL2dlbmwuaDoxNjppbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L2hhbmRzaGFrZS9nZW5sLmg6MTc6aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvaGFuZHNoYWtlL2dlbmwuaC0xOC1cbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MjA9TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtFWFBPUlRFRF9GT1JfS1VOSVRfVEVTVElOR1wmIzM0Oyk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjEtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MjI6c3RhdGljIGludCB0ZXN0X2FjY2VwdF9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjMtXHRcdFx0ICAgIGludCBmZClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjctXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Mjg6c3RhdGljIHZvaWQgdGVzdF9kb25lX2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yOS1cdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0zMz1zdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtIHtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzktXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDA6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQxLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTk9ORSxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDMtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDQ6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ1LVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNCA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MjpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzUgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTMtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTYtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTc6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b182ID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTU4LVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTYzLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjY0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy02NS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy02OS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo3MDpzdGF0aWMgY29uc3Rcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy03MS1zdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zW10gPSB7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExNS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMTY6c3RhdGljIHZvaWRcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMTctaGFuZHNoYWtlX3JlcV9hbGxvY19nZXRfZGVzYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MTI0PUtVTklUX0FSUkFZX1BBUkFNKGhhbmRzaGFrZV9yZXFfYWxsb2MsIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zLFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjYtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI3OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfYWxsb2NfY2FzZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI4LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTQ1LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE0NjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTQ3LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTY0LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE2NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTY2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTgyLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE4MzpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTg0LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjA3LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjIwODpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjA5LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjQ0LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI0NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjQ2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjg1LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI4NjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjg3LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzIzLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjMyNDpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzI1LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzYxLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM2MjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzYzLXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDExLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQxMjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDEzLXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDY1LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ2NjpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfZGVzdHJveV90ZXN0O1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2Ny1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0Njg6c3RhdGljIHZvaWQgdGVzdF9kZXN0cm95X2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00Njkte1xuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NzItXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDczOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZGVzdHJveSA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NzQtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDc5LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ4MDpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2Rlc3Ryb3lfdGVzdDEoc3RydWN0IGt1bml0ICp0ZXN0KVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ4MS17XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUxOC1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MTk6c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGhhbmRzaGFrZV9hcGlfdGVzdF9jYXNlc1tdID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUyMC1cdHtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTY3LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjU2ODpzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGhhbmRzaGFrZV9hcGlfc3VpdGUgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTY5LSAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9IFwmIzM0O0hhbmRzaGFrZSBBUEkgdGVzdHNcJiMzNDssXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaD02Nz1lbnVtIGhwX2ZsYWdzX2JpdHMge1xuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzEtLyogYWxlcnQuYyAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo3MjppbnQgdGxzX2FsZXJ0X3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgdTggbGV2ZWwsIHU4IGRlc2NyaXB0aW9uKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzMtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTc0LS8qIG5ldGxpbmsuYyAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo3NTppbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTc2LVx0XHRcdCAgZ2ZwX3QgZmxhZ3MpO1xuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg9ODI9c3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfYWxsb2MoY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTgzLVx0XHRcdFx0XHQgIGdmcF90IGZsYWdzKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODQ6aW50IGhhbmRzaGFrZV9yZXFfaGFzaF9pbml0KHZvaWQpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4NTp2b2lkIGhhbmRzaGFrZV9yZXFfaGFzaF9kZXN0cm95KHZvaWQpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4Njp2b2lkICpoYW5kc2hha2VfcmVxX3ByaXZhdGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTg3LXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2hhc2hfbG9va3VwKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTg4PXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX25leHQoc3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuLCBpbnQgY2xhc3MpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4OTppbnQgaGFuZHNoYWtlX3JlcV9zdWJtaXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtOTAtXHRcdFx0IGdmcF90IGZsYWdzKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6OTE6dm9pZCBoYW5kc2hha2VfY29tcGxldGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtOTItXHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMzYtICovXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzozNzppbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0zOC1cdFx0XHQgIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jPTg4PUVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX2dlbmxfcHV0KTtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTg5LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6OTA6aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtOTEte1xuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEzMi1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEzMzppbnQgaGFuZHNoYWtlX25sX2RvbmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTM0LXtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNjYtXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjc6c3RhdGljIHVuc2lnbmVkIGludCBoYW5kc2hha2VfbmV0X2lkO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTY4LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTY5OnN0YXRpYyBpbnQgX19uZXRfaW5pdCBoYW5kc2hha2VfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTcwLXtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xOTAtXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxOTE6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBoYW5kc2hha2VfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTkyLXtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0yMTktXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoyMjA6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBoYW5kc2hha2VfZ2VubF9uZXRfb3BzID0ge1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjIxLVx0LmluaXRcdFx0PSBoYW5kc2hha2VfbmV0X2luaXQsXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MjM5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3Blcm5ldCk7XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0yNDAtXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoyNDE6c3RhdGljIGludCBfX2luaXQgaGFuZHNoYWtlX2luaXQodm9pZClcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTI0Mi17XG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjc2LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6Mjc3OnN0YXRpYyB2b2lkIF9fZXhpdCBoYW5kc2hha2VfZXhpdCh2b2lkKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjc4LXtcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy00MC1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjQxOnN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSBoYW5kc2hha2Vfcmhhc2h0YmwgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQyLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6NDM6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBoYW5kc2hha2Vfcmhhc2hfcGFyYW1zID0ge1xubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNDQtXHQua2V5X2xlblx0XHQ9IHNpemVvZl9maWVsZChzdHJ1Y3QgaGFuZHNoYWtlX3JlcSwgaHJfc2spLFxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQ5LVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6NTA6aW50IGhhbmRzaGFrZV9yZXFfaGFzaF9pbml0KHZvaWQpXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy01MS17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNTQtXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo1NTp2b2lkIGhhbmRzaGFrZV9yZXFfaGFzaF9kZXN0cm95KHZvaWQpXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy01Ni17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9NjU9RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChoYW5kc2hha2VfcmVxX2hhc2hfbG9va3VwKTtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTY2LVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6Njc6c3RhdGljIGJvb2wgaGFuZHNoYWtlX3JlcV9oYXNoX2FkZChzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxKVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNjgte1xuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTc2LVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6Nzc6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9kZXN0cm95KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy03OC17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtODUtXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo4NjpzdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtODcte1xuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTEzMT1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfYWxsb2MpO1xuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEzNy0gKi9cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEzODp2b2lkICpoYW5kc2hha2VfcmVxX3ByaXZhdGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEzOS17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MTQyPUVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX3JlcV9wcml2YXRlKTtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE0My1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjE0NDpzdGF0aWMgYm9vbCBfX2FkZF9wZW5kaW5nX2xvY2tlZChzdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaG4sXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNDUtXHRcdFx0XHQgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNTMtXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoxNTQ6c3RhdGljIHZvaWQgX19yZW1vdmVfcGVuZGluZ19sb2NrZWQoc3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuLFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTU1LVx0XHRcdFx0ICAgIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTY4LSAqL1xubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTY5OnN0YXRpYyBib29sIHJlbW92ZV9wZW5kaW5nKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiwgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE3MC17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MjE5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3JlcV9uZXh0KTtcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0yNTAtICovXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoyNTE6aW50IGhhbmRzaGFrZV9yZXFfc3VibWl0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0yNTItXHRcdFx0IGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTMyMj1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfc3VibWl0KTtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTMyMy1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjMyNDp2b2lkIGhhbmRzaGFrZV9jb21wbGV0ZShzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxLCBpbnQgc3RhdHVzLFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMzI1LVx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTI3PXN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSB7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQzLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjQ0OnN0YXRpYyBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKlxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQ1LXRsc19oYW5kc2hha2VfcmVxX2luaXQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNjAtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NjE6c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNjItXHRcdFx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy05NC0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo5NTpzdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy05Ni1cdFx0XHQgICAgICAgaW50IHN0YXR1cywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19LRVlTKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExMjpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTMte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDQtI2Vsc2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDU6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1MTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTItXHRcdFx0XHRcdCAgIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTYyLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE2MzpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKHN0cnVjdCBza19idWZmICptc2csXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTY0LVx0XHRcdFx0XHQgc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xOTUtICovXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTk2OnN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9hY2NlcHQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xOTctXHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgZmQpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI2Ni1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyNjc6c3RhdGljIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gdGxzX2hhbmRzaGFrZV9wcm90byA9IHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNjgtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjg1LSAqL1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI4NjppbnQgdGxzX2NsaWVudF9oZWxsb19hbm9uKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI4Ny17XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTMwMD1FWFBPUlRfU1lNQk9MKHRsc19jbGllbnRfaGVsbG9fYW5vbik7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTMxMS0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozMTI6aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTMte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMjg9RVhQT1JUX1NZTUJPTCh0bHNfY2xpZW50X2hlbGxvX3g1MDkpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNDAtICovXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzQxOmludCB0bHNfY2xpZW50X2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNDIte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNjM9RVhQT1JUX1NZTUJPTCh0bHNfY2xpZW50X2hlbGxvX3Bzayk7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM3NC0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozNzU6aW50IHRsc19zZXJ2ZXJfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzYte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zOTE9RVhQT1JUX1NZTUJPTCh0bHNfc2VydmVyX2hlbGxvX3g1MDkpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDItICovXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NDAzOmludCB0bHNfc2VydmVyX2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDQte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz00Mzg9RVhQT1JUX1NZTUJPTCh0bHNfaGFuZHNoYWtlX2NhbmNlbCk7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQ0NC0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0NDU6dm9pZCB0bHNfaGFuZHNoYWtlX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNDEKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhhbmRzaGFrZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBgRm9jdXNTeW1ib2xzYC4gSXQgc2VlbXMgd2UmIzM5O3ZlIHNlbGVjdGVkIHRoZXNlOiBgaGFuZHNoYWtlX3JlcV9hbGxvY2AsIHdoaWNoIGhhcyBtb2RpZmllZCBsb2dpYzsgdGhlbiBgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0YCB3aGljaCBoYW5kbGVzIHRoZSBOZXRsaW5rIGFjY2VwdCByZXF1ZXN0IGFuZCB2YWxpZGF0ZXMgYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYDsgbmV4dCBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAgd2hpY2ggYWxzbyBoYW5kbGVzIGEgTmV0bGluayByZXF1ZXN0IGJ1dCBzcGVjaWZpY2FsbHkgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGhhbmRzaGFrZSwgdmFsaWRhdGluZyBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGA7IGFuZCBmaW5hbGx5LCBgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc2Agd2hpY2ggcHJvY2Vzc2VzIHRoZSBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGAgbmV0bGluayBhdHRyaWJ1dGUuIFRob3NlIHNlZW0gbGlrZSBzZW5zaWJsZSB0YXJnZXRzIGZvciBmb2N1c2luZyBvdXIgZnV6emluZyBlZmZvcnRzLgoKTmV4dCwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0LiBXZSBoYXZlIGBORVRfSEFORFNIQUtFYCBhbmQgYFNVTlJQQ2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBhcHByb3ByaWF0ZSwgZ2l2ZW4gdGhlIGhhbmRzaGFrZSBmb2N1cy4KCkFscmlnaHQsIG5vdyB0byBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgcHJvbXB0OiB3ZSBoYXZlIGBXb3J0aEZ1enppbmdgIHdoaWNoIEkgYXNzdW1lIGlzIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIGZ1enppbmcgaXMgd2FycmFudGVkLCB0aGVuIHRoZSBgRm9jdXNTeW1ib2xzYCwgYSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmVuJiMzOTt0IHViaXF1aXRvdXMsIGFuZCBmaW5hbGx5IHRoZSBgRW5hYmxlQ29uZmlnc2Agd2hpY2ggYXJlIHN0cmluZ3Mgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gQ2hlY2ssIGNoZWNrLCBjaGVjay4gTG9va3MgbGlrZSBldmVyeXRoaW5nIG1lZXRzIHRoZSByZXF1aXJlbWVudHMuCgpPa2F5LCBldmVyeXRoaW5nIGFwcGVhcnMgc291bmQgYW5kIGFjY3VyYXRlLiBMZXQmIzM5O3MgZ28gYWhlYWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAgICYjMzQ7U1VOUlBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7LAogICAgJiMzNDtoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2RvbmVfZG9pdCYjMzQ7LAogICAgJiMzNDt0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAgICYjMzQ7U1VOUlBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7LAogICAgJiMzNDtoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2RvbmVfZG9pdCYjMzQ7LAogICAgJiMzNDt0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBoYW5kc2hha2UgbmV0bGluayBzcGVjaWZpY2F0aW9uIGFuZCBpbnRlcm5hbCBrZXJuZWwgZGVmaW5pdGlvbnMgdG8gc3RhbmRhcmRpemUgdGhlIGVudW0gbmFtaW5nIGNvbnZlbnRpb24gKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC8gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKSBhbmQgdXBkYXRlcyBuZXRsaW5rIHBvbGljaWVzIChjaGFuZ2luZyByZW1vdGUtYXV0aCBmcm9tIE5MQV9VMzIgdG8gTkxBX1MzMiBmb3Iga2V5X3NlcmlhbF90IGFuZCBhZGp1c3RpbmcgdGhlIG1heCBoYW5kbGVyIGNsYXNzIHBvbGljeSkuXG5cblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJkZDI4ZTg3Y2ZkZjg5OTg2ODJlODU4NGUzNWViMDliYjFjZDFmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDc6NDM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwKaW5kZXggZmZlYzEyYjQ2NzU5Ny4uMDQ5OGFkYTJkZDk3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbApAQCAtMjIsNyAmIzQzOzIyLDggQEAgZGVmaW5pdGlvbnM6CiAgICAgdHlwZTogZW51bQogICAgIG5hbWU6IGhhbmRsZXItY2xhc3MKICAgICB2YWx1ZS1zdGFydDogMAotICAgIGVudHJpZXM6IFtub25lLCB0bHNoZCwgbWF4XQomIzQzOyAgICBlbnRyaWVzOiBbbm9uZSwgdGxzaGRdCiYjNDM7ICAgIHJlbmRlci1tYXg6IHRydWUKICAgLQogICAgIHR5cGU6IGVudW0KICAgICBuYW1lOiBtc2ctdHlwZQpAQCAtNjcsNyAmIzQzOzY4LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIGVudW06IGF1dGgKICAgICAgIC0KICAgICAgICAgbmFtZTogcGVlci1pZGVudGl0eQotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlCkBAIC03OSw3ICYjNDM7ODAsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGtleXJpbmcKLSAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICB0eXBlOiBzMzIKICAgLQogICAgIG5hbWU6IGRvbmUKICAgICBhdHRyaWJ1dGVzOgpAQCAtOTMsNyAmIzQzOzk0LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHMzMgogICAgICAgLQogICAgICAgICBuYW1lOiByZW1vdGUtYXV0aAotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAKIG9wZXJhdGlvbnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmgKaW5kZXggZDdlNDBmNTk0ODg4Ni4uZjkwN2FhMDgyNTIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaApAQCAtMTMsNyAmIzQzOzEzLDEwIEBACiBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzIHsKIAlIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLAogCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELAotCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCwKJiM0MzsKJiM0MzsJLyogcHJpdmF0ZTogKi8KJiM0MzsJX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsCiYjNDM7CUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCA9IChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAtIDEpCiB9OwogCiBlbnVtIGhhbmRzaGFrZV9tc2dfdHlwZSB7CmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2dlbmwuYyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0Ci0tLSBhL25ldC9oYW5kc2hha2UvZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCkBAIC0xNCwxNCAmIzQzOzE0LDE0IEBACiAKIC8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHsKLQlbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksCiYjNDM7CVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKSwKIH07CiAKIC8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7CiAJW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksCiAJW0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LAotCVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzOwlbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSwKIH07CiAKIC8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovCmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMKaW5kZXggM2RkNTA3NDcwZDVmZS4uNGI5OWFjZDlmOWM3ZSAxMDA2NDQKLS0tIGEvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYwpAQCAtNDIsNyAmIzQzOzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0gewogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0gewotCS5ocF9oYW5kbGVyX2NsYXNzCT0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAomIzQzOwkuaHBfaGFuZGxlcl9jbGFzcwk9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwppbmRleCBjZDMwZDU0ZDA1MDFkLi5mZjczOWVlODFjYjgyIDEwMDY0NAotLS0gYS9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90bywKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHByb3RvLSZndDtocF9oYW5kbGVyX2NsYXNzICZsdDs9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpCiAJCXJldHVybiBOVUxMOwotCWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpCiYjNDM7CWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKCFwcm90by0mZ3Q7aHBfYWNjZXB0IHx8ICFwcm90by0mZ3Q7aHBfZG9uZSkKIAkJcmV0dXJuIE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOL0tBU0FOIFBhdGNoIEV2YWx1YXRpb24gLSBIYW5kc2hha2UgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIEtNU0FOL0tBU0FOIGFwcGxpY2FiaWxpdHkuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgdHJ1ZSBvciBmYWxzZSBhbmQgcmVjb3JkIG15IHJlYXNvbmluZyB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGRpZmYgdGFyZ2V0cyB0aGUgaGFuZHNoYWtlIHN1YnN5c3RlbSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgcmVhZC10aHJvdWdoIHNob3dzIHRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBzdHJ1Y3R1cmVzIGFuZCBlbnVtcyB3aXRoaW4gdGhlIG5ldGxpbmsgaGFuZHNoYWtlIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgdG8gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLCBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCBgbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jYCwgYW5kIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuCgpUaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlOgoKKiAgICoqRW51bSBjaGFuZ2VzOioqIFRoZSBgaGFuZHNoYWtlX2hhbmRsZXJfY2xhc3NgIGVudW0gaGFzIGJlZW4gbW9kaWZpZWQuICBXZSYjMzk7dmUgZ290IG5ldyBlbnRyaWVzIGxpa2UgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkVgIGFuZCBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSERgLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgaXMgYmVpbmcgYWRqdXN0ZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcmVkIGZsYWcsIGFzIGVudW0gY2hhbmdlcyBjYW4gc29tZXRpbWVzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCiogICAqKlR5cGUgY2hhbmdlczoqKiBTZXZlcmFsIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBuZXRsaW5rIG1lc3NhZ2VzIChgcGVlci1pZGVudGl0eWAsIGBrZXlyaW5nYCwgYHJlbW90ZS1hdXRoYCkgYXJlIGhhdmluZyB0aGVpciB0eXBlcyBzd2l0Y2hlZCBmcm9tIGB1MzJgIHRvIGBzMzJgLgoqICAgKipQb2xpY3kgYWRqdXN0bWVudHM6KiogVGhlIG5ldGxpbmsgcG9saWN5IGZvciBoYW5kbGluZyBoYW5kc2hha2UgbWVzc2FnZXMgKGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAsIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgKSBpcyBiZWluZyBtb2RpZmllZCB0byByZWZsZWN0IHRoZXNlIHR5cGUgY2hhbmdlcy4KKiAgICoqQm91bmRzIENoZWNrczoqKiBUaGVyZSYjMzk7cyBhIHNsaWdodCBhZGp1c3RtZW50IHRvIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGAmZ3Q7YCBpbnN0ZWFkIG9mIGAmZ3Q7PWAgcmVsYXRpbmcgdG8gIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLgoKTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlICptaWdodCogaW50cm9kdWNlIG5ldyBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIHR5cGUgY2hhbmdlcyBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnRlZ2VycyBhcmUgY29uY2VybmluZy4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIHBlcmZlY3RseSBmaW5lIGFuZCBpcyBqdXN0IGEgbmVjZXNzYXJ5IHJlZmluZW1lbnQsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgb3JpZ2luYWwgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyB1c2VkIGluIHNjZW5hcmlvcyB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIHNpZ25lZCBpbnRlZ2VyIHR5cGUuCgpUbyBkZXRlcm1pbmUgYE5lZWRzS01TQU5gIGRlZmluaXRpdmVseSwgSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGVzZSBhdHRyaWJ1dGVzIHJlcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgaGFuZHNoYWtlX2hhbmRsZXJfY2xhc3NgIGlzIGFsbCBhYm91dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aG9zZSB0eXBlIGNoYW5nZXMgYW5kIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSByaXNrIG9mIGludGVnZXIgb3ZlcmZsb3csIHVuZGVyZmxvdywgb3Igc2lnbiBleHRlbnNpb24gaXNzdWVzLiBTbywgSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZm9sbG93IGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBwb2ludGVyIGFyaXRobWV0aWMgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbiBpbnZvbHZlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGlzIGRlYWxzIHdpdGggcG90ZW50aWFsbHkgbmV0d29yay1yZWxhdGVkIGRhdGEgKHRoZSBoYW5kc2hha2UgcHJvdG9jb2wpLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBgbmV0L2hhbmRzaGFrZWAgbW9kdWxlIGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjaGFuZ2VzLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBLTVNBTiB3b3VsZCBiZSB2YWx1YWJsZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlL2dlbmwuYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MgJiM0MzsgMV0gPSB7XG4tLVxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjAtLyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCAmIzQzOyAxXSA9IHtcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIyLVx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMy1cdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjI0Olx0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yNS19O1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jPTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdID0ge1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTM5LVx0XHQucG9saWN5XHRcdD0gaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5LFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6NDA6XHRcdC5tYXhhdHRyXHQ9IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgsXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00MS1cdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz02MT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzAtXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NzE6XHRcdGlmIChubGFfdHlwZShubGEpID09IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgpXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzItXHRcdFx0aSYjNDM7JiM0Mzs7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgwLVx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjgxOlx0XHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgyLVx0XHRcdHRyZXEtXHUwMDNldGhfcGVlcmlkW2kmIzQzOyYjNDM7XSA9IG5sYV9nZXRfdTMyKG5sYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3QgbWF0dGVyOgoKKipEZWVwIERpdmUgaW50byBgbmV0L2hhbmRzaGFrZWAgQ29tcG9uZW50cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgaG93IGBuZXQvaGFuZHNoYWtlYCBvcmNoZXN0cmF0ZXMgdGhpbmdzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW50ZXJwbGF5IG9mIGhhbmRsZXIgY2xhc3NlcywgcGVlci1pZGVudGl0eSBtYW5hZ2VtZW50LCB0aGUga2V5cmluZywgYW5kIHJlbW90ZSBhdXRoZW50aWNhdGlvbiB3aXRoaW4gdGhpcyBtb2R1bGUuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBlbGVtZW50cyB0byBtYWtlIGEganVkZ2VtZW50LgoKVGhlcmVmb3JlLCB0aGUgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIG1ldGhvZGljYWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvaGFuZHNoYWtlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBnb2luZyB0byBiZSBsYWlkIG91dCwgdGhlIGFjdHVhbCBjb2RlIHRoYXQgZGVmaW5lcyB0aGVzZSBpbnRlcmFjdGlvbnMuIFRoaXMgc2hvdWxkIGFsbG93IGEgZGVlcCBkaXZlIGludG8gaG93IHRoZXNlIHN5c3RlbXMgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWxlcnQuYyYjMzQ7LAogICAgJiMzNDtnZW5sLmMmIzM0OywKICAgICYjMzQ7Z2VubC5oJiMzNDssCiAgICAmIzM0O2hhbmRzaGFrZS10ZXN0LmMmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlLmgmIzM0OywKICAgICYjMzQ7bmV0bGluay5jJiMzNDssCiAgICAmIzM0O3JlcXVlc3QuYyYjMzQ7LAogICAgJiMzNDt0bHNoZC5jJiMzNDssCiAgICAmIzM0O3RyYWNlLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcyBhc3N1bWluZyBleHBlcnRpc2UgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaWdnaW5nIGludG8gdGhlIEhhbmRzaGFrZSBQcm90b2NvbCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBoYW5kc2hha2UgcHJvdG9jb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGFsbCB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVzc2FnZSBoYW5kbGluZy4gU28sIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIGEgZmV3IGtleSBmaWxlcy4gSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9oYW5kc2hha2UvZ2VubC5oYC4gVGhhdCBoZWFkZXIgd2lsbCBwcm9iYWJseSBvdXRsaW5lIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIGRlZmluaXRpb25zIGFuZCBhbnkgY3VzdG9tIG1lc3NhZ2UgdHlwZXMgdXNlZCBpbiB0aGUgaGFuZHNoYWtlLiBUaGVuIEkgbmVlZCB0byBzZWUgaG93IHRob3NlIG1lc3NhZ2UgdHlwZXMgYXJlIHByb2Nlc3NlZCBhbmQgaGFuZGxlZCwgc28gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCBpcyB0aGUgbmV4dCBvYnZpb3VzIHRhcmdldDsgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmFjdGlvbiBsb2dpYyB1c3VhbGx5IHJlc2lkZXMuIEFuZCBmaW5hbGx5LCBiZWNhdXNlIHRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyBzcGVjaWZpYywgSSBuZWVkIHRvIHNlZSB3aGF0IGBuZXQvaGFuZHNoYWtlL3Rsc2hkLmNgIGRlYWxzIHdpdGguIEkgYmV0IHRoYXQgaGFuZGxlcyBhbnkgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhhbmRzaGFrZSBEZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZXJfaWRlbnRpdHl8a2V5cmluZ3xyZW1vdGVfYXV0aHxIQU5EU0hBS0VfQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9nZW5sLmMtMTUtLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICYjNDM7IDFdID0ge1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTc6XHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xOC19O1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMjpcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjM6XHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyNDpcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjUtfTtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zMi1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5LFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MzM6XHRcdC5tYXhhdHRyXHQ9IEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzQtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zOS1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjQwOlx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNDEtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0zNz1pbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNTktXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzo2MDpcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNjEtXHRcdFx0cHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykgXHUwMDNjIDApIHtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz05MD1pbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTAxLVx0ZXJyID0gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEwMjpcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEwMy1cdFx0Z290byBvdXRfc3RhdHVzO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTA0Olx0Y2xhc3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDUtXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MTMzPWludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTM5LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQwOlx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfRE9ORV9TT0NLRkQpKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE0MjpcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0pO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQzLVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE1OC1cdHN0YXR1cyA9IC1FSU87XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNTk6XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjA6XHRcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE2MS1cbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjc9c3RydWN0IHRsc19oYW5kc2hha2VfcmVxIHtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzUtXHRjb25zdCBjaGFyXHRcdCp0aF9wZWVybmFtZTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozNjpcdGtleV9zZXJpYWxfdFx0XHR0aF9rZXlyaW5nO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM3LVx0a2V5X3NlcmlhbF90XHRcdHRoX2NlcnRpZmljYXRlO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz00NT10bHNfaGFuZHNoYWtlX3JlcV9pbml0KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTUzLVx0dHJlcS1cdTAwM2V0aF9wZWVybmFtZSA9IGFyZ3MtXHUwMDNldGFfcGVlcm5hbWU7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NTQ6XHR0cmVxLVx1MDAzZXRoX2tleXJpbmcgPSBhcmdzLVx1MDAzZXRhX2tleXJpbmc7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNTUtXHR0cmVxLVx1MDAzZXRoX251bV9wZWVyaWRzID0gMDtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9NjE9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcwLVx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjcxOlx0XHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcyLVx0XHRcdGkmIzQzOyYjNDM7O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04MC1cdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo4MTpcdFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04Mi1cdFx0XHR0cmVxLVx1MDAzZXRoX3BlZXJpZFtpJiM0MzsmIzQzO10gPSBubGFfZ2V0X3UzMihubGEpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz05NT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19LRVlTKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExMjpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTMte1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExNDpcdGtleV9yZWZfdCBwcm9jZXNzX2tleXJpbmdfcmVmLCBrZXlyaW5nX3JlZjtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTUtXHRpbnQgcmV0O1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExNi1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTc6XHRpZiAodHJlcS1cdTAwM2V0aF9rZXlyaW5nID09IFRMU19OT19LRVlSSU5HKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExOC1cdFx0cmV0dXJuIDA7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTE5LVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEyMDpcdHByb2Nlc3Nfa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoS0VZX1NQRUNfUFJPQ0VTU19LRVlSSU5HLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEyMS1cdFx0XHRcdFx0ICAgICAgS0VZX0xPT0tVUF9DUkVBVEUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTIyLVx0XHRcdFx0XHQgICAgICBLRVlfTkVFRF9XUklURSk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTIzOlx0aWYgKElTX0VSUihwcm9jZXNzX2tleXJpbmdfcmVmKSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEyNDpcdFx0cmV0ID0gUFRSX0VSUihwcm9jZXNzX2tleXJpbmdfcmVmKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjUtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjctXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTI4Olx0a2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkodHJlcS1cdTAwM2V0aF9rZXlyaW5nLCBLRVlfTE9PS1VQX0NSRUFURSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjktXHRcdFx0XHQgICAgICBLRVlfTkVFRF9MSU5LKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMzA6XHRpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEzMTpcdFx0cmV0ID0gUFRSX0VSUihrZXlyaW5nX3JlZik7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTMyLVx0XHRnb3RvIG91dF9wdXRfa2V5O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzQtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM1Olx0cmV0ID0ga2V5X2xpbmsoa2V5X3JlZl90b19wdHIocHJvY2Vzc19rZXlyaW5nX3JlZiksXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM2Olx0XHQgICAgICAga2V5X3JlZl90b19wdHIoa2V5cmluZ19yZWYpKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzctXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM4Olx0a2V5X3JlZl9wdXQoa2V5cmluZ19yZWYpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEzOS1vdXRfcHV0X2tleTpcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDA6XHRrZXlfcmVmX3B1dChwcm9jZXNzX2tleXJpbmdfcmVmKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDEtb3V0OlxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDQtI2Vsc2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDU6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1MTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTItXHRcdFx0XHRcdCAgIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTU2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHJlcS1cdTAwM2V0aF9udW1fcGVlcmlkczsgaSYjNDM7JiM0MzspXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTU3Olx0XHRpZiAobmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUl9JREVOVElUWSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTgtXHRcdFx0XHR0cmVxLVx1MDAzZXRoX3BlZXJpZFtpXSkgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTE2Mz1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3MS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzI6XHRlbnRyeV9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfQ0VSVElGSUNBVEUpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3My1cdGlmICghZW50cnlfYXR0cilcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc1LVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE3NjpcdGlmIChubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX1g1MDlfQ0VSVCxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzctXHRcdFx0dHJlcS1cdTAwM2V0aF9jZXJ0aWZpY2F0ZSkgfHxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzg6XHQgICAgbmxhX3B1dF9zMzIobXNnLCBIQU5EU0hBS0VfQV9YNTA5X1BSSVZLRVksXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc5LVx0XHRcdHRyZXEtXHUwMDNldGhfcHJpdmtleSkpIHtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MTk2PXN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9hY2NlcHQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjAzLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIwNDpcdHJldCA9IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHRyZXEpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIwNS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxNS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMTY6XHRyZXQgPSBubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9TT0NLRkQsIGZkKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTctXHRpZiAocmV0IFx1MDAzYyAwKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxOC1cdFx0Z290byBvdXRfY2FuY2VsO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxOTpcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX01FU1NBR0VfVFlQRSwgdHJlcS1cdTAwM2V0aF90eXBlKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjAtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjItXHRpZiAodHJlcS1cdTAwM2V0aF9wZWVybmFtZSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyMzpcdFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUk5BTUUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI0LVx0XHRcdFx0ICAgICB0cmVxLVx1MDAzZXRoX3BlZXJuYW1lKTtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI4LVx0aWYgKHRyZXEtXHUwMDNldGhfdGltZW91dF9tcykge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyOTpcdFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfVElNRU9VVCwgdHJlcS1cdTAwM2V0aF90aW1lb3V0X21zKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzAtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzMi1cdH1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMzM6XHRpZiAodHJlcS1cdTAwM2V0aF9rZXlyaW5nKSB7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjM0Olx0XHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9LRVlSSU5HLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIzNTpcdFx0XHRcdCAgdHJlcS1cdTAwM2V0aF9rZXlyaW5nKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzYtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzOS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyNDA6XHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9BVVRIX01PREUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQxLVx0XHRcdCAgdHJlcS1cdTAwM2V0aF9hdXRoX21vZGUpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNDQtXHRzd2l0Y2ggKHRyZXEtXHUwMDNldGhfYXV0aF9tb2RlKSB7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQ1Olx0Y2FzZSBIQU5EU0hBS0VfQVVUSF9QU0s6XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQ2Olx0XHRyZXQgPSB0bHNfaGFuZHNoYWtlX3B1dF9wZWVyX2lkZW50aXR5KG1zZywgdHJlcSk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQ3LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNDktXHRcdGJyZWFrO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI1MDpcdGNhc2UgSEFORFNIQUtFX0FVVEhfWDUwOTpcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNTEtXHRcdHJldCA9IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKG1zZywgdHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTI4Nj1pbnQgdGxzX2NsaWVudF9oZWxsb19hbm9uKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yOTUtXHR0cmVxLVx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfQ0xJRU5USEVMTE87XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6Mjk2Olx0dHJlcS1cdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9VTkFVVEg7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjk3LVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMTI9aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzIxLVx0dHJlcS1cdTAwM2V0aF90eXBlID0gSEFORFNIQUtFX01TR19UWVBFX0NMSUVOVEhFTExPO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjMyMjpcdHRyZXEtXHUwMDNldGhfYXV0aF9tb2RlID0gSEFORFNIQUtFX0FVVEhfWDUwOTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMjMtXHR0cmVxLVx1MDAzZXRoX2NlcnRpZmljYXRlID0gYXJncy1cdTAwM2V0YV9teV9jZXJ0O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNDE9aW50IHRsc19jbGllbnRfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTUtXHR0cmVxLVx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfQ0xJRU5USEVMTE87XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzU2Olx0dHJlcS1cdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9QU0s7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzU3LVx0dHJlcS1cdTAwM2V0aF9udW1fcGVlcmlkcyA9IGFyZ3MtXHUwMDNldGFfbnVtX3BlZXJpZHM7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM3NT1pbnQgdGxzX3NlcnZlcl9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zODQtXHR0cmVxLVx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfU0VSVkVSSEVMTE87XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6Mzg1Olx0dHJlcS1cdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9YNTA5O1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM4Ni1cdHRyZXEtXHUwMDNldGhfY2VydGlmaWNhdGUgPSBhcmdzLVx1MDAzZXRhX215X2NlcnQ7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQwMz1pbnQgdGxzX3NlcnZlcl9oZWxsb19wc2soY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQxMi1cdHRyZXEtXHUwMDNldGhfdHlwZSA9IEhBTkRTSEFLRV9NU0dfVFlQRV9TRVJWRVJIRUxMTztcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0MTM6XHR0cmVxLVx1MDAzZXRoX2F1dGhfbW9kZSA9IEhBTkRTSEFLRV9BVVRIX1BTSztcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MTQtXHR0cmVxLVx1MDAzZXRoX251bV9wZWVyaWRzID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODAKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogODg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBIYW5kc2hha2UgU3Vic3lzdGVtIENsZWFudXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBmb2N1c2luZyBvbiB0aWR5aW5nIHVwIHRoZSBoYW5kc2hha2Ugc3Vic3lzdGVtJiMzOTtzIEFQSSBhbmQgYXNzb2NpYXRlZCBuZXRsaW5rIHBvbGljaWVzLiBJIHNlZSBpdCBzdGFydHMgYnk6CgoxLiAgKipEb2N1bWVudGF0aW9uIFVwZGF0ZToqKiBNb2RpZnlpbmcgdGhlIFlBTUwgc3BlYyBmb3IgdGhlIGhhbmRzaGFrZSBuZXRsaW5rIGludGVyZmFjZS4gSSYjMzk7bSBub3RpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGBoYW5kbGVyLWNsYXNzYCBlbnVtJiMzOTtzIGByZW5kZXItbWF4YCBwcm9wZXJ0eSwgZWZmZWN0aXZlbHkgc3RhbmRhcmRpemluZyB0aGUgdXNlIG9mIGBfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgYW5kIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIGZvciBkZWZpbmluZyB0aGUgbWF4aW11bSB2YWx1ZS4gVGhpcyBpcyBnb29kIHByYWN0aWNlIGZvciBlbnVtIG1hbmFnZW1lbnQuIEl0IGFsc28gdXBkYXRlcyB0aGUgYXR0cmlidXRlIHR5cGVzIGZvciBwZWVyIGlkZW50aXR5LCBrZXlyaW5nLCBhbmQgcmVtb3RlIGF1dGhlbnRpY2F0aW9uIHRvIHVzZSBzaWduZWQgMzItYml0IGludGVnZXJzIChgczMyYCkgaW5zdGVhZCBvZiB1bnNpZ25lZCAoYHUzMmApLiBUaGlzIGlzIGEgY3JpdGljYWwgZml4LCBnaXZlbiB0aGF0IGtleSBzZXJpYWwgSURzIChga2V5X3NlcmlhbF90YCkgaW4gdGhlIGtlcm5lbCBhcmUgc2lnbmVkIGludGVnZXJzLgoKMi4gICoqSGVhZGVyIGFuZCBQb2xpY3kgQWRqdXN0bWVudHM6KiogSW4gdGhlIGBoYW5kc2hha2UuaGAgaGVhZGVyLCB0aGUgZW51bSBkZWZpbml0aW9uIGlzIG5vdyBjbGVhciwgdXNpbmcgYF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBmb3IgdGhlIGludGVybmFsIHZhbHVlIGFuZCB0aGVuIGRlcml2aW5nIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLiBUaGUgYGdlbmwuY2AgY2hhbmdlcyBhcmUgc2lnbmlmaWNhbnQ6IEkgc2VlIGFkanVzdG1lbnRzIHRvIHRoZSBuZXRsaW5rIHBvbGljeS4gYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYCBub3cgaGFzIHRoZSBjb3JyZWN0IG1heGltdW0gdmFsdWUgKDEpLCBhbmQgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbiBwb2xpY3kmIzM5O3MgdHlwZSBpcyBjb3JyZWN0ZWQgdG8gYE5MQV9TMzJgLCBtaXJyb3JpbmcgdGhlIHNwZWMmIzM5O3MgY2hhbmdlLgoKMy4gICoqVGVzdCBhbmQgVXNhZ2UgVXBkYXRlczoqKiBUaGUgcGF0Y2ggZXZlbiB1cGRhdGVzIHRoZSB0ZXN0IGNvZGUgKGBoYW5kc2hha2UtdGVzdC5jYCkgdG8gdXNlIGBfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgcHJvcGVybHkuIEZpbmFsbHksIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIGluIGByZXF1ZXN0LmNgIG5vdyBjb3JyZWN0bHkgYm91bmRzIHRoZSBgaHBfaGFuZGxlcl9jbGFzc2AgYWdhaW5zdCB0aGUgKmFjdHVhbCogbWF4aW11bSB2YWxpZCB2YWx1ZSAoYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGApLCBub3QgYW4gb2ZmLWJ5LW9uZS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGVyZSBhIHJpc2sgb2YgaW50cm9kdWNpbmcgbWVtb3J5IGlzc3Vlcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgbGVmdC4gVGhpcyBpcyBhIHBvc2l0aXZlIHNpZ24uCiogICAqKk5ldGxpbmsgYXR0cmlidXRlIHZhbGlkYXRpb246KiogVGhlIGNoYW5nZSB0byBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGAgdmFsaWRhdGlvbiBmcm9tIGBOTEFfVTMyYCB0byBgTkxBX1MzMmAgaXMgY3JpdGljYWwsIGJ1dCB0aGUgc2l6ZSByZW1haW5zIHRoZSBzYW1lICg0IGJ5dGVzKS4gVGhlIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgdmFsaWRhdGlvbiBpcyAqdGlnaHRlbmVkKiwgbW92aW5nIHRoZSBtYXggZG93biBmcm9tIDIgdG8gMSAod2hpY2ggaXMgdGhlIGNvcnJlY3QgaGlnaGVzdCB2YWxpZCB2YWx1ZSksIHdoaWNoIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQuCiogICAqKkJvdW5kcyBjaGVja2luZzoqKiBUaGUgdGlnaHRlciBib3VuZHMgY2hlY2tpbmcgaXMgKmdvb2QqLiBXZSYjMzk7cmUgZW5zdXJpbmcgd2UgKmRvbiYjMzk7dCogYWNjZXNzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipJbmZvcm1hdGlvbiBMZWFrYWdlOioqIFRoaXMgaXMgYSBrZXkgYXJlYSwgYW5kIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZXJlJiMzOTtzIG5vIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBoZXJlLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzYWZlIHJlZmFjdG9yaW5nIHBhdGNoLiBJdCYjMzk7cyBhIGNsZWFudXAsIG5vdCBhIG5ldyBmZWF0dXJlIGludHJvZHVjdGlvbiwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGhhemFyZHMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IEtNU0FOLXNwZWNpZmljIHJlcXVpcmVtZW50cyBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGNhbiBwcm9jZWVkIHdpdGhvdXQgS01TQU4gZnV6emluZy4gSXQmIzM5O3MgYSBwdXJlIEFQSS9VQVBJIGNsZWFudXAgYW5kIG5ldGxpbmsgcG9saWN5IGFkanVzdG1lbnQgZm9yIHRoZSBoYW5kc2hha2Ugc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBoYW5kc2hha2UgbmV0bGluayBzcGVjaWZpY2F0aW9uIGFuZCBpbnRlcm5hbCBrZXJuZWwgZGVmaW5pdGlvbnMgdG8gc3RhbmRhcmRpemUgdGhlIGVudW0gbmFtaW5nIGNvbnZlbnRpb24gKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC8gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKSBhbmQgdXBkYXRlcyBuZXRsaW5rIHBvbGljaWVzIChjaGFuZ2luZyByZW1vdGUtYXV0aCBmcm9tIE5MQV9VMzIgdG8gTkxBX1MzMiBmb3Iga2V5X3NlcmlhbF90IGFuZCBhZGp1c3RpbmcgdGhlIG1heCBoYW5kbGVyIGNsYXNzIHBvbGljeSkuXG5cblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IG5ldGxpbmsgcG9saWN5IHZhbGlkYXRpb24gYW5kIGludGVnZXIgYm91bmRzIGNoZWNraW5nLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIHN0cnVjdCBwYWRkaW5nIG1vZGlmaWNhdGlvbnMsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbnkgZ2VuZXJhbCBib3VuZHMgb3IgbG9naWMgaXNzdWVzIGFyZSBzdWZmaWNpZW50bHkgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MDMuNDU0ODAxNDkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTkzNzEwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9IQU5EU0hBS0VcIixcbiAgICBcIlNVTlJQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRzaGFrZV9yZXFfYWxsb2NcIixcbiAgICBcImhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdFwiLFxuICAgIFwiaGFuZHNoYWtlX25sX2RvbmVfZG9pdFwiLFxuICAgIFwidGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjAzLjQ1NDgwNjIyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQzNTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAwNzo0MzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxcXG5pbmRleCBmZmVjMTJiNDY3NTk3Li4wNDk4YWRhMmRkOTdhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxcbkBAIC0yMiw3ICsyMiw4IEBAIGRlZmluaXRpb25zOlxcbiAgICAgdHlwZTogZW51bVxcbiAgICAgbmFtZTogaGFuZGxlci1jbGFzc1xcbiAgICAgdmFsdWUtc3RhcnQ6IDBcXG4tICAgIGVudHJpZXM6IFtub25lLCB0bHNoZCwgbWF4XVxcbisgICAgZW50cmllczogW25vbmUsIHRsc2hkXVxcbisgICAgcmVuZGVyLW1heDogdHJ1ZVxcbiAgIC1cXG4gICAgIHR5cGU6IGVudW1cXG4gICAgIG5hbWU6IG1zZy10eXBlXFxuQEAgLTY3LDcgKzY4LDcgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgZW51bTogYXV0aFxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogcGVlci1pZGVudGl0eVxcbi0gICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIHR5cGU6IHMzMlxcbiAgICAgICAgIG11bHRpLWF0dHI6IHRydWVcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXFxuQEAgLTc5LDcgKzgwLDcgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgdHlwZTogc3RyaW5nXFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBrZXlyaW5nXFxuLSAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgdHlwZTogczMyXFxuICAgLVxcbiAgICAgbmFtZTogZG9uZVxcbiAgICAgYXR0cmlidXRlczpcXG5AQCAtOTMsNyArOTQsNyBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiBzMzJcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHJlbW90ZS1hdXRoXFxuLSAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgdHlwZTogczMyXFxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxcbiBcXG4gb3BlcmF0aW9uczpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oXFxuaW5kZXggZDdlNDBmNTk0ODg4Ni4uZjkwN2FhMDgyNTIwOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcXG5AQCAtMTMsNyArMTMsMTAgQEBcXG4gZW51bSBoYW5kc2hha2VfaGFuZGxlcl9jbGFzcyB7XFxuIFxcdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXFxuIFxcdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi1cXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXFxuK1xcbitcXHQvKiBwcml2YXRlOiAqL1xcbitcXHRfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCxcXG4rXFx0SEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYID0gKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC0gMSlcXG4gfTtcXG4gXFxuIGVudW0gaGFuZHNoYWtlX21zZ190eXBlIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9nZW5sLmMgYi9uZXQvaGFuZHNoYWtlL2dlbmwuY1xcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XFxuLS0tIGEvbmV0L2hhbmRzaGFrZS9nZW5sLmNcXG4rKysgYi9uZXQvaGFuZHNoYWtlL2dlbmwuY1xcbkBAIC0xNCwxNCArMTQsMTQgQEBcXG4gXFxuIC8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi9cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XFxuLVxcdFtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAyKSxcXG4rXFx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxcbiB9O1xcbiBcXG4gLyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIICsgMV0gPSB7XFxuIFxcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxcbiBcXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxuLVxcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxcbitcXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG4gfTtcXG4gXFxuIC8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovXFxuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xcbmluZGV4IDNkZDUwNzQ3MGQ1ZmUuLjRiOTlhY2Q5ZjljN2UgMTAwNjQ0XFxuLS0tIGEvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jXFxuKysrIGIvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jXFxuQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xcbi1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxcbitcXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jIGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcXG5pbmRleCBjZDMwZDU0ZDA1MDFkLi5mZjczOWVlODFjYjgyIDEwMDY0NFxcbi0tLSBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jXFxuKysrIGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0aWYgKHByb3RvLVxcdTAwM2VocF9oYW5kbGVyX2NsYXNzIFxcdTAwM2M9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRpZiAocHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXFx1MDAzZT0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxcbitcXHRpZiAocHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXFx1MDAzZSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRpZiAoIXByb3RvLVxcdTAwM2VocF9hY2NlcHQgfHwgIXByb3RvLVxcdTAwM2VocF9kb25lKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MDUuMTQ2MjIwOTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MzgyMjg3MDY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSEFORFNIQUtFXCIsXG4gICAgXCJTVU5SUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kc2hha2VfcmVxX2FsbG9jXCIsXG4gICAgXCJoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRcIixcbiAgICBcImhhbmRzaGFrZV9ubF9kb25lX2RvaXRcIixcbiAgICBcInRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIE5ldGxpbmsgYXR0cmlidXRlIHR5cGVzIGFuZCB2YWxpZGF0aW9uIHBvbGljaWVzIGZvciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBzZXJ2aWNlIChhY2NlcHQgaGFuZGxlciBjbGFzcyBhbmQgcmVtb3RlIGF1dGgga2V5IElEcykgYW5kIGZpeGVzIHRoZSBib3VuZGFyeSBjaGVjayBpbiBoYW5kc2hha2VfcmVxX2FsbG9jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcgYW5kIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjQzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG5pbmRleCBmZmVjMTJiNDY3NTk3Li4wNDk4YWRhMmRkOTdhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxcbkBAIC0yMiw3ICsyMiw4IEBAIGRlZmluaXRpb25zOlxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IGhhbmRsZXItY2xhc3NcbiAgICAgdmFsdWUtc3RhcnQ6IDBcbi0gICAgZW50cmllczogW25vbmUsIHRsc2hkLCBtYXhdXG4rICAgIGVudHJpZXM6IFtub25lLCB0bHNoZF1cbisgICAgcmVuZGVyLW1heDogdHJ1ZVxuICAgLVxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IG1zZy10eXBlXG5AQCAtNjcsNyArNjgsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIGVudW06IGF1dGhcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwZWVyLWlkZW50aXR5XG4tICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXG5AQCAtNzksNyArODAsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHN0cmluZ1xuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGtleXJpbmdcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAtXG4gICAgIG5hbWU6IGRvbmVcbiAgICAgYXR0cmlidXRlczpcbkBAIC05Myw3ICs5NCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcmVtb3RlLWF1dGhcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAgICAgICBtdWx0aS1hdHRyOiB0cnVlXG4gXG4gb3BlcmF0aW9uczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbmluZGV4IGQ3ZTQwZjU5NDg4ODYuLmY5MDdhYTA4MjUyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaFxuQEAgLTEzLDcgKzEzLDEwIEBAXG4gZW51bSBoYW5kc2hha2VfaGFuZGxlcl9jbGFzcyB7XG4gXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLFxuIFx0SEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXG4rXHQvKiBwcml2YXRlOiAqL1xuK1x0X19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggPSAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKVxuIH07XG4gXG4gZW51bSBoYW5kc2hha2VfbXNnX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvZ2VubC5jIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2dlbmwuY1xuKysrIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbkBAIC0xNCwxNCArMTQsMTQgQEBcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XG4tXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksXG4rXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG4gfTtcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xuIFx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXG4gXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4tXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbitcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuIH07XG4gXG4gLyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cbmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbmluZGV4IDNkZDUwNzQ3MGQ1ZmUuLjRiOTlhY2Q5ZjljN2UgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbisrKyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xuLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuK1x0LmhwX2hhbmRsZXJfY2xhc3NcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuaW5kZXggY2QzMGQ1NGQwNTAxZC4uZmY3MzllZTgxY2I4MiAxMDA2NDRcbi0tLSBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jXG4rKysgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90byxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2M9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHByb3RvLVx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXHUwMDNlPSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpXG4rXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2UgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICghcHJvdG8tXHUwMDNlaHBfYWNjZXB0IHx8ICFwcm90by1cdTAwM2VocF9kb25lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjA1LjE0NjIyMzU5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0Nzc5MDI3NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgVGhpcyBQYXRjaCBTZXJpZXMgZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGJlZW4gZ2l2ZW4gYSBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIGFuZCB0aGUgcXVlc3Rpb24gaXMsIFwiSXMgdGhpcyBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgYXQgc3l6a2FsbGVyP1wiIFJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRvIGEgcXVpY2sgcmlzayBhc3Nlc3NtZW50LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGtlcm5lbCBRQSB0YXNrLCBub3RoaW5nIHRvbyBleG90aWMgaGVyZS4gSSdtIGNhbGxpbmcgaXQgXCJiZW5pZ24gZnVsZmlsbG1lbnQsXCIgbWVhbmluZyB0aGVyZSdzIG5vdGhpbmcgaW5oZXJlbnRseSBkYW5nZXJvdXMgYWJvdXQgKmV2YWx1YXRpbmcqIGl0LiBJdCdzIHNhZmUgZ3JvdW5kLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0IGNvZGUgaXQgdG91Y2hlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGtleSBmaWxlczogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLCBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCBgbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jYCwgYW5kIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIEludGVyZXN0aW5nLiBUaGUgYGhhbmRzaGFrZWAgc3ViZGlyZWN0b3J5IGlzIHRoZSBrZXkgaGVyZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgcmVwb3NpdG9yeSBub3cgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYG5ldC9oYW5kc2hha2UvYCBzdWJzeXN0ZW0sIGhvdyBpdCdzIGNvbmZpZ3VyZWQsIGFuZCB3aGVyZSBpdCdzIGNhbGxlZC4gVGhhdCdsbCBiZSBteSBuZXh0IHN0ZXA6IGZpZ3VyaW5nIG91dCB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IEZvY3VzU3ltYm9scywgRW5hYmxlQ29uZmlncywgYW5kIHRvIGRldGVybWluZSB0aGUgUmVhc29uaW5nIGZvciBpZiB0aGlzIHdvdWxkIGJlIGEgZnJ1aXRmdWwgZW5kZWF2b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzoxOS45MjUyNTM4MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwMzUyOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9IQU5EU0hBS0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZz05PUNPTkZJR19TVU5SUEM9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjEwOkNPTkZJR19ORVRfSEFORFNIQUtFPXlcXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcXG4tLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU9MTE9aGFuZHNoYWtlLXkgOj0gYWxlcnQubyBnZW5sLm8gbmV0bGluay5vIHJlcXVlc3QubyB0bHNoZC5vIHRyYWNlLm9cXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVCkgKz0gaGFuZHNoYWtlLXRlc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzoyMC4yNTU2MTI3MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODEwNzc3NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfSEFORFNIQUtFIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgTkVUX0hBTkRTSEFLRWAgaXMgZGVmaW5lZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaWdnaW5nIGluIHRoZSBgbmV0L2hhbmRzaGFrZS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmFtZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGNoZWNrIGBLY29uZmlnYCBpbiB0aGF0IGRpcmVjdG9yeSBmaXJzdC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gT2YgY291cnNlLCBpdCdzIGFsc28gcG9zc2libGUgaXQgaXMgZGVmaW5lZCBlbHNld2hlcmUsIGJ1dCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGZpcnN0IHRhcmdldCBmb3IgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGV4YWN0IGxvY2F0aW9uIGJlZm9yZSBJIGNhbiBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MjIuMDY2MzkyODY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTYxNDc4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9IQU5EU0hBS0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9OTI9c291cmNlIFxcXCJuZXQveGRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctOTMtXFxubmV0L0tjb25maWc6OTQ6Y29uZmlnIE5FVF9IQU5EU0hBS0VcXG5uZXQvS2NvbmZpZy05NS1cXHRib29sXFxuLS1cXG5uZXQvS2NvbmZpZy05OC1cXG5uZXQvS2NvbmZpZzo5OTpjb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxubmV0L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjI0LjM2MjU0NzMyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzMwNjQ5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBTcGFjZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBzeXN0ZW0sIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvS2NvbmZpZ2AuIEknbSBnb2luZyB0byBmb2N1cyBpbiBvbiBsaW5lcyA5MCB0aHJvdWdoIDExMCBvciBzbywgYXMgYSBzdGFydGluZyBwb2ludC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIGFyZWEgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIG1ham9yIG9wdGlvbnMgYmVpbmcgZGVmaW5lZCBpbiB0aGlzIHNlY3Rpb24uIEtub3dpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgS2NvbmZpZyBzeXN0ZW0sIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBmZWF0dXJlIHN3aXRjaGVzLCBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucy4uLnRoZSB1c3VhbCBLY29uZmlnIGNvbnN0cnVjdHMuIEknbSBsb29raW5nIGZvciB0aGUga2V5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBlbGVtZW50cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGZpbGUuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRoaW5ncyBhcmUgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzoyNi4yMzU2MTYwMTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0c291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxuICA4NjpcXHRzb3VyY2UgXFxcIm5ldC91bml4L0tjb25maWdcXFwiXFxuICA4NzpcXHRzb3VyY2UgXFxcIm5ldC90bHMvS2NvbmZpZ1xcXCJcXG4gIDg4OlxcdHNvdXJjZSBcXFwibmV0L3hmcm0vS2NvbmZpZ1xcXCJcXG4gIDg5OlxcdHNvdXJjZSBcXFwibmV0L2l1Y3YvS2NvbmZpZ1xcXCJcXG4gIDkwOlxcdHNvdXJjZSBcXFwibmV0L3NtYy9LY29uZmlnXFxcIlxcbiAgOTE6XFx0c291cmNlIFxcXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1xcXCJcXG4gIDkyOlxcdHNvdXJjZSBcXFwibmV0L3hkcC9LY29uZmlnXFxcIlxcbiAgOTM6XFx0XFxuICA5NDpcXHRjb25maWcgTkVUX0hBTkRTSEFLRVxcbiAgOTU6XFx0XFx0Ym9vbFxcbiAgOTY6XFx0XFx0ZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQXFxuICA5NzpcXHRcXHRkZWZhdWx0IHlcXG4gIDk4OlxcdFxcbiAgOTk6XFx0Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxcbiAxMDA6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc21cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gMTAxOlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuIDEwMjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuIDEwMzpcXHRcXHRoZWxwXFxuIDEwNDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1Z1xcbiAxMDc6XFx0XFx0ICBsb2cgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvclxcbiAxMDg6XFx0XFx0ICBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uXFxuIDEwOTpcXHRcXHQgIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHJlZmVyXFxuIDExMjpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MjYuMjM1NzQyNzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyMTA2MTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVF9IQU5EU0hBS0VgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYE5FVF9IQU5EU0hBS0VgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IG1pZ2h0IGJlICpzZWxlY3RpbmcqIGl0LiBUaGUgaW5pdGlhbCBjbHVlcyBpbmRpY2F0ZSB0aGF0IGl0J3MgKmBkZXBlbmRzIG9uIFNVTlJQQyB8fCBOVk1FX1RBUkdFVF9UQ1AgfHwgTlZNRV9UQ1BgKiBhbmQgdGhlIGRlZmF1bHQgaXMgc2V0IHRvICd5Jy4gVGhhdCB0ZWxscyBtZSBpdCdzIGxpa2VseSByZWxhdGVkIHRvIGVpdGhlciBTdW4gUmVtb3RlIFByb2NlZHVyZSBDYWxsLCBOVk1lIG92ZXIgVENQIFRhcmdldCwgb3IganVzdCBOVk1lIG92ZXIgVENQIGluIGdlbmVyYWwuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIHByb3RvY29scyB3b3VsZCBiZW5lZml0IGZyb20gYSBoYW5kc2hha2UuXG5cbk5vdywgSSB3YW50IHRvIGJyb2FkZW4gdGhlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBrbm93ICp3aGF0IGVsc2UqIG1pZ2h0IGJlIHNlbGVjdGluZyBgTkVUX0hBTkRTSEFLRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgaXRzIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGVyZSBvdGhlciBmZWF0dXJlcywgZHJpdmVycywgb3IgbW9kdWxlcyB0aGF0IGltcGxpY2l0bHkgcmVseSBvbiBpdCwgZXZlbiBpZiBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGluIHRoZWlyIGRlcGVuZGVuY2llcz8gVGhpcyBpcyB3aGVyZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZWFyY2ggaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgcGljdHVyZSBvZiB0aGUgd2hvbGUgZGVwZW5kZW5jeSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzozMC44NTY4MDYzNjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDU1MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfSEFORFNIQUtFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9OTI9c291cmNlIFxcXCJuZXQveGRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctOTMtXFxubmV0L0tjb25maWc6OTQ6Y29uZmlnIE5FVF9IQU5EU0hBS0VcXG5uZXQvS2NvbmZpZy05NS1cXHRib29sXFxuLS1cXG5uZXQvS2NvbmZpZy05OC1cXG5uZXQvS2NvbmZpZzo5OTpjb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxubmV0L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvTWFrZWZpbGU9NzU9b2JqLSQoQ09ORklHX01DVFApXFx0XFx0Kz0gbWN0cC9cXG5uZXQvTWFrZWZpbGU6NzY6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0UpXFx0Kz0gaGFuZHNoYWtlL1xcbm5ldC9NYWtlZmlsZS03Ny1vYmotJChDT05GSUdfTkVUX1NIQVBFUilcXHQrPSBzaGFwZXIvXFxuLS1cXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZz05PUNPTkZJR19TVU5SUEM9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjEwOkNPTkZJR19ORVRfSEFORFNIQUtFPXlcXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcXG4tLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU9MTE9aGFuZHNoYWtlLXkgOj0gYWxlcnQubyBnZW5sLm8gbmV0bGluay5vIHJlcXVlc3QubyB0bHNoZC5vIHRyYWNlLm9cXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVCkgKz0gaGFuZHNoYWtlLXRlc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzozMS4wMDEzNjcxMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MDE0ODY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBIYW5kc2hha2UgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgaGFuZHNoYWtlIHByb2Nlc3Mgd29ya3MuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBnZW5sLmNgLCBgcmVxdWVzdC5jYCwgYW5kIGBuZXRsaW5rLmNgLCBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvaGFuZHNoYWtlL2AgZGlyZWN0b3J5LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3BvdC4gRmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IGBnZW5sLmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IuIEknbSBzdXJlIEknbGwgZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnIHBpY3R1cmUgb25jZSBJIGRpc3NlY3QgdGhhdCBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MzIuOTQxNTE4NTAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9oYW5kc2hha2UvZ2VubC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICgoR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSkgT1IgQlNELTMtQ2xhdXNlKVxcbiAgIDI6XFx0LyogRG8gbm90IGVkaXQgZGlyZWN0bHksIGF1dG8tZ2VuZXJhdGVkIGZyb206ICovXFxuICAgMzpcXHQvKlxcdERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbCAqL1xcbiAgIDQ6XFx0LyogWU5MLUdFTiBrZXJuZWwgc291cmNlICovXFxuICAgNTpcXHQvKiBUbyByZWdlbmVyYXRlIHJ1bjogdG9vbHMvbmV0L3lubC95bmwtcmVnZW4uc2ggKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXFwiZ2VubC5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9oYW5kc2hha2UuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gIDE0OlxcdFxcbiAgMTU6XFx0LyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xcbiAgMTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XFxuICAxNzpcXHRcXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXFxuICAxODpcXHR9O1xcbiAgMTk6XFx0XFxuICAyMDpcXHQvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xcbiAgMjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIICsgMV0gPSB7XFxuICAyMjpcXHRcXHRbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTUFYX0VSUk5PKSxcXG4gIDIzOlxcdFxcdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG4gIDI0OlxcdFxcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbiAgMjU6XFx0fTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0LyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cXG4gIDI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdID0ge1xcbiAgMjk6XFx0XFx0e1xcbiAgMzA6XFx0XFx0XFx0LmNtZFxcdFxcdD0gSEFORFNIQUtFX0NNRF9BQ0NFUFQsXFxuICAzMTpcXHRcXHRcXHQuZG9pdFxcdFxcdD0gaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0LFxcbiAgMzI6XFx0XFx0XFx0LnBvbGljeVxcdFxcdD0gaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3ksXFxuICAzMzpcXHRcXHRcXHQubWF4YXR0clxcdD0gSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MsXFxuICAzNDpcXHRcXHRcXHQuZmxhZ3NcXHRcXHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcXG4gIDM1OlxcdFxcdH0sXFxuICAzNjpcXHRcXHR7XFxuICAzNzpcXHRcXHRcXHQuY21kXFx0XFx0PSBIQU5EU0hBS0VfQ01EX0RPTkUsXFxuICAzODpcXHRcXHRcXHQuZG9pdFxcdFxcdD0gaGFuZHNoYWtlX25sX2RvbmVfZG9pdCxcXG4gIDM5OlxcdFxcdFxcdC5wb2xpY3lcXHRcXHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcXG4gIDQwOlxcdFxcdFxcdC5tYXhhdHRyXFx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxcbiAgNDE6XFx0XFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXFxuICA0MjpcXHRcXHR9LFxcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBoYW5kc2hha2VfbmxfbWNncnBzW10gPSB7XFxuICA0NjpcXHRcXHRbSEFORFNIQUtFX05MR1JQX05PTkVdID0geyBcXFwibm9uZVxcXCIsIH0sXFxuICA0NzpcXHRcXHRbSEFORFNIQUtFX05MR1JQX1RMU0hEXSA9IHsgXFxcInRsc2hkXFxcIiwgfSxcXG4gIDQ4OlxcdH07XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0cnVjdCBnZW5sX2ZhbWlseSBoYW5kc2hha2VfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MzIuOTQxNjA5NTIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzg3Mjg0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGhhbmRzaGFrZV9yZXFfYWxsb2NgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGhhbmRzaGFrZV9yZXFfYWxsb2NgLiBMZXQgbWUgY2hlY2sgd2hlcmUgaXQncyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjb250ZXh0IGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgbGFyZ2VyIHN5c3RlbSBhcmNoaXRlY3R1cmUgaXQgZml0cyBpbnRvLlxuXG5BbHNvLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBBIHF1aWNrIGdsYW5jZSBzdWdnZXN0cyB0aGF0IGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AgYW5kIGBuZXRsaW5rLmNgIGFyZSByZWxldmFudCwgc28gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgbmV0d29ya2luZyBoYW5kc2hha2UgYW5kIHdoYXQgYG5ldGxpbmsuY2AgaXMgZG9pbmcuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiB0aGlzIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gZnVuY3Rpb24uIFVsdGltYXRlbHksIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgd2hlbiB0aGVzZSByZXF1ZXN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCB3aGF0IHRoZXkgcmVwcmVzZW50IGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MzUuMDgwMzQwMTQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg3ODU2OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRzaGFrZV9yZXFfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI4PXN0YXRpYyB2b2lkIHRlc3RfZG9uZV9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsIGludCBzdGF0dXMsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzItXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjMzOnN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNC1cXHRjb25zdCBjaGFyXFx0XFx0XFx0KmRlc2M7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzktXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQwOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMiA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDEtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDMtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMyA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDUtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0ODpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ5LVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTI6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b181ID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01My1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTYtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjU3OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNiA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTgtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTYzLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo2NDpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QgPSB7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTY1LVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz03MD1zdGF0aWMgY29uc3RcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NzE6c3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtc1tdID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy03Mi1cXHR7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjczOlxcdFxcdC5kZXNjXFx0XFx0XFx0PSBcXFwiaGFuZHNoYWtlX3JlcV9hbGxvYyBOVUxMIHByb3RvXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNzQtXFx0XFx0LnByb3RvXFx0XFx0XFx0PSBOVUxMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTc4LVxcdHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Nzk6XFx0XFx0LmRlc2NcXHRcXHRcXHQ9IFxcXCJoYW5kc2hha2VfcmVxX2FsbG9jIENMQVNTX05PTkVcXFwiLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo4MDpcXHRcXHQucHJvdG9cXHRcXHRcXHQ9IFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzIsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTgxLVxcdFxcdC5nZnBcXHRcXHRcXHQ9IEdGUF9LRVJORUwsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtODQtXFx0e1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo4NTpcXHRcXHQuZGVzY1xcdFxcdFxcdD0gXFxcImhhbmRzaGFrZV9yZXFfYWxsb2MgQ0xBU1NfTUFYXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6ODY6XFx0XFx0LnByb3RvXFx0XFx0XFx0PSBcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy04Ny1cXHRcXHQuZ2ZwXFx0XFx0XFx0PSBHRlBfS0VSTkVMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTkwLVxcdHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6OTE6XFx0XFx0LmRlc2NcXHRcXHRcXHQ9IFxcXCJoYW5kc2hha2VfcmVxX2FsbG9jIG5vIGNhbGxiYWNrc1xcXCIsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjkyOlxcdFxcdC5wcm90b1xcdFxcdFxcdD0gXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNCxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtOTMtXFx0XFx0LmdmcFxcdFxcdFxcdD0gR0ZQX0tFUk5FTCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy05Ni1cXHR7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjk3OlxcdFxcdC5kZXNjXFx0XFx0XFx0PSBcXFwiaGFuZHNoYWtlX3JlcV9hbGxvYyBubyBkb25lIGNhbGxiYWNrXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6OTg6XFx0XFx0LnByb3RvXFx0XFx0XFx0PSBcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b181LFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy05OS1cXHRcXHQuZ2ZwXFx0XFx0XFx0PSBHRlBfS0VSTkVMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEwMi1cXHR7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEwMzpcXHRcXHQuZGVzY1xcdFxcdFxcdD0gXFxcImhhbmRzaGFrZV9yZXFfYWxsb2MgZXhjZXNzaXZlIHByaXZzaXplXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTA0OlxcdFxcdC5wcm90b1xcdFxcdFxcdD0gXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTA1LVxcdFxcdC5nZnBcXHRcXHRcXHQ9IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTA4LVxcdHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTA5OlxcdFxcdC5kZXNjXFx0XFx0XFx0PSBcXFwiaGFuZHNoYWtlX3JlcV9hbGxvYyBhbGwgZ29vZFxcXCIsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjExMDpcXHRcXHQucHJvdG9cXHRcXHRcXHQ9IFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExMS1cXHRcXHQuZ2ZwXFx0XFx0XFx0PSBHRlBfS0VSTkVMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTExNj1zdGF0aWMgdm9pZFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMTc6aGFuZHNoYWtlX3JlcV9hbGxvY19nZXRfZGVzYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtICpwYXJhbSxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTE4LVxcdFxcdFxcdCAgICAgY2hhciAqZGVzYylcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjItXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEyMzovKiBDcmVhdGVzIHRoZSBmdW5jdGlvbiBoYW5kc2hha2VfcmVxX2FsbG9jX2dlbl9wYXJhbXMgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI0OktVTklUX0FSUkFZX1BBUkFNKGhhbmRzaGFrZV9yZXFfYWxsb2MsIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjU6XFx0XFx0ICBoYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI2LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjc6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9hbGxvY19jYXNlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI4LXtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI5OlxcdGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0gKnBhcmFtID0gdGVzdC1cXHUwMDNlcGFyYW1fdmFsdWU7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEzMC1cXHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVzdWx0O1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEzNC1cXHQvKiBBY3QgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTM1OlxcdHJlc3VsdCA9IGhhbmRzaGFrZV9yZXFfYWxsb2MocGFyYW0tXFx1MDAzZXByb3RvLCBwYXJhbS1cXHUwMDNlZ2ZwKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTM2LVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTE2NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTcwLVxcdC8qIEFycmFuZ2UgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTcxOlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE3Mi1cXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0xODM9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE4OS1cXHQvKiBBcnJhbmdlICovXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE5MDpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xOTEtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MjA4PXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfc3VibWl0X3Rlc3Q0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yMTYtXFx0LyogQXJyYW5nZSAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyMTc6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjE4LVxcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXEpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI0NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjU1LVxcdC8qIEFycmFuZ2UgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MjU2OlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI1Ny1cXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0yODY9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDYoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5NC1cXHQvKiBBcnJhbmdlICovXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI5NTpcXHRyZXExID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjk2LVxcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXExKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Mjk3OlxcdHJlcTIgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yOTgtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcTIpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTMyND1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzMzLVxcdC8qIEFycmFuZ2UgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MzM0OlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTMzNS1cXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0zNjI9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9jYW5jZWxfdGVzdDIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTM3My1cXHQvKiBBcnJhbmdlICovXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM3NDpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNzUtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NDEyPXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MjMtXFx0LyogQXJyYW5nZSAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0MjQ6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDI1LVxcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXEpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTQ2OD1zdGF0aWMgdm9pZCB0ZXN0X2Rlc3Ryb3lfZnVuYyhzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3Mi1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDczOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZGVzdHJveSA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDc0LVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz00ODA9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9kZXN0cm95X3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OTAtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ5MTpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2Rlc3Ryb3ksIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OTItXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NTE5PXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBoYW5kc2hha2VfYXBpX3Rlc3RfY2FzZXNbXSA9IHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MjEtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJyZXFfYWxsb2MgQVBJIGZ1enppbmdcXFwiLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MjI6XFx0XFx0LnJ1bl9jYXNlXFx0XFx0PSBoYW5kc2hha2VfcmVxX2FsbG9jX2Nhc2UsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjUyMzpcXHRcXHQuZ2VuZXJhdGVfcGFyYW1zXFx0PSBoYW5kc2hha2VfcmVxX2FsbG9jX2dlbl9wYXJhbXMsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUyNC1cXHR9LFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaD03OT1zdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaGFuZHNoYWtlX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC04MS0vKiByZXF1ZXN0LmMgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oOjgyOnN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtODMtXFx0XFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncyk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYz04Nj1zdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTAyLS8qKlxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEwMzogKiBoYW5kc2hha2VfcmVxX2FsbG9jIC0gQWxsb2NhdGUgYSBoYW5kc2hha2UgcmVxdWVzdFxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEwNC0gKiBAcHJvdG86IHNlY3VyaXR5IHByb3RvY29sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMDgtICovXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTA5OnN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTExMC1cXHRcXHRcXHRcXHRcXHQgIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTMwLX1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoxMzE6RVhQT1JUX1NZTUJPTChoYW5kc2hha2VfcmVxX2FsbG9jKTtcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMzItXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjg2PWludCB0bHNfY2xpZW50X2hlbGxvX2Fub24oY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjkwLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyOTE6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yOTItXFx0aWYgKCFyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzEyPWludCB0bHNfY2xpZW50X2hlbGxvX3g1MDkoY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzE2LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozMTc6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTgtXFx0aWYgKCFyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzQxPWludCB0bHNfY2xpZW50X2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTAtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM1MTpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM1Mi1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNzU9aW50IHRsc19zZXJ2ZXJfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzktXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM4MDpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM4MS1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz00MDM9aW50IHRsc19zZXJ2ZXJfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQwNy1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NDA4OlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNnRsc19oYW5kc2hha2VfcHJvdG8sIGZsYWdzKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDA5LVxcdGlmICghcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzozOC4xNjgyMDIyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODcyODk1ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgSGFuZHNoYWtlIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCwgYnV0IEkgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gVG8gZ2V0IGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYW5kc2hha2UgcHJvY2VzcywgSSByZWFsbHkgbmVlZCB0byBsb29rIGF0IHRoZSBicm9hZGVyIGxhbmRzY2FwZSBvZiBoYW5kc2hha2UtcmVsYXRlZCBmaWxlcy4gVGhpcyBtZWFucyB2ZW50dXJpbmcgYmV5b25kIGBuZXRsaW5rLmNgIGFuZCBleHBsb3JpbmcgdGhlIG90aGVyIGZpbGVzIGluIHRoZSBgL25ldC9oYW5kc2hha2UvYCBkaXJlY3RvcnksIGFuZCBwb3RlbnRpYWxseSBldmVuIHZlbnR1cmluZyBmdXJ0aGVyIGFmaWVsZCBhcyB3ZWxsLiBUaGVyZSBtaWdodCBiZSBzb21lIGtleSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW52aXNpYmxlIGlmIEknbSBvbmx5IGZvY3VzaW5nIG9uIHRoaXMgb25lIGZpbGUuIFRoZSBnb2FsIGhlcmUgaXMgYSBtb3JlIGhvbGlzdGljIHZpZXcgb2YgdGhlIG92ZXJhbGwgaGFuZHNoYWtlIHByb2NlZHVyZSBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6NDAuMDQxMTAxODYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaGFuZHNoYWtlL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBHZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2VcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBBdXRob3I6IENodWNrIExldmVyIFxcdTAwM2NjaHVjay5sZXZlckBvcmFjbGUuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIENvcHlyaWdodCAoYykgMjAyMywgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG4gIDIwOlxcdFxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFxcdTAwM2VcXG4gIDIyOlxcdFxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvaGFuZHNoYWtlLmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXFwiaGFuZHNoYWtlLmhcXFwiXFxuICAyNTpcXHQjaW5jbHVkZSBcXFwiZ2VubC5oXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHQjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2hhbmRzaGFrZS5oXFx1MDAzZVxcbiAgMjg6XFx0XFxuICAyOTpcXHQvKipcXG4gIDMwOlxcdCAqIGhhbmRzaGFrZV9nZW5sX25vdGlmeSAtIE5vdGlmeSBoYW5kbGVycyB0aGF0IGEgcmVxdWVzdCBpcyB3YWl0aW5nXFxuICAzMTpcXHQgKiBAbmV0OiB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2VcXG4gIDMyOlxcdCAqIEBwcm90bzogaGFuZHNoYWtlIHByb3RvY29sXFxuICAzMzpcXHQgKiBAZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRyb2wgZmxhZ3NcXG4gIDM0OlxcdCAqXFxuICAzNTpcXHQgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vIGlmIG5vdGlmaWNhdGlvbiBmYWlsZWQuXFxuICAzNjpcXHQgKi9cXG4gIDM3OlxcdGludCBoYW5kc2hha2VfZ2VubF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90byxcXG4gIDM4OlxcdFxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MpXFxuICAzOTpcXHR7XFxuICA0MDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbiAgNDE6XFx0XFx0dm9pZCAqaGRyO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQvKiBEaXNhYmxlIG5vdGlmaWNhdGlvbnMgZHVyaW5nIHVuaXQgdGVzdGluZyAqL1xcbiAgNDQ6XFx0XFx0aWYgKCF0ZXN0X2JpdChIQU5EU0hBS0VfRl9QUk9UT19OT1RJRlksIFxcdTAwMjZwcm90by1cXHUwMDNlaHBfZmxhZ3MpKVxcbiAgNDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA0NjpcXHRcXG4gIDQ3OlxcdFxcdGlmICghZ2VubF9oYXNfbGlzdGVuZXJzKFxcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCBuZXQsXFxuICA0ODpcXHRcXHRcXHRcXHRcXHRwcm90by1cXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykpXFxuICA0OTpcXHRcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRtc2cgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgZmxhZ3MpO1xcbiAgNTI6XFx0XFx0aWYgKCFtc2cpXFxuICA1MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCAwLCAwLCBcXHUwMDI2aGFuZHNoYWtlX25sX2ZhbWlseSwgMCxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgSEFORFNIQUtFX0NNRF9SRUFEWSk7XFxuICA1NzpcXHRcXHRpZiAoIWhkcilcXG4gIDU4OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxcbiAgNjE6XFx0XFx0XFx0XFx0cHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MpIFxcdTAwM2MgMCkge1xcbiAgNjI6XFx0XFx0XFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xcbiAgNjM6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gIDY0OlxcdFxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbiAgNjc6XFx0XFx0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFxcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCBuZXQsIG1zZyxcXG4gIDY4OlxcdFxcdFxcdFxcdFxcdCAgICAgICAwLCBwcm90by1cXHUwMDNlaHBfaGFuZGxlcl9jbGFzcywgZmxhZ3MpO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRvdXRfZnJlZTpcXG4gIDcxOlxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4gIDcyOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdC8qKlxcbiAgNzY6XFx0ICogaGFuZHNoYWtlX2dlbmxfcHV0IC0gQ3JlYXRlIGEgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyXFxuICA3NzpcXHQgKiBAbXNnOiBidWZmZXIgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBoZWFkZXJcXG4gIDc4OlxcdCAqIEBpbmZvOiBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBjb250ZXh0XFxuICA3OTpcXHQgKlxcbiAgODA6XFx0ICogUmV0dXJucyBhIHJlYWR5LXRvLXVzZSBoZWFkZXIsIG9yIE5VTEwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjQwLjA0MTI0NDgyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjU5MTY4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYW5kc2hha2UgcHJvY2VzcywgcGFydGljdWxhcmx5IHRoZSByb2xlIGBuZXRsaW5rLmNgIHBsYXlzIHdpdGhpbiBgbmV0L2hhbmRzaGFrZWAuIEknbSBnb2luZyB0byBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlc3Qgb2YgdGhhdCBmaWxlIOKAkyBJIGFzc3VtZSBpdCBjb250YWlucyBtb3JlIGRldGFpbHMgdGhhbiBqdXN0IHdoYXQgSSd2ZSBzZWVuIHNvIGZhci4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZmlsZXMgaW50ZXJhY3Qgd2l0aCBgbmV0bGluay5jYCBhbmQgaG93LiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgcmVhZGluZyB0aGUgY29kZTsgaXQncyBhYm91dCB0cmFjaW5nIHRoZSBjb250cm9sIGZsb3csIHVuZGVyc3RhbmRpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZ2V0dGluZyBhIGhvbGlzdGljIHBpY3R1cmUgb2YgdGhlIGVudGlyZSBuZXR3b3JraW5nIGhhbmRzaGFrZSBtZWNoYW5pc20uIEknbSB0aGlua2luZyBvdGhlciBoYW5kc2hha2UgcmVsYXRlZCBzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzZWFyY2guIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjQ2LjcwMDQxNjQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaGFuZHNoYWtlL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHQgKi9cXG4gIDgyOlxcdHN0cnVjdCBubG1zZ2hkciAqaGFuZHNoYWtlX2dlbmxfcHV0KHN0cnVjdCBza19idWZmICptc2csXFxuICA4MzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gIDg0OlxcdHtcXG4gIDg1OlxcdFxcdHJldHVybiBnZW5sbXNnX3B1dChtc2csIGluZm8tXFx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXFx1MDAzZXNuZF9zZXEsXFxuICA4NjpcXHRcXHRcXHRcXHQgICBcXHUwMDI2aGFuZHNoYWtlX25sX2ZhbWlseSwgMCwgaW5mby1cXHUwMDNlZ2VubGhkci1cXHUwMDNlY21kKTtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdEVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX2dlbmxfcHV0KTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiAgOTE6XFx0e1xcbiAgOTI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuICA5MzpcXHRcXHRzdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaG4gPSBoYW5kc2hha2VfcGVybmV0KG5ldCk7XFxuICA5NDpcXHRcXHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxID0gTlVMTDtcXG4gIDk1OlxcdFxcdGludCBjbGFzcywgZXJyO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4gIDk4OlxcdFxcdGlmICghaG4pXFxuICA5OTpcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDEwMjpcXHRcXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUykpXFxuIDEwMzpcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuIDEwNDpcXHRcXHRjbGFzcyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGVyciA9IC1FQUdBSU47XFxuIDEwNzpcXHRcXHRyZXEgPSBoYW5kc2hha2VfcmVxX25leHQoaG4sIGNsYXNzKTtcXG4gMTA4OlxcdFxcdGlmIChyZXEpIHtcXG4gMTA5OlxcdFxcdFxcdEZEX1BSRVBBUkUoZmRmLCBPX0NMT0VYRUMsIHJlcS1cXHUwMDNlaHJfZmlsZSk7XFxuIDExMDpcXHRcXHRcXHRpZiAoZmRmLmVycikge1xcbiAxMTE6XFx0XFx0XFx0XFx0ZnB1dChyZXEtXFx1MDAzZWhyX2ZpbGUpOyAvKiBkcm9wIHJlZiBmcm9tIGhhbmRzaGFrZV9yZXFfbmV4dCgpICovXFxuIDExMjpcXHRcXHRcXHRcXHRlcnIgPSBmZGYuZXJyO1xcbiAxMTM6XFx0XFx0XFx0XFx0Z290byBvdXRfY29tcGxldGU7XFxuIDExNDpcXHRcXHRcXHR9XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFxcdGVyciA9IHJlcS1cXHUwMDNlaHJfcHJvdG8tXFx1MDAzZWhwX2FjY2VwdChyZXEsIGluZm8sIGZkX3ByZXBhcmVfZmQoZmRmKSk7XFxuIDExNzpcXHRcXHRcXHRpZiAoZXJyKVxcbiAxMTg6XFx0XFx0XFx0XFx0Z290byBvdXRfY29tcGxldGU7IC8qIEF1dG9tYXRpYyBjbGVhbnVwIGhhbmRsZXMgZnB1dCAqL1xcbiAxMTk6XFx0XFxuIDEyMDpcXHRcXHRcXHR0cmFjZV9oYW5kc2hha2VfY21kX2FjY2VwdChuZXQsIHJlcSwgcmVxLVxcdTAwM2Vocl9zaywgZmRfcHJlcGFyZV9mZChmZGYpKTtcXG4gMTIxOlxcdFxcdFxcdGZkX3B1Ymxpc2goZmRmKTtcXG4gMTIyOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMjM6XFx0XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRvdXRfY29tcGxldGU6XFxuIDEyNjpcXHRcXHRpZiAocmVxKVxcbiAxMjc6XFx0XFx0XFx0aGFuZHNoYWtlX2NvbXBsZXRlKHJlcSwgLUVJTywgTlVMTCk7XFxuIDEyODpcXHRvdXRfc3RhdHVzOlxcbiAxMjk6XFx0XFx0dHJhY2VfaGFuZHNoYWtlX2NtZF9hY2NlcHRfZXJyKG5ldCwgcmVxLCBOVUxMLCBlcnIpO1xcbiAxMzA6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTMxOlxcdH1cXG4gMTMyOlxcdFxcbiAxMzM6XFx0aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gMTM0OlxcdHtcXG4gMTM1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiAxMzY6XFx0XFx0c3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcTtcXG4gMTM3OlxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuIDEzODpcXHRcXHRpbnQgZmQsIHN0YXR1cywgZXJyO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRCkpXFxuIDE0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQyOlxcdFxcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdKTtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0c29jayA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbiAxNDU6XFx0XFx0aWYgKCFzb2NrKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9oYXNoX2xvb2t1cChzb2NrLVxcdTAwM2Vzayk7XFxuIDE0OTpcXHRcXHRpZiAoIXJlcSkge1xcbiAxNTA6XFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbiAxNTE6XFx0XFx0XFx0dHJhY2VfaGFuZHNoYWtlX2NtZF9kb25lX2VycihuZXQsIHJlcSwgc29jay1cXHUwMDNlc2ssIGVycik7XFxuIDE1MjpcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbiAxNTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTU0OlxcdFxcdH1cXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0dHJhY2VfaGFuZHNoYWtlX2NtZF9kb25lKG5ldCwgcmVxLCBzb2NrLVxcdTAwM2VzaywgZmQpO1xcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHRzdGF0dXMgPSAtRUlPO1xcbiAxNTk6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSlcXG4gMTYwOlxcdFxcdFxcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjQ2LjcwMDU1OTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDUzMjY5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFJlbWFpbmRlciBvZiBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2FsbCBmb3IgYW5hbHlzaXMgaGFzIGNvbWUgaW4sIGFuZCBteSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4gXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgXCIuLi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQncyB0aGUgY29udGV4dD8gV2hhdCBwcmVjZWRpbmcgZnVuY3Rpb25zIG9yIG1vZHVsZXMgc2V0IHRoZSBzdGFnZSBmb3IgdGhpcyBvbmU/IElzIHRoZXJlIGEga25vd24gaXNzdWUgYXNzb2NpYXRlZCB3aXRoIGl0PyBXaGF0IGFyZSB0aGUgdHlwaWNhbCBmYWlsdXJlIHBvaW50cz9cblxuTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byByYXBpZGx5IHNjYW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGdsYXJpbmcgcmVkIGZsYWdzLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmVzb3VyY2UgbGVha3M/IERvZXMgdGhlIGNvbnRyb2wgZmxvdyBoYW5kbGUgYWxsIHBvc3NpYmxlIGlucHV0IHN0YXRlcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgZWRnZSBjYXNlcyBJJ20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGZyb20gc2ltaWxhciBwcm90b2NvbHM/IEknbSBsb29raW5nIGZvciBhIGZhbWlsaWFyIHBhdHRlcm4gb2YgZXJyb3JzIHRoYXQgSSd2ZSBkZWFsdCB3aXRoIGJlZm9yZSAtIHBlcmhhcHMgaW5jb3JyZWN0IGJ1ZmZlciBzaXppbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgaW1wcm9wZXIgZXJyb3IgcHJvcGFnYXRpb24uXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIGFueXRoaW5nIHRoYXQgc2VlbXMgcmVsYXRlZCB0byB0aGUgXCJOTFwiIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEl0J3MgbGlrZWx5IHRoYXQgYSBwcm90b2NvbCB3aXRoICdOTCcgaW4gdGhlIG5hbWUgbWlnaHQgcmVmZXIgdG8gYSBzcGVjaWZpYyBzb3J0IG9mIG1lc3NhZ2UgZm9ybWF0LCBvciBhIHNwZWNpZmljIHN0YWdlIG9mIGEgbmV0d29yayBoYW5kc2hha2UuIEFuZCBpZiBpdCdzIHRoZSBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAgcGFydCwgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgY29tcGxldGlvbiBldmVudC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgcG9pbnRlcnMgZm9yIHRoZSAnZG9pdCcgcGFydCwgYW5kIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhpcyBtaWdodCBiZSBzb21lIGtpbmQgb2YgdGhyZWFkIHVuc2FmZSBvcGVyYXRpb25zLlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGRyaWxsIGRvd24gaW50byBhbnkgY2FsbHMgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBwcmltaXRpdmVzLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGV4dGVybmFsIGluZmx1ZW5jZXMgb24gYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzOiBhcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVhZGxvY2sgdnVsbmVyYWJpbGl0eT8gQSBtZW1vcnkgY29ycnVwdGlvbiByaXNrPyBPciBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHRoYXQgY291bGQgYnJpbmcgdGhlIHdob2xlIHRoaW5nIGNyYXNoaW5nIGRvd24/IEknbGwgYWxzbyBjaGVjayBpZiB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgcG9zc2libGUgaW5wdXRzIGNvcnJlY3RseSwgZXNwZWNpYWxseSB0aGUgZWRnZSBjYXNlcy5cblxuSW4gc2hvcnQsIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGJlZ2luIGEgbWV0aG9kaWNhbCBkaXNzZWN0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjUwLjE0NTg4OTcwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2hhbmRzaGFrZS9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYxOlxcdFxcbiAxNjI6XFx0XFx0aGFuZHNoYWtlX2NvbXBsZXRlKHJlcSwgc3RhdHVzLCBpbmZvKTtcXG4gMTYzOlxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuIDE2NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0c3RhdGljIHVuc2lnbmVkIGludCBoYW5kc2hha2VfbmV0X2lkO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFuZHNoYWtlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiA9IG5ldF9nZW5lcmljKG5ldCwgaGFuZHNoYWtlX25ldF9pZCk7XFxuIDE3MjpcXHRcXHR1bnNpZ25lZCBsb25nIHRtcDtcXG4gMTczOlxcdFxcdHN0cnVjdCBzeXNpbmZvIHNpO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHQvKlxcbiAxNzY6XFx0XFx0ICogQXJiaXRyYXJ5IGxpbWl0IHRvIHByZXZlbnQgaGFuZHNoYWtlcyB0aGF0IGRvIG5vdCBtYWtlXFxuIDE3NzpcXHRcXHQgKiBwcm9ncmVzcyBmcm9tIGNsb2dnaW5nIHVwIHRoZSBzeXN0ZW0uIFRoZSBjYXAgc2NhbGVzIHVwXFxuIDE3ODpcXHRcXHQgKiB3aXRoIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IG9uIHRoZSBzeXN0ZW0uXFxuIDE3OTpcXHRcXHQgKi9cXG4gMTgwOlxcdFxcdHNpX21lbWluZm8oXFx1MDAyNnNpKTtcXG4gMTgxOlxcdFxcdHRtcCA9IHNpLnRvdGFscmFtIC8gKDI1ICogc2kubWVtX3VuaXQpO1xcbiAxODI6XFx0XFx0aG4tXFx1MDAzZWhuX3BlbmRpbmdfbWF4ID0gY2xhbXAodG1wLCAzVUwsIDUwVUwpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aG4tXFx1MDAzZWhuX2xvY2spO1xcbiAxODU6XFx0XFx0aG4tXFx1MDAzZWhuX3BlbmRpbmcgPSAwO1xcbiAxODY6XFx0XFx0aG4tXFx1MDAzZWhuX2ZsYWdzID0gMDtcXG4gMTg3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZobi1cXHUwMDNlaG5fcmVxdWVzdHMpO1xcbiAxODg6XFx0XFx0cmV0dXJuIDA7XFxuIDE4OTpcXHR9XFxuIDE5MDpcXHRcXG4gMTkxOlxcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaGFuZHNoYWtlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcXG4gMTkyOlxcdHtcXG4gMTkzOlxcdFxcdHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiA9IG5ldF9nZW5lcmljKG5ldCwgaGFuZHNoYWtlX25ldF9pZCk7XFxuIDE5NDpcXHRcXHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxO1xcbiAxOTU6XFx0XFx0TElTVF9IRUFEKHJlcXVlc3RzKTtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0LypcXG4gMTk4OlxcdFxcdCAqIERyYWluIHRoZSBuZXQncyBwZW5kaW5nIGxpc3QuIFJlcXVlc3RzIHRoYXQgaGF2ZSBiZWVuXFxuIDE5OTpcXHRcXHQgKiBhY2NlcHRlZCBhbmQgYXJlIGluIHByb2dyZXNzIHdpbGwgYmUgZGVzdHJveWVkIHdoZW5cXG4gMjAwOlxcdFxcdCAqIHRoZSBzb2NrZXQgaXMgY2xvc2VkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0Mzo1MC4xNDU5OTQ1NTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwOTAwMzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSGFuZHNoYWtlIE5ldGxpbmsgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgaGFuZHNoYWtlIG5ldGxpbmsgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCBhbmQgc2VlIHdoYXQncyBiZWVuIHVwZGF0ZWQuICBJIHNlZSBhIGNvdXBsZSBvZiBzcGVjaWZpYyBtb2RpZmljYXRpb25zLiBJbiBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCB0aGUgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGF0dHJpYnV0ZSdzIHR5cGUgaGFzIHNoaWZ0ZWQgZnJvbSBgTkxBX1UzMmAgdG8gYE5MQV9TMzJgLiBBbmQgb3ZlciBpbiBgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lgLCBgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NgIGhhcyBnb25lIGZyb20gYE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDIpYCB0byBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSlgLiBUaGVzZSBhcmUgaW50ZXJlc3RpbmcgY2hhbmdlcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zLiBJJ2xsIGNoZWNrIGBoYW5kc2hha2UueWFtbGAgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLiBBaCwgSSBzZWUgYSBjbGVhciBzaGlmdCBpbiB0aGUgYGVudW0gaGFuZHNoYWtlX2hhbmRsZXJfY2xhc3NgLiAgVGhlIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIGRlZmluaXRpb24gaGFzIGJlZW4gdXBkYXRlZCwgbm93IGl0J3MgZGVmaW5lZCBhcyBgKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC0gMSlgLiBQcmV2aW91c2x5LCBpdCB3YXMgc2ltcGx5IHRoZSB1cHBlciBib3VuZC4gVGhpcyBtZWFucyB0aGUgYWNjZXB0YWJsZSB1cHBlciBsaW1pdCBvZiBoYW5kbGVyIGNsYXNzZXMgaGFzIGNoYW5nZWQuICBUaGlzIGV4cGxhaW5zIHdoeSB0aGUgYE5MQV9QT0xJQ1lfTUFYYCB2YWx1ZSB3YXMgcmVkdWNlZCBmcm9tIDIgdG8gMSFcblxuVGhhdCBzaGlmdCBpbiBlbnVtIGRlZmluaXRpb25zIHRyaWdnZXJlZCBhIHJlbGF0ZWQgY2hhbmdlIGluIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIFRoZSBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC4gVGhlIGNvbXBhcmlzb24gbG9naWMgaXMgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBib3VuZGFyeS4gVGhlIG9sZCBgcHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2U9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgY2hlY2sgaXMgcmVwbGFjZWQgd2l0aCBgXHUwMDNlIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGFzIHRoZSB2YWxpZCBoYW5kbGVyIGNsYXNzZXMgY2hhbmdlZC4gSSBhbHNvIHNlZSBhIHRlc3QgY2FzZSwgYGhhbmRzaGFrZS10ZXN0LmNgLCB3aGVyZSBgX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIHJlcGxhY2VzIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLCB0byBtYWtlIHRoZSB0ZXN0IG1hdGNoIHRoZSBuZXcgY2xhc3MgZGVmaW5pdGlvbi5cblxuRmluYWxseSwgSSByZW1lbWJlciB0aGUgb3RoZXIgcmVsYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXM6IGBwZWVyLWlkZW50aXR5YCwgYGtleXJpbmdgLCBhbmQgYHJlbW90ZS1hdXRoYC4gVGhlIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAgY29uZmlybXMgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgY2hhbmdlZCBmcm9tIGB1MzJgIHRvIGBzMzJgLiBUaGF0IG1ha2VzIHNlbnNlIC0gYGtleV9zZXJpYWxfdGAgaW4gdGhlIGtlcm5lbCBpcyBhbiBgaW50MzJgLCBzbyB1c2luZyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBpcyB0aGUgcmlnaHQgdHlwZS5cblxuTm93LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgdG8gc2VlIGhvdyB0aGUgVExTSEQgKFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIYW5kc2hha2UgRGFlbW9uKSBhbmQgdGhlIFwiZG9uZVwiIGFuZCBcImFjY2VwdFwiIHBhdGhzIGhhbmRsZSByZW1vdGUgYXV0aGVudGljYXRpb24gYW5kIHRoZSBrZXkgc2VyaWFscywgaW4gb3JkZXIgdG8gY29tcGxldGUgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6NTUuNzU1MDAwOTM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMzExMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFORFNIQUtFX0FfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oYW5kc2hha2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hhbmRzaGFrZS9nZW5sLmMtMTUtLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyArIDFdID0ge1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjE3OlxcdFtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xOC19O1xcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjAtLyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggKyAxXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMjpcXHRbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTUFYX0VSUk5PKSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMzpcXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjQ6XFx0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjUtfTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jPTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdID0ge1xcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzItXFx0XFx0LnBvbGljeVxcdFxcdD0gaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3ksXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MzM6XFx0XFx0Lm1heGF0dHJcXHQ9IEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTM0LVxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzktXFx0XFx0LnBvbGljeVxcdFxcdD0gaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5LFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjQwOlxcdFxcdC5tYXhhdHRyXFx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTQxLVxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9Mzc9aW50IGhhbmRzaGFrZV9nZW5sX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNTktXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6NjA6XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MsXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNjEtXFx0XFx0XFx0cHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MpIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9OTA9aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTAxLVxcdGVyciA9IC1FSU5WQUw7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTAyOlxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDMtXFx0XFx0Z290byBvdXRfc3RhdHVzO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEwNDpcXHRjbGFzcyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTA1LVxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MTMzPWludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMzktXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQwOlxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0RPTkVfU09DS0ZEKSlcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNDEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQyOlxcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdKTtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNDMtXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNTgtXFx0c3RhdHVzID0gLUVJTztcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNTk6XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSlcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjA6XFx0XFx0c3RhdHVzID0gLShpbnQpbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNjEtXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9NjE9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzAtXFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo3MTpcXHRcXHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy03Mi1cXHRcXHRcXHRpKys7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtODAtXFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo4MTpcXHRcXHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04Mi1cXHRcXHRcXHR0cmVxLVxcdTAwM2V0aF9wZWVyaWRbaSsrXSA9IG5sYV9nZXRfdTMyKG5sYSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MTUxPXN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9wdXRfcGVlcl9pZGVudGl0eShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHJlcS1cXHUwMDNldGhfbnVtX3BlZXJpZHM7IGkrKylcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTU3OlxcdFxcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9QRUVSX0lERU5USVRZLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTgtXFx0XFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfcGVlcmlkW2ldKSBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MTYzPXN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9wdXRfY2VydGlmaWNhdGUoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzEtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE3MjpcXHRlbnRyeV9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfQ0VSVElGSUNBVEUpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzMtXFx0aWYgKCFlbnRyeV9hdHRyKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3NS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTc2OlxcdGlmIChubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX1g1MDlfQ0VSVCxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc3LVxcdFxcdFxcdHRyZXEtXFx1MDAzZXRoX2NlcnRpZmljYXRlKSB8fFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzg6XFx0ICAgIG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfWDUwOV9QUklWS0VZLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzktXFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfcHJpdmtleSkpIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xOTY9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX2FjY2VwdChzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxNS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjE2OlxcdHJldCA9IG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1NPQ0tGRCwgZmQpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxOC1cXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxOTpcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9NRVNTQUdFX1RZUEUsIHRyZXEtXFx1MDAzZXRoX3R5cGUpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjIyLVxcdGlmICh0cmVxLVxcdTAwM2V0aF9wZWVybmFtZSkge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMjM6XFx0XFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUk5BTUUsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIyNC1cXHRcXHRcXHRcXHQgICAgIHRyZXEtXFx1MDAzZXRoX3BlZXJuYW1lKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjgtXFx0aWYgKHRyZXEtXFx1MDAzZXRoX3RpbWVvdXRfbXMpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjI5OlxcdFxcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1RJTUVPVVQsIHRyZXEtXFx1MDAzZXRoX3RpbWVvdXRfbXMpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjMzLVxcdGlmICh0cmVxLVxcdTAwM2V0aF9rZXlyaW5nKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIzNDpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9LRVlSSU5HLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzUtXFx0XFx0XFx0XFx0ICB0cmVxLVxcdTAwM2V0aF9rZXlyaW5nKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzktXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI0MDpcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9BVVRIX01PREUsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0MS1cXHRcXHRcXHQgIHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjU1LjkxMTIzNzM1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDI2NzExMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFuYWx5c2lzOiBHZW5lcmljIE5ldGxpbmsgSGFuZHNoYWtlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHJlbGlhYmx5IHRhcmdldCBhbmQgdHJpZ2dlciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBjb2RlLiBUaGUgZ29vZCBuZXdzIGlzLCBhYnNvbHV0ZWx5LCB5ZXMhIFdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBnZW5lcmljIG5ldGxpbmsgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHdlbGwtZGVmaW5lZCBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gYGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXWAgY2xlYXJseSBkZWZpbmVzIHRoZSBoYW5kbGVyczogYEhBTkRTSEFLRV9DTURfQUNDRVBUYCBtYXBzIHRvIGBoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRgLCBhbmQgYEhBTkRTSEFLRV9DTURfRE9ORWAgZ29lcyB0byBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAuIFRoZXNlIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGBoYW5kc2hha2VfbmxfZmFtaWx5YCB2aWEgYGdlbmxfcmVnaXN0ZXJfZmFtaWx5KClgLCBtYWtpbmcgdGhlbSBwcmltZSBjYW5kaWRhdGVzLiBFc3NlbnRpYWxseSwgYW55IHVzZXJzcGFjZSBwcm9jZXNzLCBpbmNsdWRpbmcgc3l6a2FsbGVyLCBjYW4gc2VuZCBuZXRsaW5rIG1lc3NhZ2VzIHRvIHRoaXMgYGhhbmRzaGFrZWAgZmFtaWx5LlxuXG5TcGVjaWZpY2FsbHksIHdlIGNhbiBjcmFmdCBhbmQgc2VuZCBtZXNzYWdlcyBjb250YWluaW5nIGBIQU5EU0hBS0VfQ01EX0FDQ0VQVGAgYW5kIGBIQU5EU0hBS0VfQ01EX0RPTkVgIGNvbW1hbmRzLiBJIGltbWVkaWF0ZWx5IG5vdGUgdGhlIHBvbGljeSBjaGFuZ2VzLCBhbmQgdGhlc2UgbWVyaXQgY2FyZWZ1bCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuIFRoZSBtb2RpZmljYXRpb24gb2YgIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgZnJvbSBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMilgIHRvIGBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKWAgaW4gYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGZyb20gYE5MQV9VMzJgIHRvIGBOTEFfUzMyYCBpbiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCwgYW5kIHRoZSBib3VuZGFyeSBjaGVjayBjaGFuZ2UgaW4gYGhhbmRzaGFrZV9yZXFfYWxsb2NgIOKAkyB0aGVzZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0byBleHBsb2l0LCBlc3BlY2lhbGx5IGZvciBpbnRlZ2VyIG92ZXJmbG93cyBvciBib3VuZGFyeSBjb25kaXRpb24gdmlvbGF0aW9ucy5cblxuVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGF0ZWQgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oYCwgYG5ldC9oYW5kc2hha2UvZ2VubC5jYCwgYG5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY2AsIGFuZCBgbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNgIHRvIGlkZW50aWZ5IG90aGVyIGNoYW5nZXMuXG5cbk5vdywgZnJvbSBhIGZ1enppbmcgYW5nbGUsIHRoZSB0YXJnZXQgaXMgY2xlYXJseSByZWFjaGFibGUuIEdlbmVyaWMgbmV0bGluayBpcyBhIGZ1bmRhbWVudGFsIHVzZXJzcGFjZS1rZXJuZWwgaW50ZXJmYWNlIHV0aWxpemluZyBgQUZfTkVUTElOS2AgYW5kIGBORVRMSU5LX0dFTkVSSUNgIHNvY2tldHMuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIG1vZGlmaWVkIHBvbGljaWVzIChgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lgIGFuZCBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCkuICBUaGUgZnVuY3Rpb25zIGBoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRgLCBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAsIGFuZCBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgYXJlLCB0aGVyZWZvcmUsIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgcGF0aHMuIFRoaXMgY29uZmlybXMgdGhlIGluaXRpYWwgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIGFzc2Vzc21lbnQuXG5cbkZpbmFsbHksIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyBgTkVUX0hBTkRTSEFLRWAuIFRoZSBgS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGl0J3MgYGJvb2xgLCBkZXBlbmRlbnQgb24gYFNVTlJQQyB8fCBOVk1FX1RBUkdFVF9UQ1AgfHwgTlZNRV9UQ1BgLCBhbmQgZGVmYXVsdHMgdG8gJ3knLiBCZWNhdXNlIGl0J3MgYSBkaXJlY3QgYm9vbGVhbiwgdGhlIGtlcm5lbCB3aWxsIGNvbXBpbGUgaW4gdGhpcyBoYW5kc2hha2UgZnVuY3Rpb25hbGl0eSBpZiBgU1VOUlBDYCBvciBgTlZNRV9UQ1BgIGlzIHNlbGVjdGVkLiBTbywgdG8gZW5zdXJlIGBORVRfSEFORFNIQUtFYCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIHZlcmlmeSBgU1VOUlBDYCwgYE5WTUVfVENQYCwgb3IgYE5WTUVfVEFSR0VUX1RDUGAgYXJlIGVuYWJsZWQsIG9yIGp1c3QgZW5hYmxlIGBORVRfSEFORFNIQUtFYCBpdHNlbGYgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgY29uZmlnLW9wdGlvbnMgdG8gaW52ZXN0aWdhdGUgYXJlIGBORVRfSEFORFNIQUtFYCwgYFNVTlJQQ2AsIGFuZCBgTlZNRV9UQ1BgIGluIHN5emthbGxlcidzIGNvbmZpZyBmb3JtYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTc0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjAzLjkzNzk1MzQ2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTkzMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxOkNPTkZJR19LVU5JVD15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MjpDT05GSUdfVUJTQU49eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjM6Q09ORklHX1NUQUNLVFJBQ0U9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjQ6Q09ORklHX05FVD15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NTpDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NjpDT05GSUdfSU5FVD15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NzpDT05GSUdfTVVMVElVU0VSPXlcXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzo4OkNPTkZJR19ORlNfRlM9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjk6Q09ORklHX1NVTlJQQz15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MTA6Q09ORklHX05FVF9IQU5EU0hBS0U9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjExOkNPTkZJR19ORVRfSEFORFNIQUtFX0tVTklUX1RFU1Q9eVxcbi0tXFxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZT0xMT1oYW5kc2hha2UteSA6PSBhbGVydC5vIGdlbmwubyBuZXRsaW5rLm8gcmVxdWVzdC5vIHRsc2hkLm8gdHJhY2Uub1xcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGUtMTItXFxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUKSArPSBoYW5kc2hha2UtdGVzdC5vXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9OTU9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9kb25lKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTEwLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0tFWVMpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExMi1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MDQuMDYwOTUwOTkzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTI5ODc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgSGFuZHNoYWtlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgTkVUX0hBTkRTSEFLRWAgY29uZmlndXJhdGlvbi4gRmlyc3QsIEknbGwgY29uZmlybSBpdHMgcHJlc2VuY2UgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gSSdsbCBxdWlja2x5IGNoZWNrIGBLY29uZmlnYCBhbmQgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBuZXRgIGRpcmVjdG9yeS4gSXQgbG9va3MgbGlrZSBlbmFibGluZyBgTkVUX0hBTkRTSEFLRWAgaW4gdGhlIGBNYWtlZmlsZWAgYWRkcyB0aGUgYGhhbmRzaGFrZS9gIGRpcmVjdG9yeSB0byB0aGUgYnVpbGQsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gQSBxdWljayBtZW50YWwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgbGlrZSB0aG9zZSBmb3IgYFNVTlJQQ2Agb3IgYE5WTUVfVENQYCBhcmVuJ3QgaW50ZXJmZXJpbmcuIFByb3ZpZGluZyBgTkVUX0hBTkRTSEFLRWAgaW4gRW5hYmxlQ29uZmlncyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIHByb2NlZWQsIHNvIHRoYXQgc2VlbXMgc3VmZmljaWVudCBmb3Igbm93LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb246IGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzeW1ib2xzIGFyZSBkaXJlY3RseSBhbHRlcmVkIGJ5IHRoZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgYGhhbmRzaGFrZWAgY29kZSBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYy4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBhIGZldyBrZXkgZnVuY3Rpb25zOlxuXG4xLiAgYGhhbmRzaGFrZV9yZXFfYWxsb2NgIHdpdGhpbiBgbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNgIC0gdGhlcmUncyBhbHRlcmVkIGNvbXBhcmlzb24gbG9naWMgaW4gaGVyZTogYGhwX2hhbmRsZXJfY2xhc3MgXHUwMDNlIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAuXG4yLiAgYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAgaW4gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCAtIGl0IHVzZXMgYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgd2hlcmUgdGhlIG1heGltdW0gdmFsdWUgb2YgYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYCBoYXMgY2hhbmdlZCBmcm9tIDIgdG8gMS5cbjMuICBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAgaW4gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCAtIFRoaXMgb25lIGFsc28gdXNlcyBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCwgYW5kIHRoZSB0eXBlIG9mIGBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIYCBjaGFuZ2VkIGZyb20gYE5MQV9VMzJgIHRvIGBOTEFfUzMyYC5cbjQuICBgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc2AgaW4gYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgLSBIYW5kbGVzIGBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIYCB3aXRoaW4gdGhlIGRvbmUgY2FsbGJhY2ssIGFuZCB0aGlzIGlzIGFub3RoZXIgaW1wb3J0YW50IHBvaW50IHRvIGJlIGF3YXJlIG9mLlxuXG5OZXh0LCBJJ2xsIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgbmV0L2hhbmRzaGFrZS9gIHRoYXQgYXJlIGFmZmVjdGVkPyBMZXQncyB0YWtlIGEgbG9vayBhdCBgbmV0L2hhbmRzaGFrZS90bHNoZC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MTIuMTEzOTQxODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNjI0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWN8XmludHxedm9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaGFuZHNoYWtlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oYW5kc2hha2UvYWxlcnQuYy0zMy0gKi9cXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmM6MzQ6aW50IHRsc19hbGVydF9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHU4IGxldmVsLCB1OCBkZXNjcmlwdGlvbilcXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmMtMzUte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9hbGVydC5jPTg3PUVYUE9SVF9TWU1CT0wodGxzX2dldF9yZWNvcmRfdHlwZSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmMtOTYtICovXFxubmV0L2hhbmRzaGFrZS9hbGVydC5jOjk3OnZvaWQgdGxzX2FsZXJ0X3JlY3YoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2hhbmRzaGFrZS9hbGVydC5jLTk4LVxcdFxcdCAgICB1OCAqbGV2ZWwsIHU4ICpkZXNjcmlwdGlvbilcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE1LS8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi9cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoxNjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MgKyAxXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xNy1cXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMC0vKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIyLVxcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjctLyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yOS1cXHR7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00NC1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGhhbmRzaGFrZV9ubF9tY2dycHNbXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00Ni1cXHRbSEFORFNIQUtFX05MR1JQX05PTkVdID0geyBcXFwibm9uZVxcXCIsIH0sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuaC0xNS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuaDoxNjppbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9oYW5kc2hha2UvZ2VubC5oOjE3OmludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9oYW5kc2hha2UvZ2VubC5oLTE4LVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTIwPU1PRFVMRV9JTVBPUlRfTlMoXFxcIkVYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HXFxcIik7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTIxLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyMjpzdGF0aWMgaW50IHRlc3RfYWNjZXB0X2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjMtXFx0XFx0XFx0ICAgIGludCBmZClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yNy1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Mjg6c3RhdGljIHZvaWQgdGVzdF9kb25lX2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjktXFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0zMz1zdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zOS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDA6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MS1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTk9ORSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00My1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDQ6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NS1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDctXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNCA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDktXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUxLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MjpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzUgPSB7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUzLVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01Ni1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTc6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b182ID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01OC1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNjMtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjY0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNjUtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTY5LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo3MDpzdGF0aWMgY29uc3RcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNzEtc3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtc1tdID0ge1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExNS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTE2OnN0YXRpYyB2b2lkXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExNy1oYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0gKnBhcmFtLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTEyND1LVU5JVF9BUlJBWV9QQVJBTShoYW5kc2hha2VfcmVxX2FsbG9jLCBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtcyxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjYtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEyNzpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2FsbG9jX2Nhc2Uoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjgte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE0NS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTQ2OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfc3VibWl0X3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTQ3LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xNjQtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE2NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE2Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTgyLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxODM6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xODQte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTIwNy1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MjA4OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfc3VibWl0X3Rlc3Q0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjA5LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yNDQtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI0NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI0Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjg1LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyODY6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDYoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yODcte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTMyMy1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MzI0OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzI1LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNjEtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM2MjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTM2My17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDExLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0MTI6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9jYW5jZWxfdGVzdDMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MTMte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2NS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDY2OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9kZXN0cm95X3Rlc3Q7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2Ny1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDY4OnN0YXRpYyB2b2lkIHRlc3RfZGVzdHJveV9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2OS17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDcyLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0NzM6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19kZXN0cm95ID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NzQtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3OS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDgwOnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfZGVzdHJveV90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ4MS17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTE4LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MTk6c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGhhbmRzaGFrZV9hcGlfdGVzdF9jYXNlc1tdID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MjAtXFx0e1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTU2Ny1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTY4OnN0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgaGFuZHNoYWtlX2FwaV9zdWl0ZSA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTY5LSAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9IFxcXCJIYW5kc2hha2UgQVBJIHRlc3RzXFxcIixcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg9Njc9ZW51bSBocF9mbGFnc19iaXRzIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzEtLyogYWxlcnQuYyAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6NzI6aW50IHRsc19hbGVydF9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHU4IGxldmVsLCB1OCBkZXNjcmlwdGlvbik7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC03My1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTc0LS8qIG5ldGxpbmsuYyAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6NzU6aW50IGhhbmRzaGFrZV9nZW5sX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzYtXFx0XFx0XFx0ICBnZnBfdCBmbGFncyk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTgyPXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtODMtXFx0XFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncyk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4NDppbnQgaGFuZHNoYWtlX3JlcV9oYXNoX2luaXQodm9pZCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4NTp2b2lkIGhhbmRzaGFrZV9yZXFfaGFzaF9kZXN0cm95KHZvaWQpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODY6dm9pZCAqaGFuZHNoYWtlX3JlcV9wcml2YXRlKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtODctc3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfaGFzaF9sb29rdXAoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTg4PXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX25leHQoc3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuLCBpbnQgY2xhc3MpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODk6aW50IGhhbmRzaGFrZV9yZXFfc3VibWl0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC05MC1cXHRcXHRcXHQgZ2ZwX3QgZmxhZ3MpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6OTE6dm9pZCBoYW5kc2hha2VfY29tcGxldGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTkyLVxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMzYtICovXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6Mzc6aW50IGhhbmRzaGFrZV9nZW5sX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTM4LVxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz04OD1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9nZW5sX3B1dCk7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtODktXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6OTA6aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTkxLXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEzMi1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxMzM6aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMzQte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTY2LVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE2NzpzdGF0aWMgdW5zaWduZWQgaW50IGhhbmRzaGFrZV9uZXRfaWQ7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTY4LVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE2OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFuZHNoYWtlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNzAte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTkwLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE5MTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGhhbmRzaGFrZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTkyLXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTIxOS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoyMjA6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBoYW5kc2hha2VfZ2VubF9uZXRfb3BzID0ge1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTIyMS1cXHQuaW5pdFxcdFxcdD0gaGFuZHNoYWtlX25ldF9pbml0LFxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MjM5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3Blcm5ldCk7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjQwLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjI0MTpzdGF0aWMgaW50IF9faW5pdCBoYW5kc2hha2VfaW5pdCh2b2lkKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTI0Mi17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0yNzYtXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6Mjc3OnN0YXRpYyB2b2lkIF9fZXhpdCBoYW5kc2hha2VfZXhpdCh2b2lkKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTI3OC17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy00MC1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo0MTpzdGF0aWMgc3RydWN0IHJoYXNodGFibGUgaGFuZHNoYWtlX3JoYXNodGJsIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNDItXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6NDM6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBoYW5kc2hha2Vfcmhhc2hfcGFyYW1zID0ge1xcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQ0LVxcdC5rZXlfbGVuXFx0XFx0PSBzaXplb2ZfZmllbGQoc3RydWN0IGhhbmRzaGFrZV9yZXEsIGhyX3NrKSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQ5LVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjUwOmludCBoYW5kc2hha2VfcmVxX2hhc2hfaW5pdCh2b2lkKVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTUxLXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTU0LVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjU1OnZvaWQgaGFuZHNoYWtlX3JlcV9oYXNoX2Rlc3Ryb3kodm9pZClcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy01Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYz02NT1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGhhbmRzaGFrZV9yZXFfaGFzaF9sb29rdXApO1xcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTY2LVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjY3OnN0YXRpYyBib29sIGhhbmRzaGFrZV9yZXFfaGFzaF9hZGQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy02OC17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy03Ni1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo3NzpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2Rlc3Ryb3koc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy03OC17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy04NS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo4NjpzdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTg3LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTEzMT1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfYWxsb2MpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTM3LSAqL1xcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEzODp2b2lkICpoYW5kc2hha2VfcmVxX3ByaXZhdGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMzkte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MTQyPUVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX3JlcV9wcml2YXRlKTtcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNDMtXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTQ0OnN0YXRpYyBib29sIF9fYWRkX3BlbmRpbmdfbG9ja2VkKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobixcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNDUtXFx0XFx0XFx0XFx0IHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNTMtXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTU0OnN0YXRpYyB2b2lkIF9fcmVtb3ZlX3BlbmRpbmdfbG9ja2VkKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobixcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNjgtICovXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTY5OnN0YXRpYyBib29sIHJlbW92ZV9wZW5kaW5nKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiwgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNzAte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MjE5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3JlcV9uZXh0KTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTI1MC0gKi9cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoyNTE6aW50IGhhbmRzaGFrZV9yZXFfc3VibWl0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMjUyLVxcdFxcdFxcdCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTMyMj1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfc3VibWl0KTtcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0zMjMtXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MzI0OnZvaWQgaGFuZHNoYWtlX2NvbXBsZXRlKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsIGludCBzdGF0dXMsXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMzI1LVxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjc9c3RydWN0IHRsc19oYW5kc2hha2VfcmVxIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00My1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NDQ6c3RhdGljIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQ1LXRsc19oYW5kc2hha2VfcmVxX2luaXQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy02MC1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NjE6c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTYyLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTk0LSAqL1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo5NTpzdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtOTYtXFx0XFx0XFx0ICAgICAgIGludCBzdGF0dXMsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19LRVlTKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTI6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExMy17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ0LSNlbHNlXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE0NTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ2LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTAtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1MTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUyLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNjItXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE2MzpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE2NC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE5NS0gKi9cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTk2OnN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9hY2NlcHQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTk3LVxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBmZClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNjYtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI2NzpzdGF0aWMgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byB0bHNfaGFuZHNoYWtlX3Byb3RvID0ge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNjgtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI4NS0gKi9cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6Mjg2OmludCB0bHNfY2xpZW50X2hlbGxvX2Fub24oY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI4Ny17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzAwPUVYUE9SVF9TWU1CT0wodGxzX2NsaWVudF9oZWxsb19hbm9uKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTEtICovXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjMxMjppbnQgdGxzX2NsaWVudF9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTMte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTMyOD1FWFBPUlRfU1lNQk9MKHRsc19jbGllbnRfaGVsbG9feDUwOSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzQwLSAqL1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozNDE6aW50IHRsc19jbGllbnRfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNDIte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM2Mz1FWFBPUlRfU1lNQk9MKHRsc19jbGllbnRfaGVsbG9fcHNrKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzQtICovXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM3NTppbnQgdGxzX3NlcnZlcl9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzYte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM5MT1FWFBPUlRfU1lNQk9MKHRsc19zZXJ2ZXJfaGVsbG9feDUwOSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDAyLSAqL1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0MDM6aW50IHRsc19zZXJ2ZXJfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDQte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQzOD1FWFBPUlRfU1lNQk9MKHRsc19oYW5kc2hha2VfY2FuY2VsKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00NDQtICovXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjQ0NTp2b2lkIHRsc19oYW5kc2hha2VfY2xvc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MTIuMTc3NTcyMTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY2OTE1ODk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIYW5kc2hha2UgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGBGb2N1c1N5bWJvbHNgLiBJdCBzZWVtcyB3ZSd2ZSBzZWxlY3RlZCB0aGVzZTogYGhhbmRzaGFrZV9yZXFfYWxsb2NgLCB3aGljaCBoYXMgbW9kaWZpZWQgbG9naWM7IHRoZW4gYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAgd2hpY2ggaGFuZGxlcyB0aGUgTmV0bGluayBhY2NlcHQgcmVxdWVzdCBhbmQgdmFsaWRhdGVzIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2A7IG5leHQgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgIHdoaWNoIGFsc28gaGFuZGxlcyBhIE5ldGxpbmsgcmVxdWVzdCBidXQgc3BlY2lmaWNhbGx5IGZvciBjb21wbGV0aW9uIG9mIHRoZSBoYW5kc2hha2UsIHZhbGlkYXRpbmcgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgOyBhbmQgZmluYWxseSwgYHRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNgIHdoaWNoIHByb2Nlc3NlcyB0aGUgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIG5ldGxpbmsgYXR0cmlidXRlLiBUaG9zZSBzZWVtIGxpa2Ugc2Vuc2libGUgdGFyZ2V0cyBmb3IgZm9jdXNpbmcgb3VyIGZ1enppbmcgZWZmb3J0cy5cblxuTmV4dCwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0LiBXZSBoYXZlIGBORVRfSEFORFNIQUtFYCBhbmQgYFNVTlJQQ2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBhcHByb3ByaWF0ZSwgZ2l2ZW4gdGhlIGhhbmRzaGFrZSBmb2N1cy5cblxuQWxyaWdodCwgbm93IHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBwcm9tcHQ6IHdlIGhhdmUgYFdvcnRoRnV6emluZ2Agd2hpY2ggSSBhc3N1bWUgaXMgYSBib29sZWFuIHRvIGluZGljYXRlIHdoZXRoZXIgZnV6emluZyBpcyB3YXJyYW50ZWQsIHRoZW4gdGhlIGBGb2N1c1N5bWJvbHNgLCBhIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZW4ndCB1YmlxdWl0b3VzLCBhbmQgZmluYWxseSB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdoaWNoIGFyZSBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguIENoZWNrLCBjaGVjaywgY2hlY2suIExvb2tzIGxpa2UgZXZlcnl0aGluZyBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLlxuXG5Pa2F5LCBldmVyeXRoaW5nIGFwcGVhcnMgc291bmQgYW5kIGFjY3VyYXRlLiBMZXQncyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0MSwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MTguODQ2NzM0NTM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMzU0MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSEFORFNIQUtFXCIsXG4gICAgXCJTVU5SUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kc2hha2VfcmVxX2FsbG9jXCIsXG4gICAgXCJoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRcIixcbiAgICBcImhhbmRzaGFrZV9ubF9kb25lX2RvaXRcIixcbiAgICBcInRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIE5ldGxpbmsgYXR0cmlidXRlIHR5cGVzIGFuZCB2YWxpZGF0aW9uIHBvbGljaWVzIGZvciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBzZXJ2aWNlIChhY2NlcHQgaGFuZGxlciBjbGFzcyBhbmQgcmVtb3RlIGF1dGgga2V5IElEcykgYW5kIGZpeGVzIHRoZSBib3VuZGFyeSBjaGVjayBpbiBoYW5kc2hha2VfcmVxX2FsbG9jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcgYW5kIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9IQU5EU0hBS0VcIixcbiAgICBcIlNVTlJQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRzaGFrZV9yZXFfYWxsb2NcIixcbiAgICBcImhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdFwiLFxuICAgIFwiaGFuZHNoYWtlX25sX2RvbmVfZG9pdFwiLFxuICAgIFwidGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjE4Ljk2OTA5NTM2OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNzk0MDQ3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDoxOC45Njk2NTk1NjhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODA3ODgzNDUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjQzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG5pbmRleCBmZmVjMTJiNDY3NTk3Li4wNDk4YWRhMmRkOTdhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxcbkBAIC0yMiw3ICsyMiw4IEBAIGRlZmluaXRpb25zOlxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IGhhbmRsZXItY2xhc3NcbiAgICAgdmFsdWUtc3RhcnQ6IDBcbi0gICAgZW50cmllczogW25vbmUsIHRsc2hkLCBtYXhdXG4rICAgIGVudHJpZXM6IFtub25lLCB0bHNoZF1cbisgICAgcmVuZGVyLW1heDogdHJ1ZVxuICAgLVxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IG1zZy10eXBlXG5AQCAtNjcsNyArNjgsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIGVudW06IGF1dGhcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwZWVyLWlkZW50aXR5XG4tICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXG5AQCAtNzksNyArODAsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHN0cmluZ1xuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGtleXJpbmdcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAtXG4gICAgIG5hbWU6IGRvbmVcbiAgICAgYXR0cmlidXRlczpcbkBAIC05Myw3ICs5NCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcmVtb3RlLWF1dGhcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAgICAgICBtdWx0aS1hdHRyOiB0cnVlXG4gXG4gb3BlcmF0aW9uczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbmluZGV4IGQ3ZTQwZjU5NDg4ODYuLmY5MDdhYTA4MjUyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaFxuQEAgLTEzLDcgKzEzLDEwIEBAXG4gZW51bSBoYW5kc2hha2VfaGFuZGxlcl9jbGFzcyB7XG4gXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLFxuIFx0SEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXG4rXHQvKiBwcml2YXRlOiAqL1xuK1x0X19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggPSAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKVxuIH07XG4gXG4gZW51bSBoYW5kc2hha2VfbXNnX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvZ2VubC5jIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2dlbmwuY1xuKysrIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbkBAIC0xNCwxNCArMTQsMTQgQEBcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XG4tXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksXG4rXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG4gfTtcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xuIFx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXG4gXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4tXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbitcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuIH07XG4gXG4gLyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cbmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbmluZGV4IDNkZDUwNzQ3MGQ1ZmUuLjRiOTlhY2Q5ZjljN2UgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbisrKyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xuLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuK1x0LmhwX2hhbmRsZXJfY2xhc3NcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuaW5kZXggY2QzMGQ1NGQwNTAxZC4uZmY3MzllZTgxY2I4MiAxMDA2NDRcbi0tLSBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jXG4rKysgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90byxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2M9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHByb3RvLVx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXHUwMDNlPSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpXG4rXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2UgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICghcHJvdG8tXHUwMDNlaHBfYWNjZXB0IHx8ICFwcm90by1cdTAwM2VocF9kb25lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjE4Ljk2OTY2MDU3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDc1NTk1NDY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTi9LQVNBTiBQYXRjaCBFdmFsdWF0aW9uIC0gSGFuZHNoYWtlIFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIEtNU0FOL0tBU0FOIGFwcGxpY2FiaWxpdHkuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgdHJ1ZSBvciBmYWxzZSBhbmQgcmVjb3JkIG15IHJlYXNvbmluZyB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sLiBMZXQncyBkaWcgaW4uXG5cblRoZSBkaWZmIHRhcmdldHMgdGhlIGhhbmRzaGFrZSBzdWJzeXN0ZW0sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHJlYWQtdGhyb3VnaCBzaG93cyB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgc3RydWN0dXJlcyBhbmQgZW51bXMgd2l0aGluIHRoZSBuZXRsaW5rIGhhbmRzaGFrZSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oYCwgYG5ldC9oYW5kc2hha2UvZ2VubC5jYCwgYG5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY2AsIGFuZCBgbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNgLlxuXG5UaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlOlxuXG4qICAgKipFbnVtIGNoYW5nZXM6KiogVGhlIGBoYW5kc2hha2VfaGFuZGxlcl9jbGFzc2AgZW51bSBoYXMgYmVlbiBtb2RpZmllZC4gIFdlJ3ZlIGdvdCBuZXcgZW50cmllcyBsaWtlIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FYCBhbmQgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hEYCwgYW5kIHRoZSBkZWZpbml0aW9uIG9mIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIGlzIGJlaW5nIGFkanVzdGVkLiBUaGlzIGlzIGEgcG90ZW50aWFsIHJlZCBmbGFnLCBhcyBlbnVtIGNoYW5nZXMgY2FuIHNvbWV0aW1lcyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LlxuKiAgICoqVHlwZSBjaGFuZ2VzOioqIFNldmVyYWwgYXR0cmlidXRlcyByZWxhdGVkIHRvIG5ldGxpbmsgbWVzc2FnZXMgKGBwZWVyLWlkZW50aXR5YCwgYGtleXJpbmdgLCBgcmVtb3RlLWF1dGhgKSBhcmUgaGF2aW5nIHRoZWlyIHR5cGVzIHN3aXRjaGVkIGZyb20gYHUzMmAgdG8gYHMzMmAuXG4qICAgKipQb2xpY3kgYWRqdXN0bWVudHM6KiogVGhlIG5ldGxpbmsgcG9saWN5IGZvciBoYW5kbGluZyBoYW5kc2hha2UgbWVzc2FnZXMgKGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAsIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgKSBpcyBiZWluZyBtb2RpZmllZCB0byByZWZsZWN0IHRoZXNlIHR5cGUgY2hhbmdlcy5cbiogICAqKkJvdW5kcyBDaGVja3M6KiogVGhlcmUncyBhIHNsaWdodCBhZGp1c3RtZW50IHRvIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGBcdTAwM2VgIGluc3RlYWQgb2YgYFx1MDAzZT1gIHJlbGF0aW5nIHRvICBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYC5cblxuTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlICptaWdodCogaW50cm9kdWNlIG5ldyBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIHR5cGUgY2hhbmdlcyBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnRlZ2VycyBhcmUgY29uY2VybmluZy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgcGVyZmVjdGx5IGZpbmUgYW5kIGlzIGp1c3QgYSBuZWNlc3NhcnkgcmVmaW5lbWVudCwgYnV0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBvcmlnaW5hbCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIHVzZWQgaW4gc2NlbmFyaW9zIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc2lnbmVkIGludGVnZXIgdHlwZS5cblxuVG8gZGV0ZXJtaW5lIGBOZWVkc0tNU0FOYCBkZWZpbml0aXZlbHksIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlc2UgYXR0cmlidXRlcyByZXByZXNlbnQgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzYCBpcyBhbGwgYWJvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhvc2UgdHlwZSBjaGFuZ2VzIGFuZCB3aGV0aGVyIHRoZXJlJ3MgYSByaXNrIG9mIGludGVnZXIgb3ZlcmZsb3csIHVuZGVyZmxvdywgb3Igc2lnbiBleHRlbnNpb24gaXNzdWVzLiBTbywgSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZm9sbG93IGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlJ3MgYW55IHBvaW50ZXIgYXJpdGhtZXRpYyBvciBtZW1vcnkgbWFuaXB1bGF0aW9uIGludm9sdmVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgZGVhbHMgd2l0aCBwb3RlbnRpYWxseSBuZXR3b3JrLXJlbGF0ZWQgZGF0YSAodGhlIGhhbmRzaGFrZSBwcm90b2NvbCkuIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYG5ldC9oYW5kc2hha2VgIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgS01TQU4gd291bGQgYmUgdmFsdWFibGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjMzLjcyNTYxODExNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNTcwMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlL2dlbmwuYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MgKyAxXSA9IHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjE6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIICsgMV0gPSB7XFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjItXFx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjMtXFx0W0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjI0OlxcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTI1LX07XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTM5LVxcdFxcdC5wb2xpY3lcXHRcXHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo0MDpcXHRcXHQubWF4YXR0clxcdD0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00MS1cXHRcXHQuZmxhZ3NcXHRcXHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz02MT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy03MC1cXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjcxOlxcdFxcdGlmIChubGFfdHlwZShubGEpID09IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcyLVxcdFxcdFxcdGkrKztcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04MC1cXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjgxOlxcdFxcdGlmIChubGFfdHlwZShubGEpID09IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgyLVxcdFxcdFxcdHRyZXEtXFx1MDAzZXRoX3BlZXJpZFtpKytdID0gbmxhX2dldF91MzIobmxhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MzQuMzc3MjAwNjAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDU1MTA5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3QgbWF0dGVyOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZXQvaGFuZHNoYWtlYCBDb21wb25lbnRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIGhvdyBgbmV0L2hhbmRzaGFrZWAgb3JjaGVzdHJhdGVzIHRoaW5ncy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGludGVycGxheSBvZiBoYW5kbGVyIGNsYXNzZXMsIHBlZXItaWRlbnRpdHkgbWFuYWdlbWVudCwgdGhlIGtleXJpbmcsIGFuZCByZW1vdGUgYXV0aGVudGljYXRpb24gd2l0aGluIHRoaXMgbW9kdWxlLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZWxlbWVudHMgdG8gbWFrZSBhIGp1ZGdlbWVudC5cblxuVGhlcmVmb3JlLCB0aGUgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIG1ldGhvZGljYWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvaGFuZHNoYWtlL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIGdvaW5nIHRvIGJlIGxhaWQgb3V0LCB0aGUgYWN0dWFsIGNvZGUgdGhhdCBkZWZpbmVzIHRoZXNlIGludGVyYWN0aW9ucy4gVGhpcyBzaG91bGQgYWxsb3cgYSBkZWVwIGRpdmUgaW50byBob3cgdGhlc2Ugc3lzdGVtcyBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDozNy4yMjI3MTQ2ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcIm5ldC9oYW5kc2hha2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWxlcnQuY1wiLFxuICAgIFwiZ2VubC5jXCIsXG4gICAgXCJnZW5sLmhcIixcbiAgICBcImhhbmRzaGFrZS10ZXN0LmNcIixcbiAgICBcImhhbmRzaGFrZS5oXCIsXG4gICAgXCJuZXRsaW5rLmNcIixcbiAgICBcInJlcXVlc3QuY1wiLFxuICAgIFwidGxzaGQuY1wiLFxuICAgIFwidHJhY2UuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDozNy4yMjI3OTk4NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5Njg3MDQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MgYXNzdW1pbmcgZXhwZXJ0aXNlIGluIHRoZSByZWxldmFudCBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEhhbmRzaGFrZSBQcm90b2NvbCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIGhhbmRzaGFrZSBwcm90b2NvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgYWxsIHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXNzYWdlIGhhbmRsaW5nLiBTbywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyBhIGZldyBrZXkgZmlsZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvaGFuZHNoYWtlL2dlbmwuaGAuIFRoYXQgaGVhZGVyIHdpbGwgcHJvYmFibHkgb3V0bGluZSB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSBkZWZpbml0aW9ucyBhbmQgYW55IGN1c3RvbSBtZXNzYWdlIHR5cGVzIHVzZWQgaW4gdGhlIGhhbmRzaGFrZS4gVGhlbiBJIG5lZWQgdG8gc2VlIGhvdyB0aG9zZSBtZXNzYWdlIHR5cGVzIGFyZSBwcm9jZXNzZWQgYW5kIGhhbmRsZWQsIHNvIGBuZXQvaGFuZHNoYWtlL25ldGxpbmsuY2AgaXMgdGhlIG5leHQgb2J2aW91cyB0YXJnZXQ7IHRoYXQncyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmFjdGlvbiBsb2dpYyB1c3VhbGx5IHJlc2lkZXMuIEFuZCBmaW5hbGx5LCBiZWNhdXNlIHRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyBzcGVjaWZpYywgSSBuZWVkIHRvIHNlZSB3aGF0IGBuZXQvaGFuZHNoYWtlL3Rsc2hkLmNgIGRlYWxzIHdpdGguIEkgYmV0IHRoYXQgaGFuZGxlcyBhbnkgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhhbmRzaGFrZSBEZXRhaWxzLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDozOS40MTk2NzM3NDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzI4MTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWVyX2lkZW50aXR5fGtleXJpbmd8cmVtb3RlX2F1dGh8SEFORFNIQUtFX0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlL2dlbmwuYy0xNS0vKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTc6XFx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE4LX07XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMC0vKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIyOlxcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIzOlxcdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyNDpcXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yNS19O1xcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM9Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBoYW5kc2hha2Vfbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zMi1cXHRcXHQucG9saWN5XFx0XFx0PSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzozMzpcXHRcXHQubWF4YXR0clxcdD0gSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MsXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzQtXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zOS1cXHRcXHQucG9saWN5XFx0XFx0PSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3ksXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6NDA6XFx0XFx0Lm1heGF0dHJcXHQ9IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgsXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNDEtXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0zNz1pbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy01OS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzo2MDpcXHRpZiAobmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyxcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy02MS1cXHRcXHRcXHRwcm90by1cXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz05MD1pbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDEtXFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxMDI6XFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MpKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEwMy1cXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTA0OlxcdGNsYXNzID0gbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdKTtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDUtXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0xMzM9aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEzOS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNDA6XFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfRE9ORV9TT0NLRkQpKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE0MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNDI6XFx0ZmQgPSBubGFfZ2V0X3MzMihpbmZvLVxcdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0pO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE0My1cXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE1OC1cXHRzdGF0dXMgPSAtRUlPO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE1OTpcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE2MDpcXHRcXHRzdGF0dXMgPSAtKGludClubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE2MS1cXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0yNz1zdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEge1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM1LVxcdGNvbnN0IGNoYXJcXHRcXHQqdGhfcGVlcm5hbWU7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM2OlxcdGtleV9zZXJpYWxfdFxcdFxcdHRoX2tleXJpbmc7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM3LVxcdGtleV9zZXJpYWxfdFxcdFxcdHRoX2NlcnRpZmljYXRlO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQ1PXRsc19oYW5kc2hha2VfcmVxX2luaXQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy01My1cXHR0cmVxLVxcdTAwM2V0aF9wZWVybmFtZSA9IGFyZ3MtXFx1MDAzZXRhX3BlZXJuYW1lO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo1NDpcXHR0cmVxLVxcdTAwM2V0aF9rZXlyaW5nID0gYXJncy1cXHUwMDNldGFfa2V5cmluZztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNTUtXFx0dHJlcS1cXHUwMDNldGhfbnVtX3BlZXJpZHMgPSAwO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTYxPXN0YXRpYyB2b2lkIHRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHMoc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcwLVxcdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NzE6XFx0XFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzItXFx0XFx0XFx0aSsrO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgwLVxcdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6ODE6XFx0XFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtODItXFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfcGVlcmlkW2krK10gPSBubGFfZ2V0X3UzMihubGEpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTk1PXN0YXRpYyB2b2lkIHRsc19oYW5kc2hha2VfZG9uZShzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfS0VZUylcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTEyOnN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9wcml2YXRlX2tleXJpbmcoc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTMte1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTQ6XFx0a2V5X3JlZl90IHByb2Nlc3Nfa2V5cmluZ19yZWYsIGtleXJpbmdfcmVmO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTUtXFx0aW50IHJldDtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTE2LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTc6XFx0aWYgKHRyZXEtXFx1MDAzZXRoX2tleXJpbmcgPT0gVExTX05PX0tFWVJJTkcpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExOC1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTE5LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMjA6XFx0cHJvY2Vzc19rZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShLRVlfU1BFQ19QUk9DRVNTX0tFWVJJTkcsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEyMS1cXHRcXHRcXHRcXHRcXHQgICAgICBLRVlfTE9PS1VQX0NSRUFURSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTIyLVxcdFxcdFxcdFxcdFxcdCAgICAgIEtFWV9ORUVEX1dSSVRFKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTIzOlxcdGlmIChJU19FUlIocHJvY2Vzc19rZXlyaW5nX3JlZikpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTI0OlxcdFxcdHJldCA9IFBUUl9FUlIocHJvY2Vzc19rZXlyaW5nX3JlZik7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEyNS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjctXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEyODpcXHRrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleSh0cmVxLVxcdTAwM2V0aF9rZXlyaW5nLCBLRVlfTE9PS1VQX0NSRUFURSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTI5LVxcdFxcdFxcdFxcdCAgICAgIEtFWV9ORUVEX0xJTkspO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMzA6XFx0aWYgKElTX0VSUihrZXlyaW5nX3JlZikpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTMxOlxcdFxcdHJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzItXFx0XFx0Z290byBvdXRfcHV0X2tleTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzQtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEzNTpcXHRyZXQgPSBrZXlfbGluayhrZXlfcmVmX3RvX3B0cihwcm9jZXNzX2tleXJpbmdfcmVmKSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM2OlxcdFxcdCAgICAgICBrZXlfcmVmX3RvX3B0cihrZXlyaW5nX3JlZikpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzctXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEzODpcXHRrZXlfcmVmX3B1dChrZXlyaW5nX3JlZik7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEzOS1vdXRfcHV0X2tleTpcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTQwOlxcdGtleV9yZWZfcHV0KHByb2Nlc3Nfa2V5cmluZ19yZWYpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDEtb3V0Olxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE0NC0jZWxzZVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDU6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE0Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUwLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNTE6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9wZWVyX2lkZW50aXR5KHN0cnVjdCBza19idWZmICptc2csXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1Mi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTU2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmVxLVxcdTAwM2V0aF9udW1fcGVlcmlkczsgaSsrKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNTc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1BFRVJfSURFTlRJVFksXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1OC1cXHRcXHRcXHRcXHR0cmVxLVxcdTAwM2V0aF9wZWVyaWRbaV0pIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xNjM9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9jZXJ0aWZpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3MS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTcyOlxcdGVudHJ5X2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9DRVJUSUZJQ0FURSk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3My1cXHRpZiAoIWVudHJ5X2F0dHIpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc1LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzY6XFx0aWYgKG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfWDUwOV9DRVJULFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzctXFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfY2VydGlmaWNhdGUpIHx8XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE3ODpcXHQgICAgbmxhX3B1dF9zMzIobXNnLCBIQU5EU0hBS0VfQV9YNTA5X1BSSVZLRVksXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3OS1cXHRcXHRcXHR0cmVxLVxcdTAwM2V0aF9wcml2a2V5KSkge1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTE5Nj1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfYWNjZXB0KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjAzLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMDQ6XFx0cmV0ID0gdGxzX2hhbmRzaGFrZV9wcml2YXRlX2tleXJpbmcodHJlcSk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIwNS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTUtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxNjpcXHRyZXQgPSBubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9TT0NLRkQsIGZkKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjE3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTgtXFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMTk6XFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfTUVTU0FHRV9UWVBFLCB0cmVxLVxcdTAwM2V0aF90eXBlKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjIwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIyMi1cXHRpZiAodHJlcS1cXHUwMDNldGhfcGVlcm5hbWUpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjIzOlxcdFxcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1BFRVJOQU1FLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjQtXFx0XFx0XFx0XFx0ICAgICB0cmVxLVxcdTAwM2V0aF9wZWVybmFtZSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI4LVxcdGlmICh0cmVxLVxcdTAwM2V0aF90aW1lb3V0X21zKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyOTpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9USU1FT1VULCB0cmVxLVxcdTAwM2V0aF90aW1lb3V0X21zKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjMwLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzMi1cXHR9XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIzMzpcXHRpZiAodHJlcS1cXHUwMDNldGhfa2V5cmluZykge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMzQ6XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfS0VZUklORyxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjM1OlxcdFxcdFxcdFxcdCAgdHJlcS1cXHUwMDNldGhfa2V5cmluZyk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzktXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI0MDpcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9BVVRIX01PREUsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0MS1cXHRcXHRcXHQgIHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQ0LVxcdHN3aXRjaCAodHJlcS1cXHUwMDNldGhfYXV0aF9tb2RlKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI0NTpcXHRjYXNlIEhBTkRTSEFLRV9BVVRIX1BTSzpcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQ2OlxcdFxcdHJldCA9IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkobXNnLCB0cmVxKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQ3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0OS1cXHRcXHRicmVhaztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjUwOlxcdGNhc2UgSEFORFNIQUtFX0FVVEhfWDUwOTpcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjUxLVxcdFxcdHJldCA9IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKG1zZywgdHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjg2PWludCB0bHNfY2xpZW50X2hlbGxvX2Fub24oY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjk1LVxcdHRyZXEtXFx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfQ0xJRU5USEVMTE87XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI5NjpcXHR0cmVxLVxcdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9VTkFVVEg7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI5Ny1cXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMTI9aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMjEtXFx0dHJlcS1cXHUwMDNldGhfdHlwZSA9IEhBTkRTSEFLRV9NU0dfVFlQRV9DTElFTlRIRUxMTztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzIyOlxcdHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSA9IEhBTkRTSEFLRV9BVVRIX1g1MDk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTMyMy1cXHR0cmVxLVxcdTAwM2V0aF9jZXJ0aWZpY2F0ZSA9IGFyZ3MtXFx1MDAzZXRhX215X2NlcnQ7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzQxPWludCB0bHNfY2xpZW50X2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTUtXFx0dHJlcS1cXHUwMDNldGhfdHlwZSA9IEhBTkRTSEFLRV9NU0dfVFlQRV9DTElFTlRIRUxMTztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzU2OlxcdHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSA9IEhBTkRTSEFLRV9BVVRIX1BTSztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzU3LVxcdHRyZXEtXFx1MDAzZXRoX251bV9wZWVyaWRzID0gYXJncy1cXHUwMDNldGFfbnVtX3BlZXJpZHM7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mzc1PWludCB0bHNfc2VydmVyX2hlbGxvX3g1MDkoY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzg0LVxcdHRyZXEtXFx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfU0VSVkVSSEVMTE87XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM4NTpcXHR0cmVxLVxcdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9YNTA5O1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zODYtXFx0dHJlcS1cXHUwMDNldGhfY2VydGlmaWNhdGUgPSBhcmdzLVxcdTAwM2V0YV9teV9jZXJ0O1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQwMz1pbnQgdGxzX3NlcnZlcl9oZWxsb19wc2soY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDEyLVxcdHRyZXEtXFx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfU0VSVkVSSEVMTE87XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjQxMzpcXHR0cmVxLVxcdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9QU0s7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQxNC1cXHR0cmVxLVxcdTAwM2V0aF9udW1fcGVlcmlkcyA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjQwLjI3Njk2MTE3MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzcxNTA0MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBIYW5kc2hha2UgU3Vic3lzdGVtIENsZWFudXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlZmFjdG9yaW5nLCBmb2N1c2luZyBvbiB0aWR5aW5nIHVwIHRoZSBoYW5kc2hha2Ugc3Vic3lzdGVtJ3MgQVBJIGFuZCBhc3NvY2lhdGVkIG5ldGxpbmsgcG9saWNpZXMuIEkgc2VlIGl0IHN0YXJ0cyBieTpcblxuMS4gICoqRG9jdW1lbnRhdGlvbiBVcGRhdGU6KiogTW9kaWZ5aW5nIHRoZSBZQU1MIHNwZWMgZm9yIHRoZSBoYW5kc2hha2UgbmV0bGluayBpbnRlcmZhY2UuIEknbSBub3RpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGBoYW5kbGVyLWNsYXNzYCBlbnVtJ3MgYHJlbmRlci1tYXhgIHByb3BlcnR5LCBlZmZlY3RpdmVseSBzdGFuZGFyZGl6aW5nIHRoZSB1c2Ugb2YgYF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBhbmQgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgZm9yIGRlZmluaW5nIHRoZSBtYXhpbXVtIHZhbHVlLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UgZm9yIGVudW0gbWFuYWdlbWVudC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBhdHRyaWJ1dGUgdHlwZXMgZm9yIHBlZXIgaWRlbnRpdHksIGtleXJpbmcsIGFuZCByZW1vdGUgYXV0aGVudGljYXRpb24gdG8gdXNlIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKGBzMzJgKSBpbnN0ZWFkIG9mIHVuc2lnbmVkIChgdTMyYCkuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXgsIGdpdmVuIHRoYXQga2V5IHNlcmlhbCBJRHMgKGBrZXlfc2VyaWFsX3RgKSBpbiB0aGUga2VybmVsIGFyZSBzaWduZWQgaW50ZWdlcnMuXG5cbjIuICAqKkhlYWRlciBhbmQgUG9saWN5IEFkanVzdG1lbnRzOioqIEluIHRoZSBgaGFuZHNoYWtlLmhgIGhlYWRlciwgdGhlIGVudW0gZGVmaW5pdGlvbiBpcyBub3cgY2xlYXIsIHVzaW5nIGBfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgZm9yIHRoZSBpbnRlcm5hbCB2YWx1ZSBhbmQgdGhlbiBkZXJpdmluZyBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYC4gVGhlIGBnZW5sLmNgIGNoYW5nZXMgYXJlIHNpZ25pZmljYW50OiBJIHNlZSBhZGp1c3RtZW50cyB0byB0aGUgbmV0bGluayBwb2xpY3kuIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2Agbm93IGhhcyB0aGUgY29ycmVjdCBtYXhpbXVtIHZhbHVlICgxKSwgYW5kIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24gcG9saWN5J3MgdHlwZSBpcyBjb3JyZWN0ZWQgdG8gYE5MQV9TMzJgLCBtaXJyb3JpbmcgdGhlIHNwZWMncyBjaGFuZ2UuXG5cbjMuICAqKlRlc3QgYW5kIFVzYWdlIFVwZGF0ZXM6KiogVGhlIHBhdGNoIGV2ZW4gdXBkYXRlcyB0aGUgdGVzdCBjb2RlIChgaGFuZHNoYWtlLXRlc3QuY2ApIHRvIHVzZSBgX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIHByb3Blcmx5LiBGaW5hbGx5LCB0aGUgYWxsb2NhdGlvbiBsb2dpYyBpbiBgcmVxdWVzdC5jYCBub3cgY29ycmVjdGx5IGJvdW5kcyB0aGUgYGhwX2hhbmRsZXJfY2xhc3NgIGFnYWluc3QgdGhlICphY3R1YWwqIG1heGltdW0gdmFsaWQgdmFsdWUgKGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgKSwgbm90IGFuIG9mZi1ieS1vbmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGVyZSBhIHJpc2sgb2YgaW50cm9kdWNpbmcgbWVtb3J5IGlzc3Vlcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4qICAgKipVbmluaXRpYWxpemVkIG1lbW9yeToqKiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgbGVmdC4gVGhpcyBpcyBhIHBvc2l0aXZlIHNpZ24uXG4qICAgKipOZXRsaW5rIGF0dHJpYnV0ZSB2YWxpZGF0aW9uOioqIFRoZSBjaGFuZ2UgdG8gYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIHZhbGlkYXRpb24gZnJvbSBgTkxBX1UzMmAgdG8gYE5MQV9TMzJgIGlzIGNyaXRpY2FsLCBidXQgdGhlIHNpemUgcmVtYWlucyB0aGUgc2FtZSAoNCBieXRlcykuIFRoZSBgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NgIHZhbGlkYXRpb24gaXMgKnRpZ2h0ZW5lZCosIG1vdmluZyB0aGUgbWF4IGRvd24gZnJvbSAyIHRvIDEgKHdoaWNoIGlzIHRoZSBjb3JyZWN0IGhpZ2hlc3QgdmFsaWQgdmFsdWUpLCB3aGljaCBpcyBhIGNsZWFyIGltcHJvdmVtZW50LlxuKiAgICoqQm91bmRzIGNoZWNraW5nOioqIFRoZSB0aWdodGVyIGJvdW5kcyBjaGVja2luZyBpcyAqZ29vZCouIFdlJ3JlIGVuc3VyaW5nIHdlICpkb24ndCogYWNjZXNzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgICoqSW5mb3JtYXRpb24gTGVha2FnZToqKiBUaGlzIGlzIGEga2V5IGFyZWEsIGFuZCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGVyZSdzIG5vIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBoZXJlLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNhZmUgcmVmYWN0b3JpbmcgcGF0Y2guIEl0J3MgYSBjbGVhbnVwLCBub3QgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y3Rpb24sIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGhhemFyZHMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBJIGRvbid0IHNlZSBhbnkgS01TQU4tc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggY2FuIHByb2NlZWQgd2l0aG91dCBLTVNBTiBmdXp6aW5nLiBJdCdzIGEgcHVyZSBBUEkvVUFQSSBjbGVhbnVwIGFuZCBuZXRsaW5rIHBvbGljeSBhZGp1c3RtZW50IGZvciB0aGUgaGFuZHNoYWtlIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODAsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjQ3LjA0ODQ2ODE5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGhhbmRzaGFrZSBuZXRsaW5rIHNwZWNpZmljYXRpb24gYW5kIGludGVybmFsIGtlcm5lbCBkZWZpbml0aW9ucyB0byBzdGFuZGFyZGl6ZSB0aGUgZW51bSBuYW1pbmcgY29udmVudGlvbiAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLyBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpIGFuZCB1cGRhdGVzIG5ldGxpbmsgcG9saWNpZXMgKGNoYW5naW5nIHJlbW90ZS1hdXRoIGZyb20gTkxBX1UzMiB0byBOTEFfUzMyIGZvciBrZXlfc2VyaWFsX3QgYW5kIGFkanVzdGluZyB0aGUgbWF4IGhhbmRsZXIgY2xhc3MgcG9saWN5KS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IG5ldGxpbmsgcG9saWN5IHZhbGlkYXRpb24gYW5kIGludGVnZXIgYm91bmRzIGNoZWNraW5nLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIHN0cnVjdCBwYWRkaW5nIG1vZGlmaWNhdGlvbnMsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbnkgZ2VuZXJhbCBib3VuZHMgb3IgbG9naWMgaXNzdWVzIGFyZSBzdWZmaWNpZW50bHkgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflown4fj5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 06:41:42 +0000 UTC FinishedAt: 2026-09-06 07:44:49 +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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_HANDSHAKE", "SUNRPC" ], "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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_HANDSHAKE", "SUNRPC" ], "series_id": "c9ea20b4-6de3-4419-a2e8-11035c3fdd83" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "handshake_req_alloc", "handshake_nl_accept_doit", "handshake_nl_done_doit", "tls_handshake_remote_peerids" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAgICYjMzQ7U1VOUlBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7LAogICAgJiMzNDtoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2RvbmVfZG9pdCYjMzQ7LAogICAgJiMzNDt0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IG5ldGxpbmsgcG9saWN5IHZhbGlkYXRpb24gYW5kIGludGVnZXIgYm91bmRzIGNoZWNraW5nLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIHN0cnVjdCBwYWRkaW5nIG1vZGlmaWNhdGlvbnMsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbnkgZ2VuZXJhbCBib3VuZHMgb3IgbG9naWMgaXNzdWVzIGFyZSBzdWZmaWNpZW50bHkgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRqdXN0cyBOZXRsaW5rIGF0dHJpYnV0ZSB0eXBlcyBhbmQgdmFsaWRhdGlvbiBwb2xpY2llcyBmb3IgdGhlIGdlbmVyaWMgbmV0bGluayBoYW5kc2hha2Ugc2VydmljZSAoYWNjZXB0IGhhbmRsZXIgY2xhc3MgYW5kIHJlbW90ZSBhdXRoIGtleSBJRHMpIGFuZCBmaXhlcyB0aGUgYm91bmRhcnkgY2hlY2sgaW4gaGFuZHNoYWtlX3JlcV9hbGxvYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBwYXJzaW5nIGFuZCBoYW5kc2hha2UgcmVxdWVzdCBhbGxvY2F0aW9uIGxvZ2ljIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgc29ja2V0cyBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjQzOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxuaW5kZXggZmZlYzEyYjQ2NzU5Ny4uMDQ5OGFkYTJkZDk3YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG5AQCAtMjIsNyAmIzQzOzIyLDggQEAgZGVmaW5pdGlvbnM6XG4gICAgIHR5cGU6IGVudW1cbiAgICAgbmFtZTogaGFuZGxlci1jbGFzc1xuICAgICB2YWx1ZS1zdGFydDogMFxuLSAgICBlbnRyaWVzOiBbbm9uZSwgdGxzaGQsIG1heF1cbiYjNDM7ICAgIGVudHJpZXM6IFtub25lLCB0bHNoZF1cbiYjNDM7ICAgIHJlbmRlci1tYXg6IHRydWVcbiAgIC1cbiAgICAgdHlwZTogZW51bVxuICAgICBuYW1lOiBtc2ctdHlwZVxuQEAgLTY3LDcgJiM0Mzs2OCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgZW51bTogYXV0aFxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHBlZXItaWRlbnRpdHlcbi0gICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXG5AQCAtNzksNyAmIzQzOzgwLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiBzdHJpbmdcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBrZXlyaW5nXG4tICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICB0eXBlOiBzMzJcbiAgIC1cbiAgICAgbmFtZTogZG9uZVxuICAgICBhdHRyaWJ1dGVzOlxuQEAgLTkzLDcgJiM0Mzs5NCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcmVtb3RlLWF1dGhcbi0gICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuIFxuIG9wZXJhdGlvbnM6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oXG5pbmRleCBkN2U0MGY1OTQ4ODg2Li5mOTA3YWEwODI1MjA4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbkBAIC0xMyw3ICYjNDM7MTMsMTAgQEBcbiBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzIHtcbiBcdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXG4gXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi1cdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCxcbiYjNDM7XG4mIzQzO1x0LyogcHJpdmF0ZTogKi9cbiYjNDM7XHRfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCxcbiYjNDM7XHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggPSAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKVxuIH07XG4gXG4gZW51bSBoYW5kc2hha2VfbXNnX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvZ2VubC5jIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2dlbmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbkBAIC0xNCwxNCAmIzQzOzE0LDE0IEBAXG4gXG4gLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHtcbi1cdFtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAyKSxcbiYjNDM7XHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG4gfTtcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCAmIzQzOyAxXSA9IHtcbiBcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxuIFx0W0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuLVx0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG4mIzQzO1x0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4gfTtcbiBcbiAvKiBPcHMgdGFibGUgZm9yIGhhbmRzaGFrZSAqL1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuaW5kZXggM2RkNTA3NDcwZDVmZS4uNGI5OWFjZDlmOWM3ZSAxMDA2NDRcbi0tLSBhL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jXG5AQCAtNDIsNyAmIzQzOzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xuLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuJiM0MztcdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180ID0ge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jIGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcbmluZGV4IGNkMzBkNTRkMDUwMWQuLmZmNzM5ZWU4MWNiODIgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcbkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmIChwcm90by1cdTAwM2VocF9oYW5kbGVyX2NsYXNzIFx1MDAzYz0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTk9ORSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2U9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWClcbiYjNDM7XHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2UgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICghcHJvdG8tXHUwMDNlaHBfYWNjZXB0IHx8ICFwcm90by1cdTAwM2VocF9kb25lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSEFORFNIQUtFJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRzaGFrZV9yZXFfYWxsb2MmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0JiMzNDssCiAgICAmIzM0O2hhbmRzaGFrZV9ubF9kb25lX2RvaXQmIzM0OywKICAgICYjMzQ7dGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIE5ldGxpbmsgYXR0cmlidXRlIHR5cGVzIGFuZCB2YWxpZGF0aW9uIHBvbGljaWVzIGZvciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBzZXJ2aWNlIChhY2NlcHQgaGFuZGxlciBjbGFzcyBhbmQgcmVtb3RlIGF1dGgga2V5IElEcykgYW5kIGZpeGVzIHRoZSBib3VuZGFyeSBjaGVjayBpbiBoYW5kc2hha2VfcmVxX2FsbG9jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcgYW5kIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJkZDI4ZTg3Y2ZkZjg5OTg2ODJlODU4NGUzNWViMDliYjFjZDFmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDc6NDM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwKaW5kZXggZmZlYzEyYjQ2NzU5Ny4uMDQ5OGFkYTJkZDk3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbApAQCAtMjIsNyAmIzQzOzIyLDggQEAgZGVmaW5pdGlvbnM6CiAgICAgdHlwZTogZW51bQogICAgIG5hbWU6IGhhbmRsZXItY2xhc3MKICAgICB2YWx1ZS1zdGFydDogMAotICAgIGVudHJpZXM6IFtub25lLCB0bHNoZCwgbWF4XQomIzQzOyAgICBlbnRyaWVzOiBbbm9uZSwgdGxzaGRdCiYjNDM7ICAgIHJlbmRlci1tYXg6IHRydWUKICAgLQogICAgIHR5cGU6IGVudW0KICAgICBuYW1lOiBtc2ctdHlwZQpAQCAtNjcsNyAmIzQzOzY4LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIGVudW06IGF1dGgKICAgICAgIC0KICAgICAgICAgbmFtZTogcGVlci1pZGVudGl0eQotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlCkBAIC03OSw3ICYjNDM7ODAsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGtleXJpbmcKLSAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICB0eXBlOiBzMzIKICAgLQogICAgIG5hbWU6IGRvbmUKICAgICBhdHRyaWJ1dGVzOgpAQCAtOTMsNyAmIzQzOzk0LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHMzMgogICAgICAgLQogICAgICAgICBuYW1lOiByZW1vdGUtYXV0aAotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAKIG9wZXJhdGlvbnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmgKaW5kZXggZDdlNDBmNTk0ODg4Ni4uZjkwN2FhMDgyNTIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaApAQCAtMTMsNyAmIzQzOzEzLDEwIEBACiBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzIHsKIAlIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLAogCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELAotCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCwKJiM0MzsKJiM0MzsJLyogcHJpdmF0ZTogKi8KJiM0MzsJX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsCiYjNDM7CUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCA9IChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAtIDEpCiB9OwogCiBlbnVtIGhhbmRzaGFrZV9tc2dfdHlwZSB7CmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2dlbmwuYyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0Ci0tLSBhL25ldC9oYW5kc2hha2UvZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCkBAIC0xNCwxNCAmIzQzOzE0LDE0IEBACiAKIC8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHsKLQlbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksCiYjNDM7CVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKSwKIH07CiAKIC8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7CiAJW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksCiAJW0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LAotCVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzOwlbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSwKIH07CiAKIC8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovCmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMKaW5kZXggM2RkNTA3NDcwZDVmZS4uNGI5OWFjZDlmOWM3ZSAxMDA2NDQKLS0tIGEvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYwpAQCAtNDIsNyAmIzQzOzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0gewogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0gewotCS5ocF9oYW5kbGVyX2NsYXNzCT0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAomIzQzOwkuaHBfaGFuZGxlcl9jbGFzcwk9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwppbmRleCBjZDMwZDU0ZDA1MDFkLi5mZjczOWVlODFjYjgyIDEwMDY0NAotLS0gYS9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90bywKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHByb3RvLSZndDtocF9oYW5kbGVyX2NsYXNzICZsdDs9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpCiAJCXJldHVybiBOVUxMOwotCWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpCiYjNDM7CWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKCFwcm90by0mZ3Q7aHBfYWNjZXB0IHx8ICFwcm90by0mZ3Q7aHBfZG9uZSkKIAkJcmV0dXJuIE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyBUaGlzIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMgYW5kIHRoZSBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBhdCBzeXprYWxsZXI/JiMzNDsgUmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGRvIGEgcXVpY2sgcmlzayBhc3Nlc3NtZW50LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGtlcm5lbCBRQSB0YXNrLCBub3RoaW5nIHRvbyBleG90aWMgaGVyZS4gSSYjMzk7bSBjYWxsaW5nIGl0ICYjMzQ7YmVuaWduIGZ1bGZpbGxtZW50LCYjMzQ7IG1lYW5pbmcgdGhlcmUmIzM5O3Mgbm90aGluZyBpbmhlcmVudGx5IGRhbmdlcm91cyBhYm91dCAqZXZhbHVhdGluZyogaXQuIEl0JiMzOTtzIHNhZmUgZ3JvdW5kLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTt2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0IGNvZGUgaXQgdG91Y2hlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGtleSBmaWxlczogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLCBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCBgbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jYCwgYW5kIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIEludGVyZXN0aW5nLiBUaGUgYGhhbmRzaGFrZWAgc3ViZGlyZWN0b3J5IGlzIHRoZSBrZXkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHJlcG9zaXRvcnkgbm93IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGBuZXQvaGFuZHNoYWtlL2Agc3Vic3lzdGVtLCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZC4gVGhhdCYjMzk7bGwgYmUgbXkgbmV4dCBzdGVwOiBmaWd1cmluZyBvdXQgdGhlIHNjb3BlIG9mIHRoaXMgd29yayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByaWdodCBGb2N1c1N5bWJvbHMsIEVuYWJsZUNvbmZpZ3MsIGFuZCB0byBkZXRlcm1pbmUgdGhlIFJlYXNvbmluZyBmb3IgaWYgdGhpcyB3b3VsZCBiZSBhIGZydWl0ZnVsIGVuZGVhdm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnPTk9Q09ORklHX1NVTlJQQz15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMDpDT05GSUdfTkVUX0hBTkRTSEFLRT15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcbi0tXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlPTExPWhhbmRzaGFrZS15IDo9IGFsZXJ0Lm8gZ2VubC5vIG5ldGxpbmsubyByZXF1ZXN0Lm8gdGxzaGQubyB0cmFjZS5vXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUKSAmIzQzOz0gaGFuZHNoYWtlLXRlc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfSEFORFNIQUtFIERlZmluaXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYE5FVF9IQU5EU0hBS0VgIGlzIGRlZmluZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlnZ2luZyBpbiB0aGUgYG5ldC9oYW5kc2hha2UvYCBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hbWUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgY2hlY2sgYEtjb25maWdgIGluIHRoYXQgZGlyZWN0b3J5IGZpcnN0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gT2YgY291cnNlLCBpdCYjMzk7cyBhbHNvIHBvc3NpYmxlIGl0IGlzIGRlZmluZWQgZWxzZXdoZXJlLCBidXQgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBmaXJzdCB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgZXhhY3QgbG9jYXRpb24gYmVmb3JlIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9IQU5EU0hBS0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTI9c291cmNlIFwmIzM0O25ldC94ZHAvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctOTMtXG5uZXQvS2NvbmZpZzo5NDpjb25maWcgTkVUX0hBTkRTSEFLRVxubmV0L0tjb25maWctOTUtXHRib29sXG4tLVxubmV0L0tjb25maWctOTgtXG5uZXQvS2NvbmZpZzo5OTpjb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG5uZXQvS2NvbmZpZy0xMDAtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIFNwYWNlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiB0aGUgc3lzdGVtLCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBsaW5lcyA5MCB0aHJvdWdoIDExMCBvciBzbywgYXMgYSBzdGFydGluZyBwb2ludC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBhcmVhIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBtYWpvciBvcHRpb25zIGJlaW5nIGRlZmluZWQgaW4gdGhpcyBzZWN0aW9uLiBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEtjb25maWcgc3lzdGVtLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIGZlYXR1cmUgc3dpdGNoZXMsIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLi4udGhlIHVzdWFsIEtjb25maWcgY29uc3RydWN0cy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBlbGVtZW50cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGZpbGUuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3MgYXJlIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0c291cmNlIFwmIzM0O25ldC9wc3AvS2NvbmZpZ1wmIzM0O1xuICA4NjpcdHNvdXJjZSBcJiMzNDtuZXQvdW5peC9LY29uZmlnXCYjMzQ7XG4gIDg3Olx0c291cmNlIFwmIzM0O25ldC90bHMvS2NvbmZpZ1wmIzM0O1xuICA4ODpcdHNvdXJjZSBcJiMzNDtuZXQveGZybS9LY29uZmlnXCYjMzQ7XG4gIDg5Olx0c291cmNlIFwmIzM0O25ldC9pdWN2L0tjb25maWdcJiMzNDtcbiAgOTA6XHRzb3VyY2UgXCYjMzQ7bmV0L3NtYy9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnXCYjMzQ7XG4gIDkyOlx0c291cmNlIFwmIzM0O25ldC94ZHAvS2NvbmZpZ1wmIzM0O1xuICA5MzpcdFxuICA5NDpcdGNvbmZpZyBORVRfSEFORFNIQUtFXG4gIDk1Olx0XHRib29sXG4gIDk2Olx0XHRkZXBlbmRzIG9uIFNVTlJQQyB8fCBOVk1FX1RBUkdFVF9UQ1AgfHwgTlZNRV9UQ1BcbiAgOTc6XHRcdGRlZmF1bHQgeVxuICA5ODpcdFxuICA5OTpcdGNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcbiAxMDA6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc21cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuIDEwMTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAxMDI6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIEtVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc20uXG4gMTA1Olx0XG4gMTA2Olx0XHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1Z1xuIDEwNzpcdFx0ICBsb2cgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvclxuIDEwODpcdFx0ICBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uXG4gMTA5Olx0XHQgIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxuIDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzc1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfSEFORFNIQUtFYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYE5FVF9IQU5EU0hBS0VgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IG1pZ2h0IGJlICpzZWxlY3RpbmcqIGl0LiBUaGUgaW5pdGlhbCBjbHVlcyBpbmRpY2F0ZSB0aGF0IGl0JiMzOTtzICpgZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQYCogYW5kIHRoZSBkZWZhdWx0IGlzIHNldCB0byAmIzM5O3kmIzM5Oy4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBlaXRoZXIgU3VuIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCwgTlZNZSBvdmVyIFRDUCBUYXJnZXQsIG9yIGp1c3QgTlZNZSBvdmVyIFRDUCBpbiBnZW5lcmFsLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBwcm90b2NvbHMgd291bGQgYmVuZWZpdCBmcm9tIGEgaGFuZHNoYWtlLgoKTm93LCBJIHdhbnQgdG8gYnJvYWRlbiB0aGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGtub3cgKndoYXQgZWxzZSogbWlnaHQgYmUgc2VsZWN0aW5nIGBORVRfSEFORFNIQUtFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyB1c2FnZSBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBpdHMgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIG90aGVyIGZlYXR1cmVzLCBkcml2ZXJzLCBvciBtb2R1bGVzIHRoYXQgaW1wbGljaXRseSByZWx5IG9uIGl0LCBldmVuIGlmIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGluIHRoZWlyIGRlcGVuZGVuY2llcz8gVGhpcyBpcyB3aGVyZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZWFyY2ggaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgcGljdHVyZSBvZiB0aGUgd2hvbGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfSEFORFNIQUtFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05Mj1zb3VyY2UgXCYjMzQ7bmV0L3hkcC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy05My1cbm5ldC9LY29uZmlnOjk0OmNvbmZpZyBORVRfSEFORFNIQUtFXG5uZXQvS2NvbmZpZy05NS1cdGJvb2xcbi0tXG5uZXQvS2NvbmZpZy05OC1cbm5ldC9LY29uZmlnOjk5OmNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbm5ldC9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc21cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9NYWtlZmlsZT03NT1vYmotJChDT05GSUdfTUNUUClcdFx0JiM0Mzs9IG1jdHAvXG5uZXQvTWFrZWZpbGU6NzY6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0UpXHQmIzQzOz0gaGFuZHNoYWtlL1xubmV0L01ha2VmaWxlLTc3LW9iai0kKENPTkZJR19ORVRfU0hBUEVSKVx0JiM0Mzs9IHNoYXBlci9cbi0tXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZz05PUNPTkZJR19TVU5SUEM9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MTA6Q09ORklHX05FVF9IQU5EU0hBS0U9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MTE6Q09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVD15XG4tLVxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZT0xMT1oYW5kc2hha2UteSA6PSBhbGVydC5vIGdlbmwubyBuZXRsaW5rLm8gcmVxdWVzdC5vIHRsc2hkLm8gdHJhY2Uub1xubmV0L2hhbmRzaGFrZS9NYWtlZmlsZS0xMi1cbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVCkgJiM0Mzs9IGhhbmRzaGFrZS10ZXN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIEhhbmRzaGFrZSBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgaGFuZHNoYWtlIHByb2Nlc3Mgd29ya3MuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBnZW5sLmNgLCBgcmVxdWVzdC5jYCwgYW5kIGBuZXRsaW5rLmNgLCBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L2hhbmRzaGFrZS9gIGRpcmVjdG9yeS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHNwb3QuIEZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGdlbmwuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IuIEkmIzM5O20gc3VyZSBJJiMzOTtsbCBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZSBvbmNlIEkgZGlzc2VjdCB0aGF0IHNwZWNpZmljIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9nZW5sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKChHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBCU0QtMy1DbGF1c2UpXG4gICAyOlx0LyogRG8gbm90IGVkaXQgZGlyZWN0bHksIGF1dG8tZ2VuZXJhdGVkIGZyb206ICovXG4gICAzOlx0LypcdERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbCAqL1xuICAgNDpcdC8qIFlOTC1HRU4ga2VybmVsIHNvdXJjZSAqL1xuICAgNTpcdC8qIFRvIHJlZ2VuZXJhdGUgcnVuOiB0b29scy9uZXQveW5sL3lubC1yZWdlbi5zaCAqL1xuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiAgIDk6XHRcbiAgMTA6XHQjaW5jbHVkZSBcJiMzNDtnZW5sLmhcJiMzNDtcbiAgMTE6XHRcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2hhbmRzaGFrZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHQvKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXG4gIDE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICYjNDM7IDFdID0ge1xuICAxNzpcdFx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxuICAxODpcdH07XG4gIDE5Olx0XG4gIDIwOlx0LyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cbiAgMjE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG4gIDIyOlx0XHRbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTUFYX0VSUk5PKSxcbiAgMjM6XHRcdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcbiAgMjQ6XHRcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuICAyNTpcdH07XG4gIDI2Olx0XG4gIDI3Olx0LyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cbiAgMjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbiAgMjk6XHRcdHtcbiAgMzA6XHRcdFx0LmNtZFx0XHQ9IEhBTkRTSEFLRV9DTURfQUNDRVBULFxuICAzMTpcdFx0XHQuZG9pdFx0XHQ9IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdCxcbiAgMzI6XHRcdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5LFxuICAzMzpcdFx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyxcbiAgMzQ6XHRcdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuICAzNTpcdFx0fSxcbiAgMzY6XHRcdHtcbiAgMzc6XHRcdFx0LmNtZFx0XHQ9IEhBTkRTSEFLRV9DTURfRE9ORSxcbiAgMzg6XHRcdFx0LmRvaXRcdFx0PSBoYW5kc2hha2VfbmxfZG9uZV9kb2l0LFxuICAzOTpcdFx0XHQucG9saWN5XHRcdD0gaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5LFxuICA0MDpcdFx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxuICA0MTpcdFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXG4gIDQyOlx0XHR9LFxuICA0MzpcdH07XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBoYW5kc2hha2VfbmxfbWNncnBzW10gPSB7XG4gIDQ2Olx0XHRbSEFORFNIQUtFX05MR1JQX05PTkVdID0geyBcJiMzNDtub25lXCYjMzQ7LCB9LFxuICA0NzpcdFx0W0hBTkRTSEFLRV9OTEdSUF9UTFNIRF0gPSB7IFwmIzM0O3Rsc2hkXCYjMzQ7LCB9LFxuICA0ODpcdH07XG4gIDQ5Olx0XG4gIDUwOlx0c3RydWN0IGdlbmxfZmFtaWx5IGhhbmRzaGFrZV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTc5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGhhbmRzaGFrZV9yZXFfYWxsb2NgLiBMZXQgbWUgY2hlY2sgd2hlcmUgaXQmIzM5O3MgYWN0dWFsbHkgKmNhbGxlZCogd2l0aGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY29udGV4dCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIGxhcmdlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGl0IGZpdHMgaW50by4KCkFsc28sIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBBIHF1aWNrIGdsYW5jZSBzdWdnZXN0cyB0aGF0IGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AgYW5kIGBuZXRsaW5rLmNgIGFyZSByZWxldmFudCwgc28gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgbmV0d29ya2luZyBoYW5kc2hha2UgYW5kIHdoYXQgYG5ldGxpbmsuY2AgaXMgZG9pbmcuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiB0aGlzIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gZnVuY3Rpb24uIFVsdGltYXRlbHksIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgd2hlbiB0aGVzZSByZXF1ZXN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCB3aGF0IHRoZXkgcmVwcmVzZW50IGluIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9Mjg9c3RhdGljIHZvaWQgdGVzdF9kb25lX2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzItXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MzM6c3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzQtXHRjb25zdCBjaGFyXHRcdFx0KmRlc2M7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTM5LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQwOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMiA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQzLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMyA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00Ny1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0ODpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDktXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTEtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTI6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b181ID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUzLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTU2LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjU3OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNiA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01OC1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy02My1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo2NDpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNjUtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NzA9c3RhdGljIGNvbnN0XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NzE6c3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtc1tdID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTcyLVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjczOlx0XHQuZGVzY1x0XHRcdD0gXCYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyBOVUxMIHByb3RvXCYjMzQ7LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTc0LVx0XHQucHJvdG9cdFx0XHQ9IE5VTEwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTc4LVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjc5Olx0XHQuZGVzY1x0XHRcdD0gXCYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyBDTEFTU19OT05FXCYjMzQ7LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjgwOlx0XHQucHJvdG9cdFx0XHQ9IFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMixcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy04MS1cdFx0LmdmcFx0XHRcdD0gR0ZQX0tFUk5FTCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtODQtXHR7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6ODU6XHRcdC5kZXNjXHRcdFx0PSBcJiMzNDtoYW5kc2hha2VfcmVxX2FsbG9jIENMQVNTX01BWFwmIzM0Oyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo4NjpcdFx0LnByb3RvXHRcdFx0PSBcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzMsXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtODctXHRcdC5nZnBcdFx0XHQ9IEdGUF9LRVJORUwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTkwLVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjkxOlx0XHQuZGVzY1x0XHRcdD0gXCYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyBubyBjYWxsYmFja3NcJiMzNDssXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6OTI6XHRcdC5wcm90b1x0XHRcdD0gXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTkzLVx0XHQuZ2ZwXHRcdFx0PSBHRlBfS0VSTkVMLFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy05Ni1cdHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo5NzpcdFx0LmRlc2NcdFx0XHQ9IFwmIzM0O2hhbmRzaGFrZV9yZXFfYWxsb2Mgbm8gZG9uZSBjYWxsYmFja1wmIzM0Oyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo5ODpcdFx0LnByb3RvXHRcdFx0PSBcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzUsXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtOTktXHRcdC5nZnBcdFx0XHQ9IEdGUF9LRVJORUwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEwMi1cdHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMDM6XHRcdC5kZXNjXHRcdFx0PSBcJiMzNDtoYW5kc2hha2VfcmVxX2FsbG9jIGV4Y2Vzc2l2ZSBwcml2c2l6ZVwmIzM0Oyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMDQ6XHRcdC5wcm90b1x0XHRcdD0gXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b182LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEwNS1cdFx0LmdmcFx0XHRcdD0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTA4LVx0e1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEwOTpcdFx0LmRlc2NcdFx0XHQ9IFwmIzM0O2hhbmRzaGFrZV9yZXFfYWxsb2MgYWxsIGdvb2RcJiMzNDssXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTEwOlx0XHQucHJvdG9cdFx0XHQ9IFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMTEtXHRcdC5nZnBcdFx0XHQ9IEdGUF9LRVJORUwsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTExNj1zdGF0aWMgdm9pZFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjExNzpoYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0gKnBhcmFtLFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExOC1cdFx0XHQgICAgIGNoYXIgKmRlc2MpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEyMi1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjM6LyogQ3JlYXRlcyB0aGUgZnVuY3Rpb24gaGFuZHNoYWtlX3JlcV9hbGxvY19nZW5fcGFyYW1zICovXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI0OktVTklUX0FSUkFZX1BBUkFNKGhhbmRzaGFrZV9yZXFfYWxsb2MsIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zLFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEyNTpcdFx0ICBoYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjYtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI3OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfYWxsb2NfY2FzZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI4LXtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjk6XHRjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtICpwYXJhbSA9IHRlc3QtXHUwMDNlcGFyYW1fdmFsdWU7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTMwLVx0c3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlc3VsdDtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTM0LVx0LyogQWN0ICovXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTM1Olx0cmVzdWx0ID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhwYXJhbS1cdTAwM2Vwcm90bywgcGFyYW0tXHUwMDNlZ2ZwKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMzYtXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTE2NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE3MC1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxNzE6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTcyLVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTE4Mz1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE4OS1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxOTA6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTkxLVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTIwOD1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTIxNi1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyMTc6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjE4LVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI0NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI1NS1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyNTY6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjU3LVx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI4Nj1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5NC1cdC8qIEFycmFuZ2UgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyOTU6XHRyZXExID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5Ni1cdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXExKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyOTc6XHRyZXEyID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5OC1cdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXEyKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MzI0PXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzMzLVx0LyogQXJyYW5nZSAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjMzNDpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zMzUtXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MzYyPXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QyKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzczLVx0LyogQXJyYW5nZSAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM3NDpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNzUtXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NDEyPXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDIzLVx0LyogQXJyYW5nZSAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQyNDpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MjUtXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NDY4PXN0YXRpYyB2b2lkIHRlc3RfZGVzdHJveV9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3Mi1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0NzM6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19kZXN0cm95ID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3NC1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz00ODA9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9kZXN0cm95X3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDkwLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ5MTpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19kZXN0cm95LCBHRlBfS0VSTkVMKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OTItXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NTE5PXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBoYW5kc2hha2VfYXBpX3Rlc3RfY2FzZXNbXSA9IHtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTIxLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7cmVxX2FsbG9jIEFQSSBmdXp6aW5nXCYjMzQ7LFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjUyMjpcdFx0LnJ1bl9jYXNlXHRcdD0gaGFuZHNoYWtlX3JlcV9hbGxvY19jYXNlLFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjUyMzpcdFx0LmdlbmVyYXRlX3BhcmFtc1x0PSBoYW5kc2hha2VfcmVxX2FsbG9jX2dlbl9wYXJhbXMsXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTI0LVx0fSxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTc5PXN0cnVjdCBoYW5kc2hha2VfbmV0ICpoYW5kc2hha2VfcGVybmV0KHN0cnVjdCBuZXQgKm5ldCk7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC04MS0vKiByZXF1ZXN0LmMgKi9cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODI6c3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfYWxsb2MoY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTgzLVx0XHRcdFx0XHQgIGdmcF90IGZsYWdzKTtcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYz04Nj1zdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEwMi0vKipcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEwMzogKiBoYW5kc2hha2VfcmVxX2FsbG9jIC0gQWxsb2NhdGUgYSBoYW5kc2hha2UgcmVxdWVzdFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTA0LSAqIEBwcm90bzogc2VjdXJpdHkgcHJvdG9jb2xcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMDgtICovXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoxMDk6c3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfYWxsb2MoY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMTAtXHRcdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MpXG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTMwLX1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEzMTpFWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfYWxsb2MpO1xubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTMyLVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0yODY9aW50IHRsc19jbGllbnRfaGVsbG9fYW5vbihjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjkwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI5MTpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI5Mi1cdGlmICghcmVxKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMTI9aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzE2LVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjMxNzpcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTMxOC1cdGlmICghcmVxKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNDE9aW50IHRsc19jbGllbnRfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTAtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzUxOlx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzUyLVx0aWYgKCFyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM3NT1pbnQgdGxzX3NlcnZlcl9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzktXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzgwOlx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzgxLVx0aWYgKCFyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQwMz1pbnQgdGxzX3NlcnZlcl9oZWxsb19wc2soY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQwNy1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0MDg6XHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFx1MDAyNnRsc19oYW5kc2hha2VfcHJvdG8sIGZsYWdzKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDktXHRpZiAoIXJlcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgSGFuZHNoYWtlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBgbmV0L2hhbmRzaGFrZS9uZXRsaW5rLmNgLCBidXQgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBUbyBnZXQgYSB0cnVseSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhbmRzaGFrZSBwcm9jZXNzLCBJIHJlYWxseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGJyb2FkZXIgbGFuZHNjYXBlIG9mIGhhbmRzaGFrZS1yZWxhdGVkIGZpbGVzLiBUaGlzIG1lYW5zIHZlbnR1cmluZyBiZXlvbmQgYG5ldGxpbmsuY2AgYW5kIGV4cGxvcmluZyB0aGUgb3RoZXIgZmlsZXMgaW4gdGhlIGAvbmV0L2hhbmRzaGFrZS9gIGRpcmVjdG9yeSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdmVudHVyaW5nIGZ1cnRoZXIgYWZpZWxkIGFzIHdlbGwuIFRoZXJlIG1pZ2h0IGJlIHNvbWUga2V5IGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBtb2R1bGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbnZpc2libGUgaWYgSSYjMzk7bSBvbmx5IGZvY3VzaW5nIG9uIHRoaXMgb25lIGZpbGUuIFRoZSBnb2FsIGhlcmUgaXMgYSBtb3JlIGhvbGlzdGljIHZpZXcgb2YgdGhlIG92ZXJhbGwgaGFuZHNoYWtlIHByb2NlZHVyZSBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBHZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2VcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcjogQ2h1Y2sgTGV2ZXIgXHUwMDNjY2h1Y2subGV2ZXJAb3JhY2xlLmNvbVx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogQ29weXJpZ2h0IChjKSAyMDIzLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLlxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuICAyMDpcdFxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaGFuZHNoYWtlLmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcJiMzNDtoYW5kc2hha2UuaFwmIzM0O1xuICAyNTpcdCNpbmNsdWRlIFwmIzM0O2dlbmwuaFwmIzM0O1xuICAyNjpcdFxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9oYW5kc2hha2UuaFx1MDAzZVxuICAyODpcdFxuICAyOTpcdC8qKlxuICAzMDpcdCAqIGhhbmRzaGFrZV9nZW5sX25vdGlmeSAtIE5vdGlmeSBoYW5kbGVycyB0aGF0IGEgcmVxdWVzdCBpcyB3YWl0aW5nXG4gIDMxOlx0ICogQG5ldDogdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlXG4gIDMyOlx0ICogQHByb3RvOiBoYW5kc2hha2UgcHJvdG9jb2xcbiAgMzM6XHQgKiBAZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRyb2wgZmxhZ3NcbiAgMzQ6XHQgKlxuICAzNTpcdCAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gaWYgbm90aWZpY2F0aW9uIGZhaWxlZC5cbiAgMzY6XHQgKi9cbiAgMzc6XHRpbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG4gIDM4Olx0XHRcdFx0ICBnZnBfdCBmbGFncylcbiAgMzk6XHR7XG4gIDQwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuICA0MTpcdFx0dm9pZCAqaGRyO1xuICA0MjpcdFxuICA0MzpcdFx0LyogRGlzYWJsZSBub3RpZmljYXRpb25zIGR1cmluZyB1bml0IHRlc3RpbmcgKi9cbiAgNDQ6XHRcdGlmICghdGVzdF9iaXQoSEFORFNIQUtFX0ZfUFJPVE9fTk9USUZZLCBcdTAwMjZwcm90by1cdTAwM2VocF9mbGFncykpXG4gIDQ1Olx0XHRcdHJldHVybiAwO1xuICA0NjpcdFxuICA0NzpcdFx0aWYgKCFnZW5sX2hhc19saXN0ZW5lcnMoXHUwMDI2aGFuZHNoYWtlX25sX2ZhbWlseSwgbmV0LFxuICA0ODpcdFx0XHRcdFx0cHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykpXG4gIDQ5Olx0XHRcdHJldHVybiAtRVNSQ0g7XG4gIDUwOlx0XG4gIDUxOlx0XHRtc2cgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgZmxhZ3MpO1xuICA1MjpcdFx0aWYgKCFtc2cpXG4gIDUzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA1NDpcdFxuICA1NTpcdFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCAwLCAwLCBcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCAwLFxuICA1NjpcdFx0XHRcdCAgSEFORFNIQUtFX0NNRF9SRUFEWSk7XG4gIDU3Olx0XHRpZiAoIWhkcilcbiAgNTg6XHRcdFx0Z290byBvdXRfZnJlZTtcbiAgNTk6XHRcbiAgNjA6XHRcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxuICA2MTpcdFx0XHRcdHByb3RvLVx1MDAzZWhwX2hhbmRsZXJfY2xhc3MpIFx1MDAzYyAwKSB7XG4gIDYyOlx0XHRcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcbiAgNjM6XHRcdFx0Z290byBvdXRfZnJlZTtcbiAgNjQ6XHRcdH1cbiAgNjU6XHRcbiAgNjY6XHRcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbiAgNjc6XHRcdHJldHVybiBnZW5sbXNnX211bHRpY2FzdF9uZXRucyhcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCBuZXQsIG1zZyxcbiAgNjg6XHRcdFx0XHRcdCAgICAgICAwLCBwcm90by1cdTAwM2VocF9oYW5kbGVyX2NsYXNzLCBmbGFncyk7XG4gIDY5Olx0XG4gIDcwOlx0b3V0X2ZyZWU6XG4gIDcxOlx0XHRubG1zZ19mcmVlKG1zZyk7XG4gIDcyOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHQvKipcbiAgNzY6XHQgKiBoYW5kc2hha2VfZ2VubF9wdXQgLSBDcmVhdGUgYSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXJcbiAgNzc6XHQgKiBAbXNnOiBidWZmZXIgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBoZWFkZXJcbiAgNzg6XHQgKiBAaW5mbzogZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgY29udGV4dFxuICA3OTpcdCAqXG4gIDgwOlx0ICogUmV0dXJucyBhIHJlYWR5LXRvLXVzZSBoZWFkZXIsIG9yIE5VTEwuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDQ0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYW5kc2hha2UgcHJvY2VzcywgcGFydGljdWxhcmx5IHRoZSByb2xlIGBuZXRsaW5rLmNgIHBsYXlzIHdpdGhpbiBgbmV0L2hhbmRzaGFrZWAuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBleGFtaW5lIHRoZSByZXN0IG9mIHRoYXQgZmlsZSDigJMgSSBhc3N1bWUgaXQgY29udGFpbnMgbW9yZSBkZXRhaWxzIHRoYW4ganVzdCB3aGF0IEkmIzM5O3ZlIHNlZW4gc28gZmFyLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmaWxlcyBpbnRlcmFjdCB3aXRoIGBuZXRsaW5rLmNgIGFuZCBob3cuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgcmVhZGluZyB0aGUgY29kZTsgaXQmIzM5O3MgYWJvdXQgdHJhY2luZyB0aGUgY29udHJvbCBmbG93LCB1bmRlcnN0YW5kaW5nIGRhdGEgc3RydWN0dXJlcywgYW5kIGdldHRpbmcgYSBob2xpc3RpYyBwaWN0dXJlIG9mIHRoZSBlbnRpcmUgbmV0d29ya2luZyBoYW5kc2hha2UgbWVjaGFuaXNtLiBJJiMzOTttIHRoaW5raW5nIG90aGVyIGhhbmRzaGFrZSByZWxhdGVkIHNvdXJjZSBmaWxlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdCAqL1xuICA4MjpcdHN0cnVjdCBubG1zZ2hkciAqaGFuZHNoYWtlX2dlbmxfcHV0KHN0cnVjdCBza19idWZmICptc2csXG4gIDgzOlx0XHRcdFx0XHQgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiAgODQ6XHR7XG4gIDg1Olx0XHRyZXR1cm4gZ2VubG1zZ19wdXQobXNnLCBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSxcbiAgODY6XHRcdFx0XHQgICBcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCAwLCBpbmZvLVx1MDAzZWdlbmxoZHItXHUwMDNlY21kKTtcbiAgODc6XHR9XG4gIDg4Olx0RVhQT1JUX1NZTUJPTChoYW5kc2hha2VfZ2VubF9wdXQpO1xuICA4OTpcdFxuICA5MDpcdGludCBoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiAgOTE6XHR7XG4gIDkyOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuICA5MzpcdFx0c3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuID0gaGFuZHNoYWtlX3Blcm5ldChuZXQpO1xuICA5NDpcdFx0c3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSA9IE5VTEw7XG4gIDk1Olx0XHRpbnQgY2xhc3MsIGVycjtcbiAgOTY6XHRcbiAgOTc6XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuICA5ODpcdFx0aWYgKCFobilcbiAgOTk6XHRcdFx0Z290byBvdXRfc3RhdHVzO1xuIDEwMDpcdFxuIDEwMTpcdFx0ZXJyID0gLUVJTlZBTDtcbiAxMDI6XHRcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcbiAxMDM6XHRcdFx0Z290byBvdXRfc3RhdHVzO1xuIDEwNDpcdFx0Y2xhc3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XG4gMTA1Olx0XG4gMTA2Olx0XHRlcnIgPSAtRUFHQUlOO1xuIDEwNzpcdFx0cmVxID0gaGFuZHNoYWtlX3JlcV9uZXh0KGhuLCBjbGFzcyk7XG4gMTA4Olx0XHRpZiAocmVxKSB7XG4gMTA5Olx0XHRcdEZEX1BSRVBBUkUoZmRmLCBPX0NMT0VYRUMsIHJlcS1cdTAwM2Vocl9maWxlKTtcbiAxMTA6XHRcdFx0aWYgKGZkZi5lcnIpIHtcbiAxMTE6XHRcdFx0XHRmcHV0KHJlcS1cdTAwM2Vocl9maWxlKTsgLyogZHJvcCByZWYgZnJvbSBoYW5kc2hha2VfcmVxX25leHQoKSAqL1xuIDExMjpcdFx0XHRcdGVyciA9IGZkZi5lcnI7XG4gMTEzOlx0XHRcdFx0Z290byBvdXRfY29tcGxldGU7XG4gMTE0Olx0XHRcdH1cbiAxMTU6XHRcbiAxMTY6XHRcdFx0ZXJyID0gcmVxLVx1MDAzZWhyX3Byb3RvLVx1MDAzZWhwX2FjY2VwdChyZXEsIGluZm8sIGZkX3ByZXBhcmVfZmQoZmRmKSk7XG4gMTE3Olx0XHRcdGlmIChlcnIpXG4gMTE4Olx0XHRcdFx0Z290byBvdXRfY29tcGxldGU7IC8qIEF1dG9tYXRpYyBjbGVhbnVwIGhhbmRsZXMgZnB1dCAqL1xuIDExOTpcdFxuIDEyMDpcdFx0XHR0cmFjZV9oYW5kc2hha2VfY21kX2FjY2VwdChuZXQsIHJlcSwgcmVxLVx1MDAzZWhyX3NrLCBmZF9wcmVwYXJlX2ZkKGZkZikpO1xuIDEyMTpcdFx0XHRmZF9wdWJsaXNoKGZkZik7XG4gMTIyOlx0XHRcdHJldHVybiAwO1xuIDEyMzpcdFx0fVxuIDEyNDpcdFxuIDEyNTpcdG91dF9jb21wbGV0ZTpcbiAxMjY6XHRcdGlmIChyZXEpXG4gMTI3Olx0XHRcdGhhbmRzaGFrZV9jb21wbGV0ZShyZXEsIC1FSU8sIE5VTEwpO1xuIDEyODpcdG91dF9zdGF0dXM6XG4gMTI5Olx0XHR0cmFjZV9oYW5kc2hha2VfY21kX2FjY2VwdF9lcnIobmV0LCByZXEsIE5VTEwsIGVycik7XG4gMTMwOlx0XHRyZXR1cm4gZXJyO1xuIDEzMTpcdH1cbiAxMzI6XHRcbiAxMzM6XHRpbnQgaGFuZHNoYWtlX25sX2RvbmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDEzNDpcdHtcbiAxMzU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gMTM2Olx0XHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxO1xuIDEzNzpcdFx0c3RydWN0IHNvY2tldCAqc29jaztcbiAxMzg6XHRcdGludCBmZCwgc3RhdHVzLCBlcnI7XG4gMTM5Olx0XG4gMTQwOlx0XHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRCkpXG4gMTQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0MjpcdFx0ZmQgPSBubGFfZ2V0X3MzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSk7XG4gMTQzOlx0XG4gMTQ0Olx0XHRzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbiAxNDU6XHRcdGlmICghc29jaylcbiAxNDY6XHRcdFx0cmV0dXJuIGVycjtcbiAxNDc6XHRcbiAxNDg6XHRcdHJlcSA9IGhhbmRzaGFrZV9yZXFfaGFzaF9sb29rdXAoc29jay1cdTAwM2Vzayk7XG4gMTQ5Olx0XHRpZiAoIXJlcSkge1xuIDE1MDpcdFx0XHRlcnIgPSAtRUJVU1k7XG4gMTUxOlx0XHRcdHRyYWNlX2hhbmRzaGFrZV9jbWRfZG9uZV9lcnIobmV0LCByZXEsIHNvY2stXHUwMDNlc2ssIGVycik7XG4gMTUyOlx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG4gMTUzOlx0XHRcdHJldHVybiBlcnI7XG4gMTU0Olx0XHR9XG4gMTU1Olx0XG4gMTU2Olx0XHR0cmFjZV9oYW5kc2hha2VfY21kX2RvbmUobmV0LCByZXEsIHNvY2stXHUwMDNlc2ssIGZkKTtcbiAxNTc6XHRcbiAxNTg6XHRcdHN0YXR1cyA9IC1FSU87XG4gMTU5Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pXG4gMTYwOlx0XHRcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgKioKCkFscmlnaHQsIHNvIHRoZSBjYWxsIGZvciBhbmFseXNpcyBoYXMgY29tZSBpbiwgYW5kIG15IG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiAmIzM0O0xldCYjMzk7cyBzZWUgdGhlIHJlc3Qgb2YgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgJiMzNDsuLi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgcHJlY2VkaW5nIGZ1bmN0aW9ucyBvciBtb2R1bGVzIHNldCB0aGUgc3RhZ2UgZm9yIHRoaXMgb25lPyBJcyB0aGVyZSBhIGtub3duIGlzc3VlIGFzc29jaWF0ZWQgd2l0aCBpdD8gV2hhdCBhcmUgdGhlIHR5cGljYWwgZmFpbHVyZSBwb2ludHM/CgpNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHJhcGlkbHkgc2NhbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgZ2xhcmluZyByZWQgZmxhZ3MuIEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXNvdXJjZSBsZWFrcz8gRG9lcyB0aGUgY29udHJvbCBmbG93IGhhbmRsZSBhbGwgcG9zc2libGUgaW5wdXQgc3RhdGVzIGNvcnJlY3RseSwgZXNwZWNpYWxseSBlZGdlIGNhc2VzIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGZyb20gc2ltaWxhciBwcm90b2NvbHM/IEkmIzM5O20gbG9va2luZyBmb3IgYSBmYW1pbGlhciBwYXR0ZXJuIG9mIGVycm9ycyB0aGF0IEkmIzM5O3ZlIGRlYWx0IHdpdGggYmVmb3JlIC0gcGVyaGFwcyBpbmNvcnJlY3QgYnVmZmVyIHNpemluZywgcmFjZSBjb25kaXRpb25zLCBvciBpbXByb3BlciBlcnJvciBwcm9wYWdhdGlvbi4KCk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIGFueXRoaW5nIHRoYXQgc2VlbXMgcmVsYXRlZCB0byB0aGUgJiMzNDtOTCYjMzQ7IHBhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgcHJvdG9jb2wgd2l0aCAmIzM5O05MJiMzOTsgaW4gdGhlIG5hbWUgbWlnaHQgcmVmZXIgdG8gYSBzcGVjaWZpYyBzb3J0IG9mIG1lc3NhZ2UgZm9ybWF0LCBvciBhIHNwZWNpZmljIHN0YWdlIG9mIGEgbmV0d29yayBoYW5kc2hha2UuIEFuZCBpZiBpdCYjMzk7cyB0aGUgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgIHBhcnQsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBjb21wbGV0aW9uIGV2ZW50LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgcG9pbnRlcnMgZm9yIHRoZSAmIzM5O2RvaXQmIzM5OyBwYXJ0LCBhbmQgcXVpY2tseSBpZGVudGlmeSBpZiB0aGlzIG1pZ2h0IGJlIHNvbWUga2luZCBvZiB0aHJlYWQgdW5zYWZlIG9wZXJhdGlvbnMuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBkcmlsbCBkb3duIGludG8gYW55IGNhbGxzIHRvIGxvd2VyLWxldmVsIG5ldHdvcmtpbmcgcHJpbWl0aXZlcywgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZXh0ZXJuYWwgaW5mbHVlbmNlcyBvbiBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzOiBhcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVhZGxvY2sgdnVsbmVyYWJpbGl0eT8gQSBtZW1vcnkgY29ycnVwdGlvbiByaXNrPyBPciBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHRoYXQgY291bGQgYnJpbmcgdGhlIHdob2xlIHRoaW5nIGNyYXNoaW5nIGRvd24/IEkmIzM5O2xsIGFsc28gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHBvc3NpYmxlIGlucHV0cyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgdGhlIGVkZ2UgY2FzZXMuCgpJbiBzaG9ydCwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGJlZ2luIGEgbWV0aG9kaWNhbCBkaXNzZWN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjE6XHRcbiAxNjI6XHRcdGhhbmRzaGFrZV9jb21wbGV0ZShyZXEsIHN0YXR1cywgaW5mbyk7XG4gMTYzOlx0XHRzb2NrZmRfcHV0KHNvY2spO1xuIDE2NDpcdFx0cmV0dXJuIDA7XG4gMTY1Olx0fVxuIDE2NjpcdFxuIDE2NzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaGFuZHNoYWtlX25ldF9pZDtcbiAxNjg6XHRcbiAxNjk6XHRzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFuZHNoYWtlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiAxNzA6XHR7XG4gMTcxOlx0XHRzdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGhhbmRzaGFrZV9uZXRfaWQpO1xuIDE3MjpcdFx0dW5zaWduZWQgbG9uZyB0bXA7XG4gMTczOlx0XHRzdHJ1Y3Qgc3lzaW5mbyBzaTtcbiAxNzQ6XHRcbiAxNzU6XHRcdC8qXG4gMTc2Olx0XHQgKiBBcmJpdHJhcnkgbGltaXQgdG8gcHJldmVudCBoYW5kc2hha2VzIHRoYXQgZG8gbm90IG1ha2VcbiAxNzc6XHRcdCAqIHByb2dyZXNzIGZyb20gY2xvZ2dpbmcgdXAgdGhlIHN5c3RlbS4gVGhlIGNhcCBzY2FsZXMgdXBcbiAxNzg6XHRcdCAqIHdpdGggdGhlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgb24gdGhlIHN5c3RlbS5cbiAxNzk6XHRcdCAqL1xuIDE4MDpcdFx0c2lfbWVtaW5mbyhcdTAwMjZzaSk7XG4gMTgxOlx0XHR0bXAgPSBzaS50b3RhbHJhbSAvICgyNSAqIHNpLm1lbV91bml0KTtcbiAxODI6XHRcdGhuLVx1MDAzZWhuX3BlbmRpbmdfbWF4ID0gY2xhbXAodG1wLCAzVUwsIDUwVUwpO1xuIDE4MzpcdFxuIDE4NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aG4tXHUwMDNlaG5fbG9jayk7XG4gMTg1Olx0XHRobi1cdTAwM2Vobl9wZW5kaW5nID0gMDtcbiAxODY6XHRcdGhuLVx1MDAzZWhuX2ZsYWdzID0gMDtcbiAxODc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmhuLVx1MDAzZWhuX3JlcXVlc3RzKTtcbiAxODg6XHRcdHJldHVybiAwO1xuIDE4OTpcdH1cbiAxOTA6XHRcbiAxOTE6XHRzdGF0aWMgdm9pZCBfX25ldF9leGl0IGhhbmRzaGFrZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4gMTkyOlx0e1xuIDE5MzpcdFx0c3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuID0gbmV0X2dlbmVyaWMobmV0LCBoYW5kc2hha2VfbmV0X2lkKTtcbiAxOTQ6XHRcdHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXE7XG4gMTk1Olx0XHRMSVNUX0hFQUQocmVxdWVzdHMpO1xuIDE5NjpcdFxuIDE5NzpcdFx0LypcbiAxOTg6XHRcdCAqIERyYWluIHRoZSBuZXQmIzM5O3MgcGVuZGluZyBsaXN0LiBSZXF1ZXN0cyB0aGF0IGhhdmUgYmVlblxuIDE5OTpcdFx0ICogYWNjZXB0ZWQgYW5kIGFyZSBpbiBwcm9ncmVzcyB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuXG4gMjAwOlx0XHQgKiB0aGUgc29ja2V0IGlzIGNsb3NlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhhbmRzaGFrZSBOZXRsaW5rIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgaGFuZHNoYWtlIG5ldGxpbmsgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCBhbmQgc2VlIHdoYXQmIzM5O3MgYmVlbiB1cGRhdGVkLiAgSSBzZWUgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4gSW4gYG5ldC9oYW5kc2hha2UvZ2VubC5jYCwgdGhlIGBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIYCBhdHRyaWJ1dGUmIzM5O3MgdHlwZSBoYXMgc2hpZnRlZCBmcm9tIGBOTEFfVTMyYCB0byBgTkxBX1MzMmAuIEFuZCBvdmVyIGluIGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAsIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgaGFzIGdvbmUgZnJvbSBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMilgIHRvIGBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKWAuIFRoZXNlIGFyZSBpbnRlcmVzdGluZyBjaGFuZ2VzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zLiBJJiMzOTtsbCBjaGVjayBgaGFuZHNoYWtlLnlhbWxgIGFuZCBgaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oYC4gQWgsIEkgc2VlIGEgY2xlYXIgc2hpZnQgaW4gdGhlIGBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzYC4gIFRoZSBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBkZWZpbml0aW9uIGhhcyBiZWVuIHVwZGF0ZWQsIG5vdyBpdCYjMzk7cyBkZWZpbmVkIGFzIGAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKWAuIFByZXZpb3VzbHksIGl0IHdhcyBzaW1wbHkgdGhlIHVwcGVyIGJvdW5kLiBUaGlzIG1lYW5zIHRoZSBhY2NlcHRhYmxlIHVwcGVyIGxpbWl0IG9mIGhhbmRsZXIgY2xhc3NlcyBoYXMgY2hhbmdlZC4gIFRoaXMgZXhwbGFpbnMgd2h5IHRoZSBgTkxBX1BPTElDWV9NQVhgIHZhbHVlIHdhcyByZWR1Y2VkIGZyb20gMiB0byAxIQoKVGhhdCBzaGlmdCBpbiBlbnVtIGRlZmluaXRpb25zIHRyaWdnZXJlZCBhIHJlbGF0ZWQgY2hhbmdlIGluIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIFRoZSBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC4gVGhlIGNvbXBhcmlzb24gbG9naWMgaXMgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBib3VuZGFyeS4gVGhlIG9sZCBgcHJvdG8tJmd0O2hwX2hhbmRsZXJfY2xhc3MgJmd0Oz0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBjaGVjayBpcyByZXBsYWNlZCB3aXRoIGAmZ3Q7IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGFzIHRoZSB2YWxpZCBoYW5kbGVyIGNsYXNzZXMgY2hhbmdlZC4gSSBhbHNvIHNlZSBhIHRlc3QgY2FzZSwgYGhhbmRzaGFrZS10ZXN0LmNgLCB3aGVyZSBgX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIHJlcGxhY2VzIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLCB0byBtYWtlIHRoZSB0ZXN0IG1hdGNoIHRoZSBuZXcgY2xhc3MgZGVmaW5pdGlvbi4KCkZpbmFsbHksIEkgcmVtZW1iZXIgdGhlIG90aGVyIHJlbGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzOiBgcGVlci1pZGVudGl0eWAsIGBrZXlyaW5nYCwgYW5kIGByZW1vdGUtYXV0aGAuIFRoZSBkb2N1bWVudGF0aW9uIGluIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxgIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXR0cmlidXRlcyB3ZXJlIGNoYW5nZWQgZnJvbSBgdTMyYCB0byBgczMyYC4gVGhhdCBtYWtlcyBzZW5zZSAtIGBrZXlfc2VyaWFsX3RgIGluIHRoZSBrZXJuZWwgaXMgYW4gYGludDMyYCwgc28gdXNpbmcgYSBzaWduZWQgMzItYml0IGludGVnZXIgaXMgdGhlIHJpZ2h0IHR5cGUuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgdG8gc2VlIGhvdyB0aGUgVExTSEQgKFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIYW5kc2hha2UgRGFlbW9uKSBhbmQgdGhlICYjMzQ7ZG9uZSYjMzQ7IGFuZCAmIzM0O2FjY2VwdCYjMzQ7IHBhdGhzIGhhbmRsZSByZW1vdGUgYXV0aGVudGljYXRpb24gYW5kIHRoZSBrZXkgc2VyaWFscywgaW4gb3JkZXIgdG8gY29tcGxldGUgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBTkRTSEFLRV9BXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9nZW5sLmMtMTUtLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICYjNDM7IDFdID0ge1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTc6XHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xOC19O1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMjpcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjM6XHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyNDpcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjUtfTtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zMi1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5LFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MzM6XHRcdC5tYXhhdHRyXHQ9IEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzQtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zOS1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjQwOlx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNDEtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0zNz1pbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNTktXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzo2MDpcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNjEtXHRcdFx0cHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykgXHUwMDNjIDApIHtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz05MD1pbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTAxLVx0ZXJyID0gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEwMjpcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEwMy1cdFx0Z290byBvdXRfc3RhdHVzO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTA0Olx0Y2xhc3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDUtXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MTMzPWludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTM5LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQwOlx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfRE9ORV9TT0NLRkQpKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE0MjpcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0pO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQzLVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE1OC1cdHN0YXR1cyA9IC1FSU87XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNTk6XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjA6XHRcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE2MS1cbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9NjE9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcwLVx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjcxOlx0XHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcyLVx0XHRcdGkmIzQzOyYjNDM7O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04MC1cdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo4MTpcdFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04Mi1cdFx0XHR0cmVxLVx1MDAzZXRoX3BlZXJpZFtpJiM0MzsmIzQzO10gPSBubGFfZ2V0X3UzMihubGEpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xNTE9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9wZWVyX2lkZW50aXR5KHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1Ni1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyZXEtXHUwMDNldGhfbnVtX3BlZXJpZHM7IGkmIzQzOyYjNDM7KVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1NzpcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1BFRVJfSURFTlRJVFksXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTU4LVx0XHRcdFx0dHJlcS1cdTAwM2V0aF9wZWVyaWRbaV0pIFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xNjM9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9jZXJ0aWZpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzEtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTcyOlx0ZW50cnlfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX0NFUlRJRklDQVRFKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzMtXHRpZiAoIWVudHJ5X2F0dHIpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3NS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzY6XHRpZiAobmxhX3B1dF9zMzIobXNnLCBIQU5EU0hBS0VfQV9YNTA5X0NFUlQsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc3LVx0XHRcdHRyZXEtXHUwMDNldGhfY2VydGlmaWNhdGUpIHx8XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTc4Olx0ICAgIG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfWDUwOV9QUklWS0VZLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3OS1cdFx0XHR0cmVxLVx1MDAzZXRoX3ByaXZrZXkpKSB7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTE5Nj1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfYWNjZXB0KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxNS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMTY6XHRyZXQgPSBubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9TT0NLRkQsIGZkKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTctXHRpZiAocmV0IFx1MDAzYyAwKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxOC1cdFx0Z290byBvdXRfY2FuY2VsO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxOTpcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX01FU1NBR0VfVFlQRSwgdHJlcS1cdTAwM2V0aF90eXBlKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjAtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjItXHRpZiAodHJlcS1cdTAwM2V0aF9wZWVybmFtZSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyMzpcdFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUk5BTUUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI0LVx0XHRcdFx0ICAgICB0cmVxLVx1MDAzZXRoX3BlZXJuYW1lKTtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI4LVx0aWYgKHRyZXEtXHUwMDNldGhfdGltZW91dF9tcykge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyOTpcdFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfVElNRU9VVCwgdHJlcS1cdTAwM2V0aF90aW1lb3V0X21zKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzAtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzMy1cdGlmICh0cmVxLVx1MDAzZXRoX2tleXJpbmcpIHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMzQ6XHRcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX0tFWVJJTkcsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjM1LVx0XHRcdFx0ICB0cmVxLVx1MDAzZXRoX2tleXJpbmcpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzktXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQwOlx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfQVVUSF9NT0RFLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0MS1cdFx0XHQgIHRyZXEtXHUwMDNldGhfYXV0aF9tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NzQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA4NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQW5hbHlzaXM6IEdlbmVyaWMgTmV0bGluayBIYW5kc2hha2UgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWxpYWJseSB0YXJnZXQgYW5kIHRyaWdnZXIgdGhlIGdlbmVyaWMgbmV0bGluayBoYW5kc2hha2UgY29kZS4gVGhlIGdvb2QgbmV3cyBpcywgYWJzb2x1dGVseSwgeWVzISBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIGdlbmVyaWMgbmV0bGluayBvcGVyYXRpb25zLCB3aGljaCBhcmUgd2VsbC1kZWZpbmVkIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdYCBjbGVhcmx5IGRlZmluZXMgdGhlIGhhbmRsZXJzOiBgSEFORFNIQUtFX0NNRF9BQ0NFUFRgIG1hcHMgdG8gYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAsIGFuZCBgSEFORFNIQUtFX0NNRF9ET05FYCBnb2VzIHRvIGBoYW5kc2hha2VfbmxfZG9uZV9kb2l0YC4gVGhlc2UgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYGhhbmRzaGFrZV9ubF9mYW1pbHlgIHZpYSBgZ2VubF9yZWdpc3Rlcl9mYW1pbHkoKWAsIG1ha2luZyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMuIEVzc2VudGlhbGx5LCBhbnkgdXNlcnNwYWNlIHByb2Nlc3MsIGluY2x1ZGluZyBzeXprYWxsZXIsIGNhbiBzZW5kIG5ldGxpbmsgbWVzc2FnZXMgdG8gdGhpcyBgaGFuZHNoYWtlYCBmYW1pbHkuCgpTcGVjaWZpY2FsbHksIHdlIGNhbiBjcmFmdCBhbmQgc2VuZCBtZXNzYWdlcyBjb250YWluaW5nIGBIQU5EU0hBS0VfQ01EX0FDQ0VQVGAgYW5kIGBIQU5EU0hBS0VfQ01EX0RPTkVgIGNvbW1hbmRzLiBJIGltbWVkaWF0ZWx5IG5vdGUgdGhlIHBvbGljeSBjaGFuZ2VzLCBhbmQgdGhlc2UgbWVyaXQgY2FyZWZ1bCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuIFRoZSBtb2RpZmljYXRpb24gb2YgIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgZnJvbSBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMilgIHRvIGBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKWAgaW4gYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGZyb20gYE5MQV9VMzJgIHRvIGBOTEFfUzMyYCBpbiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCwgYW5kIHRoZSBib3VuZGFyeSBjaGVjayBjaGFuZ2UgaW4gYGhhbmRzaGFrZV9yZXFfYWxsb2NgIOKAkyB0aGVzZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0byBleHBsb2l0LCBlc3BlY2lhbGx5IGZvciBpbnRlZ2VyIG92ZXJmbG93cyBvciBib3VuZGFyeSBjb25kaXRpb24gdmlvbGF0aW9ucy4KClRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSByZWxhdGVkIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sYCwgYGluY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaGAsIGBuZXQvaGFuZHNoYWtlL2dlbmwuY2AsIGBuZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNgLCBhbmQgYG5ldC9oYW5kc2hha2UvcmVxdWVzdC5jYCB0byBpZGVudGlmeSBvdGhlciBjaGFuZ2VzLgoKTm93LCBmcm9tIGEgZnV6emluZyBhbmdsZSwgdGhlIHRhcmdldCBpcyBjbGVhcmx5IHJlYWNoYWJsZS4gR2VuZXJpYyBuZXRsaW5rIGlzIGEgZnVuZGFtZW50YWwgdXNlcnNwYWNlLWtlcm5lbCBpbnRlcmZhY2UgdXRpbGl6aW5nIGBBRl9ORVRMSU5LYCBhbmQgYE5FVExJTktfR0VORVJJQ2Agc29ja2V0cy4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbW9kaWZpZWQgcG9saWNpZXMgKGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAgYW5kIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgKS4gIFRoZSBmdW5jdGlvbnMgYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAsIGBoYW5kc2hha2VfbmxfZG9uZV9kb2l0YCwgYW5kIGBoYW5kc2hha2VfcmVxX2FsbG9jYCBhcmUsIHRoZXJlZm9yZSwgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSBwYXRocy4gVGhpcyBjb25maXJtcyB0aGUgaW5pdGlhbCAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgYXNzZXNzbWVudC4KCkZpbmFsbHksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgYE5FVF9IQU5EU0hBS0VgLiBUaGUgYEtjb25maWdgIHJldmVhbHMgdGhhdCBpdCYjMzk7cyBgYm9vbGAsIGRlcGVuZGVudCBvbiBgU1VOUlBDIHx8IE5WTUVfVEFSR0VUX1RDUCB8fCBOVk1FX1RDUGAsIGFuZCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5Oy4gQmVjYXVzZSBpdCYjMzk7cyBhIGRpcmVjdCBib29sZWFuLCB0aGUga2VybmVsIHdpbGwgY29tcGlsZSBpbiB0aGlzIGhhbmRzaGFrZSBmdW5jdGlvbmFsaXR5IGlmIGBTVU5SUENgIG9yIGBOVk1FX1RDUGAgaXMgc2VsZWN0ZWQuIFNvLCB0byBlbnN1cmUgYE5FVF9IQU5EU0hBS0VgIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gdmVyaWZ5IGBTVU5SUENgLCBgTlZNRV9UQ1BgLCBvciBgTlZNRV9UQVJHRVRfVENQYCBhcmUgZW5hYmxlZCwgb3IganVzdCBlbmFibGUgYE5FVF9IQU5EU0hBS0VgIGl0c2VsZiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBjb25maWctb3B0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmUgYE5FVF9IQU5EU0hBS0VgLCBgU1VOUlBDYCwgYW5kIGBOVk1FX1RDUGAgaW4gc3l6a2FsbGVyJiMzOTtzIGNvbmZpZyBmb3JtYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjE6Q09ORklHX0tVTklUPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjI6Q09ORklHX1VCU0FOPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjM6Q09ORklHX1NUQUNLVFJBQ0U9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NDpDT05GSUdfTkVUPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjU6Q09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NjpDT05GSUdfSU5FVD15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzo3OkNPTkZJR19NVUxUSVVTRVI9eVxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6ODpDT05GSUdfTkZTX0ZTPXlcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjk6Q09ORklHX1NVTlJQQz15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMDpDT05GSUdfTkVUX0hBTkRTSEFLRT15XG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcbi0tXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlPTExPWhhbmRzaGFrZS15IDo9IGFsZXJ0Lm8gZ2VubC5vIG5ldGxpbmsubyByZXF1ZXN0Lm8gdGxzaGQubyB0cmFjZS5vXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUKSAmIzQzOz0gaGFuZHNoYWtlLXRlc3Qub1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz05NT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTEwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExMTojaWYgSVNfRU5BQkxFRChDT05GSUdfS0VZUylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTItc3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEhhbmRzaGFrZSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgTkVUX0hBTkRTSEFLRWAgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkmIzM5O2xsIGNvbmZpcm0gaXRzIHByZXNlbmNlIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBLY29uZmlnYCBhbmQgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBuZXRgIGRpcmVjdG9yeS4gSXQgbG9va3MgbGlrZSBlbmFibGluZyBgTkVUX0hBTkRTSEFLRWAgaW4gdGhlIGBNYWtlZmlsZWAgYWRkcyB0aGUgYGhhbmRzaGFrZS9gIGRpcmVjdG9yeSB0byB0aGUgYnVpbGQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIEEgcXVpY2sgbWVudGFsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGxpa2UgdGhvc2UgZm9yIGBTVU5SUENgIG9yIGBOVk1FX1RDUGAgYXJlbiYjMzk7dCBpbnRlcmZlcmluZy4gUHJvdmlkaW5nIGBORVRfSEFORFNIQUtFYCBpbiBFbmFibGVDb25maWdzIGlzIHRoZSBzdGFuZGFyZCB3YXkgdG8gcHJvY2VlZCwgc28gdGhhdCBzZWVtcyBzdWZmaWNpZW50IGZvciBub3cuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uOiBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBhcmUgZGlyZWN0bHkgYWx0ZXJlZCBieSB0aGUgcmVjZW50IGNoYW5nZXMgaW4gdGhlIGBoYW5kc2hha2VgIGNvZGUgb3IgZGlyZWN0bHkgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMuIE15IGluaXRpYWwgc2NhbiBwb2ludHMgdG8gYSBmZXcga2V5IGZ1bmN0aW9uczoKCjEuICBgaGFuZHNoYWtlX3JlcV9hbGxvY2Agd2l0aGluIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AgLSB0aGVyZSYjMzk7cyBhbHRlcmVkIGNvbXBhcmlzb24gbG9naWMgaW4gaGVyZTogYGhwX2hhbmRsZXJfY2xhc3MgJmd0OyBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLgoyLiAgYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAgaW4gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCAtIGl0IHVzZXMgYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgd2hlcmUgdGhlIG1heGltdW0gdmFsdWUgb2YgYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYCBoYXMgY2hhbmdlZCBmcm9tIDIgdG8gMS4KMy4gIGBoYW5kc2hha2VfbmxfZG9uZV9kb2l0YCBpbiBgbmV0L2hhbmRzaGFrZS9uZXRsaW5rLmNgIC0gVGhpcyBvbmUgYWxzbyB1c2VzIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgLCBhbmQgdGhlIHR5cGUgb2YgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGNoYW5nZWQgZnJvbSBgTkxBX1UzMmAgdG8gYE5MQV9TMzJgLgo0LiAgYHRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNgIGluIGBuZXQvaGFuZHNoYWtlL3Rsc2hkLmNgIC0gSGFuZGxlcyBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGAgd2l0aGluIHRoZSBkb25lIGNhbGxiYWNrLCBhbmQgdGhpcyBpcyBhbm90aGVyIGltcG9ydGFudCBwb2ludCB0byBiZSBhd2FyZSBvZi4KCk5leHQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgbmV0L2hhbmRzaGFrZS9gIHRoYXQgYXJlIGFmZmVjdGVkPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2FsbGVycyBvciByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljfF5pbnR8XnZvaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UvYWxlcnQuYy0zMy0gKi9cbm5ldC9oYW5kc2hha2UvYWxlcnQuYzozNDppbnQgdGxzX2FsZXJ0X3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgdTggbGV2ZWwsIHU4IGRlc2NyaXB0aW9uKVxubmV0L2hhbmRzaGFrZS9hbGVydC5jLTM1LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmM9ODc9RVhQT1JUX1NZTUJPTCh0bHNfZ2V0X3JlY29yZF90eXBlKTtcbi0tXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmMtOTYtICovXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmM6OTc6dm9pZCB0bHNfYWxlcnRfcmVjdihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9oYW5kc2hha2UvYWxlcnQuYy05OC1cdFx0ICAgIHU4ICpsZXZlbCwgdTggKmRlc2NyaXB0aW9uKVxuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE1LS8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi9cbm5ldC9oYW5kc2hha2UvZ2VubC5jOjE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHtcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE3LVx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMi1cdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTI3LS8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTI5LVx0e1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTQ0LVxubmV0L2hhbmRzaGFrZS9nZW5sLmM6NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBoYW5kc2hha2VfbmxfbWNncnBzW10gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00Ni1cdFtIQU5EU0hBS0VfTkxHUlBfTk9ORV0gPSB7IFwmIzM0O25vbmVcJiMzNDssIH0sXG4tLVxubmV0L2hhbmRzaGFrZS9nZW5sLmgtMTUtXG5uZXQvaGFuZHNoYWtlL2dlbmwuaDoxNjppbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L2hhbmRzaGFrZS9nZW5sLmg6MTc6aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvaGFuZHNoYWtlL2dlbmwuaC0xOC1cbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MjA9TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtFWFBPUlRFRF9GT1JfS1VOSVRfVEVTVElOR1wmIzM0Oyk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjEtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MjI6c3RhdGljIGludCB0ZXN0X2FjY2VwdF9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjMtXHRcdFx0ICAgIGludCBmZClcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjctXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Mjg6c3RhdGljIHZvaWQgdGVzdF9kb25lX2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yOS1cdFx0XHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0zMz1zdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtIHtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzktXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDA6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQxLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTk9ORSxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDMtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDQ6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ1LVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNCA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MjpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzUgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTMtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTYtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTc6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b182ID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTU4LVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTYzLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjY0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy02NS1cdC5ocF9oYW5kbGVyX2NsYXNzXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy02OS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo3MDpzdGF0aWMgY29uc3Rcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy03MS1zdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zW10gPSB7XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExNS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMTY6c3RhdGljIHZvaWRcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMTctaGFuZHNoYWtlX3JlcV9hbGxvY19nZXRfZGVzYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MTI0PUtVTklUX0FSUkFZX1BBUkFNKGhhbmRzaGFrZV9yZXFfYWxsb2MsIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zLFxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjYtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI3OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfYWxsb2NfY2FzZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI4LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTQ1LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE0NjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTQ3LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTY0LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE2NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTY2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTgyLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE4MzpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTg0LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjA3LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjIwODpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjA5LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjQ0LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI0NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjQ2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjg1LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI4NjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjg3LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzIzLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjMyNDpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzI1LXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzYxLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM2MjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzYzLXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDExLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQxMjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDEzLXtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDY1LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ2NjpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfZGVzdHJveV90ZXN0O1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2Ny1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0Njg6c3RhdGljIHZvaWQgdGVzdF9kZXN0cm95X2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00Njkte1xuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NzItXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDczOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZGVzdHJveSA9IHtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NzQtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDc5LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ4MDpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2Rlc3Ryb3lfdGVzdDEoc3RydWN0IGt1bml0ICp0ZXN0KVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ4MS17XG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUxOC1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MTk6c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGhhbmRzaGFrZV9hcGlfdGVzdF9jYXNlc1tdID0ge1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUyMC1cdHtcbi0tXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTY3LVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjU2ODpzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGhhbmRzaGFrZV9hcGlfc3VpdGUgPSB7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTY5LSAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9IFwmIzM0O0hhbmRzaGFrZSBBUEkgdGVzdHNcJiMzNDssXG4tLVxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaD02Nz1lbnVtIGhwX2ZsYWdzX2JpdHMge1xuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzEtLyogYWxlcnQuYyAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo3MjppbnQgdGxzX2FsZXJ0X3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgdTggbGV2ZWwsIHU4IGRlc2NyaXB0aW9uKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzMtXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTc0LS8qIG5ldGxpbmsuYyAqL1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo3NTppbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTc2LVx0XHRcdCAgZ2ZwX3QgZmxhZ3MpO1xuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg9ODI9c3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfYWxsb2MoY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTgzLVx0XHRcdFx0XHQgIGdmcF90IGZsYWdzKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODQ6aW50IGhhbmRzaGFrZV9yZXFfaGFzaF9pbml0KHZvaWQpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4NTp2b2lkIGhhbmRzaGFrZV9yZXFfaGFzaF9kZXN0cm95KHZvaWQpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4Njp2b2lkICpoYW5kc2hha2VfcmVxX3ByaXZhdGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTg3LXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2hhc2hfbG9va3VwKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTg4PXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX25leHQoc3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuLCBpbnQgY2xhc3MpO1xubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4OTppbnQgaGFuZHNoYWtlX3JlcV9zdWJtaXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtOTAtXHRcdFx0IGdmcF90IGZsYWdzKTtcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6OTE6dm9pZCBoYW5kc2hha2VfY29tcGxldGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtOTItXHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMzYtICovXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzozNzppbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0zOC1cdFx0XHQgIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jPTg4PUVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX2dlbmxfcHV0KTtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTg5LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6OTA6aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtOTEte1xuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEzMi1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEzMzppbnQgaGFuZHNoYWtlX25sX2RvbmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTM0LXtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNjYtXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjc6c3RhdGljIHVuc2lnbmVkIGludCBoYW5kc2hha2VfbmV0X2lkO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTY4LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTY5OnN0YXRpYyBpbnQgX19uZXRfaW5pdCBoYW5kc2hha2VfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTcwLXtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xOTAtXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxOTE6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBoYW5kc2hha2VfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTkyLXtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0yMTktXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoyMjA6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBoYW5kc2hha2VfZ2VubF9uZXRfb3BzID0ge1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjIxLVx0LmluaXRcdFx0PSBoYW5kc2hha2VfbmV0X2luaXQsXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MjM5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3Blcm5ldCk7XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0yNDAtXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoyNDE6c3RhdGljIGludCBfX2luaXQgaGFuZHNoYWtlX2luaXQodm9pZClcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTI0Mi17XG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjc2LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6Mjc3OnN0YXRpYyB2b2lkIF9fZXhpdCBoYW5kc2hha2VfZXhpdCh2b2lkKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjc4LXtcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy00MC1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjQxOnN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSBoYW5kc2hha2Vfcmhhc2h0YmwgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQyLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6NDM6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBoYW5kc2hha2Vfcmhhc2hfcGFyYW1zID0ge1xubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNDQtXHQua2V5X2xlblx0XHQ9IHNpemVvZl9maWVsZChzdHJ1Y3QgaGFuZHNoYWtlX3JlcSwgaHJfc2spLFxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQ5LVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6NTA6aW50IGhhbmRzaGFrZV9yZXFfaGFzaF9pbml0KHZvaWQpXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy01MS17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNTQtXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo1NTp2b2lkIGhhbmRzaGFrZV9yZXFfaGFzaF9kZXN0cm95KHZvaWQpXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy01Ni17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9NjU9RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChoYW5kc2hha2VfcmVxX2hhc2hfbG9va3VwKTtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTY2LVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6Njc6c3RhdGljIGJvb2wgaGFuZHNoYWtlX3JlcV9oYXNoX2FkZChzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxKVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNjgte1xuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTc2LVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6Nzc6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9kZXN0cm95KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy03OC17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtODUtXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo4NjpzdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtODcte1xuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTEzMT1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfYWxsb2MpO1xuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEzNy0gKi9cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEzODp2b2lkICpoYW5kc2hha2VfcmVxX3ByaXZhdGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEzOS17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MTQyPUVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX3JlcV9wcml2YXRlKTtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE0My1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjE0NDpzdGF0aWMgYm9vbCBfX2FkZF9wZW5kaW5nX2xvY2tlZChzdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaG4sXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNDUtXHRcdFx0XHQgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNTMtXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoxNTQ6c3RhdGljIHZvaWQgX19yZW1vdmVfcGVuZGluZ19sb2NrZWQoc3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuLFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTU1LVx0XHRcdFx0ICAgIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTY4LSAqL1xubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTY5OnN0YXRpYyBib29sIHJlbW92ZV9wZW5kaW5nKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiwgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE3MC17XG4tLVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MjE5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3JlcV9uZXh0KTtcbi0tXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0yNTAtICovXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoyNTE6aW50IGhhbmRzaGFrZV9yZXFfc3VibWl0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0yNTItXHRcdFx0IGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTMyMj1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfc3VibWl0KTtcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTMyMy1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjMyNDp2b2lkIGhhbmRzaGFrZV9jb21wbGV0ZShzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxLCBpbnQgc3RhdHVzLFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMzI1LVx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTI3PXN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSB7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQzLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjQ0OnN0YXRpYyBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKlxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQ1LXRsc19oYW5kc2hha2VfcmVxX2luaXQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNjAtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NjE6c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNjItXHRcdFx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy05NC0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo5NTpzdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy05Ni1cdFx0XHQgICAgICAgaW50IHN0YXR1cywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19LRVlTKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExMjpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTMte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDQtI2Vsc2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDU6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1MTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTItXHRcdFx0XHRcdCAgIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTYyLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE2MzpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKHN0cnVjdCBza19idWZmICptc2csXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTY0LVx0XHRcdFx0XHQgc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xOTUtICovXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTk2OnN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9hY2NlcHQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xOTctXHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgZmQpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI2Ni1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyNjc6c3RhdGljIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gdGxzX2hhbmRzaGFrZV9wcm90byA9IHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNjgtXHQuaHBfaGFuZGxlcl9jbGFzc1x0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjg1LSAqL1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI4NjppbnQgdGxzX2NsaWVudF9oZWxsb19hbm9uKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI4Ny17XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTMwMD1FWFBPUlRfU1lNQk9MKHRsc19jbGllbnRfaGVsbG9fYW5vbik7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTMxMS0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozMTI6aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTMte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMjg9RVhQT1JUX1NZTUJPTCh0bHNfY2xpZW50X2hlbGxvX3g1MDkpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNDAtICovXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzQxOmludCB0bHNfY2xpZW50X2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNDIte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNjM9RVhQT1JUX1NZTUJPTCh0bHNfY2xpZW50X2hlbGxvX3Bzayk7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM3NC0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozNzU6aW50IHRsc19zZXJ2ZXJfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzYte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zOTE9RVhQT1JUX1NZTUJPTCh0bHNfc2VydmVyX2hlbGxvX3g1MDkpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDItICovXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NDAzOmludCB0bHNfc2VydmVyX2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDQte1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz00Mzg9RVhQT1JUX1NZTUJPTCh0bHNfaGFuZHNoYWtlX2NhbmNlbCk7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQ0NC0gKi9cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0NDU6dm9pZCB0bHNfaGFuZHNoYWtlX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNDEKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhhbmRzaGFrZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBgRm9jdXNTeW1ib2xzYC4gSXQgc2VlbXMgd2UmIzM5O3ZlIHNlbGVjdGVkIHRoZXNlOiBgaGFuZHNoYWtlX3JlcV9hbGxvY2AsIHdoaWNoIGhhcyBtb2RpZmllZCBsb2dpYzsgdGhlbiBgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0YCB3aGljaCBoYW5kbGVzIHRoZSBOZXRsaW5rIGFjY2VwdCByZXF1ZXN0IGFuZCB2YWxpZGF0ZXMgYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYDsgbmV4dCBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAgd2hpY2ggYWxzbyBoYW5kbGVzIGEgTmV0bGluayByZXF1ZXN0IGJ1dCBzcGVjaWZpY2FsbHkgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGhhbmRzaGFrZSwgdmFsaWRhdGluZyBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGA7IGFuZCBmaW5hbGx5LCBgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc2Agd2hpY2ggcHJvY2Vzc2VzIHRoZSBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGAgbmV0bGluayBhdHRyaWJ1dGUuIFRob3NlIHNlZW0gbGlrZSBzZW5zaWJsZSB0YXJnZXRzIGZvciBmb2N1c2luZyBvdXIgZnV6emluZyBlZmZvcnRzLgoKTmV4dCwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0LiBXZSBoYXZlIGBORVRfSEFORFNIQUtFYCBhbmQgYFNVTlJQQ2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBhcHByb3ByaWF0ZSwgZ2l2ZW4gdGhlIGhhbmRzaGFrZSBmb2N1cy4KCkFscmlnaHQsIG5vdyB0byBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgcHJvbXB0OiB3ZSBoYXZlIGBXb3J0aEZ1enppbmdgIHdoaWNoIEkgYXNzdW1lIGlzIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIGZ1enppbmcgaXMgd2FycmFudGVkLCB0aGVuIHRoZSBgRm9jdXNTeW1ib2xzYCwgYSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmVuJiMzOTt0IHViaXF1aXRvdXMsIGFuZCBmaW5hbGx5IHRoZSBgRW5hYmxlQ29uZmlnc2Agd2hpY2ggYXJlIHN0cmluZ3Mgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gQ2hlY2ssIGNoZWNrLCBjaGVjay4gTG9va3MgbGlrZSBldmVyeXRoaW5nIG1lZXRzIHRoZSByZXF1aXJlbWVudHMuCgpPa2F5LCBldmVyeXRoaW5nIGFwcGVhcnMgc291bmQgYW5kIGFjY3VyYXRlLiBMZXQmIzM5O3MgZ28gYWhlYWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAgICYjMzQ7U1VOUlBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7LAogICAgJiMzNDtoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2RvbmVfZG9pdCYjMzQ7LAogICAgJiMzNDt0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9IQU5EU0hBS0UmIzM0OywKICAgICYjMzQ7U1VOUlBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZHNoYWtlX3JlcV9hbGxvYyYjMzQ7LAogICAgJiMzNDtoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXQmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlX25sX2RvbmVfZG9pdCYjMzQ7LAogICAgJiMzNDt0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBoYW5kc2hha2UgbmV0bGluayBzcGVjaWZpY2F0aW9uIGFuZCBpbnRlcm5hbCBrZXJuZWwgZGVmaW5pdGlvbnMgdG8gc3RhbmRhcmRpemUgdGhlIGVudW0gbmFtaW5nIGNvbnZlbnRpb24gKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC8gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKSBhbmQgdXBkYXRlcyBuZXRsaW5rIHBvbGljaWVzIChjaGFuZ2luZyByZW1vdGUtYXV0aCBmcm9tIE5MQV9VMzIgdG8gTkxBX1MzMiBmb3Iga2V5X3NlcmlhbF90IGFuZCBhZGp1c3RpbmcgdGhlIG1heCBoYW5kbGVyIGNsYXNzIHBvbGljeSkuXG5cblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJkZDI4ZTg3Y2ZkZjg5OTg2ODJlODU4NGUzNWViMDliYjFjZDFmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDc6NDM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwKaW5kZXggZmZlYzEyYjQ2NzU5Ny4uMDQ5OGFkYTJkZDk3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbApAQCAtMjIsNyAmIzQzOzIyLDggQEAgZGVmaW5pdGlvbnM6CiAgICAgdHlwZTogZW51bQogICAgIG5hbWU6IGhhbmRsZXItY2xhc3MKICAgICB2YWx1ZS1zdGFydDogMAotICAgIGVudHJpZXM6IFtub25lLCB0bHNoZCwgbWF4XQomIzQzOyAgICBlbnRyaWVzOiBbbm9uZSwgdGxzaGRdCiYjNDM7ICAgIHJlbmRlci1tYXg6IHRydWUKICAgLQogICAgIHR5cGU6IGVudW0KICAgICBuYW1lOiBtc2ctdHlwZQpAQCAtNjcsNyAmIzQzOzY4LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIGVudW06IGF1dGgKICAgICAgIC0KICAgICAgICAgbmFtZTogcGVlci1pZGVudGl0eQotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlCkBAIC03OSw3ICYjNDM7ODAsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAtCiAgICAgICAgIG5hbWU6IGtleXJpbmcKLSAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICB0eXBlOiBzMzIKICAgLQogICAgIG5hbWU6IGRvbmUKICAgICBhdHRyaWJ1dGVzOgpAQCAtOTMsNyAmIzQzOzk0LDcgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHMzMgogICAgICAgLQogICAgICAgICBuYW1lOiByZW1vdGUtYXV0aAotICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIHR5cGU6IHMzMgogICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiAKIG9wZXJhdGlvbnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmgKaW5kZXggZDdlNDBmNTk0ODg4Ni4uZjkwN2FhMDgyNTIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaApAQCAtMTMsNyAmIzQzOzEzLDEwIEBACiBlbnVtIGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzIHsKIAlIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLAogCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELAotCUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCwKJiM0MzsKJiM0MzsJLyogcHJpdmF0ZTogKi8KJiM0MzsJX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsCiYjNDM7CUhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCA9IChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAtIDEpCiB9OwogCiBlbnVtIGhhbmRzaGFrZV9tc2dfdHlwZSB7CmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2dlbmwuYyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0Ci0tLSBhL25ldC9oYW5kc2hha2UvZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvZ2VubC5jCkBAIC0xNCwxNCAmIzQzOzE0LDE0IEBACiAKIC8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyAmIzQzOyAxXSA9IHsKLQlbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksCiYjNDM7CVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKSwKIH07CiAKIC8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7CiAJW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksCiAJW0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LAotCVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAomIzQzOwlbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSwKIH07CiAKIC8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovCmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMKaW5kZXggM2RkNTA3NDcwZDVmZS4uNGI5OWFjZDlmOWM3ZSAxMDA2NDQKLS0tIGEvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYwpAQCAtNDIsNyAmIzQzOzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0gewogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0gewotCS5ocF9oYW5kbGVyX2NsYXNzCT0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAomIzQzOwkuaHBfaGFuZGxlcl9jbGFzcwk9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLAogfTsKIAogc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b180ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwppbmRleCBjZDMwZDU0ZDA1MDFkLi5mZjczOWVlODFjYjgyIDEwMDY0NAotLS0gYS9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90bywKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHByb3RvLSZndDtocF9oYW5kbGVyX2NsYXNzICZsdDs9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpCiAJCXJldHVybiBOVUxMOwotCWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpCiYjNDM7CWlmIChwcm90by0mZ3Q7aHBfaGFuZGxlcl9jbGFzcyAmZ3Q7IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKCFwcm90by0mZ3Q7aHBfYWNjZXB0IHx8ICFwcm90by0mZ3Q7aHBfZG9uZSkKIAkJcmV0dXJuIE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOL0tBU0FOIFBhdGNoIEV2YWx1YXRpb24gLSBIYW5kc2hha2UgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIEtNU0FOL0tBU0FOIGFwcGxpY2FiaWxpdHkuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgdHJ1ZSBvciBmYWxzZSBhbmQgcmVjb3JkIG15IHJlYXNvbmluZyB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGRpZmYgdGFyZ2V0cyB0aGUgaGFuZHNoYWtlIHN1YnN5c3RlbSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgcmVhZC10aHJvdWdoIHNob3dzIHRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBzdHJ1Y3R1cmVzIGFuZCBlbnVtcyB3aXRoaW4gdGhlIG5ldGxpbmsgaGFuZHNoYWtlIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgdG8gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLCBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCBgbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jYCwgYW5kIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuCgpUaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlOgoKKiAgICoqRW51bSBjaGFuZ2VzOioqIFRoZSBgaGFuZHNoYWtlX2hhbmRsZXJfY2xhc3NgIGVudW0gaGFzIGJlZW4gbW9kaWZpZWQuICBXZSYjMzk7dmUgZ290IG5ldyBlbnRyaWVzIGxpa2UgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkVgIGFuZCBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSERgLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgaXMgYmVpbmcgYWRqdXN0ZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcmVkIGZsYWcsIGFzIGVudW0gY2hhbmdlcyBjYW4gc29tZXRpbWVzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCiogICAqKlR5cGUgY2hhbmdlczoqKiBTZXZlcmFsIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBuZXRsaW5rIG1lc3NhZ2VzIChgcGVlci1pZGVudGl0eWAsIGBrZXlyaW5nYCwgYHJlbW90ZS1hdXRoYCkgYXJlIGhhdmluZyB0aGVpciB0eXBlcyBzd2l0Y2hlZCBmcm9tIGB1MzJgIHRvIGBzMzJgLgoqICAgKipQb2xpY3kgYWRqdXN0bWVudHM6KiogVGhlIG5ldGxpbmsgcG9saWN5IGZvciBoYW5kbGluZyBoYW5kc2hha2UgbWVzc2FnZXMgKGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAsIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgKSBpcyBiZWluZyBtb2RpZmllZCB0byByZWZsZWN0IHRoZXNlIHR5cGUgY2hhbmdlcy4KKiAgICoqQm91bmRzIENoZWNrczoqKiBUaGVyZSYjMzk7cyBhIHNsaWdodCBhZGp1c3RtZW50IHRvIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGAmZ3Q7YCBpbnN0ZWFkIG9mIGAmZ3Q7PWAgcmVsYXRpbmcgdG8gIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLgoKTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlICptaWdodCogaW50cm9kdWNlIG5ldyBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIHR5cGUgY2hhbmdlcyBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnRlZ2VycyBhcmUgY29uY2VybmluZy4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIHBlcmZlY3RseSBmaW5lIGFuZCBpcyBqdXN0IGEgbmVjZXNzYXJ5IHJlZmluZW1lbnQsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgb3JpZ2luYWwgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyB1c2VkIGluIHNjZW5hcmlvcyB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIHNpZ25lZCBpbnRlZ2VyIHR5cGUuCgpUbyBkZXRlcm1pbmUgYE5lZWRzS01TQU5gIGRlZmluaXRpdmVseSwgSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGVzZSBhdHRyaWJ1dGVzIHJlcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgaGFuZHNoYWtlX2hhbmRsZXJfY2xhc3NgIGlzIGFsbCBhYm91dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aG9zZSB0eXBlIGNoYW5nZXMgYW5kIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSByaXNrIG9mIGludGVnZXIgb3ZlcmZsb3csIHVuZGVyZmxvdywgb3Igc2lnbiBleHRlbnNpb24gaXNzdWVzLiBTbywgSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZm9sbG93IGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBwb2ludGVyIGFyaXRobWV0aWMgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbiBpbnZvbHZlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGlzIGRlYWxzIHdpdGggcG90ZW50aWFsbHkgbmV0d29yay1yZWxhdGVkIGRhdGEgKHRoZSBoYW5kc2hha2UgcHJvdG9jb2wpLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBgbmV0L2hhbmRzaGFrZWAgbW9kdWxlIGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjaGFuZ2VzLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBLTVNBTiB3b3VsZCBiZSB2YWx1YWJsZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlL2dlbmwuYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MgJiM0MzsgMV0gPSB7XG4tLVxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjAtLyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCAmIzQzOyAxXSA9IHtcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIyLVx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMy1cdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjI0Olx0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yNS19O1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jPTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdID0ge1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTM5LVx0XHQucG9saWN5XHRcdD0gaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5LFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6NDA6XHRcdC5tYXhhdHRyXHQ9IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgsXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00MS1cdFx0LmZsYWdzXHRcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz02MT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzAtXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NzE6XHRcdGlmIChubGFfdHlwZShubGEpID09IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgpXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzItXHRcdFx0aSYjNDM7JiM0Mzs7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgwLVx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjgxOlx0XHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgyLVx0XHRcdHRyZXEtXHUwMDNldGhfcGVlcmlkW2kmIzQzOyYjNDM7XSA9IG5sYV9nZXRfdTMyKG5sYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3QgbWF0dGVyOgoKKipEZWVwIERpdmUgaW50byBgbmV0L2hhbmRzaGFrZWAgQ29tcG9uZW50cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgaG93IGBuZXQvaGFuZHNoYWtlYCBvcmNoZXN0cmF0ZXMgdGhpbmdzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW50ZXJwbGF5IG9mIGhhbmRsZXIgY2xhc3NlcywgcGVlci1pZGVudGl0eSBtYW5hZ2VtZW50LCB0aGUga2V5cmluZywgYW5kIHJlbW90ZSBhdXRoZW50aWNhdGlvbiB3aXRoaW4gdGhpcyBtb2R1bGUuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBlbGVtZW50cyB0byBtYWtlIGEganVkZ2VtZW50LgoKVGhlcmVmb3JlLCB0aGUgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIG1ldGhvZGljYWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvaGFuZHNoYWtlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBnb2luZyB0byBiZSBsYWlkIG91dCwgdGhlIGFjdHVhbCBjb2RlIHRoYXQgZGVmaW5lcyB0aGVzZSBpbnRlcmFjdGlvbnMuIFRoaXMgc2hvdWxkIGFsbG93IGEgZGVlcCBkaXZlIGludG8gaG93IHRoZXNlIHN5c3RlbXMgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvaGFuZHNoYWtlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWxlcnQuYyYjMzQ7LAogICAgJiMzNDtnZW5sLmMmIzM0OywKICAgICYjMzQ7Z2VubC5oJiMzNDssCiAgICAmIzM0O2hhbmRzaGFrZS10ZXN0LmMmIzM0OywKICAgICYjMzQ7aGFuZHNoYWtlLmgmIzM0OywKICAgICYjMzQ7bmV0bGluay5jJiMzNDssCiAgICAmIzM0O3JlcXVlc3QuYyYjMzQ7LAogICAgJiMzNDt0bHNoZC5jJiMzNDssCiAgICAmIzM0O3RyYWNlLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcyBhc3N1bWluZyBleHBlcnRpc2UgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaWdnaW5nIGludG8gdGhlIEhhbmRzaGFrZSBQcm90b2NvbCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBoYW5kc2hha2UgcHJvdG9jb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGFsbCB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVzc2FnZSBoYW5kbGluZy4gU28sIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIGEgZmV3IGtleSBmaWxlcy4gSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9oYW5kc2hha2UvZ2VubC5oYC4gVGhhdCBoZWFkZXIgd2lsbCBwcm9iYWJseSBvdXRsaW5lIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIGRlZmluaXRpb25zIGFuZCBhbnkgY3VzdG9tIG1lc3NhZ2UgdHlwZXMgdXNlZCBpbiB0aGUgaGFuZHNoYWtlLiBUaGVuIEkgbmVlZCB0byBzZWUgaG93IHRob3NlIG1lc3NhZ2UgdHlwZXMgYXJlIHByb2Nlc3NlZCBhbmQgaGFuZGxlZCwgc28gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCBpcyB0aGUgbmV4dCBvYnZpb3VzIHRhcmdldDsgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmFjdGlvbiBsb2dpYyB1c3VhbGx5IHJlc2lkZXMuIEFuZCBmaW5hbGx5LCBiZWNhdXNlIHRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyBzcGVjaWZpYywgSSBuZWVkIHRvIHNlZSB3aGF0IGBuZXQvaGFuZHNoYWtlL3Rsc2hkLmNgIGRlYWxzIHdpdGguIEkgYmV0IHRoYXQgaGFuZGxlcyBhbnkgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhhbmRzaGFrZSBEZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZXJfaWRlbnRpdHl8a2V5cmluZ3xyZW1vdGVfYXV0aHxIQU5EU0hBS0VfQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oYW5kc2hha2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hhbmRzaGFrZS9nZW5sLmMtMTUtLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICYjNDM7IDFdID0ge1xubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTc6XHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xOC19O1xuLS1cbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggJiM0MzsgMV0gPSB7XG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMjpcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjM6XHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyNDpcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjUtfTtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zMi1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5LFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MzM6XHRcdC5tYXhhdHRyXHQ9IEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzQtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zOS1cdFx0LnBvbGljeVx0XHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjQwOlx0XHQubWF4YXR0clx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNDEtXHRcdC5mbGFnc1x0XHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0zNz1pbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNTktXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzo2MDpcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNjEtXHRcdFx0cHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykgXHUwMDNjIDApIHtcbi0tXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz05MD1pbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTAxLVx0ZXJyID0gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEwMjpcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEwMy1cdFx0Z290byBvdXRfc3RhdHVzO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTA0Olx0Y2xhc3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDUtXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MTMzPWludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTM5LVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQwOlx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfRE9ORV9TT0NLRkQpKVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE0MjpcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0pO1xubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTQzLVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE1OC1cdHN0YXR1cyA9IC1FSU87XG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNTk6XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjA6XHRcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE2MS1cbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjc9c3RydWN0IHRsc19oYW5kc2hha2VfcmVxIHtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzUtXHRjb25zdCBjaGFyXHRcdCp0aF9wZWVybmFtZTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozNjpcdGtleV9zZXJpYWxfdFx0XHR0aF9rZXlyaW5nO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM3LVx0a2V5X3NlcmlhbF90XHRcdHRoX2NlcnRpZmljYXRlO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz00NT10bHNfaGFuZHNoYWtlX3JlcV9pbml0KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTUzLVx0dHJlcS1cdTAwM2V0aF9wZWVybmFtZSA9IGFyZ3MtXHUwMDNldGFfcGVlcm5hbWU7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NTQ6XHR0cmVxLVx1MDAzZXRoX2tleXJpbmcgPSBhcmdzLVx1MDAzZXRhX2tleXJpbmc7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNTUtXHR0cmVxLVx1MDAzZXRoX251bV9wZWVyaWRzID0gMDtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9NjE9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcwLVx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjcxOlx0XHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcyLVx0XHRcdGkmIzQzOyYjNDM7O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04MC1cdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo4MTpcdFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04Mi1cdFx0XHR0cmVxLVx1MDAzZXRoX3BlZXJpZFtpJiM0MzsmIzQzO10gPSBubGFfZ2V0X3UzMihubGEpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz05NT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19LRVlTKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExMjpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTMte1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjExNDpcdGtleV9yZWZfdCBwcm9jZXNzX2tleXJpbmdfcmVmLCBrZXlyaW5nX3JlZjtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTUtXHRpbnQgcmV0O1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExNi1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTc6XHRpZiAodHJlcS1cdTAwM2V0aF9rZXlyaW5nID09IFRMU19OT19LRVlSSU5HKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExOC1cdFx0cmV0dXJuIDA7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTE5LVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEyMDpcdHByb2Nlc3Nfa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoS0VZX1NQRUNfUFJPQ0VTU19LRVlSSU5HLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEyMS1cdFx0XHRcdFx0ICAgICAgS0VZX0xPT0tVUF9DUkVBVEUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTIyLVx0XHRcdFx0XHQgICAgICBLRVlfTkVFRF9XUklURSk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTIzOlx0aWYgKElTX0VSUihwcm9jZXNzX2tleXJpbmdfcmVmKSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEyNDpcdFx0cmV0ID0gUFRSX0VSUihwcm9jZXNzX2tleXJpbmdfcmVmKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjUtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjctXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTI4Olx0a2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkodHJlcS1cdTAwM2V0aF9rZXlyaW5nLCBLRVlfTE9PS1VQX0NSRUFURSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjktXHRcdFx0XHQgICAgICBLRVlfTkVFRF9MSU5LKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMzA6XHRpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEzMTpcdFx0cmV0ID0gUFRSX0VSUihrZXlyaW5nX3JlZik7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTMyLVx0XHRnb3RvIG91dF9wdXRfa2V5O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzQtXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM1Olx0cmV0ID0ga2V5X2xpbmsoa2V5X3JlZl90b19wdHIocHJvY2Vzc19rZXlyaW5nX3JlZiksXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM2Olx0XHQgICAgICAga2V5X3JlZl90b19wdHIoa2V5cmluZ19yZWYpKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzctXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM4Olx0a2V5X3JlZl9wdXQoa2V5cmluZ19yZWYpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEzOS1vdXRfcHV0X2tleTpcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDA6XHRrZXlfcmVmX3B1dChwcm9jZXNzX2tleXJpbmdfcmVmKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDEtb3V0OlxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDQtI2Vsc2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDU6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ2LXtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUwLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1MTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTItXHRcdFx0XHRcdCAgIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTU2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHJlcS1cdTAwM2V0aF9udW1fcGVlcmlkczsgaSYjNDM7JiM0MzspXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTU3Olx0XHRpZiAobmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUl9JREVOVElUWSxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTgtXHRcdFx0XHR0cmVxLVx1MDAzZXRoX3BlZXJpZFtpXSkgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTE2Mz1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3MS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzI6XHRlbnRyeV9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfQ0VSVElGSUNBVEUpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3My1cdGlmICghZW50cnlfYXR0cilcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc1LVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE3NjpcdGlmIChubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX1g1MDlfQ0VSVCxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzctXHRcdFx0dHJlcS1cdTAwM2V0aF9jZXJ0aWZpY2F0ZSkgfHxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzg6XHQgICAgbmxhX3B1dF9zMzIobXNnLCBIQU5EU0hBS0VfQV9YNTA5X1BSSVZLRVksXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc5LVx0XHRcdHRyZXEtXHUwMDNldGhfcHJpdmtleSkpIHtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MTk2PXN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9hY2NlcHQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjAzLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIwNDpcdHJldCA9IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHRyZXEpO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIwNS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxNS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMTY6XHRyZXQgPSBubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9TT0NLRkQsIGZkKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTctXHRpZiAocmV0IFx1MDAzYyAwKVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxOC1cdFx0Z290byBvdXRfY2FuY2VsO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxOTpcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX01FU1NBR0VfVFlQRSwgdHJlcS1cdTAwM2V0aF90eXBlKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjAtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjItXHRpZiAodHJlcS1cdTAwM2V0aF9wZWVybmFtZSkge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyMzpcdFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUk5BTUUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI0LVx0XHRcdFx0ICAgICB0cmVxLVx1MDAzZXRoX3BlZXJuYW1lKTtcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI4LVx0aWYgKHRyZXEtXHUwMDNldGhfdGltZW91dF9tcykge1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyOTpcdFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfVElNRU9VVCwgdHJlcS1cdTAwM2V0aF90aW1lb3V0X21zKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzAtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzMi1cdH1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMzM6XHRpZiAodHJlcS1cdTAwM2V0aF9rZXlyaW5nKSB7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjM0Olx0XHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9LRVlSSU5HLFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIzNTpcdFx0XHRcdCAgdHJlcS1cdTAwM2V0aF9rZXlyaW5nKTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzYtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzOS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyNDA6XHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9BVVRIX01PREUsXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQxLVx0XHRcdCAgdHJlcS1cdTAwM2V0aF9hdXRoX21vZGUpO1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNDQtXHRzd2l0Y2ggKHRyZXEtXHUwMDNldGhfYXV0aF9tb2RlKSB7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQ1Olx0Y2FzZSBIQU5EU0hBS0VfQVVUSF9QU0s6XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQ2Olx0XHRyZXQgPSB0bHNfaGFuZHNoYWtlX3B1dF9wZWVyX2lkZW50aXR5KG1zZywgdHJlcSk7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQ3LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNDktXHRcdGJyZWFrO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI1MDpcdGNhc2UgSEFORFNIQUtFX0FVVEhfWDUwOTpcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNTEtXHRcdHJldCA9IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKG1zZywgdHJlcSk7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTI4Nj1pbnQgdGxzX2NsaWVudF9oZWxsb19hbm9uKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yOTUtXHR0cmVxLVx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfQ0xJRU5USEVMTE87XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6Mjk2Olx0dHJlcS1cdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9VTkFVVEg7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjk3LVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMTI9aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcbi0tXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzIxLVx0dHJlcS1cdTAwM2V0aF90eXBlID0gSEFORFNIQUtFX01TR19UWVBFX0NMSUVOVEhFTExPO1xubmV0L2hhbmRzaGFrZS90bHNoZC5jOjMyMjpcdHRyZXEtXHUwMDNldGhfYXV0aF9tb2RlID0gSEFORFNIQUtFX0FVVEhfWDUwOTtcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMjMtXHR0cmVxLVx1MDAzZXRoX2NlcnRpZmljYXRlID0gYXJncy1cdTAwM2V0YV9teV9jZXJ0O1xuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNDE9aW50IHRsc19jbGllbnRfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTUtXHR0cmVxLVx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfQ0xJRU5USEVMTE87XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzU2Olx0dHJlcS1cdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9QU0s7XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzU3LVx0dHJlcS1cdTAwM2V0aF9udW1fcGVlcmlkcyA9IGFyZ3MtXHUwMDNldGFfbnVtX3BlZXJpZHM7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM3NT1pbnQgdGxzX3NlcnZlcl9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zODQtXHR0cmVxLVx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfU0VSVkVSSEVMTE87XG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6Mzg1Olx0dHJlcS1cdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9YNTA5O1xubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM4Ni1cdHRyZXEtXHUwMDNldGhfY2VydGlmaWNhdGUgPSBhcmdzLVx1MDAzZXRhX215X2NlcnQ7XG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQwMz1pbnQgdGxzX3NlcnZlcl9oZWxsb19wc2soY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXG4tLVxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQxMi1cdHRyZXEtXHUwMDNldGhfdHlwZSA9IEhBTkRTSEFLRV9NU0dfVFlQRV9TRVJWRVJIRUxMTztcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0MTM6XHR0cmVxLVx1MDAzZXRoX2F1dGhfbW9kZSA9IEhBTkRTSEFLRV9BVVRIX1BTSztcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MTQtXHR0cmVxLVx1MDAzZXRoX251bV9wZWVyaWRzID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODAKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogODg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBIYW5kc2hha2UgU3Vic3lzdGVtIENsZWFudXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBmb2N1c2luZyBvbiB0aWR5aW5nIHVwIHRoZSBoYW5kc2hha2Ugc3Vic3lzdGVtJiMzOTtzIEFQSSBhbmQgYXNzb2NpYXRlZCBuZXRsaW5rIHBvbGljaWVzLiBJIHNlZSBpdCBzdGFydHMgYnk6CgoxLiAgKipEb2N1bWVudGF0aW9uIFVwZGF0ZToqKiBNb2RpZnlpbmcgdGhlIFlBTUwgc3BlYyBmb3IgdGhlIGhhbmRzaGFrZSBuZXRsaW5rIGludGVyZmFjZS4gSSYjMzk7bSBub3RpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGBoYW5kbGVyLWNsYXNzYCBlbnVtJiMzOTtzIGByZW5kZXItbWF4YCBwcm9wZXJ0eSwgZWZmZWN0aXZlbHkgc3RhbmRhcmRpemluZyB0aGUgdXNlIG9mIGBfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgYW5kIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIGZvciBkZWZpbmluZyB0aGUgbWF4aW11bSB2YWx1ZS4gVGhpcyBpcyBnb29kIHByYWN0aWNlIGZvciBlbnVtIG1hbmFnZW1lbnQuIEl0IGFsc28gdXBkYXRlcyB0aGUgYXR0cmlidXRlIHR5cGVzIGZvciBwZWVyIGlkZW50aXR5LCBrZXlyaW5nLCBhbmQgcmVtb3RlIGF1dGhlbnRpY2F0aW9uIHRvIHVzZSBzaWduZWQgMzItYml0IGludGVnZXJzIChgczMyYCkgaW5zdGVhZCBvZiB1bnNpZ25lZCAoYHUzMmApLiBUaGlzIGlzIGEgY3JpdGljYWwgZml4LCBnaXZlbiB0aGF0IGtleSBzZXJpYWwgSURzIChga2V5X3NlcmlhbF90YCkgaW4gdGhlIGtlcm5lbCBhcmUgc2lnbmVkIGludGVnZXJzLgoKMi4gICoqSGVhZGVyIGFuZCBQb2xpY3kgQWRqdXN0bWVudHM6KiogSW4gdGhlIGBoYW5kc2hha2UuaGAgaGVhZGVyLCB0aGUgZW51bSBkZWZpbml0aW9uIGlzIG5vdyBjbGVhciwgdXNpbmcgYF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBmb3IgdGhlIGludGVybmFsIHZhbHVlIGFuZCB0aGVuIGRlcml2aW5nIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLiBUaGUgYGdlbmwuY2AgY2hhbmdlcyBhcmUgc2lnbmlmaWNhbnQ6IEkgc2VlIGFkanVzdG1lbnRzIHRvIHRoZSBuZXRsaW5rIHBvbGljeS4gYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYCBub3cgaGFzIHRoZSBjb3JyZWN0IG1heGltdW0gdmFsdWUgKDEpLCBhbmQgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbiBwb2xpY3kmIzM5O3MgdHlwZSBpcyBjb3JyZWN0ZWQgdG8gYE5MQV9TMzJgLCBtaXJyb3JpbmcgdGhlIHNwZWMmIzM5O3MgY2hhbmdlLgoKMy4gICoqVGVzdCBhbmQgVXNhZ2UgVXBkYXRlczoqKiBUaGUgcGF0Y2ggZXZlbiB1cGRhdGVzIHRoZSB0ZXN0IGNvZGUgKGBoYW5kc2hha2UtdGVzdC5jYCkgdG8gdXNlIGBfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgcHJvcGVybHkuIEZpbmFsbHksIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIGluIGByZXF1ZXN0LmNgIG5vdyBjb3JyZWN0bHkgYm91bmRzIHRoZSBgaHBfaGFuZGxlcl9jbGFzc2AgYWdhaW5zdCB0aGUgKmFjdHVhbCogbWF4aW11bSB2YWxpZCB2YWx1ZSAoYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGApLCBub3QgYW4gb2ZmLWJ5LW9uZS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGVyZSBhIHJpc2sgb2YgaW50cm9kdWNpbmcgbWVtb3J5IGlzc3Vlcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgbGVmdC4gVGhpcyBpcyBhIHBvc2l0aXZlIHNpZ24uCiogICAqKk5ldGxpbmsgYXR0cmlidXRlIHZhbGlkYXRpb246KiogVGhlIGNoYW5nZSB0byBgSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSGAgdmFsaWRhdGlvbiBmcm9tIGBOTEFfVTMyYCB0byBgTkxBX1MzMmAgaXMgY3JpdGljYWwsIGJ1dCB0aGUgc2l6ZSByZW1haW5zIHRoZSBzYW1lICg0IGJ5dGVzKS4gVGhlIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgdmFsaWRhdGlvbiBpcyAqdGlnaHRlbmVkKiwgbW92aW5nIHRoZSBtYXggZG93biBmcm9tIDIgdG8gMSAod2hpY2ggaXMgdGhlIGNvcnJlY3QgaGlnaGVzdCB2YWxpZCB2YWx1ZSksIHdoaWNoIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQuCiogICAqKkJvdW5kcyBjaGVja2luZzoqKiBUaGUgdGlnaHRlciBib3VuZHMgY2hlY2tpbmcgaXMgKmdvb2QqLiBXZSYjMzk7cmUgZW5zdXJpbmcgd2UgKmRvbiYjMzk7dCogYWNjZXNzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipJbmZvcm1hdGlvbiBMZWFrYWdlOioqIFRoaXMgaXMgYSBrZXkgYXJlYSwgYW5kIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZXJlJiMzOTtzIG5vIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBoZXJlLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzYWZlIHJlZmFjdG9yaW5nIHBhdGNoLiBJdCYjMzk7cyBhIGNsZWFudXAsIG5vdCBhIG5ldyBmZWF0dXJlIGludHJvZHVjdGlvbiwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGhhemFyZHMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IEtNU0FOLXNwZWNpZmljIHJlcXVpcmVtZW50cyBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGNhbiBwcm9jZWVkIHdpdGhvdXQgS01TQU4gZnV6emluZy4gSXQmIzM5O3MgYSBwdXJlIEFQSS9VQVBJIGNsZWFudXAgYW5kIG5ldGxpbmsgcG9saWN5IGFkanVzdG1lbnQgZm9yIHRoZSBoYW5kc2hha2Ugc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBoYW5kc2hha2UgbmV0bGluayBzcGVjaWZpY2F0aW9uIGFuZCBpbnRlcm5hbCBrZXJuZWwgZGVmaW5pdGlvbnMgdG8gc3RhbmRhcmRpemUgdGhlIGVudW0gbmFtaW5nIGNvbnZlbnRpb24gKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC8gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKSBhbmQgdXBkYXRlcyBuZXRsaW5rIHBvbGljaWVzIChjaGFuZ2luZyByZW1vdGUtYXV0aCBmcm9tIE5MQV9VMzIgdG8gTkxBX1MzMiBmb3Iga2V5X3NlcmlhbF90IGFuZCBhZGp1c3RpbmcgdGhlIG1heCBoYW5kbGVyIGNsYXNzIHBvbGljeSkuXG5cblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IG5ldGxpbmsgcG9saWN5IHZhbGlkYXRpb24gYW5kIGludGVnZXIgYm91bmRzIGNoZWNraW5nLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIHN0cnVjdCBwYWRkaW5nIG1vZGlmaWNhdGlvbnMsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbnkgZ2VuZXJhbCBib3VuZHMgb3IgbG9naWMgaXNzdWVzIGFyZSBzdWZmaWNpZW50bHkgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MDMuNDU0ODAxNDkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTkzNzEwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9IQU5EU0hBS0VcIixcbiAgICBcIlNVTlJQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRzaGFrZV9yZXFfYWxsb2NcIixcbiAgICBcImhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdFwiLFxuICAgIFwiaGFuZHNoYWtlX25sX2RvbmVfZG9pdFwiLFxuICAgIFwidGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjAzLjQ1NDgwNjIyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQzNTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAwNzo0MzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxcXG5pbmRleCBmZmVjMTJiNDY3NTk3Li4wNDk4YWRhMmRkOTdhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbFxcbkBAIC0yMiw3ICsyMiw4IEBAIGRlZmluaXRpb25zOlxcbiAgICAgdHlwZTogZW51bVxcbiAgICAgbmFtZTogaGFuZGxlci1jbGFzc1xcbiAgICAgdmFsdWUtc3RhcnQ6IDBcXG4tICAgIGVudHJpZXM6IFtub25lLCB0bHNoZCwgbWF4XVxcbisgICAgZW50cmllczogW25vbmUsIHRsc2hkXVxcbisgICAgcmVuZGVyLW1heDogdHJ1ZVxcbiAgIC1cXG4gICAgIHR5cGU6IGVudW1cXG4gICAgIG5hbWU6IG1zZy10eXBlXFxuQEAgLTY3LDcgKzY4LDcgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgZW51bTogYXV0aFxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogcGVlci1pZGVudGl0eVxcbi0gICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIHR5cGU6IHMzMlxcbiAgICAgICAgIG11bHRpLWF0dHI6IHRydWVcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXFxuQEAgLTc5LDcgKzgwLDcgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgdHlwZTogc3RyaW5nXFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBrZXlyaW5nXFxuLSAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgdHlwZTogczMyXFxuICAgLVxcbiAgICAgbmFtZTogZG9uZVxcbiAgICAgYXR0cmlidXRlczpcXG5AQCAtOTMsNyArOTQsNyBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiBzMzJcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHJlbW90ZS1hdXRoXFxuLSAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgdHlwZTogczMyXFxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxcbiBcXG4gb3BlcmF0aW9uczpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oXFxuaW5kZXggZDdlNDBmNTk0ODg4Ni4uZjkwN2FhMDgyNTIwOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcXG5AQCAtMTMsNyArMTMsMTAgQEBcXG4gZW51bSBoYW5kc2hha2VfaGFuZGxlcl9jbGFzcyB7XFxuIFxcdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXFxuIFxcdEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi1cXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXFxuK1xcbitcXHQvKiBwcml2YXRlOiAqL1xcbitcXHRfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCxcXG4rXFx0SEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYID0gKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC0gMSlcXG4gfTtcXG4gXFxuIGVudW0gaGFuZHNoYWtlX21zZ190eXBlIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9nZW5sLmMgYi9uZXQvaGFuZHNoYWtlL2dlbmwuY1xcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XFxuLS0tIGEvbmV0L2hhbmRzaGFrZS9nZW5sLmNcXG4rKysgYi9uZXQvaGFuZHNoYWtlL2dlbmwuY1xcbkBAIC0xNCwxNCArMTQsMTQgQEBcXG4gXFxuIC8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi9cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XFxuLVxcdFtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAyKSxcXG4rXFx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxcbiB9O1xcbiBcXG4gLyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIICsgMV0gPSB7XFxuIFxcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxcbiBcXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxuLVxcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxcbitcXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG4gfTtcXG4gXFxuIC8qIE9wcyB0YWJsZSBmb3IgaGFuZHNoYWtlICovXFxuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xcbmluZGV4IDNkZDUwNzQ3MGQ1ZmUuLjRiOTlhY2Q5ZjljN2UgMTAwNjQ0XFxuLS0tIGEvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jXFxuKysrIGIvbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jXFxuQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xcbi1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxcbitcXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jIGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcXG5pbmRleCBjZDMwZDU0ZDA1MDFkLi5mZjczOWVlODFjYjgyIDEwMDY0NFxcbi0tLSBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jXFxuKysrIGIvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0aWYgKHByb3RvLVxcdTAwM2VocF9oYW5kbGVyX2NsYXNzIFxcdTAwM2M9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRpZiAocHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXFx1MDAzZT0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxcbitcXHRpZiAocHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXFx1MDAzZSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRpZiAoIXByb3RvLVxcdTAwM2VocF9hY2NlcHQgfHwgIXByb3RvLVxcdTAwM2VocF9kb25lKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MDUuMTQ2MjIwOTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MzgyMjg3MDY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSEFORFNIQUtFXCIsXG4gICAgXCJTVU5SUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kc2hha2VfcmVxX2FsbG9jXCIsXG4gICAgXCJoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRcIixcbiAgICBcImhhbmRzaGFrZV9ubF9kb25lX2RvaXRcIixcbiAgICBcInRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIE5ldGxpbmsgYXR0cmlidXRlIHR5cGVzIGFuZCB2YWxpZGF0aW9uIHBvbGljaWVzIGZvciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBzZXJ2aWNlIChhY2NlcHQgaGFuZGxlciBjbGFzcyBhbmQgcmVtb3RlIGF1dGgga2V5IElEcykgYW5kIGZpeGVzIHRoZSBib3VuZGFyeSBjaGVjayBpbiBoYW5kc2hha2VfcmVxX2FsbG9jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcgYW5kIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjQzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG5pbmRleCBmZmVjMTJiNDY3NTk3Li4wNDk4YWRhMmRkOTdhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxcbkBAIC0yMiw3ICsyMiw4IEBAIGRlZmluaXRpb25zOlxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IGhhbmRsZXItY2xhc3NcbiAgICAgdmFsdWUtc3RhcnQ6IDBcbi0gICAgZW50cmllczogW25vbmUsIHRsc2hkLCBtYXhdXG4rICAgIGVudHJpZXM6IFtub25lLCB0bHNoZF1cbisgICAgcmVuZGVyLW1heDogdHJ1ZVxuICAgLVxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IG1zZy10eXBlXG5AQCAtNjcsNyArNjgsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIGVudW06IGF1dGhcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwZWVyLWlkZW50aXR5XG4tICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXG5AQCAtNzksNyArODAsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHN0cmluZ1xuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGtleXJpbmdcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAtXG4gICAgIG5hbWU6IGRvbmVcbiAgICAgYXR0cmlidXRlczpcbkBAIC05Myw3ICs5NCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcmVtb3RlLWF1dGhcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAgICAgICBtdWx0aS1hdHRyOiB0cnVlXG4gXG4gb3BlcmF0aW9uczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbmluZGV4IGQ3ZTQwZjU5NDg4ODYuLmY5MDdhYTA4MjUyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaFxuQEAgLTEzLDcgKzEzLDEwIEBAXG4gZW51bSBoYW5kc2hha2VfaGFuZGxlcl9jbGFzcyB7XG4gXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLFxuIFx0SEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXG4rXHQvKiBwcml2YXRlOiAqL1xuK1x0X19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggPSAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKVxuIH07XG4gXG4gZW51bSBoYW5kc2hha2VfbXNnX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvZ2VubC5jIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2dlbmwuY1xuKysrIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbkBAIC0xNCwxNCArMTQsMTQgQEBcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XG4tXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksXG4rXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG4gfTtcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xuIFx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXG4gXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4tXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbitcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuIH07XG4gXG4gLyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cbmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbmluZGV4IDNkZDUwNzQ3MGQ1ZmUuLjRiOTlhY2Q5ZjljN2UgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbisrKyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xuLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuK1x0LmhwX2hhbmRsZXJfY2xhc3NcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuaW5kZXggY2QzMGQ1NGQwNTAxZC4uZmY3MzllZTgxY2I4MiAxMDA2NDRcbi0tLSBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jXG4rKysgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90byxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2M9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHByb3RvLVx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXHUwMDNlPSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpXG4rXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2UgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICghcHJvdG8tXHUwMDNlaHBfYWNjZXB0IHx8ICFwcm90by1cdTAwM2VocF9kb25lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjA1LjE0NjIyMzU5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0Nzc5MDI3NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgVGhpcyBQYXRjaCBTZXJpZXMgZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGJlZW4gZ2l2ZW4gYSBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIGFuZCB0aGUgcXVlc3Rpb24gaXMsIFwiSXMgdGhpcyBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgYXQgc3l6a2FsbGVyP1wiIFJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRvIGEgcXVpY2sgcmlzayBhc3Nlc3NtZW50LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGtlcm5lbCBRQSB0YXNrLCBub3RoaW5nIHRvbyBleG90aWMgaGVyZS4gSSdtIGNhbGxpbmcgaXQgXCJiZW5pZ24gZnVsZmlsbG1lbnQsXCIgbWVhbmluZyB0aGVyZSdzIG5vdGhpbmcgaW5oZXJlbnRseSBkYW5nZXJvdXMgYWJvdXQgKmV2YWx1YXRpbmcqIGl0LiBJdCdzIHNhZmUgZ3JvdW5kLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0IGNvZGUgaXQgdG91Y2hlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGtleSBmaWxlczogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLCBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCBgbmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jYCwgYW5kIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIEludGVyZXN0aW5nLiBUaGUgYGhhbmRzaGFrZWAgc3ViZGlyZWN0b3J5IGlzIHRoZSBrZXkgaGVyZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgcmVwb3NpdG9yeSBub3cgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYG5ldC9oYW5kc2hha2UvYCBzdWJzeXN0ZW0sIGhvdyBpdCdzIGNvbmZpZ3VyZWQsIGFuZCB3aGVyZSBpdCdzIGNhbGxlZC4gVGhhdCdsbCBiZSBteSBuZXh0IHN0ZXA6IGZpZ3VyaW5nIG91dCB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IEZvY3VzU3ltYm9scywgRW5hYmxlQ29uZmlncywgYW5kIHRvIGRldGVybWluZSB0aGUgUmVhc29uaW5nIGZvciBpZiB0aGlzIHdvdWxkIGJlIGEgZnJ1aXRmdWwgZW5kZWF2b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzoxOS45MjUyNTM4MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwMzUyOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9IQU5EU0hBS0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZz05PUNPTkZJR19TVU5SUEM9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjEwOkNPTkZJR19ORVRfSEFORFNIQUtFPXlcXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcXG4tLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU9MTE9aGFuZHNoYWtlLXkgOj0gYWxlcnQubyBnZW5sLm8gbmV0bGluay5vIHJlcXVlc3QubyB0bHNoZC5vIHRyYWNlLm9cXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVCkgKz0gaGFuZHNoYWtlLXRlc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzoyMC4yNTU2MTI3MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODEwNzc3NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfSEFORFNIQUtFIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgTkVUX0hBTkRTSEFLRWAgaXMgZGVmaW5lZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaWdnaW5nIGluIHRoZSBgbmV0L2hhbmRzaGFrZS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmFtZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGNoZWNrIGBLY29uZmlnYCBpbiB0aGF0IGRpcmVjdG9yeSBmaXJzdC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gT2YgY291cnNlLCBpdCdzIGFsc28gcG9zc2libGUgaXQgaXMgZGVmaW5lZCBlbHNld2hlcmUsIGJ1dCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGZpcnN0IHRhcmdldCBmb3IgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGV4YWN0IGxvY2F0aW9uIGJlZm9yZSBJIGNhbiBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MjIuMDY2MzkyODY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTYxNDc4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9IQU5EU0hBS0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9OTI9c291cmNlIFxcXCJuZXQveGRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctOTMtXFxubmV0L0tjb25maWc6OTQ6Y29uZmlnIE5FVF9IQU5EU0hBS0VcXG5uZXQvS2NvbmZpZy05NS1cXHRib29sXFxuLS1cXG5uZXQvS2NvbmZpZy05OC1cXG5uZXQvS2NvbmZpZzo5OTpjb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxubmV0L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjI0LjM2MjU0NzMyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzMwNjQ5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBTcGFjZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBzeXN0ZW0sIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvS2NvbmZpZ2AuIEknbSBnb2luZyB0byBmb2N1cyBpbiBvbiBsaW5lcyA5MCB0aHJvdWdoIDExMCBvciBzbywgYXMgYSBzdGFydGluZyBwb2ludC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIGFyZWEgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIG1ham9yIG9wdGlvbnMgYmVpbmcgZGVmaW5lZCBpbiB0aGlzIHNlY3Rpb24uIEtub3dpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgS2NvbmZpZyBzeXN0ZW0sIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBmZWF0dXJlIHN3aXRjaGVzLCBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucy4uLnRoZSB1c3VhbCBLY29uZmlnIGNvbnN0cnVjdHMuIEknbSBsb29raW5nIGZvciB0aGUga2V5IG5ldHdvcmsgY29uZmlndXJhdGlvbiBlbGVtZW50cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGZpbGUuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRoaW5ncyBhcmUgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzoyNi4yMzU2MTYwMTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0c291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxuICA4NjpcXHRzb3VyY2UgXFxcIm5ldC91bml4L0tjb25maWdcXFwiXFxuICA4NzpcXHRzb3VyY2UgXFxcIm5ldC90bHMvS2NvbmZpZ1xcXCJcXG4gIDg4OlxcdHNvdXJjZSBcXFwibmV0L3hmcm0vS2NvbmZpZ1xcXCJcXG4gIDg5OlxcdHNvdXJjZSBcXFwibmV0L2l1Y3YvS2NvbmZpZ1xcXCJcXG4gIDkwOlxcdHNvdXJjZSBcXFwibmV0L3NtYy9LY29uZmlnXFxcIlxcbiAgOTE6XFx0c291cmNlIFxcXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1xcXCJcXG4gIDkyOlxcdHNvdXJjZSBcXFwibmV0L3hkcC9LY29uZmlnXFxcIlxcbiAgOTM6XFx0XFxuICA5NDpcXHRjb25maWcgTkVUX0hBTkRTSEFLRVxcbiAgOTU6XFx0XFx0Ym9vbFxcbiAgOTY6XFx0XFx0ZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQXFxuICA5NzpcXHRcXHRkZWZhdWx0IHlcXG4gIDk4OlxcdFxcbiAgOTk6XFx0Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxcbiAxMDA6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciB0aGUgaGFuZHNoYWtlIHVwY2FsbCBtZWNoYW5pc21cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gMTAxOlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuIDEwMjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuIDEwMzpcXHRcXHRoZWxwXFxuIDEwNDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1Z1xcbiAxMDc6XFx0XFx0ICBsb2cgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvclxcbiAxMDg6XFx0XFx0ICBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uXFxuIDEwOTpcXHRcXHQgIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHJlZmVyXFxuIDExMjpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MjYuMjM1NzQyNzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyMTA2MTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVF9IQU5EU0hBS0VgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYE5FVF9IQU5EU0hBS0VgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IG1pZ2h0IGJlICpzZWxlY3RpbmcqIGl0LiBUaGUgaW5pdGlhbCBjbHVlcyBpbmRpY2F0ZSB0aGF0IGl0J3MgKmBkZXBlbmRzIG9uIFNVTlJQQyB8fCBOVk1FX1RBUkdFVF9UQ1AgfHwgTlZNRV9UQ1BgKiBhbmQgdGhlIGRlZmF1bHQgaXMgc2V0IHRvICd5Jy4gVGhhdCB0ZWxscyBtZSBpdCdzIGxpa2VseSByZWxhdGVkIHRvIGVpdGhlciBTdW4gUmVtb3RlIFByb2NlZHVyZSBDYWxsLCBOVk1lIG92ZXIgVENQIFRhcmdldCwgb3IganVzdCBOVk1lIG92ZXIgVENQIGluIGdlbmVyYWwuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIHByb3RvY29scyB3b3VsZCBiZW5lZml0IGZyb20gYSBoYW5kc2hha2UuXG5cbk5vdywgSSB3YW50IHRvIGJyb2FkZW4gdGhlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBrbm93ICp3aGF0IGVsc2UqIG1pZ2h0IGJlIHNlbGVjdGluZyBgTkVUX0hBTkRTSEFLRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgaXRzIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGVyZSBvdGhlciBmZWF0dXJlcywgZHJpdmVycywgb3IgbW9kdWxlcyB0aGF0IGltcGxpY2l0bHkgcmVseSBvbiBpdCwgZXZlbiBpZiBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGluIHRoZWlyIGRlcGVuZGVuY2llcz8gVGhpcyBpcyB3aGVyZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZWFyY2ggaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgcGljdHVyZSBvZiB0aGUgd2hvbGUgZGVwZW5kZW5jeSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzozMC44NTY4MDYzNjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDU1MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfSEFORFNIQUtFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9OTI9c291cmNlIFxcXCJuZXQveGRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctOTMtXFxubmV0L0tjb25maWc6OTQ6Y29uZmlnIE5FVF9IQU5EU0hBS0VcXG5uZXQvS2NvbmZpZy05NS1cXHRib29sXFxuLS1cXG5uZXQvS2NvbmZpZy05OC1cXG5uZXQvS2NvbmZpZzo5OTpjb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxubmV0L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIGhhbmRzaGFrZSB1cGNhbGwgbWVjaGFuaXNtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvTWFrZWZpbGU9NzU9b2JqLSQoQ09ORklHX01DVFApXFx0XFx0Kz0gbWN0cC9cXG5uZXQvTWFrZWZpbGU6NzY6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0UpXFx0Kz0gaGFuZHNoYWtlL1xcbm5ldC9NYWtlZmlsZS03Ny1vYmotJChDT05GSUdfTkVUX1NIQVBFUilcXHQrPSBzaGFwZXIvXFxuLS1cXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZz05PUNPTkZJR19TVU5SUEM9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjEwOkNPTkZJR19ORVRfSEFORFNIQUtFPXlcXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxMTpDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUPXlcXG4tLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU9MTE9aGFuZHNoYWtlLXkgOj0gYWxlcnQubyBnZW5sLm8gbmV0bGluay5vIHJlcXVlc3QubyB0bHNoZC5vIHRyYWNlLm9cXG5uZXQvaGFuZHNoYWtlL01ha2VmaWxlLTEyLVxcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVCkgKz0gaGFuZHNoYWtlLXRlc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzozMS4wMDEzNjcxMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MDE0ODY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBIYW5kc2hha2UgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgaGFuZHNoYWtlIHByb2Nlc3Mgd29ya3MuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBnZW5sLmNgLCBgcmVxdWVzdC5jYCwgYW5kIGBuZXRsaW5rLmNgLCBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvaGFuZHNoYWtlL2AgZGlyZWN0b3J5LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3BvdC4gRmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IGBnZW5sLmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IuIEknbSBzdXJlIEknbGwgZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnIHBpY3R1cmUgb25jZSBJIGRpc3NlY3QgdGhhdCBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MzIuOTQxNTE4NTAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9oYW5kc2hha2UvZ2VubC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICgoR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSkgT1IgQlNELTMtQ2xhdXNlKVxcbiAgIDI6XFx0LyogRG8gbm90IGVkaXQgZGlyZWN0bHksIGF1dG8tZ2VuZXJhdGVkIGZyb206ICovXFxuICAgMzpcXHQvKlxcdERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbCAqL1xcbiAgIDQ6XFx0LyogWU5MLUdFTiBrZXJuZWwgc291cmNlICovXFxuICAgNTpcXHQvKiBUbyByZWdlbmVyYXRlIHJ1bjogdG9vbHMvbmV0L3lubC95bmwtcmVnZW4uc2ggKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXFwiZ2VubC5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9oYW5kc2hha2UuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gIDE0OlxcdFxcbiAgMTU6XFx0LyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xcbiAgMTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XFxuICAxNzpcXHRcXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXFxuICAxODpcXHR9O1xcbiAgMTk6XFx0XFxuICAyMDpcXHQvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xcbiAgMjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIICsgMV0gPSB7XFxuICAyMjpcXHRcXHRbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTUFYX0VSUk5PKSxcXG4gIDIzOlxcdFxcdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG4gIDI0OlxcdFxcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbiAgMjU6XFx0fTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0LyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cXG4gIDI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdID0ge1xcbiAgMjk6XFx0XFx0e1xcbiAgMzA6XFx0XFx0XFx0LmNtZFxcdFxcdD0gSEFORFNIQUtFX0NNRF9BQ0NFUFQsXFxuICAzMTpcXHRcXHRcXHQuZG9pdFxcdFxcdD0gaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0LFxcbiAgMzI6XFx0XFx0XFx0LnBvbGljeVxcdFxcdD0gaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3ksXFxuICAzMzpcXHRcXHRcXHQubWF4YXR0clxcdD0gSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MsXFxuICAzNDpcXHRcXHRcXHQuZmxhZ3NcXHRcXHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcXG4gIDM1OlxcdFxcdH0sXFxuICAzNjpcXHRcXHR7XFxuICAzNzpcXHRcXHRcXHQuY21kXFx0XFx0PSBIQU5EU0hBS0VfQ01EX0RPTkUsXFxuICAzODpcXHRcXHRcXHQuZG9pdFxcdFxcdD0gaGFuZHNoYWtlX25sX2RvbmVfZG9pdCxcXG4gIDM5OlxcdFxcdFxcdC5wb2xpY3lcXHRcXHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcXG4gIDQwOlxcdFxcdFxcdC5tYXhhdHRyXFx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxcbiAgNDE6XFx0XFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXFxuICA0MjpcXHRcXHR9LFxcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBoYW5kc2hha2VfbmxfbWNncnBzW10gPSB7XFxuICA0NjpcXHRcXHRbSEFORFNIQUtFX05MR1JQX05PTkVdID0geyBcXFwibm9uZVxcXCIsIH0sXFxuICA0NzpcXHRcXHRbSEFORFNIQUtFX05MR1JQX1RMU0hEXSA9IHsgXFxcInRsc2hkXFxcIiwgfSxcXG4gIDQ4OlxcdH07XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0cnVjdCBnZW5sX2ZhbWlseSBoYW5kc2hha2VfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MzIuOTQxNjA5NTIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzg3Mjg0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGhhbmRzaGFrZV9yZXFfYWxsb2NgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGhhbmRzaGFrZV9yZXFfYWxsb2NgLiBMZXQgbWUgY2hlY2sgd2hlcmUgaXQncyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjb250ZXh0IGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgbGFyZ2VyIHN5c3RlbSBhcmNoaXRlY3R1cmUgaXQgZml0cyBpbnRvLlxuXG5BbHNvLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBBIHF1aWNrIGdsYW5jZSBzdWdnZXN0cyB0aGF0IGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AgYW5kIGBuZXRsaW5rLmNgIGFyZSByZWxldmFudCwgc28gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgbmV0d29ya2luZyBoYW5kc2hha2UgYW5kIHdoYXQgYG5ldGxpbmsuY2AgaXMgZG9pbmcuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiB0aGlzIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gZnVuY3Rpb24uIFVsdGltYXRlbHksIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgd2hlbiB0aGVzZSByZXF1ZXN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCB3aGF0IHRoZXkgcmVwcmVzZW50IGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6MzUuMDgwMzQwMTQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg3ODU2OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRzaGFrZV9yZXFfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI4PXN0YXRpYyB2b2lkIHRlc3RfZG9uZV9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsIGludCBzdGF0dXMsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzItXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjMzOnN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNC1cXHRjb25zdCBjaGFyXFx0XFx0XFx0KmRlc2M7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzktXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQwOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMiA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDEtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDMtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fMyA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDUtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0ODpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ5LVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTI6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b181ID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01My1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTYtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjU3OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNiA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTgtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTYzLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo2NDpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QgPSB7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTY1LVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz03MD1zdGF0aWMgY29uc3RcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NzE6c3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtc1tdID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy03Mi1cXHR7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjczOlxcdFxcdC5kZXNjXFx0XFx0XFx0PSBcXFwiaGFuZHNoYWtlX3JlcV9hbGxvYyBOVUxMIHByb3RvXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNzQtXFx0XFx0LnByb3RvXFx0XFx0XFx0PSBOVUxMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTc4LVxcdHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Nzk6XFx0XFx0LmRlc2NcXHRcXHRcXHQ9IFxcXCJoYW5kc2hha2VfcmVxX2FsbG9jIENMQVNTX05PTkVcXFwiLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo4MDpcXHRcXHQucHJvdG9cXHRcXHRcXHQ9IFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzIsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTgxLVxcdFxcdC5nZnBcXHRcXHRcXHQ9IEdGUF9LRVJORUwsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtODQtXFx0e1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo4NTpcXHRcXHQuZGVzY1xcdFxcdFxcdD0gXFxcImhhbmRzaGFrZV9yZXFfYWxsb2MgQ0xBU1NfTUFYXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6ODY6XFx0XFx0LnByb3RvXFx0XFx0XFx0PSBcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy04Ny1cXHRcXHQuZ2ZwXFx0XFx0XFx0PSBHRlBfS0VSTkVMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTkwLVxcdHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6OTE6XFx0XFx0LmRlc2NcXHRcXHRcXHQ9IFxcXCJoYW5kc2hha2VfcmVxX2FsbG9jIG5vIGNhbGxiYWNrc1xcXCIsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjkyOlxcdFxcdC5wcm90b1xcdFxcdFxcdD0gXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNCxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtOTMtXFx0XFx0LmdmcFxcdFxcdFxcdD0gR0ZQX0tFUk5FTCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy05Ni1cXHR7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjk3OlxcdFxcdC5kZXNjXFx0XFx0XFx0PSBcXFwiaGFuZHNoYWtlX3JlcV9hbGxvYyBubyBkb25lIGNhbGxiYWNrXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6OTg6XFx0XFx0LnByb3RvXFx0XFx0XFx0PSBcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b181LFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy05OS1cXHRcXHQuZ2ZwXFx0XFx0XFx0PSBHRlBfS0VSTkVMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEwMi1cXHR7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEwMzpcXHRcXHQuZGVzY1xcdFxcdFxcdD0gXFxcImhhbmRzaGFrZV9yZXFfYWxsb2MgZXhjZXNzaXZlIHByaXZzaXplXFxcIixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTA0OlxcdFxcdC5wcm90b1xcdFxcdFxcdD0gXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNixcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTA1LVxcdFxcdC5nZnBcXHRcXHRcXHQ9IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTA4LVxcdHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTA5OlxcdFxcdC5kZXNjXFx0XFx0XFx0PSBcXFwiaGFuZHNoYWtlX3JlcV9hbGxvYyBhbGwgZ29vZFxcXCIsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjExMDpcXHRcXHQucHJvdG9cXHRcXHRcXHQ9IFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExMS1cXHRcXHQuZ2ZwXFx0XFx0XFx0PSBHRlBfS0VSTkVMLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTExNj1zdGF0aWMgdm9pZFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMTc6aGFuZHNoYWtlX3JlcV9hbGxvY19nZXRfZGVzYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtICpwYXJhbSxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTE4LVxcdFxcdFxcdCAgICAgY2hhciAqZGVzYylcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjItXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEyMzovKiBDcmVhdGVzIHRoZSBmdW5jdGlvbiBoYW5kc2hha2VfcmVxX2FsbG9jX2dlbl9wYXJhbXMgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI0OktVTklUX0FSUkFZX1BBUkFNKGhhbmRzaGFrZV9yZXFfYWxsb2MsIGhhbmRzaGFrZV9yZXFfYWxsb2NfcGFyYW1zLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjU6XFx0XFx0ICBoYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI2LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxMjc6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9hbGxvY19jYXNlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTI4LXtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTI5OlxcdGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0gKnBhcmFtID0gdGVzdC1cXHUwMDNlcGFyYW1fdmFsdWU7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEzMC1cXHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVzdWx0O1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTEzNC1cXHQvKiBBY3QgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTM1OlxcdHJlc3VsdCA9IGhhbmRzaGFrZV9yZXFfYWxsb2MocGFyYW0tXFx1MDAzZXByb3RvLCBwYXJhbS1cXHUwMDNlZ2ZwKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTM2LVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTE2NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTcwLVxcdC8qIEFycmFuZ2UgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTcxOlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE3Mi1cXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0xODM9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE4OS1cXHQvKiBBcnJhbmdlICovXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE5MDpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xOTEtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9MjA4PXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfc3VibWl0X3Rlc3Q0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yMTYtXFx0LyogQXJyYW5nZSAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyMTc6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjE4LVxcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXEpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTI0NT1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjU1LVxcdC8qIEFycmFuZ2UgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MjU2OlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI1Ny1cXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0yODY9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDYoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI5NC1cXHQvKiBBcnJhbmdlICovXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI5NTpcXHRyZXExID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjk2LVxcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXExKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Mjk3OlxcdHJlcTIgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yOTgtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcTIpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTMyND1zdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzMzLVxcdC8qIEFycmFuZ2UgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MzM0OlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNmhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCwgR0ZQX0tFUk5FTCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTMzNS1cXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcmVxKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0zNjI9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9jYW5jZWxfdGVzdDIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTM3My1cXHQvKiBBcnJhbmdlICovXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM3NDpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2dvb2QsIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNzUtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NDEyPXN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MjMtXFx0LyogQXJyYW5nZSAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0MjQ6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2aGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19nb29kLCBHRlBfS0VSTkVMKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDI1LVxcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByZXEpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTQ2OD1zdGF0aWMgdm9pZCB0ZXN0X2Rlc3Ryb3lfZnVuYyhzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3Mi1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDczOnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZGVzdHJveSA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDc0LVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz00ODA9c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9kZXN0cm95X3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OTAtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ5MTpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvX2Rlc3Ryb3ksIEdGUF9LRVJORUwpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00OTItXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM9NTE5PXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBoYW5kc2hha2VfYXBpX3Rlc3RfY2FzZXNbXSA9IHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MjEtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJyZXFfYWxsb2MgQVBJIGZ1enppbmdcXFwiLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MjI6XFx0XFx0LnJ1bl9jYXNlXFx0XFx0PSBoYW5kc2hha2VfcmVxX2FsbG9jX2Nhc2UsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjUyMzpcXHRcXHQuZ2VuZXJhdGVfcGFyYW1zXFx0PSBoYW5kc2hha2VfcmVxX2FsbG9jX2dlbl9wYXJhbXMsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUyNC1cXHR9LFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaD03OT1zdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaGFuZHNoYWtlX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC04MS0vKiByZXF1ZXN0LmMgKi9cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oOjgyOnN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtODMtXFx0XFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncyk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYz04Nj1zdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTAyLS8qKlxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEwMzogKiBoYW5kc2hha2VfcmVxX2FsbG9jIC0gQWxsb2NhdGUgYSBoYW5kc2hha2UgcmVxdWVzdFxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTEwNC0gKiBAcHJvdG86IHNlY3VyaXR5IHByb3RvY29sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMDgtICovXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTA5OnN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTExMC1cXHRcXHRcXHRcXHRcXHQgIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTMwLX1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoxMzE6RVhQT1JUX1NZTUJPTChoYW5kc2hha2VfcmVxX2FsbG9jKTtcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMzItXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjg2PWludCB0bHNfY2xpZW50X2hlbGxvX2Fub24oY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjkwLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyOTE6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yOTItXFx0aWYgKCFyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzEyPWludCB0bHNfY2xpZW50X2hlbGxvX3g1MDkoY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzE2LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozMTc6XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9hbGxvYyhcXHUwMDI2dGxzX2hhbmRzaGFrZV9wcm90bywgZmxhZ3MpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTgtXFx0aWYgKCFyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzQxPWludCB0bHNfY2xpZW50X2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTAtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM1MTpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM1Mi1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zNzU9aW50IHRsc19zZXJ2ZXJfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzktXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM4MDpcXHRyZXEgPSBoYW5kc2hha2VfcmVxX2FsbG9jKFxcdTAwMjZ0bHNfaGFuZHNoYWtlX3Byb3RvLCBmbGFncyk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM4MS1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz00MDM9aW50IHRsc19zZXJ2ZXJfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQwNy1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NDA4OlxcdHJlcSA9IGhhbmRzaGFrZV9yZXFfYWxsb2MoXFx1MDAyNnRsc19oYW5kc2hha2VfcHJvdG8sIGZsYWdzKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDA5LVxcdGlmICghcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0MzozOC4xNjgyMDIyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODcyODk1ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgSGFuZHNoYWtlIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCwgYnV0IEkgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gVG8gZ2V0IGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYW5kc2hha2UgcHJvY2VzcywgSSByZWFsbHkgbmVlZCB0byBsb29rIGF0IHRoZSBicm9hZGVyIGxhbmRzY2FwZSBvZiBoYW5kc2hha2UtcmVsYXRlZCBmaWxlcy4gVGhpcyBtZWFucyB2ZW50dXJpbmcgYmV5b25kIGBuZXRsaW5rLmNgIGFuZCBleHBsb3JpbmcgdGhlIG90aGVyIGZpbGVzIGluIHRoZSBgL25ldC9oYW5kc2hha2UvYCBkaXJlY3RvcnksIGFuZCBwb3RlbnRpYWxseSBldmVuIHZlbnR1cmluZyBmdXJ0aGVyIGFmaWVsZCBhcyB3ZWxsLiBUaGVyZSBtaWdodCBiZSBzb21lIGtleSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW52aXNpYmxlIGlmIEknbSBvbmx5IGZvY3VzaW5nIG9uIHRoaXMgb25lIGZpbGUuIFRoZSBnb2FsIGhlcmUgaXMgYSBtb3JlIGhvbGlzdGljIHZpZXcgb2YgdGhlIG92ZXJhbGwgaGFuZHNoYWtlIHByb2NlZHVyZSBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6NDAuMDQxMTAxODYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaGFuZHNoYWtlL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBHZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2VcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBBdXRob3I6IENodWNrIExldmVyIFxcdTAwM2NjaHVjay5sZXZlckBvcmFjbGUuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIENvcHlyaWdodCAoYykgMjAyMywgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG4gIDIwOlxcdFxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFxcdTAwM2VcXG4gIDIyOlxcdFxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvaGFuZHNoYWtlLmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXFwiaGFuZHNoYWtlLmhcXFwiXFxuICAyNTpcXHQjaW5jbHVkZSBcXFwiZ2VubC5oXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHQjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2hhbmRzaGFrZS5oXFx1MDAzZVxcbiAgMjg6XFx0XFxuICAyOTpcXHQvKipcXG4gIDMwOlxcdCAqIGhhbmRzaGFrZV9nZW5sX25vdGlmeSAtIE5vdGlmeSBoYW5kbGVycyB0aGF0IGEgcmVxdWVzdCBpcyB3YWl0aW5nXFxuICAzMTpcXHQgKiBAbmV0OiB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2VcXG4gIDMyOlxcdCAqIEBwcm90bzogaGFuZHNoYWtlIHByb3RvY29sXFxuICAzMzpcXHQgKiBAZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRyb2wgZmxhZ3NcXG4gIDM0OlxcdCAqXFxuICAzNTpcXHQgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vIGlmIG5vdGlmaWNhdGlvbiBmYWlsZWQuXFxuICAzNjpcXHQgKi9cXG4gIDM3OlxcdGludCBoYW5kc2hha2VfZ2VubF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90byxcXG4gIDM4OlxcdFxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MpXFxuICAzOTpcXHR7XFxuICA0MDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbiAgNDE6XFx0XFx0dm9pZCAqaGRyO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQvKiBEaXNhYmxlIG5vdGlmaWNhdGlvbnMgZHVyaW5nIHVuaXQgdGVzdGluZyAqL1xcbiAgNDQ6XFx0XFx0aWYgKCF0ZXN0X2JpdChIQU5EU0hBS0VfRl9QUk9UT19OT1RJRlksIFxcdTAwMjZwcm90by1cXHUwMDNlaHBfZmxhZ3MpKVxcbiAgNDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA0NjpcXHRcXG4gIDQ3OlxcdFxcdGlmICghZ2VubF9oYXNfbGlzdGVuZXJzKFxcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCBuZXQsXFxuICA0ODpcXHRcXHRcXHRcXHRcXHRwcm90by1cXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykpXFxuICA0OTpcXHRcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRtc2cgPSBnZW5sbXNnX25ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgZmxhZ3MpO1xcbiAgNTI6XFx0XFx0aWYgKCFtc2cpXFxuICA1MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCAwLCAwLCBcXHUwMDI2aGFuZHNoYWtlX25sX2ZhbWlseSwgMCxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgSEFORFNIQUtFX0NNRF9SRUFEWSk7XFxuICA1NzpcXHRcXHRpZiAoIWhkcilcXG4gIDU4OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxcbiAgNjE6XFx0XFx0XFx0XFx0cHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MpIFxcdTAwM2MgMCkge1xcbiAgNjI6XFx0XFx0XFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xcbiAgNjM6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gIDY0OlxcdFxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbiAgNjc6XFx0XFx0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFxcdTAwMjZoYW5kc2hha2VfbmxfZmFtaWx5LCBuZXQsIG1zZyxcXG4gIDY4OlxcdFxcdFxcdFxcdFxcdCAgICAgICAwLCBwcm90by1cXHUwMDNlaHBfaGFuZGxlcl9jbGFzcywgZmxhZ3MpO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRvdXRfZnJlZTpcXG4gIDcxOlxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4gIDcyOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdC8qKlxcbiAgNzY6XFx0ICogaGFuZHNoYWtlX2dlbmxfcHV0IC0gQ3JlYXRlIGEgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyXFxuICA3NzpcXHQgKiBAbXNnOiBidWZmZXIgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBoZWFkZXJcXG4gIDc4OlxcdCAqIEBpbmZvOiBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBjb250ZXh0XFxuICA3OTpcXHQgKlxcbiAgODA6XFx0ICogUmV0dXJucyBhIHJlYWR5LXRvLXVzZSBoZWFkZXIsIG9yIE5VTEwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjQwLjA0MTI0NDgyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjU5MTY4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYW5kc2hha2UgcHJvY2VzcywgcGFydGljdWxhcmx5IHRoZSByb2xlIGBuZXRsaW5rLmNgIHBsYXlzIHdpdGhpbiBgbmV0L2hhbmRzaGFrZWAuIEknbSBnb2luZyB0byBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlc3Qgb2YgdGhhdCBmaWxlIOKAkyBJIGFzc3VtZSBpdCBjb250YWlucyBtb3JlIGRldGFpbHMgdGhhbiBqdXN0IHdoYXQgSSd2ZSBzZWVuIHNvIGZhci4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZmlsZXMgaW50ZXJhY3Qgd2l0aCBgbmV0bGluay5jYCBhbmQgaG93LiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgcmVhZGluZyB0aGUgY29kZTsgaXQncyBhYm91dCB0cmFjaW5nIHRoZSBjb250cm9sIGZsb3csIHVuZGVyc3RhbmRpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZ2V0dGluZyBhIGhvbGlzdGljIHBpY3R1cmUgb2YgdGhlIGVudGlyZSBuZXR3b3JraW5nIGhhbmRzaGFrZSBtZWNoYW5pc20uIEknbSB0aGlua2luZyBvdGhlciBoYW5kc2hha2UgcmVsYXRlZCBzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzZWFyY2guIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjQ2LjcwMDQxNjQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaGFuZHNoYWtlL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHQgKi9cXG4gIDgyOlxcdHN0cnVjdCBubG1zZ2hkciAqaGFuZHNoYWtlX2dlbmxfcHV0KHN0cnVjdCBza19idWZmICptc2csXFxuICA4MzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gIDg0OlxcdHtcXG4gIDg1OlxcdFxcdHJldHVybiBnZW5sbXNnX3B1dChtc2csIGluZm8tXFx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXFx1MDAzZXNuZF9zZXEsXFxuICA4NjpcXHRcXHRcXHRcXHQgICBcXHUwMDI2aGFuZHNoYWtlX25sX2ZhbWlseSwgMCwgaW5mby1cXHUwMDNlZ2VubGhkci1cXHUwMDNlY21kKTtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdEVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX2dlbmxfcHV0KTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiAgOTE6XFx0e1xcbiAgOTI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuICA5MzpcXHRcXHRzdHJ1Y3QgaGFuZHNoYWtlX25ldCAqaG4gPSBoYW5kc2hha2VfcGVybmV0KG5ldCk7XFxuICA5NDpcXHRcXHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxID0gTlVMTDtcXG4gIDk1OlxcdFxcdGludCBjbGFzcywgZXJyO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4gIDk4OlxcdFxcdGlmICghaG4pXFxuICA5OTpcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDEwMjpcXHRcXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUykpXFxuIDEwMzpcXHRcXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxuIDEwNDpcXHRcXHRjbGFzcyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGVyciA9IC1FQUdBSU47XFxuIDEwNzpcXHRcXHRyZXEgPSBoYW5kc2hha2VfcmVxX25leHQoaG4sIGNsYXNzKTtcXG4gMTA4OlxcdFxcdGlmIChyZXEpIHtcXG4gMTA5OlxcdFxcdFxcdEZEX1BSRVBBUkUoZmRmLCBPX0NMT0VYRUMsIHJlcS1cXHUwMDNlaHJfZmlsZSk7XFxuIDExMDpcXHRcXHRcXHRpZiAoZmRmLmVycikge1xcbiAxMTE6XFx0XFx0XFx0XFx0ZnB1dChyZXEtXFx1MDAzZWhyX2ZpbGUpOyAvKiBkcm9wIHJlZiBmcm9tIGhhbmRzaGFrZV9yZXFfbmV4dCgpICovXFxuIDExMjpcXHRcXHRcXHRcXHRlcnIgPSBmZGYuZXJyO1xcbiAxMTM6XFx0XFx0XFx0XFx0Z290byBvdXRfY29tcGxldGU7XFxuIDExNDpcXHRcXHRcXHR9XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFxcdGVyciA9IHJlcS1cXHUwMDNlaHJfcHJvdG8tXFx1MDAzZWhwX2FjY2VwdChyZXEsIGluZm8sIGZkX3ByZXBhcmVfZmQoZmRmKSk7XFxuIDExNzpcXHRcXHRcXHRpZiAoZXJyKVxcbiAxMTg6XFx0XFx0XFx0XFx0Z290byBvdXRfY29tcGxldGU7IC8qIEF1dG9tYXRpYyBjbGVhbnVwIGhhbmRsZXMgZnB1dCAqL1xcbiAxMTk6XFx0XFxuIDEyMDpcXHRcXHRcXHR0cmFjZV9oYW5kc2hha2VfY21kX2FjY2VwdChuZXQsIHJlcSwgcmVxLVxcdTAwM2Vocl9zaywgZmRfcHJlcGFyZV9mZChmZGYpKTtcXG4gMTIxOlxcdFxcdFxcdGZkX3B1Ymxpc2goZmRmKTtcXG4gMTIyOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMjM6XFx0XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRvdXRfY29tcGxldGU6XFxuIDEyNjpcXHRcXHRpZiAocmVxKVxcbiAxMjc6XFx0XFx0XFx0aGFuZHNoYWtlX2NvbXBsZXRlKHJlcSwgLUVJTywgTlVMTCk7XFxuIDEyODpcXHRvdXRfc3RhdHVzOlxcbiAxMjk6XFx0XFx0dHJhY2VfaGFuZHNoYWtlX2NtZF9hY2NlcHRfZXJyKG5ldCwgcmVxLCBOVUxMLCBlcnIpO1xcbiAxMzA6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTMxOlxcdH1cXG4gMTMyOlxcdFxcbiAxMzM6XFx0aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gMTM0OlxcdHtcXG4gMTM1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiAxMzY6XFx0XFx0c3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcTtcXG4gMTM3OlxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuIDEzODpcXHRcXHRpbnQgZmQsIHN0YXR1cywgZXJyO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRCkpXFxuIDE0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQyOlxcdFxcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdKTtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0c29jayA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbiAxNDU6XFx0XFx0aWYgKCFzb2NrKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0cmVxID0gaGFuZHNoYWtlX3JlcV9oYXNoX2xvb2t1cChzb2NrLVxcdTAwM2Vzayk7XFxuIDE0OTpcXHRcXHRpZiAoIXJlcSkge1xcbiAxNTA6XFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbiAxNTE6XFx0XFx0XFx0dHJhY2VfaGFuZHNoYWtlX2NtZF9kb25lX2VycihuZXQsIHJlcSwgc29jay1cXHUwMDNlc2ssIGVycik7XFxuIDE1MjpcXHRcXHRcXHRzb2NrZmRfcHV0KHNvY2spO1xcbiAxNTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTU0OlxcdFxcdH1cXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0dHJhY2VfaGFuZHNoYWtlX2NtZF9kb25lKG5ldCwgcmVxLCBzb2NrLVxcdTAwM2VzaywgZmQpO1xcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHRzdGF0dXMgPSAtRUlPO1xcbiAxNTk6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSlcXG4gMTYwOlxcdFxcdFxcdHN0YXR1cyA9IC0oaW50KW5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjQ2LjcwMDU1OTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDUzMjY5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFJlbWFpbmRlciBvZiBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2FsbCBmb3IgYW5hbHlzaXMgaGFzIGNvbWUgaW4sIGFuZCBteSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4gXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgXCIuLi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQncyB0aGUgY29udGV4dD8gV2hhdCBwcmVjZWRpbmcgZnVuY3Rpb25zIG9yIG1vZHVsZXMgc2V0IHRoZSBzdGFnZSBmb3IgdGhpcyBvbmU/IElzIHRoZXJlIGEga25vd24gaXNzdWUgYXNzb2NpYXRlZCB3aXRoIGl0PyBXaGF0IGFyZSB0aGUgdHlwaWNhbCBmYWlsdXJlIHBvaW50cz9cblxuTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byByYXBpZGx5IHNjYW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGdsYXJpbmcgcmVkIGZsYWdzLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmVzb3VyY2UgbGVha3M/IERvZXMgdGhlIGNvbnRyb2wgZmxvdyBoYW5kbGUgYWxsIHBvc3NpYmxlIGlucHV0IHN0YXRlcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgZWRnZSBjYXNlcyBJJ20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGZyb20gc2ltaWxhciBwcm90b2NvbHM/IEknbSBsb29raW5nIGZvciBhIGZhbWlsaWFyIHBhdHRlcm4gb2YgZXJyb3JzIHRoYXQgSSd2ZSBkZWFsdCB3aXRoIGJlZm9yZSAtIHBlcmhhcHMgaW5jb3JyZWN0IGJ1ZmZlciBzaXppbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgaW1wcm9wZXIgZXJyb3IgcHJvcGFnYXRpb24uXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIGFueXRoaW5nIHRoYXQgc2VlbXMgcmVsYXRlZCB0byB0aGUgXCJOTFwiIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEl0J3MgbGlrZWx5IHRoYXQgYSBwcm90b2NvbCB3aXRoICdOTCcgaW4gdGhlIG5hbWUgbWlnaHQgcmVmZXIgdG8gYSBzcGVjaWZpYyBzb3J0IG9mIG1lc3NhZ2UgZm9ybWF0LCBvciBhIHNwZWNpZmljIHN0YWdlIG9mIGEgbmV0d29yayBoYW5kc2hha2UuIEFuZCBpZiBpdCdzIHRoZSBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAgcGFydCwgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgY29tcGxldGlvbiBldmVudC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgcG9pbnRlcnMgZm9yIHRoZSAnZG9pdCcgcGFydCwgYW5kIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhpcyBtaWdodCBiZSBzb21lIGtpbmQgb2YgdGhyZWFkIHVuc2FmZSBvcGVyYXRpb25zLlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGRyaWxsIGRvd24gaW50byBhbnkgY2FsbHMgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBwcmltaXRpdmVzLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGV4dGVybmFsIGluZmx1ZW5jZXMgb24gYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzOiBhcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVhZGxvY2sgdnVsbmVyYWJpbGl0eT8gQSBtZW1vcnkgY29ycnVwdGlvbiByaXNrPyBPciBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHRoYXQgY291bGQgYnJpbmcgdGhlIHdob2xlIHRoaW5nIGNyYXNoaW5nIGRvd24/IEknbGwgYWxzbyBjaGVjayBpZiB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgcG9zc2libGUgaW5wdXRzIGNvcnJlY3RseSwgZXNwZWNpYWxseSB0aGUgZWRnZSBjYXNlcy5cblxuSW4gc2hvcnQsIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGJlZ2luIGEgbWV0aG9kaWNhbCBkaXNzZWN0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjUwLjE0NTg4OTcwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2hhbmRzaGFrZS9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYxOlxcdFxcbiAxNjI6XFx0XFx0aGFuZHNoYWtlX2NvbXBsZXRlKHJlcSwgc3RhdHVzLCBpbmZvKTtcXG4gMTYzOlxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuIDE2NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0c3RhdGljIHVuc2lnbmVkIGludCBoYW5kc2hha2VfbmV0X2lkO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFuZHNoYWtlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiA9IG5ldF9nZW5lcmljKG5ldCwgaGFuZHNoYWtlX25ldF9pZCk7XFxuIDE3MjpcXHRcXHR1bnNpZ25lZCBsb25nIHRtcDtcXG4gMTczOlxcdFxcdHN0cnVjdCBzeXNpbmZvIHNpO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHQvKlxcbiAxNzY6XFx0XFx0ICogQXJiaXRyYXJ5IGxpbWl0IHRvIHByZXZlbnQgaGFuZHNoYWtlcyB0aGF0IGRvIG5vdCBtYWtlXFxuIDE3NzpcXHRcXHQgKiBwcm9ncmVzcyBmcm9tIGNsb2dnaW5nIHVwIHRoZSBzeXN0ZW0uIFRoZSBjYXAgc2NhbGVzIHVwXFxuIDE3ODpcXHRcXHQgKiB3aXRoIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IG9uIHRoZSBzeXN0ZW0uXFxuIDE3OTpcXHRcXHQgKi9cXG4gMTgwOlxcdFxcdHNpX21lbWluZm8oXFx1MDAyNnNpKTtcXG4gMTgxOlxcdFxcdHRtcCA9IHNpLnRvdGFscmFtIC8gKDI1ICogc2kubWVtX3VuaXQpO1xcbiAxODI6XFx0XFx0aG4tXFx1MDAzZWhuX3BlbmRpbmdfbWF4ID0gY2xhbXAodG1wLCAzVUwsIDUwVUwpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aG4tXFx1MDAzZWhuX2xvY2spO1xcbiAxODU6XFx0XFx0aG4tXFx1MDAzZWhuX3BlbmRpbmcgPSAwO1xcbiAxODY6XFx0XFx0aG4tXFx1MDAzZWhuX2ZsYWdzID0gMDtcXG4gMTg3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZobi1cXHUwMDNlaG5fcmVxdWVzdHMpO1xcbiAxODg6XFx0XFx0cmV0dXJuIDA7XFxuIDE4OTpcXHR9XFxuIDE5MDpcXHRcXG4gMTkxOlxcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaGFuZHNoYWtlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcXG4gMTkyOlxcdHtcXG4gMTkzOlxcdFxcdHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiA9IG5ldF9nZW5lcmljKG5ldCwgaGFuZHNoYWtlX25ldF9pZCk7XFxuIDE5NDpcXHRcXHRzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxO1xcbiAxOTU6XFx0XFx0TElTVF9IRUFEKHJlcXVlc3RzKTtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0LypcXG4gMTk4OlxcdFxcdCAqIERyYWluIHRoZSBuZXQncyBwZW5kaW5nIGxpc3QuIFJlcXVlc3RzIHRoYXQgaGF2ZSBiZWVuXFxuIDE5OTpcXHRcXHQgKiBhY2NlcHRlZCBhbmQgYXJlIGluIHByb2dyZXNzIHdpbGwgYmUgZGVzdHJveWVkIHdoZW5cXG4gMjAwOlxcdFxcdCAqIHRoZSBzb2NrZXQgaXMgY2xvc2VkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0Mzo1MC4xNDU5OTQ1NTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwOTAwMzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSGFuZHNoYWtlIE5ldGxpbmsgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgaGFuZHNoYWtlIG5ldGxpbmsgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCBhbmQgc2VlIHdoYXQncyBiZWVuIHVwZGF0ZWQuICBJIHNlZSBhIGNvdXBsZSBvZiBzcGVjaWZpYyBtb2RpZmljYXRpb25zLiBJbiBgbmV0L2hhbmRzaGFrZS9nZW5sLmNgLCB0aGUgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGF0dHJpYnV0ZSdzIHR5cGUgaGFzIHNoaWZ0ZWQgZnJvbSBgTkxBX1UzMmAgdG8gYE5MQV9TMzJgLiBBbmQgb3ZlciBpbiBgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lgLCBgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NgIGhhcyBnb25lIGZyb20gYE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDIpYCB0byBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSlgLiBUaGVzZSBhcmUgaW50ZXJlc3RpbmcgY2hhbmdlcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zLiBJJ2xsIGNoZWNrIGBoYW5kc2hha2UueWFtbGAgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhgLiBBaCwgSSBzZWUgYSBjbGVhciBzaGlmdCBpbiB0aGUgYGVudW0gaGFuZHNoYWtlX2hhbmRsZXJfY2xhc3NgLiAgVGhlIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIGRlZmluaXRpb24gaGFzIGJlZW4gdXBkYXRlZCwgbm93IGl0J3MgZGVmaW5lZCBhcyBgKF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYIC0gMSlgLiBQcmV2aW91c2x5LCBpdCB3YXMgc2ltcGx5IHRoZSB1cHBlciBib3VuZC4gVGhpcyBtZWFucyB0aGUgYWNjZXB0YWJsZSB1cHBlciBsaW1pdCBvZiBoYW5kbGVyIGNsYXNzZXMgaGFzIGNoYW5nZWQuICBUaGlzIGV4cGxhaW5zIHdoeSB0aGUgYE5MQV9QT0xJQ1lfTUFYYCB2YWx1ZSB3YXMgcmVkdWNlZCBmcm9tIDIgdG8gMSFcblxuVGhhdCBzaGlmdCBpbiBlbnVtIGRlZmluaXRpb25zIHRyaWdnZXJlZCBhIHJlbGF0ZWQgY2hhbmdlIGluIGBuZXQvaGFuZHNoYWtlL3JlcXVlc3QuY2AuIFRoZSBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC4gVGhlIGNvbXBhcmlzb24gbG9naWMgaXMgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBib3VuZGFyeS4gVGhlIG9sZCBgcHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2U9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgY2hlY2sgaXMgcmVwbGFjZWQgd2l0aCBgXHUwMDNlIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGFzIHRoZSB2YWxpZCBoYW5kbGVyIGNsYXNzZXMgY2hhbmdlZC4gSSBhbHNvIHNlZSBhIHRlc3QgY2FzZSwgYGhhbmRzaGFrZS10ZXN0LmNgLCB3aGVyZSBgX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIHJlcGxhY2VzIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgLCB0byBtYWtlIHRoZSB0ZXN0IG1hdGNoIHRoZSBuZXcgY2xhc3MgZGVmaW5pdGlvbi5cblxuRmluYWxseSwgSSByZW1lbWJlciB0aGUgb3RoZXIgcmVsYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXM6IGBwZWVyLWlkZW50aXR5YCwgYGtleXJpbmdgLCBhbmQgYHJlbW90ZS1hdXRoYC4gVGhlIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9oYW5kc2hha2UueWFtbGAgY29uZmlybXMgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgY2hhbmdlZCBmcm9tIGB1MzJgIHRvIGBzMzJgLiBUaGF0IG1ha2VzIHNlbnNlIC0gYGtleV9zZXJpYWxfdGAgaW4gdGhlIGtlcm5lbCBpcyBhbiBgaW50MzJgLCBzbyB1c2luZyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBpcyB0aGUgcmlnaHQgdHlwZS5cblxuTm93LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgdG8gc2VlIGhvdyB0aGUgVExTSEQgKFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIYW5kc2hha2UgRGFlbW9uKSBhbmQgdGhlIFwiZG9uZVwiIGFuZCBcImFjY2VwdFwiIHBhdGhzIGhhbmRsZSByZW1vdGUgYXV0aGVudGljYXRpb24gYW5kIHRoZSBrZXkgc2VyaWFscywgaW4gb3JkZXIgdG8gY29tcGxldGUgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDM6NTUuNzU1MDAwOTM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMzExMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFORFNIQUtFX0FfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oYW5kc2hha2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hhbmRzaGFrZS9nZW5sLmMtMTUtLyogSEFORFNIQUtFX0NNRF9BQ0NFUFQgLSBkbyAqL1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeVtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyArIDFdID0ge1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjE3OlxcdFtIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xOC19O1xcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjAtLyogSEFORFNIQUtFX0NNRF9ET05FIC0gZG8gKi9cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEggKyAxXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMjpcXHRbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgTUFYX0VSUk5PKSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyMzpcXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjQ6XFx0W0hBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjUtfTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jPTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgaGFuZHNoYWtlX25sX29wc1tdID0ge1xcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzItXFx0XFx0LnBvbGljeVxcdFxcdD0gaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3ksXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MzM6XFx0XFx0Lm1heGF0dHJcXHQ9IEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTLFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTM0LVxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzktXFx0XFx0LnBvbGljeVxcdFxcdD0gaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5LFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjQwOlxcdFxcdC5tYXhhdHRyXFx0PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRILFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTQxLVxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9Mzc9aW50IGhhbmRzaGFrZV9nZW5sX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNTktXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6NjA6XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MsXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtNjEtXFx0XFx0XFx0cHJvdG8tXFx1MDAzZWhwX2hhbmRsZXJfY2xhc3MpIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9OTA9aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTAxLVxcdGVyciA9IC1FSU5WQUw7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTAyOlxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTKSlcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDMtXFx0XFx0Z290byBvdXRfc3RhdHVzO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjEwNDpcXHRjbGFzcyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSk7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTA1LVxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MTMzPWludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMzktXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQwOlxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEhBTkRTSEFLRV9BX0RPTkVfU09DS0ZEKSlcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNDEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTQyOlxcdGZkID0gbmxhX2dldF9zMzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdKTtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNDMtXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNTgtXFx0c3RhdHVzID0gLUVJTztcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNTk6XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSlcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNjA6XFx0XFx0c3RhdHVzID0gLShpbnQpbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKTtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNjEtXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9NjE9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzAtXFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo3MTpcXHRcXHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy03Mi1cXHRcXHRcXHRpKys7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtODAtXFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo4MTpcXHRcXHRpZiAobmxhX3R5cGUobmxhKSA9PSBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04Mi1cXHRcXHRcXHR0cmVxLVxcdTAwM2V0aF9wZWVyaWRbaSsrXSA9IG5sYV9nZXRfdTMyKG5sYSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MTUxPXN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9wdXRfcGVlcl9pZGVudGl0eShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHJlcS1cXHUwMDNldGhfbnVtX3BlZXJpZHM7IGkrKylcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTU3OlxcdFxcdGlmIChubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9QRUVSX0lERU5USVRZLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTgtXFx0XFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfcGVlcmlkW2ldKSBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MTYzPXN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9wdXRfY2VydGlmaWNhdGUoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzEtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE3MjpcXHRlbnRyeV9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfQ0VSVElGSUNBVEUpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzMtXFx0aWYgKCFlbnRyeV9hdHRyKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3NS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTc2OlxcdGlmIChubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX1g1MDlfQ0VSVCxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc3LVxcdFxcdFxcdHRyZXEtXFx1MDAzZXRoX2NlcnRpZmljYXRlKSB8fFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzg6XFx0ICAgIG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfWDUwOV9QUklWS0VZLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzktXFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfcHJpdmtleSkpIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xOTY9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX2FjY2VwdChzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxNS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjE2OlxcdHJldCA9IG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1NPQ0tGRCwgZmQpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIxOC1cXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxOTpcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9NRVNTQUdFX1RZUEUsIHRyZXEtXFx1MDAzZXRoX3R5cGUpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjIyLVxcdGlmICh0cmVxLVxcdTAwM2V0aF9wZWVybmFtZSkge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMjM6XFx0XFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfUEVFUk5BTUUsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIyNC1cXHRcXHRcXHRcXHQgICAgIHRyZXEtXFx1MDAzZXRoX3BlZXJuYW1lKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjgtXFx0aWYgKHRyZXEtXFx1MDAzZXRoX3RpbWVvdXRfbXMpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjI5OlxcdFxcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1RJTUVPVVQsIHRyZXEtXFx1MDAzZXRoX3RpbWVvdXRfbXMpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjMzLVxcdGlmICh0cmVxLVxcdTAwM2V0aF9rZXlyaW5nKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIzNDpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9LRVlSSU5HLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzUtXFx0XFx0XFx0XFx0ICB0cmVxLVxcdTAwM2V0aF9rZXlyaW5nKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzktXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI0MDpcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9BVVRIX01PREUsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0MS1cXHRcXHRcXHQgIHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQzOjU1LjkxMTIzNzM1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDI2NzExMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFuYWx5c2lzOiBHZW5lcmljIE5ldGxpbmsgSGFuZHNoYWtlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHJlbGlhYmx5IHRhcmdldCBhbmQgdHJpZ2dlciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBjb2RlLiBUaGUgZ29vZCBuZXdzIGlzLCBhYnNvbHV0ZWx5LCB5ZXMhIFdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBnZW5lcmljIG5ldGxpbmsgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHdlbGwtZGVmaW5lZCBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gYGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXWAgY2xlYXJseSBkZWZpbmVzIHRoZSBoYW5kbGVyczogYEhBTkRTSEFLRV9DTURfQUNDRVBUYCBtYXBzIHRvIGBoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRgLCBhbmQgYEhBTkRTSEFLRV9DTURfRE9ORWAgZ29lcyB0byBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAuIFRoZXNlIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGBoYW5kc2hha2VfbmxfZmFtaWx5YCB2aWEgYGdlbmxfcmVnaXN0ZXJfZmFtaWx5KClgLCBtYWtpbmcgdGhlbSBwcmltZSBjYW5kaWRhdGVzLiBFc3NlbnRpYWxseSwgYW55IHVzZXJzcGFjZSBwcm9jZXNzLCBpbmNsdWRpbmcgc3l6a2FsbGVyLCBjYW4gc2VuZCBuZXRsaW5rIG1lc3NhZ2VzIHRvIHRoaXMgYGhhbmRzaGFrZWAgZmFtaWx5LlxuXG5TcGVjaWZpY2FsbHksIHdlIGNhbiBjcmFmdCBhbmQgc2VuZCBtZXNzYWdlcyBjb250YWluaW5nIGBIQU5EU0hBS0VfQ01EX0FDQ0VQVGAgYW5kIGBIQU5EU0hBS0VfQ01EX0RPTkVgIGNvbW1hbmRzLiBJIGltbWVkaWF0ZWx5IG5vdGUgdGhlIHBvbGljeSBjaGFuZ2VzLCBhbmQgdGhlc2UgbWVyaXQgY2FyZWZ1bCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuIFRoZSBtb2RpZmljYXRpb24gb2YgIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2AgZnJvbSBgTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMilgIHRvIGBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAxKWAgaW4gYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIGZyb20gYE5MQV9VMzJgIHRvIGBOTEFfUzMyYCBpbiBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCwgYW5kIHRoZSBib3VuZGFyeSBjaGVjayBjaGFuZ2UgaW4gYGhhbmRzaGFrZV9yZXFfYWxsb2NgIOKAkyB0aGVzZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0byBleHBsb2l0LCBlc3BlY2lhbGx5IGZvciBpbnRlZ2VyIG92ZXJmbG93cyBvciBib3VuZGFyeSBjb25kaXRpb24gdmlvbGF0aW9ucy5cblxuVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGF0ZWQgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oYCwgYG5ldC9oYW5kc2hha2UvZ2VubC5jYCwgYG5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY2AsIGFuZCBgbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNgIHRvIGlkZW50aWZ5IG90aGVyIGNoYW5nZXMuXG5cbk5vdywgZnJvbSBhIGZ1enppbmcgYW5nbGUsIHRoZSB0YXJnZXQgaXMgY2xlYXJseSByZWFjaGFibGUuIEdlbmVyaWMgbmV0bGluayBpcyBhIGZ1bmRhbWVudGFsIHVzZXJzcGFjZS1rZXJuZWwgaW50ZXJmYWNlIHV0aWxpemluZyBgQUZfTkVUTElOS2AgYW5kIGBORVRMSU5LX0dFTkVSSUNgIHNvY2tldHMuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIG1vZGlmaWVkIHBvbGljaWVzIChgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lgIGFuZCBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCkuICBUaGUgZnVuY3Rpb25zIGBoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRgLCBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAsIGFuZCBgaGFuZHNoYWtlX3JlcV9hbGxvY2AgYXJlLCB0aGVyZWZvcmUsIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgcGF0aHMuIFRoaXMgY29uZmlybXMgdGhlIGluaXRpYWwgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIGFzc2Vzc21lbnQuXG5cbkZpbmFsbHksIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyBgTkVUX0hBTkRTSEFLRWAuIFRoZSBgS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGl0J3MgYGJvb2xgLCBkZXBlbmRlbnQgb24gYFNVTlJQQyB8fCBOVk1FX1RBUkdFVF9UQ1AgfHwgTlZNRV9UQ1BgLCBhbmQgZGVmYXVsdHMgdG8gJ3knLiBCZWNhdXNlIGl0J3MgYSBkaXJlY3QgYm9vbGVhbiwgdGhlIGtlcm5lbCB3aWxsIGNvbXBpbGUgaW4gdGhpcyBoYW5kc2hha2UgZnVuY3Rpb25hbGl0eSBpZiBgU1VOUlBDYCBvciBgTlZNRV9UQ1BgIGlzIHNlbGVjdGVkLiBTbywgdG8gZW5zdXJlIGBORVRfSEFORFNIQUtFYCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIHZlcmlmeSBgU1VOUlBDYCwgYE5WTUVfVENQYCwgb3IgYE5WTUVfVEFSR0VUX1RDUGAgYXJlIGVuYWJsZWQsIG9yIGp1c3QgZW5hYmxlIGBORVRfSEFORFNIQUtFYCBpdHNlbGYgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgY29uZmlnLW9wdGlvbnMgdG8gaW52ZXN0aWdhdGUgYXJlIGBORVRfSEFORFNIQUtFYCwgYFNVTlJQQ2AsIGFuZCBgTlZNRV9UQ1BgIGluIHN5emthbGxlcidzIGNvbmZpZyBmb3JtYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTc0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjAzLjkzNzk1MzQ2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTkzMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzoxOkNPTkZJR19LVU5JVD15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MjpDT05GSUdfVUJTQU49eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjM6Q09ORklHX1NUQUNLVFJBQ0U9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjQ6Q09ORklHX05FVD15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NTpDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NjpDT05GSUdfSU5FVD15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6NzpDT05GSUdfTVVMVElVU0VSPXlcXG5uZXQvaGFuZHNoYWtlLy5rdW5pdGNvbmZpZzo4OkNPTkZJR19ORlNfRlM9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjk6Q09ORklHX1NVTlJQQz15XFxubmV0L2hhbmRzaGFrZS8ua3VuaXRjb25maWc6MTA6Q09ORklHX05FVF9IQU5EU0hBS0U9eVxcbm5ldC9oYW5kc2hha2UvLmt1bml0Y29uZmlnOjExOkNPTkZJR19ORVRfSEFORFNIQUtFX0tVTklUX1RFU1Q9eVxcbi0tXFxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZT0xMT1oYW5kc2hha2UteSA6PSBhbGVydC5vIGdlbmwubyBuZXRsaW5rLm8gcmVxdWVzdC5vIHRsc2hkLm8gdHJhY2Uub1xcbm5ldC9oYW5kc2hha2UvTWFrZWZpbGUtMTItXFxubmV0L2hhbmRzaGFrZS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUKSArPSBoYW5kc2hha2UtdGVzdC5vXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9OTU9c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9kb25lKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTEwLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0tFWVMpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExMi1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MDQuMDYwOTUwOTkzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTI5ODc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgSGFuZHNoYWtlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgTkVUX0hBTkRTSEFLRWAgY29uZmlndXJhdGlvbi4gRmlyc3QsIEknbGwgY29uZmlybSBpdHMgcHJlc2VuY2UgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gSSdsbCBxdWlja2x5IGNoZWNrIGBLY29uZmlnYCBhbmQgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBuZXRgIGRpcmVjdG9yeS4gSXQgbG9va3MgbGlrZSBlbmFibGluZyBgTkVUX0hBTkRTSEFLRWAgaW4gdGhlIGBNYWtlZmlsZWAgYWRkcyB0aGUgYGhhbmRzaGFrZS9gIGRpcmVjdG9yeSB0byB0aGUgYnVpbGQsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gQSBxdWljayBtZW50YWwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgbGlrZSB0aG9zZSBmb3IgYFNVTlJQQ2Agb3IgYE5WTUVfVENQYCBhcmVuJ3QgaW50ZXJmZXJpbmcuIFByb3ZpZGluZyBgTkVUX0hBTkRTSEFLRWAgaW4gRW5hYmxlQ29uZmlncyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIHByb2NlZWQsIHNvIHRoYXQgc2VlbXMgc3VmZmljaWVudCBmb3Igbm93LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb246IGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzeW1ib2xzIGFyZSBkaXJlY3RseSBhbHRlcmVkIGJ5IHRoZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgYGhhbmRzaGFrZWAgY29kZSBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYy4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBhIGZldyBrZXkgZnVuY3Rpb25zOlxuXG4xLiAgYGhhbmRzaGFrZV9yZXFfYWxsb2NgIHdpdGhpbiBgbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNgIC0gdGhlcmUncyBhbHRlcmVkIGNvbXBhcmlzb24gbG9naWMgaW4gaGVyZTogYGhwX2hhbmRsZXJfY2xhc3MgXHUwMDNlIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAuXG4yLiAgYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAgaW4gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCAtIGl0IHVzZXMgYGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5YCwgd2hlcmUgdGhlIG1heGltdW0gdmFsdWUgb2YgYEhBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTYCBoYXMgY2hhbmdlZCBmcm9tIDIgdG8gMS5cbjMuICBgaGFuZHNoYWtlX25sX2RvbmVfZG9pdGAgaW4gYG5ldC9oYW5kc2hha2UvbmV0bGluay5jYCAtIFRoaXMgb25lIGFsc28gdXNlcyBgaGFuZHNoYWtlX2RvbmVfbmxfcG9saWN5YCwgYW5kIHRoZSB0eXBlIG9mIGBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIYCBjaGFuZ2VkIGZyb20gYE5MQV9VMzJgIHRvIGBOTEFfUzMyYC5cbjQuICBgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc2AgaW4gYG5ldC9oYW5kc2hha2UvdGxzaGQuY2AgLSBIYW5kbGVzIGBIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIYCB3aXRoaW4gdGhlIGRvbmUgY2FsbGJhY2ssIGFuZCB0aGlzIGlzIGFub3RoZXIgaW1wb3J0YW50IHBvaW50IHRvIGJlIGF3YXJlIG9mLlxuXG5OZXh0LCBJJ2xsIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgbmV0L2hhbmRzaGFrZS9gIHRoYXQgYXJlIGFmZmVjdGVkPyBMZXQncyB0YWtlIGEgbG9vayBhdCBgbmV0L2hhbmRzaGFrZS90bHNoZC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MTIuMTEzOTQxODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNjI0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWN8XmludHxedm9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaGFuZHNoYWtlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oYW5kc2hha2UvYWxlcnQuYy0zMy0gKi9cXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmM6MzQ6aW50IHRsc19hbGVydF9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHU4IGxldmVsLCB1OCBkZXNjcmlwdGlvbilcXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmMtMzUte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9hbGVydC5jPTg3PUVYUE9SVF9TWU1CT0wodGxzX2dldF9yZWNvcmRfdHlwZSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2FsZXJ0LmMtOTYtICovXFxubmV0L2hhbmRzaGFrZS9hbGVydC5jOjk3OnZvaWQgdGxzX2FsZXJ0X3JlY3YoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2hhbmRzaGFrZS9hbGVydC5jLTk4LVxcdFxcdCAgICB1OCAqbGV2ZWwsIHU4ICpkZXNjcmlwdGlvbilcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE1LS8qIEhBTkRTSEFLRV9DTURfQUNDRVBUIC0gZG8gKi9cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoxNjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MgKyAxXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0xNy1cXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMC0vKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIyLVxcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjctLyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yOS1cXHR7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00NC1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGhhbmRzaGFrZV9ubF9tY2dycHNbXSA9IHtcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00Ni1cXHRbSEFORFNIQUtFX05MR1JQX05PTkVdID0geyBcXFwibm9uZVxcXCIsIH0sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuaC0xNS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuaDoxNjppbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9oYW5kc2hha2UvZ2VubC5oOjE3OmludCBoYW5kc2hha2VfbmxfZG9uZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9oYW5kc2hha2UvZ2VubC5oLTE4LVxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTIwPU1PRFVMRV9JTVBPUlRfTlMoXFxcIkVYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HXFxcIik7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTIxLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyMjpzdGF0aWMgaW50IHRlc3RfYWNjZXB0X2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjMtXFx0XFx0XFx0ICAgIGludCBmZClcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yNy1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6Mjg6c3RhdGljIHZvaWQgdGVzdF9kb25lX2Z1bmMoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjktXFx0XFx0XFx0ICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYz0zMz1zdHJ1Y3QgaGFuZHNoYWtlX3JlcV9hbGxvY190ZXN0X3BhcmFtIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zOS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDA6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MS1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTk9ORSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00My1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDQ6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NS1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDctXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fNCA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDktXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUxLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MjpzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzUgPSB7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTUzLVxcdC5ocF9oYW5kbGVyX2NsYXNzXFx0PSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19UTFNIRCxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01Ni1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTc6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b182ID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01OC1cXHQuaHBfaGFuZGxlcl9jbGFzc1xcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNjMtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjY0OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvIGhhbmRzaGFrZV9yZXFfYWxsb2NfcHJvdG9fZ29vZCA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNjUtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTY5LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo3MDpzdGF0aWMgY29uc3RcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNzEtc3RydWN0IGhhbmRzaGFrZV9yZXFfYWxsb2NfdGVzdF9wYXJhbSBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtc1tdID0ge1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExNS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTE2OnN0YXRpYyB2b2lkXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTExNy1oYW5kc2hha2VfcmVxX2FsbG9jX2dldF9kZXNjKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcmVxX2FsbG9jX3Rlc3RfcGFyYW0gKnBhcmFtLFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jPTEyND1LVU5JVF9BUlJBWV9QQVJBTShoYW5kc2hha2VfcmVxX2FsbG9jLCBoYW5kc2hha2VfcmVxX2FsbG9jX3BhcmFtcyxcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjYtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjEyNzpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2FsbG9jX2Nhc2Uoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMjgte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE0NS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTQ2OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfc3VibWl0X3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTQ3LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xNjQtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE2NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE2Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTgyLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoxODM6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xODQte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTIwNy1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MjA4OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfc3VibWl0X3Rlc3Q0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjA5LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yNDQtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjI0NTpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX3N1Ym1pdF90ZXN0NShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTI0Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMjg1LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzoyODY6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9zdWJtaXRfdGVzdDYoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0yODcte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTMyMy1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MzI0OnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfY2FuY2VsX3Rlc3QxKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMzI1LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0zNjEtXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjM2MjpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2NhbmNlbF90ZXN0MihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTM2My17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDExLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0MTI6c3RhdGljIHZvaWQgaGFuZHNoYWtlX3JlcV9jYW5jZWxfdGVzdDMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00MTMte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2NS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDY2OnN0YXRpYyBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9kZXN0cm95X3Rlc3Q7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2Ny1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDY4OnN0YXRpYyB2b2lkIHRlc3RfZGVzdHJveV9mdW5jKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ2OS17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNDcyLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo0NzM6c3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b19kZXN0cm95ID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy00NzQtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ3OS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NDgwOnN0YXRpYyB2b2lkIGhhbmRzaGFrZV9yZXFfZGVzdHJveV90ZXN0MShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTQ4MS17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTE4LVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYzo1MTk6c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGhhbmRzaGFrZV9hcGlfdGVzdF9jYXNlc1tdID0ge1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy01MjAtXFx0e1xcbi0tXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTU2Ny1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6NTY4OnN0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgaGFuZHNoYWtlX2FwaV9zdWl0ZSA9IHtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtNTY5LSAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9IFxcXCJIYW5kc2hha2UgQVBJIHRlc3RzXFxcIixcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg9Njc9ZW51bSBocF9mbGFnc19iaXRzIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzEtLyogYWxlcnQuYyAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6NzI6aW50IHRsc19hbGVydF9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHU4IGxldmVsLCB1OCBkZXNjcmlwdGlvbik7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC03My1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTc0LS8qIG5ldGxpbmsuYyAqL1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6NzU6aW50IGhhbmRzaGFrZV9nZW5sX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtNzYtXFx0XFx0XFx0ICBnZnBfdCBmbGFncyk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTgyPXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX2FsbG9jKGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtODMtXFx0XFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncyk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4NDppbnQgaGFuZHNoYWtlX3JlcV9oYXNoX2luaXQodm9pZCk7XFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaDo4NTp2b2lkIGhhbmRzaGFrZV9yZXFfaGFzaF9kZXN0cm95KHZvaWQpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODY6dm9pZCAqaGFuZHNoYWtlX3JlcV9wcml2YXRlKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmgtODctc3RydWN0IGhhbmRzaGFrZV9yZXEgKmhhbmRzaGFrZV9yZXFfaGFzaF9sb29rdXAoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oPTg4PXN0cnVjdCBoYW5kc2hha2VfcmVxICpoYW5kc2hha2VfcmVxX25leHQoc3RydWN0IGhhbmRzaGFrZV9uZXQgKmhuLCBpbnQgY2xhc3MpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6ODk6aW50IGhhbmRzaGFrZV9yZXFfc3VibWl0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UuaC05MC1cXHRcXHRcXHQgZ2ZwX3QgZmxhZ3MpO1xcbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLmg6OTE6dm9pZCBoYW5kc2hha2VfY29tcGxldGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSwgaW50IHN0YXR1cyxcXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS5oLTkyLVxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMzYtICovXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6Mzc6aW50IGhhbmRzaGFrZV9nZW5sX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gKnByb3RvLFxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTM4LVxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz04OD1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9nZW5sX3B1dCk7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtODktXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6OTA6aW50IGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTkxLXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEzMi1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxMzM6aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMzQte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTY2LVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE2NzpzdGF0aWMgdW5zaWduZWQgaW50IGhhbmRzaGFrZV9uZXRfaWQ7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTY4LVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE2OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFuZHNoYWtlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xNzAte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTkwLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE5MTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGhhbmRzaGFrZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTkyLXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTIxOS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoyMjA6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBoYW5kc2hha2VfZ2VubF9uZXRfb3BzID0ge1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTIyMS1cXHQuaW5pdFxcdFxcdD0gaGFuZHNoYWtlX25ldF9pbml0LFxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM9MjM5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3Blcm5ldCk7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMjQwLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjI0MTpzdGF0aWMgaW50IF9faW5pdCBoYW5kc2hha2VfaW5pdCh2b2lkKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTI0Mi17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0yNzYtXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6Mjc3OnN0YXRpYyB2b2lkIF9fZXhpdCBoYW5kc2hha2VfZXhpdCh2b2lkKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTI3OC17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy00MC1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo0MTpzdGF0aWMgc3RydWN0IHJoYXNodGFibGUgaGFuZHNoYWtlX3JoYXNodGJsIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtNDItXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6NDM6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBoYW5kc2hha2Vfcmhhc2hfcGFyYW1zID0ge1xcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQ0LVxcdC5rZXlfbGVuXFx0XFx0PSBzaXplb2ZfZmllbGQoc3RydWN0IGhhbmRzaGFrZV9yZXEsIGhyX3NrKSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTQ5LVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjUwOmludCBoYW5kc2hha2VfcmVxX2hhc2hfaW5pdCh2b2lkKVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTUxLXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTU0LVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjU1OnZvaWQgaGFuZHNoYWtlX3JlcV9oYXNoX2Rlc3Ryb3kodm9pZClcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy01Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYz02NT1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGhhbmRzaGFrZV9yZXFfaGFzaF9sb29rdXApO1xcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTY2LVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjY3OnN0YXRpYyBib29sIGhhbmRzaGFrZV9yZXFfaGFzaF9hZGQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy02OC17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy03Ni1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo3NzpzdGF0aWMgdm9pZCBoYW5kc2hha2VfcmVxX2Rlc3Ryb3koc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy03OC17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy04NS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzo4NjpzdGF0aWMgdm9pZCBoYW5kc2hha2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTg3LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTEzMT1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfYWxsb2MpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMTM3LSAqL1xcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjEzODp2b2lkICpoYW5kc2hha2VfcmVxX3ByaXZhdGUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xMzkte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MTQyPUVYUE9SVF9TWU1CT0woaGFuZHNoYWtlX3JlcV9wcml2YXRlKTtcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNDMtXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTQ0OnN0YXRpYyBib29sIF9fYWRkX3BlbmRpbmdfbG9ja2VkKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobixcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNDUtXFx0XFx0XFx0XFx0IHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNTMtXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTU0OnN0YXRpYyB2b2lkIF9fcmVtb3ZlX3BlbmRpbmdfbG9ja2VkKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobixcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNjgtICovXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MTY5OnN0YXRpYyBib29sIHJlbW92ZV9wZW5kaW5nKHN0cnVjdCBoYW5kc2hha2VfbmV0ICpobiwgc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSlcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0xNzAte1xcbi0tXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM9MjE5PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoaGFuZHNoYWtlX3JlcV9uZXh0KTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTI1MC0gKi9cXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYzoyNTE6aW50IGhhbmRzaGFrZV9yZXFfc3VibWl0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMjUyLVxcdFxcdFxcdCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jPTMyMj1FWFBPUlRfU1lNQk9MKGhhbmRzaGFrZV9yZXFfc3VibWl0KTtcXG5uZXQvaGFuZHNoYWtlL3JlcXVlc3QuYy0zMjMtXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmM6MzI0OnZvaWQgaGFuZHNoYWtlX2NvbXBsZXRlKHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsIGludCBzdGF0dXMsXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMzI1LVxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjc9c3RydWN0IHRsc19oYW5kc2hha2VfcmVxIHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00My1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NDQ6c3RhdGljIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQ1LXRsc19oYW5kc2hha2VfcmVxX2luaXQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy02MC1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NjE6c3RhdGljIHZvaWQgdGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkcyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTYyLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTk0LSAqL1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo5NTpzdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX2RvbmUoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtOTYtXFx0XFx0XFx0ICAgICAgIGludCBzdGF0dXMsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19LRVlTKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTI6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExMy17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ0LSNlbHNlXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE0NTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHJpdmF0ZV9rZXlyaW5nKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTQ2LXtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNTAtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE1MTpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUyLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSlcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNjItXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE2MzpzdGF0aWMgaW50IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE2NC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE5NS0gKi9cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTk2OnN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9hY2NlcHQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTk3LVxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBmZClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNjYtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI2NzpzdGF0aWMgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byB0bHNfaGFuZHNoYWtlX3Byb3RvID0ge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yNjgtXFx0LmhwX2hhbmRsZXJfY2xhc3NcXHQ9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hELFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI4NS0gKi9cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6Mjg2OmludCB0bHNfY2xpZW50X2hlbGxvX2Fub24oY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI4Ny17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzAwPUVYUE9SVF9TWU1CT0wodGxzX2NsaWVudF9oZWxsb19hbm9uKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTEtICovXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjMxMjppbnQgdGxzX2NsaWVudF9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMTMte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTMyOD1FWFBPUlRfU1lNQk9MKHRsc19jbGllbnRfaGVsbG9feDUwOSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzQwLSAqL1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzozNDE6aW50IHRsc19jbGllbnRfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNDIte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM2Mz1FWFBPUlRfU1lNQk9MKHRsc19jbGllbnRfaGVsbG9fcHNrKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzQtICovXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM3NTppbnQgdGxzX3NlcnZlcl9oZWxsb194NTA5KGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNzYte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTM5MT1FWFBPUlRfU1lNQk9MKHRsc19zZXJ2ZXJfaGVsbG9feDUwOSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDAyLSAqL1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo0MDM6aW50IHRsc19zZXJ2ZXJfaGVsbG9fcHNrKGNvbnN0IHN0cnVjdCB0bHNfaGFuZHNoYWtlX2FyZ3MgKmFyZ3MsIGdmcF90IGZsYWdzKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00MDQte1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQzOD1FWFBPUlRfU1lNQk9MKHRsc19oYW5kc2hha2VfY2FuY2VsKTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy00NDQtICovXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjQ0NTp2b2lkIHRsc19oYW5kc2hha2VfY2xvc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MTIuMTc3NTcyMTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY2OTE1ODk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIYW5kc2hha2UgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGBGb2N1c1N5bWJvbHNgLiBJdCBzZWVtcyB3ZSd2ZSBzZWxlY3RlZCB0aGVzZTogYGhhbmRzaGFrZV9yZXFfYWxsb2NgLCB3aGljaCBoYXMgbW9kaWZpZWQgbG9naWM7IHRoZW4gYGhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdGAgd2hpY2ggaGFuZGxlcyB0aGUgTmV0bGluayBhY2NlcHQgcmVxdWVzdCBhbmQgdmFsaWRhdGVzIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2A7IG5leHQgYGhhbmRzaGFrZV9ubF9kb25lX2RvaXRgIHdoaWNoIGFsc28gaGFuZGxlcyBhIE5ldGxpbmsgcmVxdWVzdCBidXQgc3BlY2lmaWNhbGx5IGZvciBjb21wbGV0aW9uIG9mIHRoZSBoYW5kc2hha2UsIHZhbGlkYXRpbmcgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgOyBhbmQgZmluYWxseSwgYHRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNgIHdoaWNoIHByb2Nlc3NlcyB0aGUgYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIG5ldGxpbmsgYXR0cmlidXRlLiBUaG9zZSBzZWVtIGxpa2Ugc2Vuc2libGUgdGFyZ2V0cyBmb3IgZm9jdXNpbmcgb3VyIGZ1enppbmcgZWZmb3J0cy5cblxuTmV4dCwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0LiBXZSBoYXZlIGBORVRfSEFORFNIQUtFYCBhbmQgYFNVTlJQQ2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBhcHByb3ByaWF0ZSwgZ2l2ZW4gdGhlIGhhbmRzaGFrZSBmb2N1cy5cblxuQWxyaWdodCwgbm93IHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBwcm9tcHQ6IHdlIGhhdmUgYFdvcnRoRnV6emluZ2Agd2hpY2ggSSBhc3N1bWUgaXMgYSBib29sZWFuIHRvIGluZGljYXRlIHdoZXRoZXIgZnV6emluZyBpcyB3YXJyYW50ZWQsIHRoZW4gdGhlIGBGb2N1c1N5bWJvbHNgLCBhIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZW4ndCB1YmlxdWl0b3VzLCBhbmQgZmluYWxseSB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdoaWNoIGFyZSBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguIENoZWNrLCBjaGVjaywgY2hlY2suIExvb2tzIGxpa2UgZXZlcnl0aGluZyBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLlxuXG5Pa2F5LCBldmVyeXRoaW5nIGFwcGVhcnMgc291bmQgYW5kIGFjY3VyYXRlLiBMZXQncyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0MSwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MTguODQ2NzM0NTM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMzU0MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSEFORFNIQUtFXCIsXG4gICAgXCJTVU5SUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kc2hha2VfcmVxX2FsbG9jXCIsXG4gICAgXCJoYW5kc2hha2VfbmxfYWNjZXB0X2RvaXRcIixcbiAgICBcImhhbmRzaGFrZV9ubF9kb25lX2RvaXRcIixcbiAgICBcInRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIE5ldGxpbmsgYXR0cmlidXRlIHR5cGVzIGFuZCB2YWxpZGF0aW9uIHBvbGljaWVzIGZvciB0aGUgZ2VuZXJpYyBuZXRsaW5rIGhhbmRzaGFrZSBzZXJ2aWNlIChhY2NlcHQgaGFuZGxlciBjbGFzcyBhbmQgcmVtb3RlIGF1dGgga2V5IElEcykgYW5kIGZpeGVzIHRoZSBib3VuZGFyeSBjaGVjayBpbiBoYW5kc2hha2VfcmVxX2FsbG9jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcgYW5kIGhhbmRzaGFrZSByZXF1ZXN0IGFsbG9jYXRpb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9IQU5EU0hBS0VcIixcbiAgICBcIlNVTlJQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRzaGFrZV9yZXFfYWxsb2NcIixcbiAgICBcImhhbmRzaGFrZV9ubF9hY2NlcHRfZG9pdFwiLFxuICAgIFwiaGFuZHNoYWtlX25sX2RvbmVfZG9pdFwiLFxuICAgIFwidGxzX2hhbmRzaGFrZV9yZW1vdGVfcGVlcmlkc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgTmV0bGluayBhdHRyaWJ1dGUgdHlwZXMgYW5kIHZhbGlkYXRpb24gcG9saWNpZXMgZm9yIHRoZSBnZW5lcmljIG5ldGxpbmsgaGFuZHNoYWtlIHNlcnZpY2UgKGFjY2VwdCBoYW5kbGVyIGNsYXNzIGFuZCByZW1vdGUgYXV0aCBrZXkgSURzKSBhbmQgZml4ZXMgdGhlIGJvdW5kYXJ5IGNoZWNrIGluIGhhbmRzaGFrZV9yZXFfYWxsb2MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBhbmQgaGFuZHNoYWtlIHJlcXVlc3QgYWxsb2NhdGlvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjE4Ljk2OTA5NTM2OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNzk0MDQ3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDoxOC45Njk2NTk1NjhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODA3ODgzNDUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyZGQyOGU4N2NmZGY4OTk4NjgyZTg1ODRlMzVlYjA5YmIxY2QxZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjQzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG5pbmRleCBmZmVjMTJiNDY3NTk3Li4wNDk4YWRhMmRkOTdhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2hhbmRzaGFrZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxcbkBAIC0yMiw3ICsyMiw4IEBAIGRlZmluaXRpb25zOlxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IGhhbmRsZXItY2xhc3NcbiAgICAgdmFsdWUtc3RhcnQ6IDBcbi0gICAgZW50cmllczogW25vbmUsIHRsc2hkLCBtYXhdXG4rICAgIGVudHJpZXM6IFtub25lLCB0bHNoZF1cbisgICAgcmVuZGVyLW1heDogdHJ1ZVxuICAgLVxuICAgICB0eXBlOiBlbnVtXG4gICAgIG5hbWU6IG1zZy10eXBlXG5AQCAtNjcsNyArNjgsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIGVudW06IGF1dGhcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwZWVyLWlkZW50aXR5XG4tICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgICAgbXVsdGktYXR0cjogdHJ1ZVxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGNlcnRpZmljYXRlXG5AQCAtNzksNyArODAsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHN0cmluZ1xuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGtleXJpbmdcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAtXG4gICAgIG5hbWU6IGRvbmVcbiAgICAgYXR0cmlidXRlczpcbkBAIC05Myw3ICs5NCw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcmVtb3RlLWF1dGhcbi0gICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgdHlwZTogczMyXG4gICAgICAgICBtdWx0aS1hdHRyOiB0cnVlXG4gXG4gb3BlcmF0aW9uczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbmluZGV4IGQ3ZTQwZjU5NDg4ODYuLmY5MDdhYTA4MjUyMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaGFuZHNoYWtlLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9oYW5kc2hha2UuaFxuQEAgLTEzLDcgKzEzLDEwIEBAXG4gZW51bSBoYW5kc2hha2VfaGFuZGxlcl9jbGFzcyB7XG4gXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FLFxuIFx0SEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfVExTSEQsXG4tXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXG4rXHQvKiBwcml2YXRlOiAqL1xuK1x0X19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4rXHRIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggPSAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLSAxKVxuIH07XG4gXG4gZW51bSBoYW5kc2hha2VfbXNnX3R5cGUge1xuZGlmZiAtLWdpdCBhL25ldC9oYW5kc2hha2UvZ2VubC5jIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbmluZGV4IGZlYWMxYWQwNjNlZTcuLjI2ZTNlZmVjNjRjYTcgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2dlbmwuY1xuKysrIGIvbmV0L2hhbmRzaGFrZS9nZW5sLmNcbkBAIC0xNCwxNCArMTQsMTQgQEBcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XG4tXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMiksXG4rXHRbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdID0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMSksXG4gfTtcbiBcbiAvKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xuIFx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXG4gXHRbSEFORFNIQUtFX0FfRE9ORV9TT0NLRkRdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4tXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbitcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxuIH07XG4gXG4gLyogT3BzIHRhYmxlIGZvciBoYW5kc2hha2UgKi9cbmRpZmYgLS1naXQgYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbmluZGV4IDNkZDUwNzQ3MGQ1ZmUuLjRiOTlhY2Q5ZjljN2UgMTAwNjQ0XG4tLS0gYS9uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmNcbisrKyBiL25ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY1xuQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18yID0ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBoYW5kc2hha2VfcHJvdG8gaGFuZHNoYWtlX3JlcV9hbGxvY19wcm90b18zID0ge1xuLVx0LmhwX2hhbmRsZXJfY2xhc3NcdD0gSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYLFxuK1x0LmhwX2hhbmRsZXJfY2xhc3NcdD0gX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGhhbmRzaGFrZV9wcm90byBoYW5kc2hha2VfcmVxX2FsbG9jX3Byb3RvXzQgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuaW5kZXggY2QzMGQ1NGQwNTAxZC4uZmY3MzllZTgxY2I4MiAxMDA2NDRcbi0tLSBhL25ldC9oYW5kc2hha2UvcmVxdWVzdC5jXG4rKysgYi9uZXQvaGFuZHNoYWtlL3JlcXVlc3QuY1xuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqaGFuZHNoYWtlX3JlcV9hbGxvYyhjb25zdCBzdHJ1Y3QgaGFuZHNoYWtlX3Byb3RvICpwcm90byxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2M9IEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX05PTkUpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHByb3RvLVx1MDAzZWhwX2hhbmRsZXJfY2xhc3MgXHUwMDNlPSBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpXG4rXHRpZiAocHJvdG8tXHUwMDNlaHBfaGFuZGxlcl9jbGFzcyBcdTAwM2UgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICghcHJvdG8tXHUwMDNlaHBfYWNjZXB0IHx8ICFwcm90by1cdTAwM2VocF9kb25lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjE4Ljk2OTY2MDU3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDc1NTk1NDY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTi9LQVNBTiBQYXRjaCBFdmFsdWF0aW9uIC0gSGFuZHNoYWtlIFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIEtNU0FOL0tBU0FOIGFwcGxpY2FiaWxpdHkuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgdHJ1ZSBvciBmYWxzZSBhbmQgcmVjb3JkIG15IHJlYXNvbmluZyB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sLiBMZXQncyBkaWcgaW4uXG5cblRoZSBkaWZmIHRhcmdldHMgdGhlIGhhbmRzaGFrZSBzdWJzeXN0ZW0sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHJlYWQtdGhyb3VnaCBzaG93cyB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgc3RydWN0dXJlcyBhbmQgZW51bXMgd2l0aGluIHRoZSBuZXRsaW5rIGhhbmRzaGFrZSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvaGFuZHNoYWtlLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2hhbmRzaGFrZS5oYCwgYG5ldC9oYW5kc2hha2UvZ2VubC5jYCwgYG5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuY2AsIGFuZCBgbmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmNgLlxuXG5UaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlOlxuXG4qICAgKipFbnVtIGNoYW5nZXM6KiogVGhlIGBoYW5kc2hha2VfaGFuZGxlcl9jbGFzc2AgZW51bSBoYXMgYmVlbiBtb2RpZmllZC4gIFdlJ3ZlIGdvdCBuZXcgZW50cmllcyBsaWtlIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19OT05FYCBhbmQgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX1RMU0hEYCwgYW5kIHRoZSBkZWZpbml0aW9uIG9mIGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIGlzIGJlaW5nIGFkanVzdGVkLiBUaGlzIGlzIGEgcG90ZW50aWFsIHJlZCBmbGFnLCBhcyBlbnVtIGNoYW5nZXMgY2FuIHNvbWV0aW1lcyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LlxuKiAgICoqVHlwZSBjaGFuZ2VzOioqIFNldmVyYWwgYXR0cmlidXRlcyByZWxhdGVkIHRvIG5ldGxpbmsgbWVzc2FnZXMgKGBwZWVyLWlkZW50aXR5YCwgYGtleXJpbmdgLCBgcmVtb3RlLWF1dGhgKSBhcmUgaGF2aW5nIHRoZWlyIHR5cGVzIHN3aXRjaGVkIGZyb20gYHUzMmAgdG8gYHMzMmAuXG4qICAgKipQb2xpY3kgYWRqdXN0bWVudHM6KiogVGhlIG5ldGxpbmsgcG9saWN5IGZvciBoYW5kbGluZyBoYW5kc2hha2UgbWVzc2FnZXMgKGBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeWAsIGBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lgKSBpcyBiZWluZyBtb2RpZmllZCB0byByZWZsZWN0IHRoZXNlIHR5cGUgY2hhbmdlcy5cbiogICAqKkJvdW5kcyBDaGVja3M6KiogVGhlcmUncyBhIHNsaWdodCBhZGp1c3RtZW50IHRvIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGBcdTAwM2VgIGluc3RlYWQgb2YgYFx1MDAzZT1gIHJlbGF0aW5nIHRvICBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYC5cblxuTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlICptaWdodCogaW50cm9kdWNlIG5ldyBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIHR5cGUgY2hhbmdlcyBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnRlZ2VycyBhcmUgY29uY2VybmluZy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgcGVyZmVjdGx5IGZpbmUgYW5kIGlzIGp1c3QgYSBuZWNlc3NhcnkgcmVmaW5lbWVudCwgYnV0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBvcmlnaW5hbCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIHVzZWQgaW4gc2NlbmFyaW9zIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc2lnbmVkIGludGVnZXIgdHlwZS5cblxuVG8gZGV0ZXJtaW5lIGBOZWVkc0tNU0FOYCBkZWZpbml0aXZlbHksIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlc2UgYXR0cmlidXRlcyByZXByZXNlbnQgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGhhbmRzaGFrZV9oYW5kbGVyX2NsYXNzYCBpcyBhbGwgYWJvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhvc2UgdHlwZSBjaGFuZ2VzIGFuZCB3aGV0aGVyIHRoZXJlJ3MgYSByaXNrIG9mIGludGVnZXIgb3ZlcmZsb3csIHVuZGVyZmxvdywgb3Igc2lnbiBleHRlbnNpb24gaXNzdWVzLiBTbywgSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZm9sbG93IGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlJ3MgYW55IHBvaW50ZXIgYXJpdGhtZXRpYyBvciBtZW1vcnkgbWFuaXB1bGF0aW9uIGludm9sdmVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgZGVhbHMgd2l0aCBwb3RlbnRpYWxseSBuZXR3b3JrLXJlbGF0ZWQgZGF0YSAodGhlIGhhbmRzaGFrZSBwcm90b2NvbCkuIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYG5ldC9oYW5kc2hha2VgIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgS01TQU4gd291bGQgYmUgdmFsdWFibGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjMzLjcyNTYxODExNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNTcwMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlL2dlbmwuYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGFuZHNoYWtlX2FjY2VwdF9ubF9wb2xpY3lbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MgKyAxXSA9IHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTIwLS8qIEhBTkRTSEFLRV9DTURfRE9ORSAtIGRvICovXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MjE6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeVtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIICsgMV0gPSB7XFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjItXFx0W0hBTkRTSEFLRV9BX0RPTkVfU1RBVFVTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIE1BWF9FUlJOTyksXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMjMtXFx0W0hBTkRTSEFLRV9BX0RPTkVfU09DS0ZEXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjI0OlxcdFtIQU5EU0hBS0VfQV9ET05FX1JFTU9URV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTI1LX07XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGhhbmRzaGFrZV9ubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTM5LVxcdFxcdC5wb2xpY3lcXHRcXHQ9IGhhbmRzaGFrZV9kb25lX25sX3BvbGljeSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo0MDpcXHRcXHQubWF4YXR0clxcdD0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy00MS1cXHRcXHQuZmxhZ3NcXHRcXHQ9IEdFTkxfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz02MT1zdGF0aWMgdm9pZCB0bHNfaGFuZHNoYWtlX3JlbW90ZV9wZWVyaWRzKHN0cnVjdCB0bHNfaGFuZHNoYWtlX3JlcSAqdHJlcSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy03MC1cXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjcxOlxcdFxcdGlmIChubGFfdHlwZShubGEpID09IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcyLVxcdFxcdFxcdGkrKztcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy04MC1cXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjgxOlxcdFxcdGlmIChubGFfdHlwZShubGEpID09IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgyLVxcdFxcdFxcdHRyZXEtXFx1MDAzZXRoX3BlZXJpZFtpKytdID0gbmxhX2dldF91MzIobmxhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NDQ6MzQuMzc3MjAwNjAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDU1MTA5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3QgbWF0dGVyOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZXQvaGFuZHNoYWtlYCBDb21wb25lbnRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIGhvdyBgbmV0L2hhbmRzaGFrZWAgb3JjaGVzdHJhdGVzIHRoaW5ncy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGludGVycGxheSBvZiBoYW5kbGVyIGNsYXNzZXMsIHBlZXItaWRlbnRpdHkgbWFuYWdlbWVudCwgdGhlIGtleXJpbmcsIGFuZCByZW1vdGUgYXV0aGVudGljYXRpb24gd2l0aGluIHRoaXMgbW9kdWxlLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZWxlbWVudHMgdG8gbWFrZSBhIGp1ZGdlbWVudC5cblxuVGhlcmVmb3JlLCB0aGUgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIG1ldGhvZGljYWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvaGFuZHNoYWtlL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIGdvaW5nIHRvIGJlIGxhaWQgb3V0LCB0aGUgYWN0dWFsIGNvZGUgdGhhdCBkZWZpbmVzIHRoZXNlIGludGVyYWN0aW9ucy4gVGhpcyBzaG91bGQgYWxsb3cgYSBkZWVwIGRpdmUgaW50byBob3cgdGhlc2Ugc3lzdGVtcyBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDozNy4yMjI3MTQ2ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcIm5ldC9oYW5kc2hha2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWxlcnQuY1wiLFxuICAgIFwiZ2VubC5jXCIsXG4gICAgXCJnZW5sLmhcIixcbiAgICBcImhhbmRzaGFrZS10ZXN0LmNcIixcbiAgICBcImhhbmRzaGFrZS5oXCIsXG4gICAgXCJuZXRsaW5rLmNcIixcbiAgICBcInJlcXVlc3QuY1wiLFxuICAgIFwidGxzaGQuY1wiLFxuICAgIFwidHJhY2UuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDozNy4yMjI3OTk4NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5Njg3MDQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MgYXNzdW1pbmcgZXhwZXJ0aXNlIGluIHRoZSByZWxldmFudCBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEhhbmRzaGFrZSBQcm90b2NvbCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIGhhbmRzaGFrZSBwcm90b2NvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgYWxsIHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXNzYWdlIGhhbmRsaW5nLiBTbywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyBhIGZldyBrZXkgZmlsZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvaGFuZHNoYWtlL2dlbmwuaGAuIFRoYXQgaGVhZGVyIHdpbGwgcHJvYmFibHkgb3V0bGluZSB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZSBkZWZpbml0aW9ucyBhbmQgYW55IGN1c3RvbSBtZXNzYWdlIHR5cGVzIHVzZWQgaW4gdGhlIGhhbmRzaGFrZS4gVGhlbiBJIG5lZWQgdG8gc2VlIGhvdyB0aG9zZSBtZXNzYWdlIHR5cGVzIGFyZSBwcm9jZXNzZWQgYW5kIGhhbmRsZWQsIHNvIGBuZXQvaGFuZHNoYWtlL25ldGxpbmsuY2AgaXMgdGhlIG5leHQgb2J2aW91cyB0YXJnZXQ7IHRoYXQncyB3aGVyZSB0aGUgbmV0bGluayBpbnRlcmFjdGlvbiBsb2dpYyB1c3VhbGx5IHJlc2lkZXMuIEFuZCBmaW5hbGx5LCBiZWNhdXNlIHRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyBzcGVjaWZpYywgSSBuZWVkIHRvIHNlZSB3aGF0IGBuZXQvaGFuZHNoYWtlL3Rsc2hkLmNgIGRlYWxzIHdpdGguIEkgYmV0IHRoYXQgaGFuZGxlcyBhbnkgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhhbmRzaGFrZSBEZXRhaWxzLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo0NDozOS40MTk2NzM3NDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzI4MTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWVyX2lkZW50aXR5fGtleXJpbmd8cmVtb3RlX2F1dGh8SEFORFNIQUtFX0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hhbmRzaGFrZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaGFuZHNoYWtlL2dlbmwuYy0xNS0vKiBIQU5EU0hBS0VfQ01EX0FDQ0VQVCAtIGRvICovXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhhbmRzaGFrZV9hY2NlcHRfbmxfcG9saWN5W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTICsgMV0gPSB7XFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6MTc6XFx0W0hBTkRTSEFLRV9BX0FDQ0VQVF9IQU5ETEVSX0NMQVNTXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDEpLFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jLTE4LX07XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yMC0vKiBIQU5EU0hBS0VfQ01EX0RPTkUgLSBkbyAqL1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3lbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSCArIDFdID0ge1xcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIyOlxcdFtIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10gPSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCBNQVhfRVJSTk8pLFxcbm5ldC9oYW5kc2hha2UvZ2VubC5jOjIzOlxcdFtIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzoyNDpcXHRbSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSF0gPSB7IC50eXBlID0gTkxBX1MzMiwgfSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0yNS19O1xcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM9Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBoYW5kc2hha2Vfbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zMi1cXHRcXHQucG9saWN5XFx0XFx0PSBoYW5kc2hha2VfYWNjZXB0X25sX3BvbGljeSxcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzozMzpcXHRcXHQubWF4YXR0clxcdD0gSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MsXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtMzQtXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2dlbmwuYy0zOS1cXHRcXHQucG9saWN5XFx0XFx0PSBoYW5kc2hha2VfZG9uZV9ubF9wb2xpY3ksXFxubmV0L2hhbmRzaGFrZS9nZW5sLmM6NDA6XFx0XFx0Lm1heGF0dHJcXHQ9IEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEgsXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNDEtXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0FETUlOX1BFUk0gfCBHRU5MX0NNRF9DQVBfRE8sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0zNz1pbnQgaGFuZHNoYWtlX2dlbmxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGhhbmRzaGFrZV9wcm90byAqcHJvdG8sXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy01OS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzo2MDpcXHRpZiAobmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTUyxcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy02MS1cXHRcXHRcXHRwcm90by1cXHUwMDNlaHBfaGFuZGxlcl9jbGFzcykgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz05MD1pbnQgaGFuZHNoYWtlX25sX2FjY2VwdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDEtXFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxMDI6XFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1MpKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEwMy1cXHRcXHRnb3RvIG91dF9zdGF0dXM7XFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTA0OlxcdGNsYXNzID0gbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NdKTtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xMDUtXFxuLS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYz0xMzM9aW50IGhhbmRzaGFrZV9ubF9kb25lX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTEzOS1cXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNDA6XFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgSEFORFNIQUtFX0FfRE9ORV9TT0NLRkQpKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE0MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYzoxNDI6XFx0ZmQgPSBubGFfZ2V0X3MzMihpbmZvLVxcdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NPQ0tGRF0pO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE0My1cXG4tLVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE1OC1cXHRzdGF0dXMgPSAtRUlPO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE1OTpcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbSEFORFNIQUtFX0FfRE9ORV9TVEFUVVNdKVxcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE2MDpcXHRcXHRzdGF0dXMgPSAtKGludClubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tIQU5EU0hBS0VfQV9ET05FX1NUQVRVU10pO1xcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE2MS1cXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0yNz1zdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEge1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM1LVxcdGNvbnN0IGNoYXJcXHRcXHQqdGhfcGVlcm5hbWU7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM2OlxcdGtleV9zZXJpYWxfdFxcdFxcdHRoX2tleXJpbmc7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTM3LVxcdGtleV9zZXJpYWxfdFxcdFxcdHRoX2NlcnRpZmljYXRlO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQ1PXRsc19oYW5kc2hha2VfcmVxX2luaXQoc3RydWN0IGhhbmRzaGFrZV9yZXEgKnJlcSxcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy01My1cXHR0cmVxLVxcdTAwM2V0aF9wZWVybmFtZSA9IGFyZ3MtXFx1MDAzZXRhX3BlZXJuYW1lO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzo1NDpcXHR0cmVxLVxcdTAwM2V0aF9rZXlyaW5nID0gYXJncy1cXHUwMDNldGFfa2V5cmluZztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNTUtXFx0dHJlcS1cXHUwMDNldGhfbnVtX3BlZXJpZHMgPSAwO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTYxPXN0YXRpYyB2b2lkIHRsc19oYW5kc2hha2VfcmVtb3RlX3BlZXJpZHMoc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTcwLVxcdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6NzE6XFx0XFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNzItXFx0XFx0XFx0aSsrO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTgwLVxcdG5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6ODE6XFx0XFx0aWYgKG5sYV90eXBlKG5sYSkgPT0gSEFORFNIQUtFX0FfRE9ORV9SRU1PVEVfQVVUSClcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtODItXFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfcGVlcmlkW2krK10gPSBubGFfZ2V0X3UzMihubGEpO1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTk1PXN0YXRpYyB2b2lkIHRsc19oYW5kc2hha2VfZG9uZShzdHJ1Y3QgaGFuZHNoYWtlX3JlcSAqcmVxLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfS0VZUylcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTEyOnN0YXRpYyBpbnQgdGxzX2hhbmRzaGFrZV9wcml2YXRlX2tleXJpbmcoc3RydWN0IHRsc19oYW5kc2hha2VfcmVxICp0cmVxKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTMte1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTQ6XFx0a2V5X3JlZl90IHByb2Nlc3Nfa2V5cmluZ19yZWYsIGtleXJpbmdfcmVmO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMTUtXFx0aW50IHJldDtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTE2LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMTc6XFx0aWYgKHRyZXEtXFx1MDAzZXRoX2tleXJpbmcgPT0gVExTX05PX0tFWVJJTkcpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTExOC1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTE5LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMjA6XFx0cHJvY2Vzc19rZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShLRVlfU1BFQ19QUk9DRVNTX0tFWVJJTkcsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEyMS1cXHRcXHRcXHRcXHRcXHQgICAgICBLRVlfTE9PS1VQX0NSRUFURSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTIyLVxcdFxcdFxcdFxcdFxcdCAgICAgIEtFWV9ORUVEX1dSSVRFKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTIzOlxcdGlmIChJU19FUlIocHJvY2Vzc19rZXlyaW5nX3JlZikpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTI0OlxcdFxcdHJldCA9IFBUUl9FUlIocHJvY2Vzc19rZXlyaW5nX3JlZik7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEyNS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMjctXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEyODpcXHRrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleSh0cmVxLVxcdTAwM2V0aF9rZXlyaW5nLCBLRVlfTE9PS1VQX0NSRUFURSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTI5LVxcdFxcdFxcdFxcdCAgICAgIEtFWV9ORUVEX0xJTkspO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxMzA6XFx0aWYgKElTX0VSUihrZXlyaW5nX3JlZikpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTMxOlxcdFxcdHJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzItXFx0XFx0Z290byBvdXRfcHV0X2tleTtcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzQtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEzNTpcXHRyZXQgPSBrZXlfbGluayhrZXlfcmVmX3RvX3B0cihwcm9jZXNzX2tleXJpbmdfcmVmKSxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTM2OlxcdFxcdCAgICAgICBrZXlfcmVmX3RvX3B0cihrZXlyaW5nX3JlZikpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xMzctXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjEzODpcXHRrZXlfcmVmX3B1dChrZXlyaW5nX3JlZik7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTEzOS1vdXRfcHV0X2tleTpcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTQwOlxcdGtleV9yZWZfcHV0KHByb2Nlc3Nfa2V5cmluZ19yZWYpO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNDEtb3V0Olxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE0NC0jZWxzZVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNDU6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3ByaXZhdGVfa2V5cmluZyhzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE0Ni17XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTUwLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNTE6c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9wZWVyX2lkZW50aXR5KHN0cnVjdCBza19idWZmICptc2csXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1Mi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9yZXEgKnRyZXEpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTU2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmVxLVxcdTAwM2V0aF9udW1fcGVlcmlkczsgaSsrKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNTc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1BFRVJfSURFTlRJVFksXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE1OC1cXHRcXHRcXHRcXHR0cmVxLVxcdTAwM2V0aF9wZWVyaWRbaV0pIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0xNjM9c3RhdGljIGludCB0bHNfaGFuZHNoYWtlX3B1dF9jZXJ0aWZpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3MS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MTcyOlxcdGVudHJ5X2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9DRVJUSUZJQ0FURSk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3My1cXHRpZiAoIWVudHJ5X2F0dHIpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTc1LVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoxNzY6XFx0aWYgKG5sYV9wdXRfczMyKG1zZywgSEFORFNIQUtFX0FfWDUwOV9DRVJULFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xNzctXFx0XFx0XFx0dHJlcS1cXHUwMDNldGhfY2VydGlmaWNhdGUpIHx8XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjE3ODpcXHQgICAgbmxhX3B1dF9zMzIobXNnLCBIQU5EU0hBS0VfQV9YNTA5X1BSSVZLRVksXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTE3OS1cXHRcXHRcXHR0cmVxLVxcdTAwM2V0aF9wcml2a2V5KSkge1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTE5Nj1zdGF0aWMgaW50IHRsc19oYW5kc2hha2VfYWNjZXB0KHN0cnVjdCBoYW5kc2hha2VfcmVxICpyZXEsXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjAzLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMDQ6XFx0cmV0ID0gdGxzX2hhbmRzaGFrZV9wcml2YXRlX2tleXJpbmcodHJlcSk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIwNS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTUtXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIxNjpcXHRyZXQgPSBubGFfcHV0X3MzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9TT0NLRkQsIGZkKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjE3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMTgtXFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMTk6XFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfTUVTU0FHRV9UWVBFLCB0cmVxLVxcdTAwM2V0aF90eXBlKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjIwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIyMi1cXHRpZiAodHJlcS1cXHUwMDNldGhfcGVlcm5hbWUpIHtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjIzOlxcdFxcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgSEFORFNIQUtFX0FfQUNDRVBUX1BFRVJOQU1FLFxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMjQtXFx0XFx0XFx0XFx0ICAgICB0cmVxLVxcdTAwM2V0aF9wZWVybmFtZSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjI4LVxcdGlmICh0cmVxLVxcdTAwM2V0aF90aW1lb3V0X21zKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIyOTpcXHRcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9USU1FT1VULCB0cmVxLVxcdTAwM2V0aF90aW1lb3V0X21zKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjMwLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzMi1cXHR9XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjIzMzpcXHRpZiAodHJlcS1cXHUwMDNldGhfa2V5cmluZykge1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMzQ6XFx0XFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBIQU5EU0hBS0VfQV9BQ0NFUFRfS0VZUklORyxcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjM1OlxcdFxcdFxcdFxcdCAgdHJlcS1cXHUwMDNldGhfa2V5cmluZyk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTIzNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMzktXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI0MDpcXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIEhBTkRTSEFLRV9BX0FDQ0VQVF9BVVRIX01PREUsXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0MS1cXHRcXHRcXHQgIHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQ0LVxcdHN3aXRjaCAodHJlcS1cXHUwMDNldGhfYXV0aF9tb2RlKSB7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI0NTpcXHRjYXNlIEhBTkRTSEFLRV9BVVRIX1BTSzpcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjQ2OlxcdFxcdHJldCA9IHRsc19oYW5kc2hha2VfcHV0X3BlZXJfaWRlbnRpdHkobXNnLCB0cmVxKTtcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjQ3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI0OS1cXHRcXHRicmVhaztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjUwOlxcdGNhc2UgSEFORFNIQUtFX0FVVEhfWDUwOTpcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjUxLVxcdFxcdHJldCA9IHRsc19oYW5kc2hha2VfcHV0X2NlcnRpZmljYXRlKG1zZywgdHJlcSk7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mjg2PWludCB0bHNfY2xpZW50X2hlbGxvX2Fub24oY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjk1LVxcdHRyZXEtXFx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfQ0xJRU5USEVMTE87XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjI5NjpcXHR0cmVxLVxcdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9VTkFVVEg7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTI5Ny1cXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYz0zMTI9aW50IHRsc19jbGllbnRfaGVsbG9feDUwOShjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zMjEtXFx0dHJlcS1cXHUwMDNldGhfdHlwZSA9IEhBTkRTSEFLRV9NU0dfVFlQRV9DTElFTlRIRUxMTztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzIyOlxcdHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSA9IEhBTkRTSEFLRV9BVVRIX1g1MDk7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTMyMy1cXHR0cmVxLVxcdTAwM2V0aF9jZXJ0aWZpY2F0ZSA9IGFyZ3MtXFx1MDAzZXRhX215X2NlcnQ7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9MzQxPWludCB0bHNfY2xpZW50X2hlbGxvX3Bzayhjb25zdCBzdHJ1Y3QgdGxzX2hhbmRzaGFrZV9hcmdzICphcmdzLCBnZnBfdCBmbGFncylcXG4tLVxcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zNTUtXFx0dHJlcS1cXHUwMDNldGhfdHlwZSA9IEhBTkRTSEFLRV9NU0dfVFlQRV9DTElFTlRIRUxMTztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MzU2OlxcdHRyZXEtXFx1MDAzZXRoX2F1dGhfbW9kZSA9IEhBTkRTSEFLRV9BVVRIX1BTSztcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzU3LVxcdHRyZXEtXFx1MDAzZXRoX251bV9wZWVyaWRzID0gYXJncy1cXHUwMDNldGFfbnVtX3BlZXJpZHM7XFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM9Mzc1PWludCB0bHNfc2VydmVyX2hlbGxvX3g1MDkoY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMzg0LVxcdHRyZXEtXFx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfU0VSVkVSSEVMTE87XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjM4NTpcXHR0cmVxLVxcdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9YNTA5O1xcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0zODYtXFx0dHJlcS1cXHUwMDNldGhfY2VydGlmaWNhdGUgPSBhcmdzLVxcdTAwM2V0YV9teV9jZXJ0O1xcbi0tXFxubmV0L2hhbmRzaGFrZS90bHNoZC5jPTQwMz1pbnQgdGxzX3NlcnZlcl9oZWxsb19wc2soY29uc3Qgc3RydWN0IHRsc19oYW5kc2hha2VfYXJncyAqYXJncywgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtNDEyLVxcdHRyZXEtXFx1MDAzZXRoX3R5cGUgPSBIQU5EU0hBS0VfTVNHX1RZUEVfU0VSVkVSSEVMTE87XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jOjQxMzpcXHR0cmVxLVxcdTAwM2V0aF9hdXRoX21vZGUgPSBIQU5EU0hBS0VfQVVUSF9QU0s7XFxubmV0L2hhbmRzaGFrZS90bHNoZC5jLTQxNC1cXHR0cmVxLVxcdTAwM2V0aF9udW1fcGVlcmlkcyA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjQwLjI3Njk2MTE3MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzcxNTA0MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBIYW5kc2hha2UgU3Vic3lzdGVtIENsZWFudXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlZmFjdG9yaW5nLCBmb2N1c2luZyBvbiB0aWR5aW5nIHVwIHRoZSBoYW5kc2hha2Ugc3Vic3lzdGVtJ3MgQVBJIGFuZCBhc3NvY2lhdGVkIG5ldGxpbmsgcG9saWNpZXMuIEkgc2VlIGl0IHN0YXJ0cyBieTpcblxuMS4gICoqRG9jdW1lbnRhdGlvbiBVcGRhdGU6KiogTW9kaWZ5aW5nIHRoZSBZQU1MIHNwZWMgZm9yIHRoZSBoYW5kc2hha2UgbmV0bGluayBpbnRlcmZhY2UuIEknbSBub3RpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGBoYW5kbGVyLWNsYXNzYCBlbnVtJ3MgYHJlbmRlci1tYXhgIHByb3BlcnR5LCBlZmZlY3RpdmVseSBzdGFuZGFyZGl6aW5nIHRoZSB1c2Ugb2YgYF9fSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYCBhbmQgYEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgZm9yIGRlZmluaW5nIHRoZSBtYXhpbXVtIHZhbHVlLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UgZm9yIGVudW0gbWFuYWdlbWVudC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBhdHRyaWJ1dGUgdHlwZXMgZm9yIHBlZXIgaWRlbnRpdHksIGtleXJpbmcsIGFuZCByZW1vdGUgYXV0aGVudGljYXRpb24gdG8gdXNlIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKGBzMzJgKSBpbnN0ZWFkIG9mIHVuc2lnbmVkIChgdTMyYCkuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXgsIGdpdmVuIHRoYXQga2V5IHNlcmlhbCBJRHMgKGBrZXlfc2VyaWFsX3RgKSBpbiB0aGUga2VybmVsIGFyZSBzaWduZWQgaW50ZWdlcnMuXG5cbjIuICAqKkhlYWRlciBhbmQgUG9saWN5IEFkanVzdG1lbnRzOioqIEluIHRoZSBgaGFuZHNoYWtlLmhgIGhlYWRlciwgdGhlIGVudW0gZGVmaW5pdGlvbiBpcyBub3cgY2xlYXIsIHVzaW5nIGBfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWGAgZm9yIHRoZSBpbnRlcm5hbCB2YWx1ZSBhbmQgdGhlbiBkZXJpdmluZyBgSEFORFNIQUtFX0hBTkRMRVJfQ0xBU1NfTUFYYC4gVGhlIGBnZW5sLmNgIGNoYW5nZXMgYXJlIHNpZ25pZmljYW50OiBJIHNlZSBhZGp1c3RtZW50cyB0byB0aGUgbmV0bGluayBwb2xpY3kuIGBIQU5EU0hBS0VfQV9BQ0NFUFRfSEFORExFUl9DTEFTU2Agbm93IGhhcyB0aGUgY29ycmVjdCBtYXhpbXVtIHZhbHVlICgxKSwgYW5kIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24gcG9saWN5J3MgdHlwZSBpcyBjb3JyZWN0ZWQgdG8gYE5MQV9TMzJgLCBtaXJyb3JpbmcgdGhlIHNwZWMncyBjaGFuZ2UuXG5cbjMuICAqKlRlc3QgYW5kIFVzYWdlIFVwZGF0ZXM6KiogVGhlIHBhdGNoIGV2ZW4gdXBkYXRlcyB0aGUgdGVzdCBjb2RlIChgaGFuZHNoYWtlLXRlc3QuY2ApIHRvIHVzZSBgX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgIHByb3Blcmx5LiBGaW5hbGx5LCB0aGUgYWxsb2NhdGlvbiBsb2dpYyBpbiBgcmVxdWVzdC5jYCBub3cgY29ycmVjdGx5IGJvdW5kcyB0aGUgYGhwX2hhbmRsZXJfY2xhc3NgIGFnYWluc3QgdGhlICphY3R1YWwqIG1heGltdW0gdmFsaWQgdmFsdWUgKGBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVhgKSwgbm90IGFuIG9mZi1ieS1vbmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGVyZSBhIHJpc2sgb2YgaW50cm9kdWNpbmcgbWVtb3J5IGlzc3Vlcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4qICAgKipVbmluaXRpYWxpemVkIG1lbW9yeToqKiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgbGVmdC4gVGhpcyBpcyBhIHBvc2l0aXZlIHNpZ24uXG4qICAgKipOZXRsaW5rIGF0dHJpYnV0ZSB2YWxpZGF0aW9uOioqIFRoZSBjaGFuZ2UgdG8gYEhBTkRTSEFLRV9BX0RPTkVfUkVNT1RFX0FVVEhgIHZhbGlkYXRpb24gZnJvbSBgTkxBX1UzMmAgdG8gYE5MQV9TMzJgIGlzIGNyaXRpY2FsLCBidXQgdGhlIHNpemUgcmVtYWlucyB0aGUgc2FtZSAoNCBieXRlcykuIFRoZSBgSEFORFNIQUtFX0FfQUNDRVBUX0hBTkRMRVJfQ0xBU1NgIHZhbGlkYXRpb24gaXMgKnRpZ2h0ZW5lZCosIG1vdmluZyB0aGUgbWF4IGRvd24gZnJvbSAyIHRvIDEgKHdoaWNoIGlzIHRoZSBjb3JyZWN0IGhpZ2hlc3QgdmFsaWQgdmFsdWUpLCB3aGljaCBpcyBhIGNsZWFyIGltcHJvdmVtZW50LlxuKiAgICoqQm91bmRzIGNoZWNraW5nOioqIFRoZSB0aWdodGVyIGJvdW5kcyBjaGVja2luZyBpcyAqZ29vZCouIFdlJ3JlIGVuc3VyaW5nIHdlICpkb24ndCogYWNjZXNzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgICoqSW5mb3JtYXRpb24gTGVha2FnZToqKiBUaGlzIGlzIGEga2V5IGFyZWEsIGFuZCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGVyZSdzIG5vIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBoZXJlLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNhZmUgcmVmYWN0b3JpbmcgcGF0Y2guIEl0J3MgYSBjbGVhbnVwLCBub3QgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y3Rpb24sIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGhhemFyZHMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSB0aGUgcmlnaHQgdG9vbCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBJIGRvbid0IHNlZSBhbnkgS01TQU4tc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggY2FuIHByb2NlZWQgd2l0aG91dCBLTVNBTiBmdXp6aW5nLiBJdCdzIGEgcHVyZSBBUEkvVUFQSSBjbGVhbnVwIGFuZCBuZXRsaW5rIHBvbGljeSBhZGp1c3RtZW50IGZvciB0aGUgaGFuZHNoYWtlIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODAsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjQ0OjQ3LjA0ODQ2ODE5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgaGFuZHNoYWtlIG5ldGxpbmsgc3BlY2lmaWNhdGlvbiBhbmQgaW50ZXJuYWwga2VybmVsIGRlZmluaXRpb25zIHRvIHN0YW5kYXJkaXplIHRoZSBlbnVtIG5hbWluZyBjb252ZW50aW9uIChfX0hBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCAvIEhBTkRTSEFLRV9IQU5ETEVSX0NMQVNTX01BWCkgYW5kIHVwZGF0ZXMgbmV0bGluayBwb2xpY2llcyAoY2hhbmdpbmcgcmVtb3RlLWF1dGggZnJvbSBOTEFfVTMyIHRvIE5MQV9TMzIgZm9yIGtleV9zZXJpYWxfdCBhbmQgYWRqdXN0aW5nIHRoZSBtYXggaGFuZGxlciBjbGFzcyBwb2xpY3kpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgbmV0bGluayBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgaW50ZWdlciBib3VuZHMgY2hlY2tpbmcuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgc3RydWN0IHBhZGRpbmcgbW9kaWZpY2F0aW9ucywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFueSBnZW5lcmFsIGJvdW5kcyBvciBsb2dpYyBpc3N1ZXMgYXJlIHN1ZmZpY2llbnRseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGhhbmRzaGFrZSBuZXRsaW5rIHNwZWNpZmljYXRpb24gYW5kIGludGVybmFsIGtlcm5lbCBkZWZpbml0aW9ucyB0byBzdGFuZGFyZGl6ZSB0aGUgZW51bSBuYW1pbmcgY29udmVudGlvbiAoX19IQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVggLyBIQU5EU0hBS0VfSEFORExFUl9DTEFTU19NQVgpIGFuZCB1cGRhdGVzIG5ldGxpbmsgcG9saWNpZXMgKGNoYW5naW5nIHJlbW90ZS1hdXRoIGZyb20gTkxBX1UzMiB0byBOTEFfUzMyIGZvciBrZXlfc2VyaWFsX3QgYW5kIGFkanVzdGluZyB0aGUgbWF4IGhhbmRsZXIgY2xhc3MgcG9saWN5KS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IG5ldGxpbmsgcG9saWN5IHZhbGlkYXRpb24gYW5kIGludGVnZXIgYm91bmRzIGNoZWNraW5nLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIHN0cnVjdCBwYWRkaW5nIG1vZGlmaWNhdGlvbnMsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbnkgZ2VuZXJhbCBib3VuZHMgb3IgbG9naWMgaXNzdWVzIGFyZSBzdWZmaWNpZW50bHkgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflown4fj5[1] Phase: Succeeded StartedAt: 2026-09-06 07:44:58 +0000 UTC FinishedAt: 2026-09-06 07:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 07:44:58 +0000 UTC FinishedAt: 2026-09-06 07:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2] Phase: Succeeded StartedAt: 2026-09-06 07:44:58 +0000 UTC FinishedAt: 2026-09-06 11:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 07:44:58 +0000 UTC FinishedAt: 2026-09-06 11:24:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 07:44:58 +0000 UTC FinishedAt: 2026-09-06 07:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 07:44:58 +0000 UTC FinishedAt: 2026-09-06 07:45:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"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-workflown4fj5/series-workflown4fj5-convert-artifact-1397583166/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 07:45:09 +0000 UTC FinishedAt: 2026-09-06 08:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 07:45:09 +0000 UTC FinishedAt: 2026-09-06 08:01:22 +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:*db698840-d340-40f3-9976-25a65cd63ad5,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-workflown4fj5/series-workflown4fj5-convert-artifact-1397583166/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": "d46d9b21-99d2-4f6c-a9ac-6b5065249599", "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-workflown4fj5/series-workflown4fj5-build-action-1959085604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 07:45:09 +0000 UTC FinishedAt: 2026-09-06 08:01:12 +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:*db698840-d340-40f3-9976-25a65cd63ad5,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-workflown4fj5/series-workflown4fj5-convert-artifact-1397583166/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": "d46d9b21-99d2-4f6c-a9ac-6b5065249599", "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-workflown4fj5/series-workflown4fj5-build-action-1959085604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:01:22 +0000 UTC FinishedAt: 2026-09-06 08:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:01:22 +0000 UTC FinishedAt: 2026-09-06 08:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:01:22 +0000 UTC FinishedAt: 2026-09-06 08:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:01:22 +0000 UTC FinishedAt: 2026-09-06 08:01:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-workflown4fj5/series-workflown4fj5-convert-artifact-3835308401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:01:32 +0000 UTC FinishedAt: 2026-09-06 08:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:01:32 +0000 UTC FinishedAt: 2026-09-06 08:03:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d46d9b21-99d2-4f6c-a9ac-6b5065249599,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-workflown4fj5/series-workflown4fj5-build-action-1959085604/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-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:03:16 +0000 UTC FinishedAt: 2026-09-06 08:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:03:16 +0000 UTC FinishedAt: 2026-09-06 08:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:03:16 +0000 UTC FinishedAt: 2026-09-06 08:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:03:16 +0000 UTC FinishedAt: 2026-09-06 08:20: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:*db698840-d340-40f3-9976-25a65cd63ad5,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-workflown4fj5/series-workflown4fj5-convert-artifact-3835308401/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": "1eb3f4a5-9e55-464f-86bf-82e11d9da30d", "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-workflown4fj5/series-workflown4fj5-build-action-1391445821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:03:16 +0000 UTC FinishedAt: 2026-09-06 08:20: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:*db698840-d340-40f3-9976-25a65cd63ad5,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-workflown4fj5/series-workflown4fj5-convert-artifact-3835308401/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": "1eb3f4a5-9e55-464f-86bf-82e11d9da30d", "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-workflown4fj5/series-workflown4fj5-build-action-1391445821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:20:15 +0000 UTC FinishedAt: 2026-09-06 08:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:20:15 +0000 UTC FinishedAt: 2026-09-06 08:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:20:15 +0000 UTC FinishedAt: 2026-09-06 08:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:20:15 +0000 UTC FinishedAt: 2026-09-06 08:21:59 +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:*1eb3f4a5-9e55-464f-86bf-82e11d9da30d,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-workflown4fj5/series-workflown4fj5-build-action-1391445821/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-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 11:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 11:24:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"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:*d46d9b21-99d2-4f6c-a9ac-6b5065249599,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1eb3f4a5-9e55-464f-86bf-82e11d9da30d,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-workflown4fj5/series-workflown4fj5-build-action-1959085604/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-workflown4fj5/series-workflown4fj5-build-action-1391445821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 08:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 08:22:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"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-workflown4fj5/series-workflown4fj5-convert-artifact-3580856614/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 08:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 08:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:09 +0000 UTC FinishedAt: 2026-09-06 08:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:19 +0000 UTC FinishedAt: 2026-09-06 11:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown4fj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handshake_req_alloc","handshake_nl_accept_doit","handshake_nl_done_doit","tls_handshake_remote_peerids"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_HANDSHAKE","SUNRPC"],"series_id":"c9ea20b4-6de3-4419-a2e8-11035c3fdd83","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-06 08:22:19 +0000 UTC FinishedAt: 2026-09-06 11:23:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d46d9b21-99d2-4f6c-a9ac-6b5065249599,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1eb3f4a5-9e55-464f-86bf-82e11d9da30d,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-workflown4fj5/series-workflown4fj5-build-action-1959085604/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-workflown4fj5/series-workflown4fj5-build-action-1391445821/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-workflown4fj5/series-workflown4fj5-convert-artifact-3580856614/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,}