Name: series-workflowzcmrv Phase: Succeeded StartedAt: 2026-09-05 00:32:24 +0000 UTC FinishedAt: 2026-09-05 04:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[0] Phase: Succeeded StartedAt: 2026-09-05 00:32:24 +0000 UTC FinishedAt: 2026-09-05 00:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 00:32:24 +0000 UTC FinishedAt: 2026-09-05 00:55:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "INTEL_TDX_HOST", "VIRTIO_MEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "INTEL_TDX_HOST", "VIRTIO_MEM" ], "series_id": "d03d54d6-b4df-4da5-b71b-9535c79e3c91" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memblock_bsearch_start", "memblock_add_range", "memblock_isolate_range", "memblock_add_node", "memblock_remove_range", "memblock_remove", "memblock_phys_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7VklSVElPX01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWJsb2NrX2JzZWFyY2hfc3RhcnQmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfYWRkX3JhbmdlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX2lzb2xhdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfYWRkX25vZGUmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcmVtb3ZlX3JhbmdlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3JlbW92ZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19waHlzX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgcmVnaW9uIGxvb2t1cCBpbiBlYXJseSBib290IG1lbWJsb2NrIG1hbmFnZW1lbnQgKG1tL21lbWJsb2NrLmMpIGJ5IGludHJvZHVjaW5nIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoKSBhbmQgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKCkuIFRoZSBjaGFuZ2VzIG9wZXJhdGUgZXhjbHVzaXZlbHkgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMgYW5kIGludGVybmFsIGluZGljZXMuIFBvdGVudGlhbCBidWdzIGluIHRoaXMgbG9naWMgKHN1Y2ggYXMgaW5kZXggY2FsY3VsYXRpb24gZXJyb3JzIG9yIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGFzc2VydGlvbi9ib3VuZHMgY2hlY2tpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZmllbGQgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vbWVtYmxvY2suYyksIGludHJvZHVjaW5nIGJpbmFyeSBzZWFyY2ggKG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQpIHRvIGZpbmQgY2FuZGlkYXRlIHJlZ2lvbnMgaW4gbWVtYmxvY2tfYWRkX3JhbmdlIGFuZCBtZW1ibG9ja19pc29sYXRlX3JhbmdlLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVnaW9uIHNwbGl0dGluZy9tZXJnaW5nIGFsZ29yaXRobXMgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgd2hlbiBtZW1ibG9jayBtZXRhZGF0YSBpcyByZXRhaW5lZCAoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgcmVnaW9uIG1hbmlwdWxhdGlvbiBsb2dpYyBhbmQgYm91bmRhcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2ZjBlODI1YmZjODM3MmQ1NWRkOGIwYmY4YjE1MDFjMDkwZmQ0NDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi44ODk0MDQ3NGIwMjAzIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTE2MCw2ICYjNDM7MTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9IFx1MDAyNm1lbWJsb2NrLm1lbW9yeTtcbiBcdCAgICAgaSBcdTAwM2MgbWVtYmxvY2tfdHlwZS1cdTAwM2VjbnQ7XHRcdFx0XHRcdFxcXG4gXHQgICAgIGkmIzQzOyYjNDM7LCByZ24gPSBcdTAwMjZtZW1ibG9ja190eXBlLVx1MDAzZXJlZ2lvbnNbaV0pXG4gXG4mIzQzOyNkZWZpbmUgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGksIG1lbWJsb2NrX3R5cGUsIHJnbiwgc3RhcnQpXHRcXFxuJiM0MztcdGZvciAoaSA9IChzdGFydCksIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXTtcdFx0XFxcbiYjNDM7XHQgICAgIGkgXHUwMDNjIG1lbWJsb2NrX3R5cGUtXHUwMDNlY250O1x0XHRcdFx0XHRcXFxuJiM0MztcdCAgICAgaSYjNDM7JiM0MzssIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXSlcbiYjNDM7XG4gI2RlZmluZSBtZW1ibG9ja19kYmcoZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbiBcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0aWYgKG1lbWJsb2NrX2RlYnVnKVx0XHRcdFx0XHRcXFxuQEAgLTU5MSw2ICYjNDM7NTk2LDMzIEBAIHN0YXRpYyB2b2lkIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pbnNlcnRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0dHlwZS1cdTAwM2V0b3RhbF9zaXplICYjNDM7PSBzaXplO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCBcdTAwM2UgYmFzZVxuJiM0MzsgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBzZWFyY2hcbiYjNDM7ICogQGJhc2U6IGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2FuZGlkYXRlIHJhbmdlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgQGJhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuJiM0MztcdFx0XHRcdFx0XHQgIHBoeXNfYWRkcl90IGJhc2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbWlkLCBsb3cgPSAwO1xuJiM0MztcdGludCBoaWdoID0gdHlwZS1cdTAwM2VjbnQ7XG4mIzQzO1xuJiM0MztcdGlmICh0eXBlLVx1MDAzZWNudCBcdTAwMjZcdTAwMjYgYmFzZSBcdTAwM2U9IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLmJhc2UgJiM0MztcbiYjNDM7XHRcdFx0XHQgdHlwZS1cdTAwM2VyZWdpb25zW3R5cGUtXHUwMDNlY250IC0gMV0uc2l6ZSlcbiYjNDM7XHRcdHJldHVybiB0eXBlLVx1MDAzZWNudDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxvdyBcdTAwM2MgaGlnaCkge1xuJiM0MztcdFx0bWlkID0gKGxvdyAmIzQzOyBoaWdoKSAvIDI7XG4mIzQzO1x0XHRpZiAodHlwZS1cdTAwM2VyZWdpb25zW21pZF0uYmFzZSAmIzQzOyB0eXBlLVx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFx1MDAzYz0gYmFzZSlcbiYjNDM7XHRcdFx0bG93ID0gbWlkICYjNDM7IDE7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhpZ2ggPSBtaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBsb3c7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cbiAgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXG5AQCAtNjUxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRiYXNlID0gb2Jhc2U7XG4gXHRucl9uZXcgPSAwO1xuIFxuLVx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikge1xuJiM0MztcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiYjNDM7XHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgJiM0MzsgcmduLVx1MDAzZXNpemU7XG4gXG5AQCAtODI3LDcgJiM0Mzs4NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikge1xuJiM0MztcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiYjNDM7XHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgJiM0MzsgcmduLVx1MDAzZXNpemU7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtYmxvY2tfYnNlYXJjaF9zdGFydCYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19yZW1vdmVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3BoeXNfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1ibG9jay5jKSwgaW50cm9kdWNpbmcgYmluYXJ5IHNlYXJjaCAobWVtYmxvY2tfYnNlYXJjaF9zdGFydCkgdG8gZmluZCBjYW5kaWRhdGUgcmVnaW9ucyBpbiBtZW1ibG9ja19hZGRfcmFuZ2UgYW5kIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UuIFRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWdpb24gc3BsaXR0aW5nL21lcmdpbmcgYWxnb3JpdGhtcyByZWFjaGFibGUgYXQgcnVudGltZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGhvdHJlbW92ZSB3aGVuIG1lbWJsb2NrIG1ldGFkYXRhIGlzIHJldGFpbmVkIChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCByZWdpb24gbWFuaXB1bGF0aW9uIGxvZ2ljIGFuZCBib3VuZGFyaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjZmMGU4MjViZmM4MzcyZDU1ZGQ4YjBiZjhiMTUwMWMwOTBmZDQ0MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDA6NTM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi44ODk0MDQ3NGIwMjAzIDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTE2MCw2ICYjNDM7MTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9ICZhbXA7bWVtYmxvY2subWVtb3J5OwogCSAgICAgaSAmbHQ7IG1lbWJsb2NrX3R5cGUtJmd0O2NudDsJCQkJCVwKIAkgICAgIGkmIzQzOyYjNDM7LCByZ24gPSAmYW1wO21lbWJsb2NrX3R5cGUtJmd0O3JlZ2lvbnNbaV0pCiAKJiM0MzsjZGVmaW5lIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpLCBtZW1ibG9ja190eXBlLCByZ24sIHN0YXJ0KQlcCiYjNDM7CWZvciAoaSA9IChzdGFydCksIHJnbiA9ICZhbXA7bWVtYmxvY2tfdHlwZS0mZ3Q7cmVnaW9uc1tpXTsJCVwKJiM0MzsJICAgICBpICZsdDsgbWVtYmxvY2tfdHlwZS0mZ3Q7Y250OwkJCQkJXAomIzQzOwkgICAgIGkmIzQzOyYjNDM7LCByZ24gPSAmYW1wO21lbWJsb2NrX3R5cGUtJmd0O3JlZ2lvbnNbaV0pCiYjNDM7CiAjZGVmaW5lIG1lbWJsb2NrX2RiZyhmbXQsIC4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAobWVtYmxvY2tfZGVidWcpCQkJCQlcCkBAIC01OTEsNiAmIzQzOzU5NiwzMyBAQCBzdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKIAl0eXBlLSZndDt0b3RhbF9zaXplICYjNDM7PSBzaXplOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kICZndDsgYmFzZQomIzQzOyAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIHNlYXJjaAomIzQzOyAqIEBiYXNlOiBiYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNhbmRpZGF0ZSByYW5nZQomIzQzOyAqCiYjNDM7ICogUmV0dXJucyB0aGUgZmlyc3QgcmVnaW9uIGluZGV4IHRoYXQgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCBAYmFzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAomIzQzOwkJCQkJCSAgcGh5c19hZGRyX3QgYmFzZSkKJiM0Mzt7CiYjNDM7CWludCBtaWQsIGxvdyA9IDA7CiYjNDM7CWludCBoaWdoID0gdHlwZS0mZ3Q7Y250OwomIzQzOwomIzQzOwlpZiAodHlwZS0mZ3Q7Y250ICZhbXA7JmFtcDsgYmFzZSAmZ3Q7PSB0eXBlLSZndDtyZWdpb25zW3R5cGUtJmd0O2NudCAtIDFdLmJhc2UgJiM0MzsKJiM0MzsJCQkJIHR5cGUtJmd0O3JlZ2lvbnNbdHlwZS0mZ3Q7Y250IC0gMV0uc2l6ZSkKJiM0MzsJCXJldHVybiB0eXBlLSZndDtjbnQ7CiYjNDM7CiYjNDM7CXdoaWxlIChsb3cgJmx0OyBoaWdoKSB7CiYjNDM7CQltaWQgPSAobG93ICYjNDM7IGhpZ2gpIC8gMjsKJiM0MzsJCWlmICh0eXBlLSZndDtyZWdpb25zW21pZF0uYmFzZSAmIzQzOyB0eXBlLSZndDtyZWdpb25zW21pZF0uc2l6ZSAmbHQ7PSBiYXNlKQomIzQzOwkJCWxvdyA9IG1pZCAmIzQzOyAxOwomIzQzOwkJZWxzZQomIzQzOwkJCWhpZ2ggPSBtaWQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGxvdzsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1lbWJsb2NrX2FkZF9yYW5nZSAtIGFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uCiAgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvCkBAIC02NTEsNyAmIzQzOzY4Myw4IEBAIHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKIAliYXNlID0gb2Jhc2U7CiAJbnJfbmV3ID0gMDsKIAotCWZvcl9lYWNoX21lbWJsb2NrX3R5cGUoaWR4LCB0eXBlLCByZ24pIHsKJiM0MzsJZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLAomIzQzOwkJCQkgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkgewogCQlwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi0mZ3Q7YmFzZTsKIAkJcGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICYjNDM7IHJnbi0mZ3Q7c2l6ZTsKIApAQCAtODI3LDcgJiM0Mzs4NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAogCQlpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpICZsdDsgMCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikgewomIzQzOwlmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaWR4LCB0eXBlLCByZ24sCiYjNDM7CQkJCSAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7CiAJCXBoeXNfYWRkcl90IHJiYXNlID0gcmduLSZndDtiYXNlOwogCQlwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgJiM0MzsgcmduLSZndDtzaXplOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGV2ZW4gd29ydGggb3VyIHRpbWUgZnV6emluZywgYW5kIGlmIHNvLCBob3cgdG8gYmVzdCBhcHByb2FjaCBpdC4gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5PyBBbmQgd2hhdCBhcmUgb3VyIGtleSBmb2N1cyBzeW1ib2xzPwoKRmlyc3QsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmaWxlLCBgbW0vbWVtYmxvY2suY2AuIEhtbSwgSSBzZWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkOiBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYCwgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgLCBgbWVtYmxvY2tfYWRkX3JhbmdlYCwgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gVGhhdCBgX19pbml0X21lbWJsb2NrYCBwcmVmaXguLi4gd2FpdCBhIG1pbnV0ZSEgQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbmx5IHVzZWQgZHVyaW5nIGVhcmx5IGJvb3QsIHRoZSBpbml0IHBoYXNlLCBvciBpcyB0aGVyZSBhIHBvc3NpYmlsaXR5IHRoYXQgYG1lbWJsb2NrYCBjb2RlIGlzIGFjY2Vzc2libGUgYXQgcnVudGltZSwgcGVyaGFwcyBmb3Igc29tZXRoaW5nIGxpa2UgbWVtb3J5IGhvdHBsdWc/CgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBtZW1ibG9ja19hZGRfcmFuZ2VgLCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAsIG9yIG90aGVyIGBtZW1ibG9ja18qYCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBsYXRlciwgaW4gdGhlIG1haW4gcnVudGltZSBvZiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBtbS9tZW1ibG9jay5jYCBhbmQgdHJhY2UgdGhvc2UgY2FsbHMuIFRpbWUgdG8gYnJlYWsgb3V0IGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBhbmQgZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfYWRkX3JhbmdlfG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYz02MDY9c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYnNlYXJjaF9zdGFydChzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbi0tXG5tbS9tZW1ibG9jay5jLTYyNi0vKipcbm1tL21lbWJsb2NrLmM6NjI3OiAqIG1lbWJsb2NrX2FkZF9yYW5nZSAtIGFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uXG5tbS9tZW1ibG9jay5jLTYyOC0gKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXG4tLVxubW0vbWVtYmxvY2suYy02NDEtICovXG5tbS9tZW1ibG9jay5jOjY0MjpzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG5tbS9tZW1ibG9jay5jLTY0My1cdFx0XHRcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4tLVxubW0vbWVtYmxvY2suYy03NTYtICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkgdG8gdGhlIFwmIzM0O21lbW9yeVwmIzM0O1xubW0vbWVtYmxvY2suYzo3NTc6ICogdHlwZS4gU2VlIG1lbWJsb2NrX2FkZF9yYW5nZSgpIGRlc2NyaXB0aW9uIGZvciBtb2RlIGRldGFpbHNcbm1tL21lbWJsb2NrLmMtNzU4LSAqXG4tLVxubW0vbWVtYmxvY2suYz03NjI9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfbm9kZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtNzY5LVxubW0vbWVtYmxvY2suYzo3NzA6XHRyZXR1cm4gbWVtYmxvY2tfYWRkX3JhbmdlKFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgbmlkLCBmbGFncyk7XG5tbS9tZW1ibG9jay5jLTc3MS19XG4tLVxubW0vbWVtYmxvY2suYy03NzgtICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkgdG8gdGhlIFwmIzM0O21lbW9yeVwmIzM0O1xubW0vbWVtYmxvY2suYzo3Nzk6ICogdHlwZS4gU2VlIG1lbWJsb2NrX2FkZF9yYW5nZSgpIGRlc2NyaXB0aW9uIGZvciBtb2RlIGRldGFpbHNcbm1tL21lbWJsb2NrLmMtNzgwLSAqXG4tLVxubW0vbWVtYmxvY2suYz03ODQ9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbi0tXG5tbS9tZW1ibG9jay5jLTc5MC1cbm1tL21lbWJsb2NrLmM6NzkxOlx0cmV0dXJuIG1lbWJsb2NrX2FkZF9yYW5nZShcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIE1BWF9OVU1OT0RFUywgMCk7XG5tbS9tZW1ibG9jay5jLTc5Mi19XG4tLVxubW0vbWVtYmxvY2suYz04MDU9Ym9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcylcbi0tXG5tbS9tZW1ibG9jay5jLTgyOC0vKipcbm1tL21lbWJsb2NrLmM6ODI5OiAqIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UgLSBpc29sYXRlIGdpdmVuIHJhbmdlIGludG8gZGlzam9pbnQgbWVtYmxvY2tzXG5tbS9tZW1ibG9jay5jLTgzMC0gKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBpc29sYXRlIHJhbmdlIGZvclxuLS1cbm1tL21lbWJsb2NrLmMtODQ0LSAqL1xubW0vbWVtYmxvY2suYzo4NDU6c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbm1tL21lbWJsb2NrLmMtODQ2LVx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmM9OTA2PXN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbi0tXG5tbS9tZW1ibG9jay5jLTkxMS1cbm1tL21lbWJsb2NrLmM6OTEyOlx0cmV0ID0gbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSh0eXBlLCBiYXNlLCBzaXplLCBcdTAwMjZzdGFydF9yZ24sIFx1MDAyNmVuZF9yZ24pO1xubW0vbWVtYmxvY2suYy05MTMtXHRpZiAocmV0KVxuLS1cbm1tL21lbWJsb2NrLmM9MTA0MT1pbnQgX19pbml0X21lbWJsb2NrIF9fbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtMTA0OC1cbm1tL21lbWJsb2NrLmM6MTA0OTpcdHJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUsIG5pZCwgZmxhZ3MpO1xubW0vbWVtYmxvY2suYy0xMDUwLX1cbi0tXG5tbS9tZW1ibG9jay5jPTEwNTM9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzbWVtX2FkZChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbm1tL21lbWJsb2NrLmMtMTA1OS1cbm1tL21lbWJsb2NrLmM6MTA2MDpcdHJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoXHUwMDI2cGh5c21lbSwgYmFzZSwgc2l6ZSwgTUFYX05VTU5PREVTLCAwKTtcbm1tL21lbWJsb2NrLmMtMTA2MS19XG4tLVxubW0vbWVtYmxvY2suYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3NldGNscl9mbGFnKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuLS1cbm1tL21lbWJsb2NrLmMtMTA4MC1cbm1tL21lbWJsb2NrLmM6MTA4MTpcdHJldCA9IG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UodHlwZSwgYmFzZSwgc2l6ZSwgXHUwMDI2c3RhcnRfcmduLCBcdTAwMjZlbmRfcmduKTtcbm1tL21lbWJsb2NrLmMtMTA4Mi1cdGlmIChyZXQpXG4tLVxubW0vbWVtYmxvY2suYz0xNTIzPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9tZW1ibG9jay5jLTE1MjktXG5tbS9tZW1ibG9jay5jOjE1MzA6XHRyZXQgPSBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHR5cGUsIGJhc2UsIHNpemUsIFx1MDAyNnN0YXJ0X3JnbiwgXHUwMDI2ZW5kX3Jnbik7XG5tbS9tZW1ibG9jay5jLTE1MzEtXHRpZiAocmV0KVxuLS1cbm1tL21lbWJsb2NrLmM9MjA1Mz12b2lkIF9faW5pdCBtZW1ibG9ja19jYXBfbWVtb3J5X3JhbmdlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4tLVxubW0vbWVtYmxvY2suYy0yMDY1LVxubW0vbWVtYmxvY2suYzoyMDY2Olx0cmV0ID0gbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsXG5tbS9tZW1ibG9jay5jLTIwNjctXHRcdFx0XHRcdFx0XHUwMDI2c3RhcnRfcmduLCBcdTAwMjZlbmRfcmduKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYF9faW5pdF9tZW1ibG9ja2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBfX2luaXRfbWVtYmxvY2tgLiBNeSBmaXJzdCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGRldGVybWluZSB3aGVyZSBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQuIEdpdmVuIHRoYXQgSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBJJiMzOTtsbCBhc3N1bWUgaXQmIzM5O3MgcGFydCBvZiB0aGUga2VybmVsIG9yIGEgcmVsYXRlZCBsaWJyYXJ5LiBTbywgSSBuZWVkIHRvIGZpbmQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgc2luY2UgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgZGVmaW5lZCwgSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwYC4gQSBzaW1wbGUgYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBfX2luaXRfbWVtYmxvY2tgIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgc2NhbiB0aGUgcmVzdWx0cyB0byBzZWUgdGhlIGZpbGUgYW5kIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIHF1aWNrbHkgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBfX2luaXRfbWVtYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTExND1leHRlcm4gc3RydWN0IG1lbWJsb2NrIG1lbWJsb2NrO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTYtI2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTE3OiNkZWZpbmUgX19pbml0X21lbWJsb2NrIF9fbWVtaW5pdFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTExOC0jZGVmaW5lIF9faW5pdGRhdGFfbWVtYmxvY2sgX19tZW1pbml0ZGF0YVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTExOT12b2lkIG1lbWJsb2NrX2Rpc2NhcmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTIwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTIxOiNkZWZpbmUgX19pbml0X21lbWJsb2NrXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTIyLSNkZWZpbmUgX19pbml0ZGF0YV9tZW1ibG9ja1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIEZpcnN0IHRoaW5ncyBmaXJzdDogYF9fbWVtaW5pdGAg4oCTIHRoYXQmIzM5O3MgZWl0aGVyIHRoZSBzYW1lIGFzIGBfX2luaXRgLCBvciBpdCYjMzk7cyByZXRhaW5lZCBpZiBtZW1vcnkgaG90cGx1ZyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgY29ycmVjdGx5LiBOb3csIGEga2V5IHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IGhvdyBjcnVjaWFsIGlzIHRoZSBtZW1ibG9jayBtZWNoYW5pc20gaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IFNwZWNpZmljYWxseSwgaXMgYG1lbWJsb2NrYCBzdGlsbCByZWxldmFudCBkdXJpbmcgcnVudGltZSB3aGVuIG1lbW9yeSBob3RwbHVnIGlzIGludm9sdmVkPyBPciBpcyBpdHMgcm9sZSBsaW1pdGVkIHRvIHRoZSBib290IHByb2Nlc3M/IElzIGl0IGRpc2NhcmRlZCBsYXRlciwgb3IgZG9lcyBpdCBzZXJ2ZSBzb21lIHB1cnBvc2UgdGhyb3VnaG91dCB0aGUgc3lzdGVtJiMzOTtzIGxpZmU/IFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGNsYXJpZmljYXRpb24uCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIG15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgZGV0YWlsZWQgYXVkaXQgb2YgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoZSBgbWVtYmxvY2tfYWRkYCwgYG1lbWJsb2NrX2FkZF9yYW5nZWAsIGFuZCBvdGhlciBgbWVtYmxvY2tgIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgZXhhY3RseSBob3cgYG1lbWJsb2NrYCBpcyB1dGlsaXplZCwgd2hpY2ggaW4gdHVybiB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gYm90aCB0aGUgaW5pdGlhbCBib290IHNlcXVlbmNlIGFuZCBhbnkgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHRha2luZyBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1ibG9ja19hZGRcXCh8bWVtYmxvY2tfYWRkX25vZGVcXCh8bWVtYmxvY2tfcmVzZXJ2ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdD0xMzQ9WW91IGNhbiBzcGVjaWZ5IGVpdGhlciBSQU0gbWVtb3J5IG9yIHBlcmlwaGVyYWwgZGV2aWNlcyYjMzk7IG1lbW9yeS4gSG93ZXZlciwgd2hlblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdDoxMzU6c3BlY2lmeWluZyBSQU0sIGJlIHN1cmUgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IGJ5IGlzc3VpbmcgbWVtYmxvY2tfcmVzZXJ2ZSgpXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3JhbW9vcHMucnN0LTEzNi12ZXJ5IGVhcmx5IGluIHRoZSBhcmNoaXRlY3R1cmUgY29kZSwgZS5nLjo6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xMzktXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3JhbW9vcHMucnN0OjE0MDpcdG1lbWJsb2NrX3Jlc2VydmUocmFtb29wc19kYXRhLm1lbV9hZGRyZXNzLCByYW1vb3BzX2RhdGEubWVtX3NpemUpO1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xNDEtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jPTIwMj1hbGJhY29yZV9pbml0X2FyY2godm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2lyb25nYXRlLmMtMjQxLSNlbmRpZlxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jOjI0MjpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwY2lfbWVtLCBtZW10b3AgLSBwY2lfbWVtKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfaXJvbmdhdGUuYy0yNDMtXHRcdHByaW50ayhcJiMzNDtpcm9uZ2F0ZV9pbml0X2FyY2g6IHRlbXBvcmFyaWx5IHJlc2VydmluZyBcJiMzNDtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTI4Nj1zZXR1cF9tZW1vcnkodm9pZCAqa2VybmVsX2VuZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTMwNy1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6MzA4Olx0XHRtZW1ibG9ja19hZGQoUEZOX1BIWVMoY2x1c3Rlci1cdTAwM2VzdGFydF9wZm4pLFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zMDktXHRcdFx0ICAgICBjbHVzdGVyLVx1MDAzZW51bXBhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTMxNC1cdFx0aWYgKGNsdXN0ZXItXHUwMDNldXNhZ2UgXHUwMDI2IDMpXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjMxNTpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKFBGTl9QSFlTKGNsdXN0ZXItXHUwMDNlc3RhcnRfcGZuKSxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzE2LVx0XHRcdFx0ICAgICAgICAgY2x1c3Rlci1cdTAwM2VudW1wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zNDYtXHRrZXJuZWxfc2l6ZSA9IHZpcnRfdG9fcGh5cyhrZXJuZWxfZW5kKSAtIEtFUk5FTF9TVEFSVF9QSFlTO1xuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozNDc6XHRtZW1ibG9ja19yZXNlcnZlKEtFUk5FTF9TVEFSVF9QSFlTLCBrZXJuZWxfc2l6ZSk7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM0OC1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM2Mi1cdFx0fSBlbHNlIHtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6MzYzOlx0XHRcdG1lbWJsb2NrX3Jlc2VydmUodmlydF90b19waHlzKCh2b2lkICopaW5pdHJkX3N0YXJ0KSxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzY0LVx0XHRcdFx0XHRJTklUUkRfU0laRSk7XG4tLVxuYXJjaC9hcmMvbW0vaW5pdC5jPTUxPXZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSlcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtNjAtXHRcdGluX3VzZSA9IDE7XG5hcmNoL2FyYy9tbS9pbml0LmM6NjE6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDAsIE1FTUJMT0NLX05PTkUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jLTYyLVx0fSBlbHNlIHtcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtNjYtXHRcdGluX3VzZSA9IDE7XG5hcmNoL2FyYy9tbS9pbml0LmM6Njc6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDEsIE1FTUJMT0NLX05PTkUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jOjY4Olx0XHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jLTY5LSNlbmRpZlxuLS1cbmFyY2gvYXJjL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtMTIzLVxuYXJjaC9hcmMvbW0vaW5pdC5jOjEyNDpcdG1lbWJsb2NrX3Jlc2VydmUoQ09ORklHX0xJTlVYX0xJTktfQkFTRSxcbmFyY2gvYXJjL21tL2luaXQuYy0xMjUtXHRcdFx0IF9fcGEoX2VuZCkgLSBDT05GSUdfTElOVVhfTElOS19CQVNFKTtcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtMTI4LVx0aWYgKHBoeXNfaW5pdHJkX3NpemUpIHtcbmFyY2gvYXJjL21tL2luaXQuYzoxMjk6XHRcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jLTEzMC1cdFx0aW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShwaHlzX2luaXRyZF9zdGFydCk7XG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9NzYwPWludCBfX2luaXQgYXJtX2FkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04MTYtXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4MTc6XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODE4LVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9MTA5Nj12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtMTEwNy1cdFx0aWYgKG1kZXNjKVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM6MTEwODpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKF9fYXRhZ3NfcG9pbnRlcixcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTExMDktXHRcdFx0XHRcdCBmZHRfdG90YWxzaXplKGF0YWdzX3ZhZGRyKSk7XG4tLVxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmM9MjY1PXN0YXRpYyBpbnQgX19pbml0IGhpcDA0X3NtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg3LVxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmM6Mjg4Olx0cmV0ID0gbWVtYmxvY2tfcmVzZXJ2ZShoaXAwNF9ib290X21ldGhvZFswXSwgaGlwMDRfYm9vdF9tZXRob2RbMV0pO1xuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg5LVx0aWYgKHJldClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9NjY9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc2Nhbl9tZW0odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtOTEtXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6OTI6XHRcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgTVZFQlVfRERSX1RSQUlOSU5HX0FSRUFfU1opO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTkzLVx0fVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy05Ny1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzo5ODpzdGF0aWMgdm9pZCBfX2luaXQgbXZlYnVfbWVtYmxvY2tfcmVzZXJ2ZSh2b2lkKVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTk5LXtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTAyLSNlbHNlXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTAzOnN0YXRpYyB2b2lkIF9faW5pdCBtdmVidV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpIHt9XG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTA0LSNlbmRpZlxuLS1cbmFyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmM9MTEzND1zdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfZml4dXAoc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUpXG4tLVxuYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYy0xMTM2LVx0c2hhcnBzbF9zYXZlX3BhcmFtKCk7XG5hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jOjExMzc6XHRtZW1ibG9ja19hZGQoMHhhMDAwMDAwMCwgU1pfNjRNKTtcbmFyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMtMTEzOC19XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW50ZWdyYXRvci5jPTkxPXZvaWQgX19pbml0IGludGVncmF0b3JfcmVzZXJ2ZSh2b2lkKVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW50ZWdyYXRvci5jLTkyLXtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2ludGVncmF0b3IuYzo5MzpcdG1lbWJsb2NrX3Jlc2VydmUoUEhZU19PRkZTRVQsIF9fcGEoc3dhcHBlcl9wZ19kaXIpIC0gUEhZU19PRkZTRVQpO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW50ZWdyYXRvci5jLTk0LX1cbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9NTI9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfbWVtb3J5X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtNTQtXHRpZiAoIV9fcGEoUEFHRV9PRkZTRVQpKVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjU1Olx0XHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoUEFHRV9PRkZTRVQpLCAweDgwMDAwKTtcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy01Ni19XG4tLVxuYXJjaC9hcm0vbW0vaW5pdC5jPTE4MD12b2lkIF9faW5pdCBhcm1fbWVtYmxvY2tfaW5pdChjb25zdCBzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYylcbi0tXG5hcmNoL2FybS9tbS9pbml0LmMtMTgyLVx0LyogUmVnaXN0ZXIgdGhlIGtlcm5lbCB0ZXh0LCBrZXJuZWwgZGF0YSBhbmQgaW5pdHJkIHdpdGggbWVtYmxvY2suICovXG5hcmNoL2FybS9tbS9pbml0LmM6MTgzOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKEtFUk5FTF9TVEFSVCksIEtFUk5FTF9FTkQgLSBLRVJORUxfU1RBUlQpO1xuYXJjaC9hcm0vbW0vaW5pdC5jLTE4NC1cbi0tXG5hcmNoL2FybS9tbS9pbml0LmMtMTg2LVxuYXJjaC9hcm0vbW0vaW5pdC5jOjE4NzpcdGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKCk7XG5hcmNoL2FybS9tbS9pbml0LmMtMTg4LVxuLS1cbmFyY2gvYXJtL21tL21tLmg9ODk9dm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpO1xuYXJjaC9hcm0vbW0vbW0uaDo5MDp2b2lkIGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpO1xuYXJjaC9hcm0vbW0vbW0uaC05MS0jaWZkZWYgQ09ORklHX0NNQV9BUkVBU1xuLS1cbmFyY2gvYXJtL21tL21tdS5jPTEyNzM9c3RhdGljIF9faW5pdCB2b2lkIHByZXBhcmVfcGFnZV90YWJsZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL21tdS5jLTEzMzQtICovXG5hcmNoL2FybS9tbS9tbXUuYzoxMzM1OnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXG5hcmNoL2FybS9tbS9tbXUuYy0xMzM2LXtcbi0tXG5hcmNoL2FybS9tbS9tbXUuYy0xMzQwLVx0ICovXG5hcmNoL2FybS9tbS9tbXUuYzoxMzQxOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKHN3YXBwZXJfcGdfZGlyKSwgU1dBUFBFUl9QR19ESVJfU0laRSk7XG5hcmNoL2FybS9tbS9tbXUuYy0xMzQyLVxuLS1cbmFyY2gvYXJtL21tL21tdS5jLTEzNDctXHQgKi9cbmFyY2gvYXJtL21tL21tdS5jOjEzNDg6XHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTtcbmFyY2gvYXJtL21tL21tdS5jLTEzNDktI2VuZGlmXG4tLVxuYXJjaC9hcm0vbW0vbm9tbXUuYz02Mz11bnNpZ25lZCBsb25nIHNldHVwX3ZlY3RvcnNfYmFzZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL25vbW11LmMtODEtXG5hcmNoL2FybS9tbS9ub21tdS5jOjgyOnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXG5hcmNoL2FybS9tbS9ub21tdS5jLTgzLXtcbi0tXG5hcmNoL2FybS9tbS9ub21tdS5jLTkwLVx0ICovXG5hcmNoL2FybS9tbS9ub21tdS5jOjkxOlx0bWVtYmxvY2tfcmVzZXJ2ZSh2ZWN0b3JzX2Jhc2UsIDIgKiBQQUdFX1NJWkUpO1xuYXJjaC9hcm0vbW0vbm9tbXUuYy05Mi0jZWxzZSAvKiBpZm5kZWYgQ09ORklHX0NQVV9WN00gKi9cbi0tXG5hcmNoL2FybS9tbS9ub21tdS5jLTEwMS1cdCAqL1xuYXJjaC9hcm0vbW0vbm9tbXUuYzoxMDI6XHRtZW1ibG9ja19yZXNlcnZlKDAsIDEpO1xuYXJjaC9hcm0vbW0vbm9tbXUuYy0xMDMtfVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYz0yMzU9dm9pZCBjcmFzaF9wb3N0X3Jlc3VtZSh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYy0yNDctICogTm90ZSB0aGF0IGFsbCB0aGUgcGFnZXMgaW4gY3Jhc2ggZHVtcCBrZXJuZWwgbWVtb3J5IGhhdmUgYmVlbiBpbml0aWFsbHlcbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYzoyNDg6ICogbWFya2VkIGFzIFJlc2VydmVkIGFzIG1lbW9yeSB3YXMgYWxsb2NhdGVkIHZpYSBtZW1ibG9ja19yZXNlcnZlKCkuXG5hcmNoL2FybTY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMjQ5LSAqXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYz0xNzA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21hY2hpbmVfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0xNzYtXHRpZiAoZHRfdmlydClcbmFyY2gvYXJtNjQva2VybmVsL3NldHVwLmM6MTc3Olx0XHRtZW1ibG9ja19yZXNlcnZlKGR0X3BoeXMsIHNpemUpO1xuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0xNzgtXG4tLVxuYXJjaC9hcm02NC9tbS9pbml0LmM9MTk2PXZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybTY0L21tL2luaXQuYy0yNTYtXHRcdG1lbWJsb2NrX21lbV9saW1pdF9yZW1vdmVfbWFwKG1lbW9yeV9saW1pdCk7XG5hcmNoL2FybTY0L21tL2luaXQuYzoyNTc6XHRcdG1lbWJsb2NrX2FkZChfX3BhX3N5bWJvbChfdGV4dCksIChyZXNvdXJjZV9zaXplX3QpKF9lbmQgLSBfdGV4dCkpO1xuYXJjaC9hcm02NC9tbS9pbml0LmMtMjU4LVx0fVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI4Mi1cdFx0fSBlbHNlIHtcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjI4MzpcdFx0XHRtZW1ibG9ja19hZGQoYmFzZSwgc2l6ZSk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0yODQtXHRcdFx0bWVtYmxvY2tfY2xlYXJfbm9tYXAoYmFzZSwgc2l6ZSk7XG5hcmNoL2FybTY0L21tL2luaXQuYzoyODU6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTtcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI4Ni1cdFx0fVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5Mi1cdCAqL1xuYXJjaC9hcm02NC9tbS9pbml0LmM6MjkzOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChfdGV4dCksIF9lbmQgLSBfdGV4dCk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0yOTQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTklUUkQpIFx1MDAyNlx1MDAyNiBwaHlzX2luaXRyZF9zaXplKSB7XG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTE2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbml0cmQodm9pZClcbi0tXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtMzctXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6Mzg6XHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoaW5pdHJkX3N0YXJ0KSwgc2l6ZSk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtMzktXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTYyPXN0YXRpYyB2b2lkIF9faW5pdCBjc2t5X21lbWJsb2NrX2luaXQodm9pZClcbi0tXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjctXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6Njg6XHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoX3N0YXJ0KSwgX2VuZCAtIF9zdGFydCk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjktXG4tLVxuYXJjaC9oZXhhZ29uL21tL2luaXQuYz0xMDQ9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jLTEyMy1cbmFyY2gvaGV4YWdvbi9tbS9pbml0LmM6MTI0Olx0bWVtYmxvY2tfYWRkKFBIWVNfT0ZGU0VULFxuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMjUtXHRcdCAgICAgKGJvb3RtZW1fbGFzdHBnIC0gQVJDSF9QRk5fT0ZGU0VUKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4tLVxuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMjctXHQvKiBSZXNlcnZlIGtlcm5lbCB0ZXh0L2RhdGEvYnNzICovXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jOjEyODpcdG1lbWJsb2NrX3Jlc2VydmUoUEhZU19PRkZTRVQsXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jLTEyOS1cdFx0XHQgKGJvb3RtZW1fc3RhcnRwZyAtIEFSQ0hfUEZOX09GRlNFVCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuLS1cbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTM1LVx0bWluX2xvd19wZm4gPSBBUkNIX1BGTl9PRkZTRVQ7XG5hcmNoL2hleGFnb24vbW0vaW5pdC5jOjEzNjpcdG1lbWJsb2NrX3Jlc2VydmUoUEZOX1BIWVMobWF4X2xvd19wZm4pLCBETUFfUkVTRVJWRURfQllURVMpO1xuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMzctXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2FjcGkuYz0zNzg9dm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX21lbV9hcmVhKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyLCBzaXplX3Qgc2l6ZSlcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9hY3BpLmMtMzc5LXtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9hY3BpLmM6MzgwOlx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9hY3BpLmMtMzgxLX1cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM9ODI9c3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJpbWFyeV9kaXNwbGF5KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTk3LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jOjk4Olx0bWVtYmxvY2tfcmVzZXJ2ZShfX3NjcmVlbl9pbmZvX2xmYl9iYXNlKFx1MDAyNnN5c2ZiX3ByaW1hcnlfZGlzcGxheS5zY3JlZW4pLFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTk5LVx0XHRcdCBzeXNmYl9wcmltYXJ5X2Rpc3BsYXkuc2NyZWVuLmxmYl9zaXplKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM9MTAyPXZvaWQgX19pbml0IGVmaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTE1OC1cdFx0ICovXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM6MTU5Olx0XHRtZW1ibG9ja19yZXNlcnZlKChwaHlzX2FkZHJfdClib290X21lbW1hcCwgc2l6ZW9mKCp0YmwpICYjNDM7IGRhdGEuc2l6ZSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmMtMTYwLVx0XHRzZXRfYml0KEVGSV9QUkVTRVJWRV9CU19SRUdJT05TLCBcdTAwMjZlZmkuZmxhZ3MpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYz0xMz12b2lkIF9faW5pdCBtZW1ibG9ja19pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTMxLVx0XHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjMyOlx0XHRcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy0zMy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtMzYtXHRcdGNhc2UgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlk6XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6Mzc6XHRcdFx0bWVtYmxvY2tfYWRkKG1lbV9zdGFydCwgbWVtX3NpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTM4LVx0XHRcdGZhbGx0aHJvdWdoO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy00My1cdFx0Y2FzZSBFRklfTUVNT1JZX01BUFBFRF9JT19QT1JUX1NQQUNFOlxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjQ0Olx0XHRcdG1lbWJsb2NrX3Jlc2VydmUobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNDUtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTUzLVx0LyogUmVzZXJ2ZSB0aGUgZmlyc3QgMk1CICovXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6NTQ6XHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCAweDIwMDAwMCk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTUtXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTYtXHQvKiBSZXNlcnZlIHRoZSBrZXJuZWwgdGV4dC9kYXRhL2JzcyAqL1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjU3Olx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcdTAwMjZfdGV4dCksXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTgtXHRcdFx0IF9fcGFfc3ltYm9sKFx1MDAyNl9lbmQpIC0gX19wYV9zeW1ib2woXHUwMDI2X3RleHQpKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz0xOTE9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjIxLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjIyMjpcdFx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTIyMy1cdGVsc2VcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjIyNDpcdFx0bWVtYmxvY2tfYWRkX25vZGUoc3RhcnQsIHNpemUsIHBhX3RvX25pZChzdGFydCksIE1FTUJMT0NLX05PTkUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjI1LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTIzMD1zdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX3ZtY29yZSh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1Ny1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1ODpcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjU5LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfa2VybmVsX3NlY3Rpb25zX21lbSh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM4Ni1cdFx0cHJfaW5mbyhcJiMzNDtLZXJuZWwgc2VjdGlvbnMgYXJlIG5vdCBpbiB0aGUgbWVtb3J5IG1hcHNcXG5cJiMzNDspO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6Mzg3Olx0XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzg4LVx0fVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYz0yMDY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYy0zMzAtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTklUUkQpIFx1MDAyNlx1MDAyNiBtNjhrX3JhbWRpc2suc2l6ZSlcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYzozMzE6XHRcdG1lbWJsb2NrX3Jlc2VydmUobTY4a19yYW1kaXNrLmFkZHIsIG02OGtfcmFtZGlzay5zaXplKTtcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYy0zMzItXG4tLVxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jPTgyPXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMtMTQyLVxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jOjE0MzpcdG1lbWJsb2NrX2FkZChfcmFtYmFzZSwgbWVtb3J5X2VuZCAtIF9yYW1iYXNlKTtcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYzoxNDQ6XHRtZW1ibG9ja19yZXNlcnZlKF9yYW1iYXNlLCBtZW1vcnlfc3RhcnQgLSBfcmFtYmFzZSk7XG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMtMTQ1LVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYy0xNTktXHRcdFx0KGluaXRyZF9lbmQgXHUwMDNjIG1lbW9yeV9lbmQpKVxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jOjE2MDpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpO1xuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jLTE2MS0jZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTklUUkQpICovXG4tLVxuYXJjaC9tNjhrL21tL21jZm1tdS5jPTE0OD12b2lkIF9faW5pdCBjZl9ib290bWVtX2FsbG9jKHZvaWQpXG4tLVxuYXJjaC9tNjhrL21tL21jZm1tdS5jLTE1NS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYzoxNTY6XHRtZW1ibG9ja19hZGRfbm9kZShtNjhrX21lbW9yeVswXS5hZGRyLCBtNjhrX21lbW9yeVswXS5zaXplLCAwLFxuYXJjaC9tNjhrL21tL21jZm1tdS5jLTE1Ny1cdFx0XHQgIE1FTUJMT0NLX05PTkUpO1xuLS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy0xNjgtXHQvKiBSZXNlcnZlIGtlcm5lbCB0ZXh0L2RhdGEvYnNzICovXG5hcmNoL202OGsvbW0vbWNmbW11LmM6MTY5Olx0bWVtYmxvY2tfcmVzZXJ2ZShfcmFtYmFzZSwgbWVtc3RhcnQgLSBfcmFtYmFzZSk7XG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTcwLVxuLS1cbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jPTQzMD12b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ1MS1cdG1heF9hZGRyID0gbWluX2FkZHIgJiM0MzsgbTY4a19tZW1vcnlbMF0uc2l6ZSAtIDE7XG5hcmNoL202OGsvbW0vbW90b3JvbGEuYzo0NTI6XHRtZW1ibG9ja19hZGRfbm9kZShtNjhrX21lbW9yeVswXS5hZGRyLCBtNjhrX21lbW9yeVswXS5zaXplLCAwLFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDUzLVx0XHRcdCAgTUVNQkxPQ0tfTk9ORSk7XG4tLVxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDYzLVx0XHR9XG5hcmNoL202OGsvbW0vbW90b3JvbGEuYzo0NjQ6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKG02OGtfbWVtb3J5W2ldLmFkZHIsIG02OGtfbWVtb3J5W2ldLnNpemUsIGksXG5hcmNoL202OGsvbW0vbW90b3JvbGEuYy00NjUtXHRcdFx0XHQgIE1FTUJMT0NLX05PTkUpO1xuLS1cbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ4Mi1cdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGluIGhlYWQuUyAqL1xuYXJjaC9tNjhrL21tL21vdG9yb2xhLmM6NDgzOlx0bWVtYmxvY2tfcmVzZXJ2ZShtNjhrX21lbW9yeVswXS5hZGRyLCBhdmFpbG1lbSAtIG02OGtfbWVtb3J5WzBdLmFkZHIpO1xuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDg0LVxuLS1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTE5OC1cdGtzaXplID0gUEFHRV9BTElHTigoKHUzMilfZW5kIC0gKHUzMilDT05GSUdfS0VSTkVMX1NUQVJUKSk7XG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjE5OTpcdG1lbWJsb2NrX3Jlc2VydmUoa3N0YXJ0LCBrc2l6ZSk7XG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIwMC1cbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIwNS1cdFx0c2l6ZSA9IGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQ7XG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjIwNjpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3ZpcnRfdG9fcGh5cyhpbml0cmRfc3RhcnQpLCBzaXplKTtcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjA3LVx0fVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmM9ODM9dm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYy05Ny1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmM6OTg6XHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jLTk5LX1cbi0tXG5hcmNoL21pcHMvYXRoMjUvYXIyMzE1LmM9MjU1PXZvaWQgX19pbml0IGFyMjMxNV9wbGF0X21lbV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9hdGgyNS9hcjIzMTUuYy0yNjktXHRtZW1zaXplIFx1MDAzY1x1MDAzYz0gMztcbmFyY2gvbWlwcy9hdGgyNS9hcjIzMTUuYzoyNzA6XHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XG5hcmNoL21pcHMvYXRoMjUvYXIyMzE1LmMtMjcxLVx0aW91bm1hcChzZHJhbV9iYXNlKTtcbi0tXG5hcmNoL21pcHMvYXRoMjUvYXI1MzEyLmM9MzUxPXZvaWQgX19pbml0IGFyNTMxMl9wbGF0X21lbV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9hdGgyNS9hcjUzMTIuYy0zNjUtXHRtZW1zaXplIFx1MDAzY1x1MDAzYz0gMjA7XG5hcmNoL21pcHMvYXRoMjUvYXI1MzEyLmM6MzY2Olx0bWVtYmxvY2tfYWRkKDAsIG1lbXNpemUpO1xuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jLTM2Ny1cdGlvdW5tYXAoc2RyYW1fYmFzZSk7XG4tLVxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jPTU4PXN0YXRpYyBfX2luaXQgdm9pZCBwcm9tX2luaXRfbWVtKHZvaWQpXG4tLVxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jLTEwMi1cdFx0bWVtIC09IDB4MTAwMDtcbmFyY2gvbWlwcy9iY200N3h4L3Byb20uYzoxMDM6XHRtZW1ibG9ja19hZGQoMCwgbWVtKTtcbmFyY2gvbWlwcy9iY200N3h4L3Byb20uYy0xMDQtfVxuLS1cbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmM9MTU1PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXG5hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jLTE1Ni17XG5hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jOjE1NzpcdG1lbWJsb2NrX2FkZCgwLCBiY202M3h4X2dldF9tZW1vcnlfc2l6ZSgpKTtcbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmMtMTU4LVxuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM9OTI4PXN0YXRpYyBfX2luaXQgdm9pZCBtZW1vcnlfZXhjbHVkZV9wYWdlKHU2NCBhZGRyLCB1NjQgKm1lbSwgdTY0ICpzaXplKVxuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTMxLVx0XHR1NjQgaW5jID0gYWRkciAtICptZW07XG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jOjkzMjpcdFx0bWVtYmxvY2tfYWRkKCptZW0sIGluYyk7XG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTkzMy1cdFx0Km1lbSAmIzQzOz0gaW5jO1xuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM9OTY3PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXG4tLVxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTEtI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jOjk5MjpcdG1lbWJsb2NrX2FkZChyZXNlcnZlX2xvd19tZW0sIG1heF9tZW1vcnkpO1xuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTMtXHR0b3RhbCAmIzQzOz0gbWF4X21lbW9yeTtcbi0tXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTk5Ni1cdGlmIChjcmFzaGtfc2l6ZSBcdTAwM2UgMCkge1xuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzo5OTc6XHRcdG1lbWJsb2NrX2FkZChjcmFzaGtfYmFzZSwgY3Jhc2hrX3NpemUpO1xuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTgtXHRcdGNyYXNoa19lbmQgPSBjcmFzaGtfYmFzZSAmIzQzOyBjcmFzaGtfc2l6ZTtcbi0tXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwMzctXHRcdFx0XHQvKiByZWdpb24gaXMgZnVsbHkgaW4gKi9cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6MTAzODpcdFx0XHRcdG1lbWJsb2NrX2FkZChtZW1vcnksIGNyYXNoa19iYXNlIC0gbWVtb3J5KTtcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTAzOS1cdFx0XHRcdHRvdGFsICYjNDM7PSBjcmFzaGtfYmFzZSAtIG1lbW9yeTtcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6MTA0MDpcdFx0XHRcdG1lbWJsb2NrX2FkZChjcmFzaGtfZW5kLCBlbmQgLSBjcmFzaGtfZW5kKTtcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA0MS1cdFx0XHRcdHRvdGFsICYjNDM7PSBlbmQgLSBjcmFzaGtfZW5kO1xuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA2Ny0jZW5kaWZcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6MTA2ODpcdFx0XHRtZW1ibG9ja19hZGQobWVtb3J5LCBtZW1fYWxsb2Nfc2l6ZSk7XG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwNjktXHRcdFx0dG90YWwgJiM0Mzs9IG1lbV9hbGxvY19zaXplO1xuLS1cbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYz05Nz12b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZClcbi0tXG5hcmNoL21pcHMvY29iYWx0L3NldHVwLmMtMTEyLVxuYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jOjExMzpcdG1lbWJsb2NrX2FkZCgwLCBtZW1zeik7XG5hcmNoL21pcHMvY29iYWx0L3NldHVwLmMtMTE0LVxuLS1cbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYz0zMD1zdGF0aWMgX19pbml0IHZvaWQgcG1heF9zZXR1cF9tZW1vcnlfcmVnaW9uKHZvaWQpXG4tLVxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTUxLVxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jOjUyOlx0bWVtYmxvY2tfYWRkKDAsICh1bnNpZ25lZCBsb25nKW1lbW9yeV9wYWdlIC0gQ0tTRUcxIC0gQ0hVTktfU0laRSk7XG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtNTMtfVxuLS1cbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYz01OT1zdGF0aWMgX19pbml0IHZvaWQgcmV4X3NldHVwX21lbW9yeV9yZWdpb24odm9pZClcbi0tXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtNzYtXHRcdGVsc2Uge1xuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jOjc3Olx0XHRcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYy03OC1cdFx0XHRtZW1fc3RhcnQgJiM0Mzs9IG1lbV9zaXplICYjNDM7ICg4ICogYm0tXHUwMDNlcGFnZXNpemUpO1xuLS1cbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYy04Mi1cdGlmIChtZW1fc2l6ZSlcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYzo4MzpcdFx0bWVtYmxvY2tfYWRkKG1lbV9zdGFydCwgbWVtX3NpemUpO1xuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTg0LX1cbi0tXG5hcmNoL21pcHMvZGVjL3NldHVwLmM9MTM3PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXG4tLVxuYXJjaC9taXBzL2RlYy9zZXR1cC5jLTE1MC1cdC8qIFN0YXkgYXdheSBmcm9tIHRoZSBmaXJtd2FyZSB3b3JraW5nIG1lbW9yeSBhcmVhIGZvciBub3cuICovXG5hcmNoL21pcHMvZGVjL3NldHVwLmM6MTUxOlx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgX19wYV9zeW1ib2woXHUwMDI2X3RleHQpIC0gUEhZU19PRkZTRVQpO1xuYXJjaC9taXBzL2RlYy9zZXR1cC5jLTE1Mi19XG4tLVxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYz0xMjM9dm9pZCBfX3dlYWsgX19pbml0IHByb21fbWVtaW5pdCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTUzLVxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYzoxNTQ6XHRcdG1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTtcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTU1LVxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYy0xNTYtXHRcdGlmICh0eXBlID09IG1lbV9yZXNlcnZlZClcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmM6MTU3Olx0XHRcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1OC1cbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTU5LVx0XHRpZiAodHlwZSA9PSBtZW1fcHJvbV91c2VkKSB7XG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jOjE2MDpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYy0xNjEtXHRcdFx0aWYgKG5yX3Byb21fbWVtIFx1MDAzZT0gNSkge1xuLS1cbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jPTEwMD1zdGF0aWMgdm9pZCBfX2luaXQgc25pX21lbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmMtMTMwLVx0XHRcdG1lbWNvbmZbaV0uc2l6ZSwgbWVtY29uZltpXS5iYXNlKTtcbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jOjEzMTpcdFx0bWVtYmxvY2tfYWRkKG1lbWNvbmZbaV0uYmFzZSwgbWVtY29uZltpXS5zaXplKTtcbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jLTEzMi1cdH1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9OTg9dm9pZCBfX2luaXQgZGV0ZWN0X21lbW9yeV9yZWdpb24ocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IHN6X21pbiwgcGh5c19hZGRyX3Qgc3pfbWF4KVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0xMTMtXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MTE0Olx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0xMTUtfVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0yMTU9c3RhdGljIHZvaWQgX19pbml0IGZpbmFsaXplX2luaXRyZCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yMjktXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MjMwOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKGluaXRyZF9zdGFydCksIHNpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTIzMS1cdGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTI2Nz1zdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTI4NC1cdC8qIFJlc2VydmUgbWVtb3J5IG9jY3VwaWVkIGJ5IGtlcm5lbC4gKi9cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoyODU6XHRtZW1ibG9ja19yZXNlcnZlKF9fcGFfc3ltYm9sKFx1MDAyNl90ZXh0KSxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yODYtXHRcdFx0X19wYV9zeW1ib2woXHUwMDI2X2VuZCkgLSBfX3BhX3N5bWJvbChcdTAwMjZfdGV4dCkpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yOTYtXHRpZiAocmFtc3RhcnQgXHUwMDNlIFBIWVNfT0ZGU0VUKVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjI5NzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgcmFtc3RhcnQgLSBQSFlTX09GRlNFVCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMjk4LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0zNDY9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTM3MC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzozNzE6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKHN0YXJ0LCBzaXplLCBwYV90b19uaWQoc3RhcnQpLCBNRU1CTE9DS19OT05FKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0zNzItXHRlbHNlXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MzczOlx0XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTM3NC1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX21lbW1hcChjaGFyICpwKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0zOTgtXHRcdHN0YXJ0X2F0ID0gbWVtcGFyc2UocCYjNDM7MSwgXHUwMDI2cCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6Mzk5Olx0XHRtZW1ibG9ja19hZGQoc3RhcnRfYXQsIG1lbV9zaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MDAtXHR9IGVsc2UgaWYgKCpwID09ICYjMzk7IyYjMzk7KSB7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQwNC1cdFx0c3RhcnRfYXQgPSBtZW1wYXJzZShwJiM0MzsxLCBcdTAwMjZwKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0MDU6XHRcdG1lbWJsb2NrX2FkZChzdGFydF9hdCwgbWVtX3NpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQwNjpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydF9hdCwgbWVtX3NpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQwNy1cdH0gZWxzZSB7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTQyMD1zdGF0aWMgdm9pZCBfX2luaXQgbWlwc19yZXNlcnZlX3ZtY29yZSh2b2lkKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDItXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NDQzOlx0bWVtYmxvY2tfcmVzZXJ2ZShlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDQ0LSNlbmRpZlxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz01MDg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2tlcm5lbF9zZWN0aW9uc19tZW0odm9pZClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNTE0LVx0XHRwcl9pbmZvKFwmIzM0O0tlcm5lbCBzZWN0aW9ucyBhcmUgbm90IGluIHRoZSBtZW1vcnkgbWFwc1xcblwmIzM0Oyk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NTE1Olx0XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTUxNi1cdH1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NjMzPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY3Ni1cdC8qIFJlc2VydmUgZm9yIGhpYmVybmF0aW9uLiAqL1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjY3NzpcdG1lbWJsb2NrX3Jlc2VydmUoX19wYV9zeW1ib2woXHUwMDI2X19ub3NhdmVfYmVnaW4pLFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY3OC1cdFx0X19wYV9zeW1ib2woXHUwMDI2X19ub3NhdmVfZW5kKSAtIF9fcGFfc3ltYm9sKFx1MDAyNl9fbm9zYXZlX2JlZ2luKSk7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jPTIwMTA9dm9pZCByZXNlcnZlX2V4Y2VwdGlvbl9zcGFjZShwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jLTIwMTctXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApXG5hcmNoL21pcHMva2VybmVsL3RyYXBzLmM6MjAxODpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYy0yMDE5LX1cbi0tXG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jPTE4PXZvaWQgX19pbml0IHByb21faW5pdF9tZW1vcnkodm9pZClcbmFyY2gvbWlwcy9sb29uZ3NvbjJlZi9jb21tb24vbWVtLmMtMTkte1xuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzoyMDpcdG1lbWJsb2NrX2FkZCgweDAsIChtZW1zaXplIFx1MDAzY1x1MDAzYyAyMCkpO1xuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYy0yMS1cbi0tXG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jLTQwLVx0aWYgKGhpZ2htZW1zaXplIFx1MDAzZSAwKVxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzo0MTpcdFx0bWVtYmxvY2tfYWRkKExPT05HU09OX0hJR0hNRU1fU1RBUlQsIGhpZ2htZW1zaXplIFx1MDAzY1x1MDAzYyAyMCk7XG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jLTQyLSNlbmRpZiAvKiAhQ09ORklHXzY0QklUICovXG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jPTUwPXZvaWQgX19pbml0IHN6bWVtKHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy04MS1cdFx0XHRcdCh1MzIpbm9kZV9pZCwgbWVtX3R5cGUsIFx1MDAyNm1lbV9zdGFydCwgXHUwMDI2bWVtX3NpemUpO1xuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjgyOlx0XHRcdG1lbWJsb2NrX2FkZF9ub2RlKG1lbV9zdGFydCwgbWVtX3NpemUsIG5vZGUsXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtODMtXHRcdFx0XHRcdCAgTUVNQkxPQ0tfTk9ORSk7XG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTkxLVx0XHRcdFx0KHUzMilub2RlX2lkLCBtZW1fdHlwZSwgXHUwMDI2bWVtX3N0YXJ0LCBcdTAwMjZtZW1fc2l6ZSk7XG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmM6OTI6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShtZW1fc3RhcnQsIG1lbV9zaXplKTtcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy05My1cdFx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtMTA0LVx0aWYgKGxvb25nc29uX3N5c2NvbmYudmdhYmlvc19hZGRyKVxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjEwNTpcdFx0bWVtYmxvY2tfcmVzZXJ2ZSh2aXJ0X3RvX3BoeXMoKHZvaWQgKilsb29uZ3Nvbl9zeXNjb25mLnZnYWJpb3NfYWRkciksXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtMTA2LVx0XHRcdFx0U1pfMjU2Syk7XG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jPTgyPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYy0xMTAtXHRcdC8qIFJlc2VydmUgdGhlIGtlcm5lbCB0ZXh0L2RhdGEvYnNzICovXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmM6MTExOlx0XHRtZW1ibG9ja19yZXNlcnZlKGtlcm5lbF9zdGFydF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY1MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IGJsb2NrIHNpdHVhdGlvbiBvbiB4ODYvYW1kNjQ6CgoqKkludmVzdGlnYXRpbmcgbWVtYmxvY2sgb24geDg2L2FtZDY0KioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgbWVtYmxvY2tgIGlzIHV0aWxpemVkIG9uIHg4Ni9hbWQ2NC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCBhIGdyZXAgd2l0aGluIHRoZSBgYXJjaC94ODYvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgYXJjaGl0ZWN0dXJhbCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIGBtZW1ibG9ja19hZGRgIGFuZCBgbWVtYmxvY2tfcmVzZXJ2ZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgYXMgYG1lbWJsb2NrX2FkZGAgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgYXZhaWxhYmxlIG1lbW9yeSByYW5nZXMgdG8gdGhlIG1lbWJsb2NrIGxpc3QsIHdoaWxlIGBtZW1ibG9ja19yZXNlcnZlYCBpcyB3aGF0IGlzIHVzZWQgdG8gcmVzZXJ2ZSByYW5nZXMgYW5kIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIHVzaW5nIHRoZW0uIEJ5IHNlYXJjaGluZyBmb3IgdGhlc2UsIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB3aGVyZSBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFuYWdlZCwgd2hpY2ggZHJpdmVycyBhcmUgdXNpbmcgaXQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgQklPUyBvciBmaXJtd2FyZSwgYW5kIGdldCBhbiBvdmVydmlldyBvZiB0aGUgYm9vdCBwcm9jZXNzIG1lbW9yeSBtYXAgb24geDg2LiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgaXMgaW5pdGlhbGx5IHNldCB1cCBhbmQgaG93IGl0IGV2b2x2ZXMgYXMgdGhlIGtlcm5lbCBib290cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfYWRkfG1lbWJsb2NrX3Jlc2VydmV8bWVtYmxvY2tfaXNvbGF0ZV9yYW5nZXxtZW1ibG9ja19yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2NoZWNrLmM9OTI9dm9pZCBfX2luaXQgc2V0dXBfYmlvc19jb3JydXB0aW9uX2NoZWNrKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NoZWNrLmMtMTIzLVxuYXJjaC94ODYva2VybmVsL2NoZWNrLmM6MTI0Olx0XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XG5hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYy0xMjUtXHRcdHNjYW5fYXJlYXNbbnVtX3NjYW5fYXJlYXNdLmFkZHIgPSBzdGFydDtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDEtXHRcdGlmIChlbnRyeS1cdTAwM2V0eXBlID09IEU4MjBfVFlQRV9TT0ZUX1JFU0VSVkVEKVxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQyOlx0XHRcdG1lbWJsb2NrX3Jlc2VydmUoZW50cnktXHUwMDNlYWRkciwgZW50cnktXHUwMDNlc2l6ZSk7XG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDMtXG4tLVxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzQ2LVxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQ3Olx0XHRtZW1ibG9ja19hZGQoZW50cnktXHUwMDNlYWRkciwgZW50cnktXHUwMDNlc2l6ZSk7XG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDgtXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzczLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jOjEzNzQ6XHRcdG1lbWJsb2NrX3JlbW92ZShQRk5fUEhZUyhtYXhfcGZuKSwgLTEpO1xuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzc1LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9lYmRhLmM9NTY9dm9pZCBfX2luaXQgcmVzZXJ2ZV9iaW9zX3JlZ2lvbnModm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWJkYS5jLTk2LVx0LyogUmVzZXJ2ZSBhbGwgbWVtb3J5IGJldHdlZW4gYmlvc19zdGFydCBhbmQgdGhlIDFNQiBtYXJrOiAqL1xuYXJjaC94ODYva2VybmVsL2ViZGEuYzo5NzpcdG1lbWJsb2NrX3Jlc2VydmUoYmlvc19zdGFydCwgMHgxMDAwMDAgLSBiaW9zX3N0YXJ0KTtcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmMtOTgtfVxuLS1cbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmM9NTUyPXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IG1wZl9pbnRlbCAqbXBmKVxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01NTMte1xuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYzo1NTQ6XHRtZW1ibG9ja19yZXNlcnZlKG1wZi1cdTAwM2VwaHlzcHRyLCBnZXRfbXBjX3NpemUobXBmLVx1MDAzZXBoeXNwdHIpKTtcbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMtNTU1LX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jPTU1Nz1zdGF0aWMgaW50IF9faW5pdCBzbXBfc2Nhbl9jb25maWcodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jLTU4Mi1cbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmM6NTgzOlx0XHRcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZW9mKCptcGYpKTtcbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMtNTg0LVx0XHRcdGlmIChtcGYtXHUwMDNlcGh5c3B0cilcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz0yODM9c3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfYnJrKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtMjg1LVx0aWYgKF9icmtfZW5kIFx1MDAzZSBfYnJrX3N0YXJ0KVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6Mjg2Olx0XHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oX19wYV9zeW1ib2woX2Jya19zdGFydCksXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy0yODctXHRcdFx0XHQgICAgICBfYnJrX2VuZCAtIF9icmtfc3RhcnQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTM0OT1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfcmVzZXJ2ZV9pbml0cmQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy0zNTktXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzozNjA6XHRtZW1ibG9ja19yZXNlcnZlX2tlcm4ocmFtZGlza19pbWFnZSwgcmFtZGlza19lbmQgLSByYW1kaXNrX2ltYWdlKTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTM2MS19XG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NDAxPXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfZWFybHlfaW1hX2J1ZmZlcih1NjQgcGh5c19hZGRyKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQxMi1cdGlmIChkYXRhLVx1MDAzZXNpemUpIHtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQxMzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKGRhdGEtXHUwMDNlYWRkciwgZGF0YS1cdTAwM2VzaXplKTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQxNC1cdFx0aW1hX2tleGVjX2J1ZmZlcl9waHlzID0gZGF0YS1cdTAwM2VhZGRyO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTU2OT1zdGF0aWMgdm9pZCBfX2luaXQgbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Vfc2V0dXBfZGF0YSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTU4Ni1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjU4NzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKHBhX2RhdGEsIHNpemVvZigqZGF0YSkgJiM0MzsgZGF0YS1cdTAwM2VsZW4pO1xuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNTg4LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTYwMC1cdFx0XHRpZiAoaW5kaXJlY3QtXHUwMDNldHlwZSAhPSBTRVRVUF9JTkRJUkVDVClcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjYwMTpcdFx0XHRcdG1lbWJsb2NrX3Jlc2VydmVfa2VybihpbmRpcmVjdC1cdTAwM2VhZGRyLCBpbmRpcmVjdC1cdTAwM2VsZW4pO1xuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNjAyLVx0XHR9XG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NzE5PXN0YXRpYyB2b2lkIF9faW5pdCB0cmltX3NuYl9tZW1vcnkodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy03NDYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9wYWdlcyk7IGkmIzQzOyYjNDM7KSB7XG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo3NDc6XHRcdGlmIChtZW1ibG9ja19yZXNlcnZlKGJhZF9wYWdlc1tpXSwgUEFHRV9TSVpFKSlcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTc0OC1cdFx0XHRwcmludGsoS0VSTl9XQVJOSU5HIFwmIzM0O2ZhaWxlZCB0byByZXNlcnZlIDB4JTA4bHhcXG5cJiMzNDssXG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9Nzk3PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbW9yeSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwMi1cdCAqIF9fZW5kX29mX2tlcm5lbF9yZXNlcnZlIHN5bWJvbCBtdXN0IGJlIGV4cGxpY2l0bHkgcmVzZXJ2ZWQgd2l0aCBhXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo4MDM6XHQgKiBzZXBhcmF0ZSBtZW1ibG9ja19yZXNlcnZlKCkgb3IgdGhleSB3aWxsIGJlIGRpc2NhcmRlZC5cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwNC1cdCAqL1xuYXJjaC94ODYva2VybmVsL3NldHVwLmM6ODA1Olx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKF9fcGFfc3ltYm9sKF90ZXh0KSxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwNi1cdFx0XHQgICAgICAodW5zaWduZWQgbG9uZylfX2VuZF9vZl9rZXJuZWxfcmVzZXJ2ZSAtICh1bnNpZ25lZCBsb25nKV90ZXh0KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy04MTgtXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjgxOTpcdG1lbWJsb2NrX3Jlc2VydmUoMCwgU1pfNjRLKTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgyMC1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUz0xMzA9U0VDVElPTlNcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUy0zNzUtXHQgKiBhdXRvbWF0aWNhbGx5IHJlc2VydmVkIGluIHNldHVwX2FyY2goKS4gQW55dGhpbmcgYWZ0ZXIgaGVyZSBtdXN0IGJlXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUzozNzY6XHQgKiBleHBsaWNpdGx5IHJlc2VydmVkIHVzaW5nIG1lbWJsb2NrX3Jlc2VydmUoKSBvciBpdCB3aWxsIGJlIGRpc2NhcmRlZFxuYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMtMzc3LVx0ICogYW5kIHRyZWF0ZWQgYXMgYXZhaWxhYmxlIG1lbW9yeS5cbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmM9MTkyPWludCBfX2luaXQgZWZpX21lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jLTIyNi1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYzoyMjc6XHRtZW1ibG9ja19yZXNlcnZlKHBtYXAsIGVmaS5tZW1tYXAubnJfbWFwICogZWZpLm1lbW1hcC5kZXNjX3NpemUpO1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jLTIyOC1cdHNldF9iaXQoRUZJX1BSRVNFUlZFX0JTX1JFR0lPTlMsIFx1MDAyNmVmaS5mbGFncyk7XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jPTMyND12b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9ib290X3NlcnZpY2VzKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jLTM0Mi1cdFx0LypcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYzozNDM6XHRcdCAqIEJlY2F1c2UgdGhlIGZvbGxvd2luZyBtZW1ibG9ja19yZXNlcnZlKCkgaXMgcGFpcmVkXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmMtMzQ0LVx0XHQgKiB3aXRoIGZyZWVfcmVzZXJ2ZWRfYXJlYSgpIGZvciB0aGlzIHJlZ2lvbiBpblxuLS1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNTYtXHRcdGlmICghYWxyZWFkeV9yZXNlcnZlZCkge1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jOjM1NzpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBzaXplKTtcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNTgtXG4tLVxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jPTQ3PXZvaWQgX19pbml0IHJlc2VydmVfcmVhbF9tb2RlKHZvaWQpXG4tLVxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jLTY2LVx0ICovXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmM6Njc6XHRtZW1ibG9ja19yZXNlcnZlKDAsIFNaXzFNKTtcbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy02OC1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNjE9c3RhdGljIHZvaWQgX19pbml0IF9fc25wX2ZpeHVwX2U4MjBfdGFibGVzKHU2NCBwYSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xODctXHRcdGlmICghbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKHBhLCBQTURfU0laRSkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxODg6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwYSwgUE1EX1NJWkUpO1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTg5LVx0fVxuLS1cbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYz00MTU9dm9pZCBfX2luaXQgeGVuX2FkZF9leHRyYV9tZW0odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbl9wZm5zKVxuLS1cbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00MzktXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmM6NDQwOlx0bWVtYmxvY2tfcmVzZXJ2ZShQRk5fUEhZUyhzdGFydF9wZm4pLCBQRk5fUEhZUyhuX3BmbnMpKTtcbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00NDEtfVxuLS1cbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW5faHZtLmM9NTA9c3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfc2hhcmVkX2luZm8odm9pZClcbi0tXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jLTY5LVxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYzo3MDpcdG1lbWJsb2NrX3Jlc2VydmUocGEsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jLTcxLVx0SFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9IGVhcmx5X21lbXJlbWFwKHBhLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L3hlbi9tbXVfcHYuYz0xNzY4PXZvaWQgX19pbml0IHhlbl9zZXR1cF9rZXJuZWxfcGFnZXRhYmxlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbilcbi0tXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMTg5MS1cdHhlbl9wdF9zaXplID0gKHB0X2VuZCAtIHB0X2Jhc2UpICogUEFHRV9TSVpFO1xuYXJjaC94ODYveGVuL21tdV9wdi5jOjE4OTI6XHRtZW1ibG9ja19yZXNlcnZlKHhlbl9wdF9iYXNlLCB4ZW5fcHRfc2l6ZSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMTg5My1cbi0tXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM9MjA3Nj12b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV9zcGVjaWFsX3BhZ2VzKHZvaWQpXG4tLVxuYXJjaC94ODYveGVuL21tdV9wdi5jLTIwNzktXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MDpcdG1lbWJsb2NrX3Jlc2VydmUoX19wYSh4ZW5fc3RhcnRfaW5mbyksIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMjA4MS1cdGlmICh4ZW5fc3RhcnRfaW5mby1cdTAwM2VzdG9yZV9tZm4pIHtcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDgyLVx0XHRwYWRkciA9IFBGTl9QSFlTKG1mbl90b19wZm4oeGVuX3N0YXJ0X2luZm8tXHUwMDNlc3RvcmVfbWZuKSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwYWRkciwgUEFHRV9TSVpFKTtcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg0LVx0fVxuLS1cbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg2LVx0XHRwYWRkciA9IFBGTl9QSFlTKG1mbl90b19wZm4oeGVuX3N0YXJ0X2luZm8tXHUwMDNlY29uc29sZS5kb21VLm1mbikpO1xuYXJjaC94ODYveGVuL21tdV9wdi5jOjIwODc6XHRcdG1lbWJsb2NrX3Jlc2VydmUocGFkZHIsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMjA4OC1cdH1cbi0tXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYz04Mz1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX2RlbF9leHRyYV9tZW0odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxuYXJjaC94ODYveGVuL3NldHVwLmMtMTA5LVx0XHRcdHhlbl9leHRyYV9tZW1baV0ubl9wZm5zID0gc3RhcnRfcGZuIC0gc3RhcnRfcjtcbmFyY2gveDg2L3hlbi9zZXR1cC5jOjExMDpcdFx0XHQvKiBDYWxsaW5nIG1lbWJsb2NrX3Jlc2VydmUoKSBhZ2FpbiBpcyBva2F5LiAqL1xuYXJjaC94ODYveGVuL3NldHVwLmMtMTExLVx0XHRcdHhlbl9hZGRfZXh0cmFfbWVtKHN0YXJ0X3BmbiAmIzQzOyBuX3BmbnMsIHN0YXJ0X3IgJiM0Mzsgc2l6ZV9yIC1cbi0tXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYz02MDE9cGh5c19hZGRyX3QgX19pbml0IHhlbl9maW5kX2ZyZWVfYXJlYShwaHlzX2FkZHJfdCBzaXplKVxuLS1cbmFyY2gveDg2L3hlbi9zZXR1cC5jLTYxOC1cdFx0aWYgKGFkZHIgXHUwMDNlPSBzdGFydCAmIzQzOyBzaXplKSB7XG5hcmNoL3g4Ni94ZW4vc2V0dXAuYzo2MTk6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgc2l6ZSk7XG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy02MjAtXHRcdFx0cmV0dXJuIHN0YXJ0O1xuLS1cbmFyY2gveDg2L3hlbi9zZXR1cC5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX3Jlc2VydmVfeGVuX21mbmxpc3Qodm9pZClcbi0tXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy03ODItXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYzo3ODM6XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBzaXplKTtcbmFyY2gveDg2L3hlbi9zZXR1cC5jLTc4NC1cdGlmICgheGVuX2lzX2U4MjBfcmVzZXJ2ZWQoc3RhcnQsIHNpemUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY3MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIFVzYWdlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZSBldmVuIGJvdGhlcmluZyB0byBkZWZpbmUgYEFSQ0hfS0VFUF9NRU1CTE9DS2A/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gaGVyZS4gVG8gZmlndXJlIHRoaXMgb3V0LCB0aGUgb2J2aW91cyBtb3ZlIGlzIHRvIHVzZSBgZ3JlcGAuIEkmIzM5O2xsIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYEFSQ0hfS0VFUF9NRU1CTE9DS2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIHRoZSBhcmNoaXRlY3R1cmVzIEkgbmVlZCB0byBsb29rIGF0IG1vcmUgY2xvc2VseS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB3aHkgdGhvc2UgcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIG5lZWQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgd2hhdCBpdCBzaWduaWZpZXMgaW4gdGhlaXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9LRUVQX01FTUJMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy0zNS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL2FybS9LY29uZmlnOjM2Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9hcm0vS2NvbmZpZy0zNy1cdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy02My1cdHNlbGVjdCBBUkNIX0hBVkVfVFJBQ0VfTU1JT19BQ0NFU1NcbmFyY2gvYXJtNjQvS2NvbmZpZzo2NDpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvYXJtNjQvS2NvbmZpZy02NS1cdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01OC1cdHNlbGVjdCBBUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlmICFQUkVFTVBUSU9OXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjU5Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0yMS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL21pcHMvS2NvbmZpZzoyMjpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvbWlwcy9LY29uZmlnLTIzLVx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2My1cdHNlbGVjdCBBUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTICAgICAgICBpZiBTUFVfQkFTRVxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTY0Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9wb3dlcnBjL0tjb25maWctMTY1LVx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXHRpZiBQUENfUkFESVhfTU1VXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuYXJjaC9yaXNjdi9LY29uZmlnOjYxOlx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSyBpZiBBQ1BJIHx8IEtFWEVDXG5hcmNoL3Jpc2N2L0tjb25maWctNjItXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcdGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4NjU9Y29uZmlnIElOVEVMX1REWF9IT1NUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODcwLVx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnOjE4NzE6XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzItXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTEwNzM9c3RhdGljIGludCBlZmlfbWVtX3Jlc2VydmVfaW9tZW0ocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTA5NS1cdCAqL1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6MTA5NjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFx1MDAyNlx1MDAyNiAhcmV0KVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTA5Ny1cdFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE1LVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjExNjojaWZuZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTctI2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz01NjA9c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU4Ni1cbmtlcm5lbC9rZXhlY19maWxlLmM6NTg3OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU4OC1zdGF0aWMgaW50IGtleGVjX3dhbGtfbWVtYmxvY2soc3RydWN0IGtleGVjX2J1ZiAqa2J1Zixcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTcxNj1pbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03MzgtXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjczOTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQwLVx0XHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xuLS1cbm1tL0tjb25maWc9NDgyPWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxuLS1cbm1tL0tjb25maWctNDg3LSMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxubW0vS2NvbmZpZzo0ODg6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xubW0vS2NvbmZpZy00ODktXHRib29sXG4tLVxubW0vbWVtYmxvY2suYy0xMDAtICpcbm1tL21lbWJsb2NrLmM6MTAxOiAqIFVubGVzcyBhbiBhcmNoaXRlY3R1cmUgZW5hYmxlcyAlQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSywgdGhlXG5tbS9tZW1ibG9jay5jLTEwMi0gKiBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgKGV4Y2VwdCBcJiMzNDtwaHlzbWVtXCYjMzQ7KSB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGVcbi0tXG5tbS9tZW1ibG9jay5jPTM2OT1zdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyByKVxuLS1cbm1tL21lbWJsb2NrLmMtMzg1LVxubW0vbWVtYmxvY2suYzozODY6I2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9tZW1ibG9jay5jLTM4Ny0vKipcbi0tXG5tbS9tZW1ibG9jay5jPTk2Nj11bnNpZ25lZCBsb25nIGZyZWVfcmVzZXJ2ZWRfYXJlYSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgcG9pc29uLCBjb25zdCBjaGFyICpzKVxuLS1cbm1tL21lbWJsb2NrLmMtOTg0LVxubW0vbWVtYmxvY2suYzo5ODU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xubW0vbWVtYmxvY2suYy05ODYtXHRcdGlmIChzdGFydF9wYSBcdTAwM2MgZW5kX3BhKVxuLS1cbm1tL21lbWJsb2NrLmM9MTAyMj1pbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3BoeXNfZnJlZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbm1tL21lbWJsb2NrLmMtMTAzMS1cbm1tL21lbWJsb2NrLmM6MTAzMjpcdGlmICghc2xhYl9pc19hdmFpbGFibGUoKSB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtYmxvY2suYy0xMDMzLVx0XHRyZXQgPSBtZW1ibG9ja19yZW1vdmVfcmFuZ2UoXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpO1xuLS1cbm1tL21lbWJsb2NrLmM9MjkxMT1fX3NldHVwKFwmIzM0O3Jlc2VydmVfbWVtPVwmIzM0OywgcmVzZXJ2ZV9tZW0pO1xuLS1cbm1tL21lbWJsb2NrLmMtMjkxMy0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5tbS9tZW1ibG9jay5jOjI5MTQ6I2lmZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcbm1tL21lbWJsb2NrLmMtMjkxNS1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4tLVxubW0vbWVtYmxvY2suYz0yOTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdCkgeyB9XG5tbS9tZW1ibG9jay5jLTI5NzYtXG5tbS9tZW1ibG9jay5jOjI5Nzc6I2VuZGlmIC8qIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0sgKi9cbm1tL21lbWJsb2NrLmMtMjk3OC1cbi0tXG5tbS9tZW1ibG9jay5jPTI5OTk9c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0zMDAyLVxubW0vbWVtYmxvY2suYzozMDAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFx1MDAyNlx1MDAyNiAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxubW0vbWVtYmxvY2suYy0zMDA0LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE1MzA9c3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NjAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTYyLVx0XHRpZiAocmVzLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzEtZXJyb3JfbWVtYmxvY2tfcmVtb3ZlOlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzMtXHRcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMjkzPXN0YXRpYyBpbnQgdHJ5X3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMzQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMzNS1cdFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBtZW1vcnkgaG90cGx1ZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGF0IGBtZW1ibG9ja19hZGRfbm9kZWAgYW5kIGBtZW1ibG9ja19yZW1vdmVgIGFyZSBrZXkgZnVuY3Rpb25zIGJlaW5nIHV0aWxpemVkLCBhbmQgdGhlaXIgb3BlcmF0aW9uIHNlZW1zIGNvbnRpbmdlbnQgb24gYElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSylgLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb25kaXRpb25hbCwgYXMgaXQgZGljdGF0ZXMgd2hldGhlciB0aGUgc3lzdGVtIG1haW50YWlucyBhIHBlcnNpc3RlbnQgYG1lbWJsb2NrYCByZXByZXNlbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QsIGJ1dCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByZWNpc2UgaW1wbGVtZW50YXRpb24sIGVzcGVjaWFsbHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZW1wbG95ZWQgaW4gaG90cGx1ZyBzY2VuYXJpb3MuIE15IGZvY3VzIHdpbGwgYmUgYXJvdW5kIGxpbmUgMTU2MCB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkgYXNzdW1lIHRoZSBtb3N0IHBlcnRpbmVudCBsb2dpYyB3aWxsIHJlc2lkZSBpbiB0ZXJtcyBvZiBhZGRpbmcgYW5kIHJlbW92aW5nIG1lbW9yeSBibG9ja3MgZHVyaW5nIGhvdHBsdWcgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xNDE4PXN0YXRpYyB2b2lkIHJlbW92ZV9tZW1vcnlfYmxvY2tzX2FuZF9hbHRtYXBzKHU2NCBzdGFydCwgdTY0IHNpemUpXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0MTkte1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDIwOlx0dW5zaWduZWQgbG9uZyBtZW1ibG9ja19zaXplID0gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyMS1cdHU2NCBjdXJfc3RhcnQ7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDI3LVx0Zm9yIChjdXJfc3RhcnQgPSBzdGFydDsgY3VyX3N0YXJ0IFx1MDAzYyBzdGFydCAmIzQzOyBzaXplO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDI4Olx0ICAgICBjdXJfc3RhcnQgJiM0Mzs9IG1lbWJsb2NrX3NpemUpIHtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyOS1cdFx0c3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBOVUxMO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQzOS1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0MDpcdFx0cmVtb3ZlX21lbW9yeV9ibG9ja19kZXZpY2VzKGN1cl9zdGFydCwgbWVtYmxvY2tfc2l6ZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NDE6XHRcdGFyY2hfcmVtb3ZlX21lbW9yeShjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIGFsdG1hcCwgTlVMTCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NDItXHRcdGFsdG1hcF9mcmVlKGFsdG1hcCk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDQ4LXtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0OTpcdHVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfc2l6ZSA9IG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NTAtXHR1NjQgY3VyX3N0YXJ0O1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ1My1cdGZvciAoY3VyX3N0YXJ0ID0gc3RhcnQ7IGN1cl9zdGFydCBcdTAwM2Mgc3RhcnQgJiM0Mzsgc2l6ZTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ1NDpcdCAgICAgY3VyX3N0YXJ0ICYjNDM7PSBtZW1ibG9ja19zaXplKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NTUtXHRcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDU4LVx0XHRcdC5iYXNlX3BmbiA9IFBIWVNfUEZOKGN1cl9zdGFydCksXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NTk6XHRcdFx0LmVuZF9wZm4gPSBQSFlTX1BGTihjdXJfc3RhcnQgJiM0MzsgbWVtYmxvY2tfc2l6ZSAtIDEpLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDYwLVx0XHR9O1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ3MC1cdFx0LyogY2FsbCBhcmNoJiMzOTtzIG1lbW9yeSBob3RhZGQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ3MTpcdFx0cmV0ID0gYXJjaF9hZGRfbWVtb3J5KG5pZCwgY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBcdTAwMjZwYXJhbXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDcyLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDc3LVx0XHQvKiBjcmVhdGUgbWVtb3J5IGJsb2NrIGRldmljZXMgYWZ0ZXIgbWVtb3J5IHdhcyBhZGRlZCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDc4Olx0XHRyZXQgPSBjcmVhdGVfbWVtb3J5X2Jsb2NrX2RldmljZXMoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBuaWQsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzktXHRcdFx0XHRcdFx0ICBwYXJhbXMuYWx0bWFwLCBncm91cCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0ODAtXHRcdGlmIChyZXQpIHtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ4MTpcdFx0XHRhcmNoX3JlbW92ZV9tZW1vcnkoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBwYXJhbXMuYWx0bWFwLCBOVUxMKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ4Mi1cdFx0XHRhbHRtYXBfZnJlZShwYXJhbXMuYWx0bWFwKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0OTMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0OTQ6c3RhdGljIGludCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ5NS17XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTA3PXN0YXRpYyBib29sIG5vZGVfaXNfbWVtb3J5bGVzcyhpbnQgbmlkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUyMC1cdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTIxOlx0cmV0dXJuICFmb3JfZWFjaF9tZW1vcnlfYmxvY2soXHUwMDI2bmlkLCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYik7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1MjItfVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUzMD1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzMy1cdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1MzQ6XHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzNS1cdHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwID0gTlVMTDtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NjItXHRcdGlmIChyZXMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTYzOlx0XHRcdG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQ7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjQ6XHRcdHJldCA9IG1lbWJsb2NrX2FkZF9ub2RlKHN0YXJ0LCBzaXplLCBuaWQsIG1lbWJsb2NrX2ZsYWdzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU2NS1cdFx0aWYgKHJldClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NzAtXHRpZiAocmV0IFx1MDAzYyAwKVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTcxOlx0XHRnb3RvIGVycm9yX21lbWJsb2NrX3JlbW92ZTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU3Mi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NzYtXHRcdFx0bm9kZV9zZXRfb2ZmbGluZShuaWQpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTc3Olx0XHRcdGdvdG8gZXJyb3JfbWVtYmxvY2tfcmVtb3ZlO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTc4LVx0XHR9XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjMwLVx0fVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMxOmVycm9yX21lbWJsb2NrX3JlbW92ZTpcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYzMi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMzOlx0XHRtZW1ibG9ja19yZW1vdmUoc3RhcnQsIHNpemUpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjM0LWVycm9yX21lbV9ob3RwbHVnX2VuZDpcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5ODU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMjAyLVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMjAzOnN0YXRpYyBpbnQgY2hlY2tfbWVtYmxvY2tfb2ZmbGluZWRfY2Ioc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIyMDQte1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MjI5Mz1zdGF0aWMgaW50IHRyeV9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzA3LVx0ICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMDg6XHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2bmlkLCBjaGVja19tZW1ibG9ja19vZmZsaW5lZF9jYik7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMDktXHRpZiAocmMpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM0LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMzU6XHRcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIE1lbW9yeSBCbG9jayBSZXRlbnRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBlbmFibGVkLCBzcGVjaWZpY2FsbHkgb24gYW1kNjQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBwZXJoYXBzIGBDT05GSUdfSU5URUxfVERYX0hPU1RgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHdhcyByZXNwb25zaWJsZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgY2FuJiMzOTt0IGp1c3QganVtcCB0byBhIGNvbmNsdXNpb24uCgpSaWdodCwgc28sIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgc2VsZWN0IG9yIHJlbGF0ZSB0byBrZWVwaW5nIHRoZSBtZW1vcnkgYmxvY2sgYXJvdW5kPyBJIG5lZWQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdmlldy4gSSBoYWQgYWxyZWFkeSB1c2VkIGBncmVwYCBlYXJsaWVyIGZvciBgQVJDSF9LRUVQX01FTUJMT0NLYCBhY3Jvc3MgdGhlIEtjb25maWcgZmlsZXMsIGJ1dCBsZXQmIzM5O3MgcmVjYXAgdGhlIGZpbmRpbmdzIHRvIGJlIGNlcnRhaW4uCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OiBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBzZWxlY3RlZCBieSBBUk0sIEFSTTY0LCBMT09OR0FSQ0gsIE1JUFMsIFBQQywgYW5kIFJJU0NWLCBidXQgUklTQ1YgaGFzIGEgY29uZGl0aW9uYWwgYmFzZWQgb24gYEFDUElgIG9yIGBLRVhFQ2AuIE9uIHg4NiwgYElOVEVMX1REWF9IT1NUYCBzZWxlY3RzIGl0LiBBbHJpZ2h0LgoKQnV0IHdoYXQgYWJvdXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucz8gTGlrZSBpZiBgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hgIGlzIGVuYWJsZWQ/IEkgaGF2ZSB0byBnbyB0aHJvdWdoIGFsbCBvZiB0aGUgcG9zc2liaWxpdGllcy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJiMzOTttIG1pc3Npbmc/IEkgc2hvdWxkIHJlYWxseSBjaGVjayBgbW0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNDgyIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGlzIHR5cGUgb2YgY29uZmlndXJhdGlvbiBsaXZlcy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzU6XHRcdGJvb2xcbiA0NzY6XHRcbiA0Nzc6XHRjb25maWcgSEFWRV9HVVBfRkFTVFxuIDQ3ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA0Nzk6XHRcdGJvb2xcbiA0ODA6XHRcbiA0ODE6XHQjIEVuYWJsZSBtZW1ibG9jayBzdXBwb3J0IGZvciBzY3JhdGNoIG1lbW9yeSB3aGljaCBpcyBuZWVkZWQgZm9yIGtleGVjIGhhbmRvdmVyXG4gNDgyOlx0Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXG4gNDgzOlx0XHRib29sXG4gNDg0Olx0XG4gNDg1Olx0IyBEb24mIzM5O3QgZGlzY2FyZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZWQgdG8gdHJhY2sgXCYjMzQ7bWVtb3J5XCYjMzQ7IGFuZCBcJiMzNDtyZXNlcnZlZFwmIzM0OyBtZW1ibG9ja3NcbiA0ODY6XHQjIGFmdGVyIGVhcmx5IGJvb3QsIHNvIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHRlc3QgZm9yIHZhbGlkaXR5IG9mIG1lbW9yeS5cbiA0ODc6XHQjIEFsc28sIG1lbWJsb2NrcyBhcmUgdXBkYXRlZCB3aXRoIG1lbW9yeSBob3QodW4pcGx1Zy5cbiA0ODg6XHRjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXG4gNDg5Olx0XHRib29sXG4gNDkwOlx0XG4gNDkxOlx0IyBLZWVwIGFyY2ggTlVNQSBtYXBwaW5nIGluZnJhc3RydWN0dXJlIHBvc3QtaW5pdC5cbiA0OTI6XHRjb25maWcgTlVNQV9LRUVQX01FTUlORk9cbiA0OTM6XHRcdGJvb2xcbiA0OTQ6XHRcbiA0OTU6XHRjb25maWcgTUVNT1JZX0lTT0xBVElPTlxuIDQ5NjpcdFx0Ym9vbFxuIDQ5NzpcdFxuIDQ5ODpcdCMgSU9SRVNPVVJDRV9TWVNURU1fUkFNIHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCByZXNvdXJjZSB0cmVlIHRoYXQgYXJlIG1hcmtlZFxuIDQ5OTpcdCMgSU9SRVNPVVJDRV9FWENMVVNJVkUgY2Fubm90IGJlIG1hcHBlZCB0byB1c2VyIHNwYWNlLCBmb3IgZXhhbXBsZSwgdmlhXG4gNTAwOlx0IyAvZGV2L21lbS5cbiA1MDE6XHRjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbiA1MDI6XHRcdGRlZl9ib29sIHlcbiA1MDM6XHRcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXG4gNTA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEhvdHBsdWcgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgQ2FuIHN5emthbGxlciBvciBhbnl0aGluZyBydW5uaW5nIGluIHVzZXJzcGFjZSBhY3R1YWxseSB0cmlnZ2VyIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgb3Igb3RoZXIgcmVsYXRlZCBrZXJuZWwgcGF0aHMgYXQgcnVudGltZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBBbmQsIGNhbiBzeXprYWxsZXIgZXZlbiBiZSB1c2VkIHRvIGZ1enogdGhlIGJvb3QgY29kZT8gTm8sIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgZGVzaWduZWQgdG8gZm9jdXMgb24gbGl2ZSBrZXJuZWwgc3RhdGVzLCBoaXR0aW5nIGl0IHRocm91Z2ggc3lzY2FsbHMgYW5kIHBlcmhhcHMgdmlydHVhbCBkZXZpY2VzIG9yIHN5c2ZzLiBTbywgYmFjayB0byB0aGUgaW5pdGlhbCBxdWVzdGlvbjogaXMgdGhlcmUgYSB3YXkgZm9yIHVzZXJzcGFjZSB0byBtYW5pcHVsYXRlIG1lbW9yeSBob3RwbHVnLCBhZGRpbmcgb3IgcmVtb3ZpbmcgbWVtb3J5IHRocm91Z2ggc3lzZnMsIGRheCwgb3IgYW55dGhpbmcgZWxzZT8KClJpZ2h0LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExvb2tpbmcgYXQgYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBJIHNlZSBgX19hZGRfbWVtb3J5X3Jlc291cmNlYCBpcyBhIGNydWNpYWwgZnVuY3Rpb24uIEFoYSEgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5OiBgYWRkX21lbW9yeWAsIGBhZGRfbWVtb3J5X3Jlc291cmNlYCwgYW5kIGBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gTm93IHRoZSBpbnZlc3RpZ2F0aW9uIGJlZ2lucy4uLiB3aGVyZSBhcmUgKnRob3NlKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20/IFRoYXQmIzM5O3MgdGhlIHRyYWlsIEkgbmVlZCB0byBmb2xsb3cuIFRpbWUgdG8gc3RhcnQgdHJhY2luZyB0aG9zZSBjYWxscyBhbmQgc2VlIGlmIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0IGNhbiBiZSBpZGVudGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGRfbWVtb3J5XFwofGFkZF9tZW1vcnlfcmVzb3VyY2VcXCh8YWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdD0xNzM9bWVtb3J5IGZhc3RlciB0aGFuIGV4cGVjdGVkOlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0LTE3Ni0gIG1lbV9ob3RwbHVnX2xvY2tcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjE3NzotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSB3aWxsIGZpcnN0IHRha2UgdGhlIG1lbV9ob3RwbHVnX2xvY2ssIGZvbGxvd2VkIGJ5XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdC0xNzgtICB0aGUgZGV2aWNlX2xvY2soKSAod2hpbGUgY3JlYXRpbmcgdGhlIGRldmljZXMsIGR1cmluZyBidXNfYWRkX2RldmljZSgpKS5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3Q9ODc9Tk9USUZZX1NUT1DlgZzmraLlr7npgJrnn6XpmJ/liJfnmoTov5vkuIDmraXlpITnkIbjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTA1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjEwNjotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKeWwhummluWFiOS9v+eUqG1lbV9ob3RwbHVnX2xvY2vvvIznhLblkI7mmK9kZXZpY2VfbG9jaygp77yI5Zyo5YibXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTA3LSAg5bu66K6+5aSH5pe277yM5ZyoYnVzX2FkZF9kZXZpY2UoKeacn+mXtO+8ieOAglxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmg9MjA9c3RhdGljIGNvbnN0IHN0cnVjdCB0YWd0YWJsZSBfX3RhZ3RhYmxlXyMjZm4gX190YWcgPSB7IHRhZywgZm4gfVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaC0yMS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmg6MjI6ZXh0ZXJuIGludCBhcm1fYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgtMjMtZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgZWFybHlfcHJpbnQoY29uc3QgY2hhciAqc3RyLCAuLi4pO1xuLS1cbmFyY2gvYXJtL2tlcm5lbC9hdGFnc19wYXJzZS5jPTY1PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19tZW0zMihjb25zdCBzdHJ1Y3QgdGFnICp0YWcpXG5hcmNoL2FybS9rZXJuZWwvYXRhZ3NfcGFyc2UuYy02Ni17XG5hcmNoL2FybS9rZXJuZWwvYXRhZ3NfcGFyc2UuYzo2NzpcdHJldHVybiBhcm1fYWRkX21lbW9yeSh0YWctXHUwMDNldS5tZW0uc3RhcnQsIHRhZy1cdTAwM2V1Lm1lbS5zaXplKTtcbmFyY2gvYXJtL2tlcm5lbC9hdGFnc19wYXJzZS5jLTY4LX1cbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYz03NDY9dm9pZCBfX2luaXQgZHVtcF9tYWNoaW5lX3RhYmxlKHZvaWQpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtNzU5LVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM6NzYwOmludCBfX2luaXQgYXJtX2FkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTc2MS17XG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9ODI2PXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X21lbShjaGFyICpwKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg0OC1cbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjg0OTpcdGFybV9hZGRfbWVtb3J5KHN0YXJ0LCBzaXplKTtcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg1MC1cbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTE5NzU9c3RydWN0IHJhbmdlIGFyY2hfZ2V0X21hcHBhYmxlX3JhbmdlKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMDA2LVxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMDA3OmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjAwOC1cdFx0ICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTY0PXZvaWQgX19pbml0IGZpeHJhbmdlX2luaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHBnZF90ICpwZ2RfYmFzZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTA2LSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoxMDc6aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTEwOC17XG4tLVxuYXJjaC9wb3dlcnBjL21tL21lbS5jPTEyOT1pbnQgX19yZWYgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0xNDQtXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmM6MTQ1OmludCBfX3JlZiBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0xNDYtXHRcdFx0ICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jPTU2ND1zdGF0aWMgaW50IGRscGFyX2FkZF9sbWIoc3RydWN0IGRybWVtX2xtYiAqbG1iKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU4Ni1cdC8qIEFkZCB0aGUgbWVtb3J5ICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzo1ODc6XHRyYyA9IF9fYWRkX21lbW9yeShuaWQsIGxtYi1cdTAwM2ViYXNlX2FkZHIsIGJsb2NrX3N6LCBNSFBfTUVNTUFQX09OX01FTU9SWSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01ODgtXHRpZiAocmMpIHtcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0xNzEyPXN0cnVjdCByYW5nZSBhcmNoX2dldF9tYXBwYWJsZV9yYW5nZSh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE3MjAtXG5hcmNoL3Jpc2N2L21tL2luaXQuYzoxNzIxOmludCBfX3JlZiBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE3MjIte1xuLS1cbmFyY2gvczM5MC9tbS9pbml0LmM9MjcxPWRldmljZV9pbml0Y2FsbChzMzkwX2NtYV9tZW1faW5pdCk7XG4tLVxuYXJjaC9zMzkwL21tL2luaXQuYy0yNzQtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI3NTppbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI3Ni1cdFx0ICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2Mz1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy05OTAtXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTkxOmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05OTItXHRcdCAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYz0xNjg9c3RhdGljIGludCBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlKHN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2UpXG4tLVxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxMi1cdFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIxMzpcdFx0cmVzdWx0ID0gX19hZGRfbWVtb3J5KG1naWQsIGluZm8tXHUwMDNlc3RhcnRfYWRkciwgaW5mby1cdTAwM2VsZW5ndGgsXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjE0LVx0XHRcdFx0ICAgICAgbWhwX2ZsYWdzKTtcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjE2LVx0XHQvKlxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIxNzpcdFx0ICogSWYgdGhlIG1lbW9yeSBibG9jayBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBrZXJuZWwsIGFkZF9tZW1vcnkoKVxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIxODpcdFx0ICogcmV0dXJucyAtRUVYSVNULiBJZiBhZGRfbWVtb3J5KCkgcmV0dXJucyB0aGUgb3RoZXIgZXJyb3IsIGl0XG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjE5LVx0XHQgKiBtZWFucyB0aGF0IHRoaXMgbWVtb3J5IGJsb2NrIGlzIG5vdCB1c2VkIGJ5IHRoZSBrZXJuZWwuXG4tLVxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIzMi1cdFx0LypcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYzoyMzM6XHRcdCAqIEFkZCBudW1fZW5hYmxlIGV2ZW4gaWYgYWRkX21lbW9yeSgpIHJldHVybnMgLUVFWElTVCwgc28gdGhlXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjM0LVx0XHQgKiBkZXZpY2UgaXMgYm91bmQgdG8gdGhpcyBkcml2ZXIuXG4tLVxuZHJpdmVycy9hY3BpL3NjYW4uYz0yODIwPXZvaWQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9hY3BpL3NjYW4uYy0yODYwLVx0LypcbmRyaXZlcnMvYWNwaS9zY2FuLmM6Mjg2MTpcdCAqIEFsdGhvdWdoIHdlIGNhbGwgX19hZGRfbWVtb3J5KCkgdGhhdCBpcyBkb2N1bWVudGVkIHRvIHJlcXVpcmUgdGhlXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTI4NjItXHQgKiBkZXZpY2VfaG90cGx1Z19sb2NrLCBpdCBpcyBub3QgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGFuXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU3Mj1zdGF0aWMgc3NpemVfdCBwcm9iZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OTAtXHRuaWQgPSBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZChwaHlzX2FkZHIpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjU5MTpcdHJldCA9IF9fYWRkX21lbW9yeShuaWQsIHBoeXNfYWRkcixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OTItXHRcdFx0ICAgTUlOX01FTU9SWV9CTE9DS19TSVpFICogc2VjdGlvbnNfcGVyX2Jsb2NrLFxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWc9NzM9Y29uZmlnIERFVl9EQVhfS01FTVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNzYtXHRkZXBlbmRzIG9uIERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6Nzc6XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xuZHJpdmVycy9kYXgvS2NvbmZpZy03OC1cdGhlbHBcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjUtXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY6LyogTWVtb3J5IHJlc291cmNlIG5hbWUgdXNlZCBmb3IgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCgpLiAqL1xuZHJpdmVycy9kYXgva21lbS5jLTI3LXN0YXRpYyBjb25zdCBjaGFyICprbWVtX25hbWU7XG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTg3PXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMTI2LVx0XHQgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzoxMjc6XHRcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG5kcml2ZXJzL2RheC9rbWVtLmMtMTI4LVx0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTE2Mz1zdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTctXHRcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXG5kcml2ZXJzL2RheC9rbWVtLmM6MTk4Olx0XHQgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3RcbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTktXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG5kcml2ZXJzL2RheC9rbWVtLmM6MjAwOlx0XHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgbGF0ZXIuXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAxLVx0XHQgKi9cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTE4NT1zdGF0aWMgdm9pZCBxY29tX3R6bWVtX2NsZWFudXBfYXJlYShzdHJ1Y3QgcWNvbV90em1lbV9hcmVhICphcmVhKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMTk0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzoxOTU6c3RhdGljIGludCBxY29tX3R6bWVtX3Bvb2xfYWRkX21lbW9yeShzdHJ1Y3QgcWNvbV90em1lbV9wb29sICpwb29sLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0xOTYtXHRcdFx0XHQgICAgICBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM9MjQ1PXFjb21fdHptZW1fcG9vbF9uZXcoY29uc3Qgc3RydWN0IHFjb21fdHptZW1fcG9vbF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTI4Mi1cdGlmIChjb25maWctXHUwMDNlaW5pdGlhbF9zaXplKSB7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjI4MzpcdFx0cmV0ID0gcWNvbV90em1lbV9wb29sX2FkZF9tZW1vcnkocG9vbCwgY29uZmlnLVx1MDAzZWluaXRpYWxfc2l6ZSxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMjg0LVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTM3NT1zdGF0aWMgYm9vbCBxY29tX3R6bWVtX3RyeV9ncm93X3Bvb2woc3RydWN0IHFjb21fdHptZW1fcG9vbCAqcG9vbCxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5Mi1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6MzkzOlx0cmV0dXJuICFxY29tX3R6bWVtX3Bvb2xfYWRkX21lbW9yeShwb29sLCByZXF1ZXN0ZWQsIGdmcCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5NC19XG4tLVxuZHJpdmVycy9odi9odl9iYWxsb29uLmM9NzA4PXN0YXRpYyB2b2lkIGh2X21lbV9ob3RfYWRkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy03MzAtXHRcdG5pZCA9IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKFBGTl9QSFlTKHN0YXJ0X3BmbikpO1xuZHJpdmVycy9odi9odl9iYWxsb29uLmM6NzMxOlx0XHRyZXQgPSBhZGRfbWVtb3J5KG5pZCwgUEZOX1BIWVMoKHN0YXJ0X3BmbikpLFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtNzMyLVx0XHRcdFx0IEhBX0JZVEVTX0lOX0NIVU5LLCBNSFBfTUVSR0VfUkVTT1VSQ0UpO1xuLS1cbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTE2OTI9c3RhdGljIGludCBob3RfYWRkX2VuYWJsZWQodm9pZClcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xNjk4LVx0ICogRE1fTUVNX0hPVF9BRERfUkVRVUVTVCBkb2VzbiYjMzk7dCBoYXZlIHRoZSBOVU1BIG5vZGUgaW5mb3JtYXRpb24gZm9yXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoxNjk5Olx0ICogYWRkX21lbW9yeSgpLlxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMTcwMC1cdCAqL1xuLS1cbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTE5MzA9c3RhdGljIGludCBiYWxsb29uX3Byb2JlKHN0cnVjdCBodl9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xOTQxLVx0ICogSG90LWFkZCBtdXN0IG9wZXJhdGUgaW4gY2h1bmtzIHRoYXQgYXJlIG9mIHNpemUgZXF1YWwgdG8gdGhlXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoxOTQyOlx0ICogbWVtb3J5IGJsb2NrIHNpemUgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgdGhlIGNvcmUgYWRkX21lbW9yeSgpXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xOTQzLVx0ICogaW50ZXJmYWNlIHJlcXVpcmVzLiBUaGUgSHlwZXItViBpbnRlcmZhY2UgcmVxdWlyZXMgdGhhdCB0aGUgbWVtb3J5XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYz0xODk9c3RhdGljIHNzaXplX3Qgc2NscF9jb25maWdfbWVtX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYy0yMjItXHRcdCAqIFNldCBlbnRpcmUgbWVtb3J5IGJsb2NrIENNTUEgc3RhdGUgdG8gbm9kYXQuIExhdGVyLCB3aGVuXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jOjIyMzpcdFx0ICogcGFnZSB0YWJsZXMgcGFnZXMgYXJlIGFsbG9jYXRlZCB2aWEgX19hZGRfbWVtb3J5KCksIHRob3NlXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jLTIyNC1cdFx0ICogcmVnaW9ucyBhcmUgbWFya2VkIF9fYXJjaF9zZXRfcGFnZV9kYXQoKS5cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jLTIyNi1cdFx0X19hcmNoX3NldF9wYWdlX25vZGF0KCh2b2lkICopX192YShhZGRyKSwgYmxvY2tfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jOjIyNzpcdFx0cmMgPSBfX2FkZF9tZW1vcnkoMCwgYWRkciwgYmxvY2tfc2l6ZSxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfbWVtLmMtMjI4LVx0XHRcdFx0ICBzY2xwX21lbS1cdTAwM2VtZW1tYXBfb25fbWVtb3J5ID9cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9Njc9ZW51bSB2aXJ0aW9fbWVtX3NibV9tYl9zdGF0ZSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY5LVx0VklSVElPX01FTV9TQk1fTUJfVU5VU0VEID0gMCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo3MDpcdC8qIChQYXJ0aWFsbHkpIHBsdWdnZWQsIG5vdCBhZGRlZCB0byBMaW51eC4gRXJyb3Igb24gYWRkX21lbW9yeSgpLiAqL1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTcxLVx0VklSVElPX01FTV9TQk1fTUJfUExVR0dFRCxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9OTA9ZW51bSB2aXJ0aW9fbWVtX2JibV9iYl9zdGF0ZSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTkyLVx0VklSVElPX01FTV9CQk1fQkJfVU5VU0VEID0gMCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo5MzpcdC8qIFBsdWdnZWQsIG5vdCBhZGRlZCB0byBMaW51eC4gRXJyb3Igb24gYWRkX21lbW9yeSgpLiAqL1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTk0LVx0VklSVElPX01FTV9CQk1fQkJfUExVR0dFRCxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTAyPXN0cnVjdCB2aXJ0aW9fbWVtIHtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTQyLVx0ICogQ29weSBvZiBcJiMzNDtTeXN0ZW0gUkFNICh2aXJ0aW9fbWVtKVwmIzM0OyB0byBiZSB1c2VkIGZvclxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE0MzpcdCAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoKS5cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xNDQtXHQgKi9cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9NTg4PXN0YXRpYyBpbnQgdmlydGlvX21lbV9zYm1fc2Jfc3RhdGVzX3ByZXBhcmVfbmV4dF9tYihzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTYxOS0gKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo2MjA6c3RhdGljIGJvb2wgdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdWludDY0X3Qgc2l6ZSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MjEte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MzUtICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjM2OnN0YXRpYyBpbnQgdmlydGlvX21lbV9hZGRfbWVtb3J5KHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdWludDY0X3QgYWRkcixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MzctXHRcdFx0XHQgdWludDY0X3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjU1LVx0YXRvbWljNjRfYWRkKHNpemUsIFx1MDAyNnZtLVx1MDAzZW9mZmxpbmVfc2l6ZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjU2Olx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKHZtLVx1MDAzZW1naWQsIGFkZHIsIHNpemUsIHZtLVx1MDAzZXJlc291cmNlX25hbWUsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjU3LVx0XHRcdFx0ICAgICAgIE1IUF9NRVJHRV9SRVNPVVJDRSB8IE1IUF9OSURfSVNfTUdJRCk7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY2OS0vKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY3MDogKiBTZWUgdmlydGlvX21lbV9hZGRfbWVtb3J5KCk6IFRyeSBhZGRpbmcgYSBzaW5nbGUgTGludXggbWVtb3J5IGJsb2NrLlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY3MS0gKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz02NzI9c3RhdGljIGludCB2aXJ0aW9fbWVtX3NibV9hZGRfbWIoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIG1iX2lkKVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02NzYtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6Njc3Olx0cmV0dXJuIHZpcnRpb19tZW1fYWRkX21lbW9yeSh2bSwgYWRkciwgc2l6ZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjc4LX1cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjgwLS8qXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjgxOiAqIFNlZSB2aXJ0aW9fbWVtX2FkZF9tZW1vcnkoKTogVHJ5IGFkZGluZyBhIGJpZyBibG9jay5cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02ODItICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9NjgzPXN0YXRpYyBpbnQgdmlydGlvX21lbV9iYm1fYWRkX2JiKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdW5zaWduZWQgbG9uZyBiYl9pZClcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjg3LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY4ODpcdHJldHVybiB2aXJ0aW9fbWVtX2FkZF9tZW1vcnkodm0sIGFkZHIsIHNpemUpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY4OS19XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTk3ND1zdGF0aWMgdm9pZCB2aXJ0aW9fbWVtX2JibV9ub3RpZnlfY2FuY2VsX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05ODUtLypcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo5ODY6ICogVGhpcyBjYWxsYmFjayB3aWxsIGVpdGhlciBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIGFkZF9tZW1vcnkoKSBvclxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTk4Ny0gKiBhc3luY2hyb25vdXNseSAoZS5nLiwgdHJpZ2dlcmVkIHZpYSB1c2VyIHNwYWNlKS4gV2UgaGF2ZSB0byBiZSBjYXJlZnVsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6OTg4OiAqIHdpdGggbG9ja2luZyB3aGVuIGNhbGxpbmcgYWRkX21lbW9yeSgpLlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTk4OS0gKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz05OTA9c3RhdGljIGludCB2aXJ0aW9fbWVtX21lbW9yeV9ub3RpZmllcl9jYihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMDg3LVx0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnZtLVx1MDAzZXdxX2FjdGl2ZSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTA4ODpcdFx0ICAgIHZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgdm0tXHUwMDNlb2ZmbGluZV90aHJlc2hvbGQgLyAyKSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMDg5LVx0XHRcdHZpcnRpb19tZW1fcmV0cnkodm0pO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xNzYwPXN0YXRpYyBpbnQgdmlydGlvX21lbV9zYm1fcGx1Z19yZXF1ZXN0KHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdWludDY0X3QgZGlmZilcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTc5My1cdHZpcnRpb19tZW1fc2JtX2Zvcl9lYWNoX21iKHZtLCBtYl9pZCwgVklSVElPX01FTV9TQk1fTUJfVU5VU0VEKSB7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTc5NDpcdFx0aWYgKCF2aXJ0aW9fbWVtX2NvdWxkX2FkZF9tZW1vcnkodm0sIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE3OTUtXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE4MDQtXHR3aGlsZSAobmJfc2IpIHtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxODA1Olx0XHRpZiAoIXZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTgwNi1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTg3OD1zdGF0aWMgaW50IHZpcnRpb19tZW1fYmJtX3BsdWdfcmVxdWVzdChzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVpbnQ2NF90IGRpZmYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE4ODgtXHR2aXJ0aW9fbWVtX2JibV9mb3JfZWFjaF9iYih2bSwgYmJfaWQsIFZJUlRJT19NRU1fQkJNX0JCX1VOVVNFRCkge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE4ODk6XHRcdGlmICghdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHZtLCB2bS1cdTAwM2ViYm0uYmJfc2l6ZSkpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTg5MC1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTkwMS1cdHdoaWxlIChuYl9iYikge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE5MDI6XHRcdGlmICghdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHZtLCB2bS1cdTAwM2ViYm0uYmJfc2l6ZSkpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTkwMy1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9Mjg3OT1zdGF0aWMgaW50IHZpcnRpb19tZW1fY3JlYXRlX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjkwMS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyOTAyOlx0LyogVGhlIG1lbW9yeSBpcyBub3QgYWN0dWFsbHkgYnVzeSAtIG1ha2UgYWRkX21lbW9yeSgpIHdvcmsuICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjkwMy1cdHZtLVx1MDAzZXBhcmVudF9yZXNvdXJjZS1cdTAwM2VmbGFncyBcdTAwMjY9IH5JT1JFU09VUkNFX0JVU1k7XG4tLVxuZHJpdmVycy94ZW4vYmFsbG9vbi5jPTI2ND1zdGF0aWMgZW51bSBicF9zdGF0ZSByZXNlcnZlX2FkZGl0aW9uYWxfbWVtb3J5KHZvaWQpXG4tLVxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTI5Ni0gICAgICAgIC8qXG5kcml2ZXJzL3hlbi9iYWxsb29uLmM6Mjk3OiAgICAgICAgICogYWRkX21lbW9yeSgpIHdpbGwgYnVpbGQgcGFnZSB0YWJsZXMgZm9yIHRoZSBuZXcgbWVtb3J5IHNvXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMjk4LSAgICAgICAgICogdGhlIHAybSBtdXN0IGNvbnRhaW4gaW52YWxpZCBlbnRyaWVzIHNvIHRoZSBjb3JyZWN0XG4tLVxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMxOC1cdC8qXG5kcml2ZXJzL3hlbi9iYWxsb29uLmM6MzE5Olx0ICogYWRkX21lbW9yeV9yZXNvdXJjZSgpIHdpbGwgY2FsbCBvbmxpbmVfcGFnZXMoKSB3aGljaCBpbiBpdHMgdHVyblxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyMC1cdCAqIHdpbGwgY2FsbCB4ZW5fb25saW5lX3BhZ2UoKSBjYWxsYmFjayBjYXVzaW5nIGRlYWRsb2NrIGlmIHdlIGRvbiYjMzk7dFxuLS1cbmRyaXZlcnMveGVuL2JhbGxvb24uYy0zMjQtXHRtdXRleF91bmxvY2soXHUwMDI2YmFsbG9vbl9tdXRleCk7XG5kcml2ZXJzL3hlbi9iYWxsb29uLmM6MzI1Olx0LyogYWRkX21lbW9yeV9yZXNvdXJjZSgpIHJlcXVpcmVzIHRoZSBkZXZpY2VfaG90cGx1ZyBsb2NrICovXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMzI2LVx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuZHJpdmVycy94ZW4vYmFsbG9vbi5jOjMyNzpcdHJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlc291cmNlLCBNSFBfTUVSR0VfUkVTT1VSQ0UpO1xuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyOC1cdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMj1zdHJ1Y3QgcGFnZSAqcGZuX3RvX29ubGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zMy1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDozNDovKiBGbGFncyBmb3IgYWRkX21lbW9yeSgpIGFuZCBmcmllbmRzIHRvIHNwZWNpZnkgbWVtb3J5IGhvdHBsdWcgZGV0YWlscy4gKi9cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zNS10eXBlZGVmIGludCBfX2JpdHdpc2UgbWhwX3Q7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTQwLSAqIEFsbG93IG1lcmdpbmcgb2YgdGhlIGFkZGVkIFN5c3RlbSBSQU0gcmVzb3VyY2Ugd2l0aCBhZGphY2VudCxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDo0MTogKiBtZXJnZWFibGUgcmVzb3VyY2VzLiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBhZGRfbWVtb3J5X3Jlc291cmNlKClcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC00Mi0gKiB3aXRoIHRoaXMgZmxhZyBzZXQsIHRoZSByZXNvdXJjZSBwb2ludGVyIG11c3Qgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgaXRcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MTIzPWV4dGVybiBpbnQgdHJ5X29ubGluZV9ub2RlKGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTEyNC1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoxMjU6ZXh0ZXJuIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0xMjYtXHRcdFx0ICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTMwMT1pbnQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwMjpleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwMzpleHRlcm4gaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDozMDQ6ZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA1LVx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwNjppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA3LVx0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwOC1cdFx0XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzA5OmV4dGVybiBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMxMC1cdFx0XHRcdCAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTMyMj1zdGF0aWMgaW50IGNoZWNrX3Bmbl9zcGFuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMzI4LVx0ICogb25saW5lLCBzbyB0aGlzIGNoZWNrIHNob3VsZCBvbmx5IGZpcmUgZm9yIGRpcmVjdFxubW0vbWVtb3J5X2hvdHBsdWcuYzozMjk6XHQgKiBhcmNoX3thZGQscmVtb3ZlfV9tZW1vcnkoKSB1c2VycyBvdXRzaWRlIG9mIGFkZF9tZW1vcnlfcmVzb3VyY2UoKS5cbm1tL21lbW9yeV9ob3RwbHVnLmMtMzMwLVx0ICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDcwLVx0XHQvKiBjYWxsIGFyY2gmIzM5O3MgbWVtb3J5IGhvdGFkZCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDcxOlx0XHRyZXQgPSBhcmNoX2FkZF9tZW1vcnkobmlkLCBjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIFx1MDAyNnBhcmFtcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzItXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE1MDc9c3RhdGljIGJvb2wgbm9kZV9pc19tZW1vcnlsZXNzKGludCBuaWQpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTI5LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTMwOnN0YXRpYyBpbnQgX19hZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1MzEtXHRcdFx0XHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU5MC1cdH0gZWxzZSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1OTE6XHRcdHJldCA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHN0YXJ0LCBzaXplLCBcdTAwMjZwYXJhbXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTkyLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYzOC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTYzOTppbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjQwLXtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0MTpcdHJldHVybiBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi1cdFx0XHRcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0NC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0NTovKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0NjppbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Ny17XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjU0LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjU1Olx0cmV0ID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1Ni1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjYwLVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjYxOmludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY2Mi17XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjY1LVx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjY2Olx0cmMgPSBfX2FkZF9tZW1vcnkobmlkLCBzdGFydCwgc2l6ZSwgbWhwX2ZsYWdzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY2Ny1cdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTY3MT1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDQtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MDU6aW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA2LVx0XHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI3LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzI4Olx0cmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI5LVx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTczNj1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXCYjMzQ7a21lbVwmIzM0Oyk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzUyLSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzUzOmludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3NTQtXHRcdFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzU1LXtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTc1NjpcdHJldHVybiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQobmlkLCBzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc1Ny1cdFx0XHRtaHBfZmxhZ3MsXG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yMDMtXHQgKiBvdmVyIHRoZSBkZXZpY2UgbWVtb3J5IGlzIHVuLWFjY2Vzc2libGUgdGh1cyB3ZSBkbyBub3Qgd2FudCB0b1xubW0vbWVtcmVtYXAuYzoyMDQ6XHQgKiBjcmVhdGUgYSBsaW5lYXIgbWFwcGluZyBmb3IgdGhlIG1lbW9yeSBsaWtlIGFyY2hfYWRkX21lbW9yeSgpXG5tbS9tZW1yZW1hcC5jLTIwNS1cdCAqIHdvdWxkIGRvLlxuLS1cbm1tL21lbXJlbWFwLmMtMjA4LVx0ICogdGhlIENQVSwgd2UgZG8gd2FudCB0aGUgbGluZWFyIG1hcHBpbmcgYW5kIHRodXMgdXNlXG5tbS9tZW1yZW1hcC5jOjIwOTpcdCAqIGFyY2hfYWRkX21lbW9yeSgpLlxubW0vbWVtcmVtYXAuYy0yMTAtXHQgKi9cbi0tXG5tbS9tZW1yZW1hcC5jLTIyMC1cbm1tL21lbXJlbWFwLmM6MjIxOlx0XHRlcnJvciA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZV9sZW4ocmFuZ2UpLFxubW0vbWVtcmVtYXAuYy0yMjItXHRcdFx0XHRcdHBhcmFtcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUHJvYmUgTWVjaGFuaXNtKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIG1lbW9yeSBwcm9iaW5nLiBJIHNlZSB0aGF0IGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGhhcyBhIGZ1bmN0aW9uIGNhbGxlZCBgcHJvYmVfc3RvcmVgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgaGFuZGxlciBmb3Igd3JpdGVzIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9wcm9iZWAuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGZ1bmN0aW9uIGBwcm9iZV9zdG9yZWAgcmVjZWl2ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBhbmQgdGhlbiBjYWxscyBgX19hZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLCAuLi4pYC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEEgcmVkIGZsYWchIE15IGV4cGVydCBpbnN0aW5jdHMgYXJlIGtpY2tpbmcgaW4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gSXMgdGhpcyBgZHJpdmVycy9iYXNlL21lbW9yeS5jOnByb2JlX3N0b3JlYCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlPyBJIG5lZWQgdG8ga25vdyBpZiBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBjYW4gdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLiBJdCB3b3VsZCBiZSBhIHNlcmlvdXMgc2VjdXJpdHkgY29uY2VybiBpZiBzby4gVGltZSB0byBkaXZlIGJhY2sgaW50byBgZHJpdmVycy9iYXNlL21lbW9yeS5jYCBhbmQgY29uZmlybSBleGFjdGx5IGhvdyB0aGlzIHByb2JlIG1lY2hhbmlzbSBpcyBleHBvc2VkLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0LypcbiA1NjY6XHQgKiBTb21lIGFyY2hpdGVjdHVyZXMgd2lsbCBoYXZlIGN1c3RvbSBkcml2ZXJzIHRvIGRvIHRoaXMsIGFuZFxuIDU2NzpcdCAqIHdpbGwgbm90IG5lZWQgdG8gZG8gaXQgZnJvbSB1c2Vyc3BhY2UuICBUaGUgZmFrZSBob3QtYWRkIGNvZGVcbiA1Njg6XHQgKiBhcyB3ZWxsIGFzIHBwYzY0IHdpbGwgZG8gYWxsIG9mIHRoZWlyIGRpc2NvdmVyeSBpbiB1c2Vyc3BhY2VcbiA1Njk6XHQgKiBhbmQgd2lsbCByZXF1aXJlIHRoaXMgaW50ZXJmYWNlLlxuIDU3MDpcdCAqL1xuIDU3MTpcdCNpZmRlZiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkVcbiA1NzI6XHRzdGF0aWMgc3NpemVfdCBwcm9iZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIDU3MzpcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDU3NDpcdHtcbiA1NzU6XHRcdHU2NCBwaHlzX2FkZHI7XG4gNTc2Olx0XHRpbnQgbmlkLCByZXQ7XG4gNTc3Olx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzX3Blcl9ibG9jayA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xuIDU3ODpcdFxuIDU3OTpcdFx0cmV0ID0ga3N0cnRvdWxsKGJ1ZiwgMCwgXHUwMDI2cGh5c19hZGRyKTtcbiA1ODA6XHRcdGlmIChyZXQpXG4gNTgxOlx0XHRcdHJldHVybiByZXQ7XG4gNTgyOlx0XG4gNTgzOlx0XHRpZiAocGh5c19hZGRyIFx1MDAyNiAoKHBhZ2VzX3Blcl9ibG9jayBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxKSlcbiA1ODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTg1Olx0XG4gNTg2Olx0XHRyZXQgPSBsb2NrX2RldmljZV9ob3RwbHVnX3N5c2ZzKCk7XG4gNTg3Olx0XHRpZiAocmV0KVxuIDU4ODpcdFx0XHRyZXR1cm4gcmV0O1xuIDU4OTpcdFxuIDU5MDpcdFx0bmlkID0gbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQocGh5c19hZGRyKTtcbiA1OTE6XHRcdHJldCA9IF9fYWRkX21lbW9yeShuaWQsIHBoeXNfYWRkcixcbiA1OTI6XHRcdFx0XHQgICBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgKiBzZWN0aW9uc19wZXJfYmxvY2ssXG4gNTkzOlx0XHRcdFx0ICAgTUhQX05PTkUpO1xuIDU5NDpcdFxuIDU5NTpcdFx0aWYgKHJldClcbiA1OTY6XHRcdFx0Z290byBvdXQ7XG4gNTk3Olx0XG4gNTk4Olx0XHRyZXQgPSBjb3VudDtcbiA1OTk6XHRvdXQ6XG4gNjAwOlx0XHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiA2MDE6XHRcdHJldHVybiByZXQ7XG4gNjAyOlx0fVxuIDYwMzpcdFxuIDYwNDpcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhwcm9iZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1ibG9jay5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBtZW1ibG9jay5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG1hY3JvLCBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYC4gVGhpcyBsb29rcyBsaWtlIGEgdmFyaWF0aW9uIG9mIHRoZSBleGlzdGluZyBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWAgbWFjcm8sIHdpdGggYSBrZXkgZGlmZmVyZW5jZTogaXQgYWxsb3dzIHNwZWNpZnlpbmcgYSBzdGFydGluZyBpbmRleCwgYHN0YXJ0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwcm9iYWJseSBpbnRyb2R1Y2VzIG1vcmUgdGFyZ2V0ZWQgaXRlcmF0aW9uLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIG9yIHdoZW4gd2UgKmtub3cqIGEgc3RhcnRpbmcgcG9pbnQgdGhhdCB3ZSBjYW4gb3B0aW1pemUgZnJvbS4KCk5vdywgbGV0IG1lIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9ucyB1c2luZyB0aGlzIG5ldyBtYWNybywgc3BlY2lmaWNhbGx5IGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuIExvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoaXMgbmV3IG1hY3JvIGlzIGJlaW5nIHVzZWQgaW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVgIG1hY3JvLiBUaGUga2V5IGlzIGluIHRoZSBwYXJhbWV0ZXJzLiBUaGUgJiMzNDtmcm9tJiMzNDsgaW5kZXggYXBwZWFycyB0byBiZSBjb21pbmcgZnJvbSBhIG5ldyBmdW5jdGlvbiBjYWxsZWQgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgYmluYXJ5IHNlYXJjaCBpbXBsZW1lbnRhdGlvbi4KClNvLCB0aGUgY29kZSBub3cgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBhIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHN1aXRhYmxlIHN0YXJ0aW5nIGluZGV4IGZvciBhZGRpbmcgYSBtZW1vcnkgcmFuZ2UuIEkgY2FuIHNlZSB0aGF0IGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCBjYWxjdWxhdGVzIGFuIGluZGV4IHRoYXQgaXMgdGhlIGZpcnN0IHJlZ2lvbiB3aGVyZSB0aGUgcG90ZW50aWFsIG92ZXJsYXAgYmFzZSBhZGRyZXNzIHN0YXJ0cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbiEgSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCAqYWxsKiBleGlzdGluZyBtZW1ibG9jayByZWdpb25zLCB0aGUgY29kZSBub3cgdXNlcyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgdG8gbmFycm93IHRoZSBzZWFyY2gsIGVmZmVjdGl2ZWx5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBtZW1ibG9jayBsaXN0cy4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIGFkZGluZyBvciBpc29sYXRpbmcgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBkdXJpbmcgZWFybHkgYm9vdCBzdGFnZXMgb3IgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy4KCk9rYXksIGxldCBtZSBjb25maXJtIG15IGh5cG90aGVzaXMgYnkgcmVhZGluZyBmdXJ0aGVyIGludG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmU6IGhvdyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgaXMgdXNlZCwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgbnVhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdCAqIEBzaXplOiBzaXplIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMxOlx0ICogQG5pZDogbmlkIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMyOlx0ICogQGZsYWdzOiBmbGFncyBvZiB0aGUgbmV3IHJlZ2lvblxuIDYzMzpcdCAqXG4gNjM0Olx0ICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkgaW50byBAdHlwZS4gIFRoZSBuZXcgcmVnaW9uXG4gNjM1Olx0ICogaXMgYWxsb3dlZCB0byBvdmVybGFwIHdpdGggZXhpc3Rpbmcgb25lcyAtIG92ZXJsYXBzIGRvbiYjMzk7dCBhZmZlY3QgYWxyZWFkeVxuIDYzNjpcdCAqIGV4aXN0aW5nIHJlZ2lvbnMuICBAdHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIG1pbmltYWwgKGFsbCBuZWlnaGJvdXJpbmdcbiA2Mzc6XHQgKiBjb21wYXRpYmxlIHJlZ2lvbnMgYXJlIG1lcmdlZCkgYWZ0ZXIgdGhlIGFkZGl0aW9uLlxuIDYzODpcdCAqXG4gNjM5Olx0ICogUmV0dXJuOlxuIDY0MDpcdCAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXG4gNjQxOlx0ICovXG4gNjQyOlx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIDY0MzpcdFx0XHRcdFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiA2NDQ6XHRcdFx0XHRcdGludCBuaWQsIGVudW0gbWVtYmxvY2tfZmxhZ3MgZmxhZ3MpXG4gNjQ1Olx0e1xuIDY0NjpcdFx0Ym9vbCBpbnNlcnQgPSBmYWxzZTtcbiA2NDc6XHRcdHBoeXNfYWRkcl90IG9iYXNlID0gYmFzZTtcbiA2NDg6XHRcdHBoeXNfYWRkcl90IGVuZCA9IGJhc2UgJiM0MzsgbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4gNjQ5Olx0XHRpbnQgaWR4LCBucl9uZXcsIHN0YXJ0X3JnbiA9IC0xLCBlbmRfcmduO1xuIDY1MDpcdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduO1xuIDY1MTpcdFxuIDY1MjpcdFx0aWYgKCFzaXplKVxuIDY1MzpcdFx0XHRyZXR1cm4gMDtcbiA2NTQ6XHRcbiA2NTU6XHRcdC8qIHNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgYXJyYXkgKi9cbiA2NTY6XHRcdGlmICh0eXBlLVx1MDAzZXJlZ2lvbnNbMF0uc2l6ZSA9PSAwKSB7XG4gNjU3Olx0XHRcdFdBUk5fT04odHlwZS1cdTAwM2VjbnQgIT0gMCB8fCB0eXBlLVx1MDAzZXRvdGFsX3NpemUpO1xuIDY1ODpcdFx0XHR0eXBlLVx1MDAzZXJlZ2lvbnNbMF0uYmFzZSA9IGJhc2U7XG4gNjU5Olx0XHRcdHR5cGUtXHUwMDNlcmVnaW9uc1swXS5zaXplID0gc2l6ZTtcbiA2NjA6XHRcdFx0dHlwZS1cdTAwM2VyZWdpb25zWzBdLmZsYWdzID0gZmxhZ3M7XG4gNjYxOlx0XHRcdG1lbWJsb2NrX3NldF9yZWdpb25fbm9kZShcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbMF0sIG5pZCk7XG4gNjYyOlx0XHRcdHR5cGUtXHUwMDNldG90YWxfc2l6ZSA9IHNpemU7XG4gNjYzOlx0XHRcdHR5cGUtXHUwMDNlY250ID0gMTtcbiA2NjQ6XHRcdFx0cmV0dXJuIDA7XG4gNjY1Olx0XHR9XG4gNjY2Olx0XG4gNjY3Olx0XHQvKlxuIDY2ODpcdFx0ICogVGhlIHdvcnN0IGNhc2UgaXMgd2hlbiBuZXcgcmFuZ2Ugb3ZlcmxhcHMgYWxsIGV4aXN0aW5nIHJlZ2lvbnMsXG4gNjY5Olx0XHQgKiB0aGVuIHdlJiMzOTtsbCBuZWVkIHR5cGUtXHUwMDNlY250ICYjNDM7IDEgZW1wdHkgcmVnaW9ucyBpbiBAdHlwZS4gU28gaWZcbiA2NzA6XHRcdCAqIHR5cGUtXHUwMDNlY250ICogMiAmIzQzOyAxIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0eXBlLVx1MDAzZW1heCwgd2Uga25vd1xuIDY3MTpcdFx0ICogdGhhdCB0aGVyZSBpcyBlbm91Z2ggZW1wdHkgcmVnaW9ucyBpbiBAdHlwZSwgYW5kIHdlIGNhbiBpbnNlcnRcbiA2NzI6XHRcdCAqIHJlZ2lvbnMgZGlyZWN0bHkuXG4gNjczOlx0XHQgKi9cbiA2NzQ6XHRcdGlmICh0eXBlLVx1MDAzZWNudCAqIDIgJiM0MzsgMSBcdTAwM2M9IHR5cGUtXHUwMDNlbWF4KVxuIDY3NTpcdFx0XHRpbnNlcnQgPSB0cnVlO1xuIDY3NjpcdFxuIDY3NzpcdHJlcGVhdDpcbiA2Nzg6XHRcdC8qXG4gNjc5Olx0XHQgKiBUaGUgZm9sbG93aW5nIGlzIGV4ZWN1dGVkIHR3aWNlLiAgT25jZSB3aXRoICVmYWxzZSBAaW5zZXJ0IGFuZFxuIDY4MDpcdFx0ICogdGhlbiB3aXRoICV0cnVlLiAgVGhlIGZpcnN0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgbmVlZGVkXG4gNjgxOlx0XHQgKiB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGFyZWEuICBUaGUgc2Vjb25kIGFjdHVhbGx5IGluc2VydHMgdGhlbS5cbiA2ODI6XHRcdCAqL1xuIDY4MzpcdFx0YmFzZSA9IG9iYXNlO1xuIDY4NDpcdFx0bnJfbmV3ID0gMDtcbiA2ODU6XHRcbiA2ODY6XHRcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiA2ODc6XHRcdFx0XHRcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XG4gNjg4Olx0XHRcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVx1MDAzZWJhc2U7XG4gNjg5Olx0XHRcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSAmIzQzOyByZ24tXHUwMDNlc2l6ZTtcbiA2OTA6XHRcbiA2OTE6XHRcdFx0aWYgKHJiYXNlIFx1MDAzZT0gZW5kKVxuIDY5MjpcdFx0XHRcdGJyZWFrO1xuIDY5MzpcdFx0XHRpZiAocmVuZCBcdTAwM2M9IGJhc2UpXG4gNjk0Olx0XHRcdFx0Y29udGludWU7XG4gNjk1Olx0XHRcdC8qXG4gNjk2Olx0XHRcdCAqIEByZ24gb3ZlcmxhcHMuICBJZiBpdCBzZXBhcmF0ZXMgdGhlIGxvd2VyIHBhcnQgb2YgbmV3XG4gNjk3Olx0XHRcdCAqIGFyZWEsIGluc2VydCB0aGF0IHBvcnRpb24uXG4gNjk4Olx0XHRcdCAqL1xuIDY5OTpcdFx0XHRpZiAocmJhc2UgXHUwMDNlIGJhc2UpIHtcbiA3MDA6XHQjaWZkZWYgQ09ORklHX05VTUFcbiA3MDE6XHRcdFx0XHRXQVJOX09OKG5pZCAhPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSk7XG4gNzAyOlx0I2VuZGlmXG4gNzAzOlx0XHRcdFx0V0FSTl9PTihmbGFncyAhPSBNRU1CTE9DS19OT05FIFx1MDAyNlx1MDAyNiBmbGFncyAhPSByZ24tXHUwMDNlZmxhZ3MpO1xuIDcwNDpcdFx0XHRcdG5yX25ldyYjNDM7JiM0Mzs7XG4gNzA1Olx0XHRcdFx0aWYgKGluc2VydCkge1xuIDcwNjpcdFx0XHRcdFx0aWYgKHN0YXJ0X3JnbiA9PSAtMSlcbiA3MDc6XHRcdFx0XHRcdFx0c3RhcnRfcmduID0gaWR4O1xuIDcwODpcdFx0XHRcdFx0ZW5kX3JnbiA9IGlkeCAmIzQzOyAxO1xuIDcwOTpcdFx0XHRcdFx0bWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgmIzQzOyYjNDM7LCBiYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLiBUaGF0IGZ1bmN0aW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlIGEgY3J1Y2lhbCBjb21wb25lbnQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgZGlyZWN0aW5nIG15IGltbWVkaWF0ZSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpdHMgaW5wdXRzLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgcm9sZSBpcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIHdoYXRldmVyIHByb2JsZW0gSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgaW5zaWdodHMgSSBjYW4gZ2xlYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0ICogZmlyc3QgcmVnaW9uIGFmdGVyIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQGVuZF9yZ24uXG4gODQxOlx0ICpcbiA4NDI6XHQgKiBSZXR1cm46XG4gODQzOlx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiA4NDQ6XHQgKi9cbiA4NDU6XHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIDg0NjpcdFx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuIDg0NzpcdFx0XHRcdFx0XHRpbnQgKnN0YXJ0X3JnbiwgaW50ICplbmRfcmduKVxuIDg0ODpcdHtcbiA4NDk6XHRcdHBoeXNfYWRkcl90IGVuZCA9IGJhc2UgJiM0MzsgbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4gODUwOlx0XHRpbnQgaWR4O1xuIDg1MTpcdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduO1xuIDg1MjpcdFxuIDg1MzpcdFx0KnN0YXJ0X3JnbiA9ICplbmRfcmduID0gMDtcbiA4NTQ6XHRcbiA4NTU6XHRcdGlmICghc2l6ZSlcbiA4NTY6XHRcdFx0cmV0dXJuIDA7XG4gODU3Olx0XG4gODU4Olx0XHQvKiB3ZSYjMzk7bGwgY3JlYXRlIGF0IG1vc3QgdHdvIG1vcmUgcmVnaW9ucyAqL1xuIDg1OTpcdFx0d2hpbGUgKHR5cGUtXHUwMDNlY250ICYjNDM7IDIgXHUwMDNlIHR5cGUtXHUwMDNlbWF4KVxuIDg2MDpcdFx0XHRpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpIFx1MDAzYyAwKVxuIDg2MTpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2MjpcdFxuIDg2MzpcdFx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLFxuIDg2NDpcdFx0XHRcdFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcbiA4NjU6XHRcdFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXHUwMDNlYmFzZTtcbiA4NjY6XHRcdFx0cGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICYjNDM7IHJnbi1cdTAwM2VzaXplO1xuIDg2NzpcdFxuIDg2ODpcdFx0XHRpZiAocmJhc2UgXHUwMDNlPSBlbmQpXG4gODY5Olx0XHRcdFx0YnJlYWs7XG4gODcwOlx0XHRcdGlmIChyZW5kIFx1MDAzYz0gYmFzZSlcbiA4NzE6XHRcdFx0XHRjb250aW51ZTtcbiA4NzI6XHRcbiA4NzM6XHRcdFx0aWYgKHJiYXNlIFx1MDAzYyBiYXNlKSB7XG4gODc0Olx0XHRcdFx0LypcbiA4NzU6XHRcdFx0XHQgKiBAcmduIGludGVyc2VjdHMgZnJvbSBiZWxvdy4gIFNwbGl0IGFuZCBjb250aW51ZVxuIDg3NjpcdFx0XHRcdCAqIHRvIHByb2Nlc3MgdGhlIG5leHQgcmVnaW9uIC0gdGhlIG5ldyB0b3AgaGFsZi5cbiA4Nzc6XHRcdFx0XHQgKi9cbiA4Nzg6XHRcdFx0XHRyZ24tXHUwMDNlYmFzZSA9IGJhc2U7XG4gODc5Olx0XHRcdFx0cmduLVx1MDAzZXNpemUgLT0gYmFzZSAtIHJiYXNlO1xuIDg4MDpcdFx0XHRcdHR5cGUtXHUwMDNldG90YWxfc2l6ZSAtPSBiYXNlIC0gcmJhc2U7XG4gODgxOlx0XHRcdFx0bWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgsIHJiYXNlLCBiYXNlIC0gcmJhc2UsXG4gODgyOlx0XHRcdFx0XHRcdCAgICAgICBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSxcbiA4ODM6XHRcdFx0XHRcdFx0ICAgICAgIHJnbi1cdTAwM2VmbGFncyk7XG4gODg0Olx0XHRcdH0gZWxzZSBpZiAocmVuZCBcdTAwM2UgZW5kKSB7XG4gODg1Olx0XHRcdFx0LypcbiA4ODY6XHRcdFx0XHQgKiBAcmduIGludGVyc2VjdHMgZnJvbSBhYm92ZS4gIFNwbGl0IGFuZCByZWRvIHRoZVxuIDg4NzpcdFx0XHRcdCAqIGN1cnJlbnQgcmVnaW9uIC0gdGhlIG5ldyBib3R0b20gaGFsZi5cbiA4ODg6XHRcdFx0XHQgKi9cbiA4ODk6XHRcdFx0XHRyZ24tXHUwMDNlYmFzZSA9IGVuZDtcbiA4OTA6XHRcdFx0XHRyZ24tXHUwMDNlc2l6ZSAtPSBlbmQgLSByYmFzZTtcbiA4OTE6XHRcdFx0XHR0eXBlLVx1MDAzZXRvdGFsX3NpemUgLT0gZW5kIC0gcmJhc2U7XG4gODkyOlx0XHRcdFx0bWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgtLSwgcmJhc2UsIGVuZCAtIHJiYXNlLFxuIDg5MzpcdFx0XHRcdFx0XHQgICAgICAgbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJnbiksXG4gODk0Olx0XHRcdFx0XHRcdCAgICAgICByZ24tXHUwMDNlZmxhZ3MpO1xuIDg5NTpcdFx0XHR9IGVsc2Uge1xuIDg5NjpcdFx0XHRcdC8qIEByZ24gaXMgZnVsbHkgY29udGFpbmVkLCByZWNvcmQgaXQgKi9cbiA4OTc6XHRcdFx0XHRpZiAoISplbmRfcmduKVxuIDg5ODpcdFx0XHRcdFx0KnN0YXJ0X3JnbiA9IGlkeDtcbiA4OTk6XHRcdFx0XHQqZW5kX3JnbiA9IGlkeCAmIzQzOyAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2U6IEFuYWx5emluZyBNb2RpZmljYXRpb25zIHRvIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCBoYXZlIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWUgY29yZSB0cmlhZ2UgcXVlc3Rpb25zLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGxhaWQgb3V0IGluIFNlY3Rpb24gMSwgMiwgYW5kIDMuIE15IHByaW1hcnkgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBkeW5hbWljYWxseSByZWFjaGFibGUgYXQgcnVudGltZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLiBTaW1wbHkgcHV0LCBjYW4gc3l6a2FsbGVyLCBvciBhbnkgZnV6emluZyBzdHJhdGVneSwgYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlPwoKTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgY2FsbCBwYXRocyBvZiBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLiAgSSBzZWUgdGhhdCB0aGV5JiMzOTtyZSBib3RoIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY2FsbGVkIGZyb20gYG1tL21lbW9yeV9ob3RwbHVnLmNgIHZpYSBgbWVtYmxvY2tfYWRkX25vZGVgIGFuZCBgbWVtYmxvY2tfcmVtb3ZlYC4gIFNwZWNpZmljYWxseSwgYF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpYCB3aGljaCB0aGVuIGNhbGxzIGBtZW1ibG9ja19hZGRfbm9kZWAgYW5kIGBtZW1ibG9ja19yZW1vdmVgIGlzIGNhbGxlZCBmcm9tIG1lbW9yeSBob3RwbHVnIHJvdXRpbmVzIGxpa2UgdmlydGlvLW1lbSwgc3lzZnMgbWVtb3J5IHByb2JlLCBEQVgvZGV2X2RheCBrbWVtLCBhbmQgbWVtb3J5IG9mZmxpbmUgb3BlcmF0aW9ucy4KCkNydWNpYWxseSwgSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXNlIHBhdGhzIGFyZSB0YWtlbi4gYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIHNlZW1zIHJlbGV2YW50LCBhcyBpdCBhZmZlY3RzIHRoZSB1c2Ugb2YgYG1lbWJsb2NrX2FkZF9ub2RlYCBpbiBgX19hZGRfbWVtb3J5X3Jlc291cmNlKClgLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQsIHdoZW4gYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIGVuYWJsZWQsIG9uIGFyY2hpdGVjdHVyZXMgbGlrZSBJTlRFTF9URFhfSE9TVCBvciBhcm02NCwgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB3aWxsIGluZGVlZCBsZWFkIHRvIHRoZSBleGVjdXRpb24gb2YgYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gIEkgY2FuIHNlZSB0aGF0IHdoZW4gbWVtb3J5IGlzIGhvdHBsdWdnZWQgdmlhIHZpcnRpb19tZW0sIHN5c2ZzLCBvciBrbWVtLCBgX19hZGRfbWVtb3J5X3Jlc291cmNlKClgIGlzIGNhbGxlZCwgYW5kLCBpZiBgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AgaXMgc2V0LCBjYWxscyBgbWVtYmxvY2tfYWRkX25vZGUoKWAgYW5kIGBtZW1ibG9ja19yZW1vdmUoKWAgd2hpY2ggaW4gdHVybiwgY2FsbCBvdXIgbW9kaWZpZWQgZnVuY3Rpb25zLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMgYmFzZWQgb24gY29uZmlnIG9wdGlvbnMuIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AsIGBDT05GSUdfSU5URUxfVERYX0hPU1RgLCBhbmQgcG90ZW50aWFsbHkgb3RoZXJzIGFyZSBhbGwgcHJpbWUgc3VzcGVjdHMgZm9yIGNyZWF0aW5nIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0LgoKVGhlIG1vZGlmaWNhdGlvbnMgdGhlbXNlbHZlcyBpbnZvbHZlIHJlcGxhY2luZyBhIGxpbmVhciBzZWFyY2ggKGBmb3JfZWFjaF9tZW1ibG9ja190eXBlYCkgd2l0aCBhIGJpbmFyeSBzZWFyY2ggKGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCkgdG8gZmluZCB0aGUgc3RhcnRpbmcgaW5kZXggd2l0aGluIHRoZSBgbWVtYmxvY2tfdHlwZWAuIFRoaXMgaXMgYSBub24tdHJpdmlhbCBhbGdvcml0aG1pYyBjaGFuZ2Ugd2l0aGluIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2U6IGEgY29yZSBzdWJzeXN0ZW0gaW4gbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9tZW1ibG9jay5jYCkgaGFzIHNlZW4gYSBjaGFuZ2UgdG8gaXRzIGZ1bmRhbWVudGFsIGxvZ2ljLgoKTGV0JiMzOTtzIG5vdyBhbmFseXplIHRoZSBjb2RlIHRoYXQgaGFzIGNoYW5nZWQuIGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVnaW9uIHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBtZW1vcnkgdGhhdCB3ZSYjMzk7cmUgaW5zZXJ0aW5nIG9yIHJlbW92aW5nIGRvZXNuJiMzOTt0IG92ZXJsYXAuIExvb2tpbmcgY2xvc2VseSBhdCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAsIEkgY2FuIHNlZSB0aGF0IHRoZSBiaW5hcnkgc2VhcmNoIHJlc3VsdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RhcnRpbmcgcG9pbnQuCgpJbiBgbWVtYmxvY2tfYWRkX3JhbmdlYCwgdGhlIGJpbmFyeSBzZWFyY2ggaXMgcGVyZm9ybWVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb21gIGxvb3AuIFRoZSBrZXkgaXMgdGhhdCBiYXNlIGRvZXNuJiMzOTt0IGNoYW5nZSBkdXJpbmcgdGhlIGxvb3AgKHNvIHRoZSBzZWFyY2ggb25seSBoYXMgdG8gaGFwcGVuIG9uY2UpLCBhbmQgdGhlIGxvb3Agb25seSBwcm9jZXNzZXMgdGhvc2UgZW50cmllcyB3aGljaCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGUgbWVtYmxvY2sgb3BlcmF0aW9uLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB2aWEgcnVudGltZSBtZW1vcnkgaG90cGx1ZyBwYXRocywgYW5kIHRoZSBhbGdvcml0aG1pYyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHfGNvbmZpZyBBUkNIX0tFRVBfTUVNQkxPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz00ODI9Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXG4tLVxubW0vS2NvbmZpZy00ODctIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXG5tbS9LY29uZmlnOjQ4ODpjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9LY29uZmlnLTQ4OS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTUwNT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUwOC0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTA5Om1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTEwLVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzYwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYElOVEVMX1REWF9IT1NUYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYGFyY2gveDg2L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiB0aGF0IFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucykgaXMgYW4geDg2LXNwZWNpZmljIHRlY2hub2xvZ3kgZnJvbSBJbnRlbC4gSSBrbm93IHRoaXMgZnJvbSB3b3JraW5nIHdpdGggc2ltaWxhciBoYXJkd2FyZSBzZWN1cml0eSBmZWF0dXJlcyBpbiB0aGUgcGFzdC4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgbmVzdGVkIHNvbWV3aGVyZSBpbiB0aGUgeDg2LXJlbGF0ZWQgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IEkgZmluZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGJlIHJlbGF0ZWQsIGFuZCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTlRFTF9URFhfSE9TVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4NDY9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWctMTg2NC1cbmFyY2gveDg2L0tjb25maWc6MTg2NTpjb25maWcgSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L0tjb25maWctMTg2Ni1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGU6CgoqKkFuYWx5emluZyB0aGUgYElOVEVMX1REWF9IT1NUYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUgYW5kIHBhcnNlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgSU5URUxfVERYX0hPU1RgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIGFuZCBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyB0aGlzLiBGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvdGhlciBLY29uZmlnIHN5bWJvbHMgdGhpcyBvbmUgcmVsaWVzIG9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0ICptdXN0KiBiZSBkZWZpbmVkIG9yIGVuYWJsZWQgKmJlZm9yZSogSSBjYW4gZXZlbiBjb25zaWRlciBjb25maWd1cmluZyBURFggaG9zdCBzdXBwb3J0LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGNvcnJlY3QuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlcmUgYXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgYW5kIHBvdGVudGlhbGx5IHNvbWUgQ1BVIGZlYXR1cmUgZmxhZ3MgdGhhdCBtdXN0IGJlIHByZXNlbnQuIEFuZCwgZ2l2ZW4gdGhhdCB0aGlzIHJlbGF0ZXMgdG8gSW50ZWwmIzM5O3MgVERYLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIHByb2Nlc3NvciBvciBwbGF0Zm9ybSBzZXJpZXMgbWlnaHQgYmUgbmVlZGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgY29kZSByZXZlYWxzLi4uSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggZGVwZW5kZW5jeSBvbiB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciB3aGVuIGVuYWJsaW5nIHRoaXMgc3VwcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODY1Olx0Y29uZmlnIElOVEVMX1REWF9IT1NUXG4xODY2Olx0XHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuMTg2NzpcdFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMXG4xODY4Olx0XHRkZXBlbmRzIG9uIFg4Nl82NFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBLVk1fSU5URUxcbjE4NzA6XHRcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xuMTg3MTpcdFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcbjE4NzM6XHRcdGRlcGVuZHMgb24gWDg2X01DRVxuMTg3NDpcdFx0aGVscFxuMTg3NTpcdFx0ICBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBwcm90ZWN0cyBndWVzdCBWTXMgZnJvbSBtYWxpY2lvdXNcbjE4NzY6XHRcdCAgaG9zdCBhbmQgY2VydGFpbiBwaHlzaWNhbCBhdHRhY2tzLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBuZWNlc3NhcnkgVERYXG4xODc3Olx0XHQgIHN1cHBvcnQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHJ1biBjb25maWRlbnRpYWwgVk1zLlxuMTg3ODpcdFxuMTg3OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg4MDpcdFxuMTg4MTpcdGNvbmZpZyBFRklcbjE4ODI6XHRcdGJvb2wgXCYjMzQ7RUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XCYjMzQ7XG4xODgzOlx0XHRkZXBlbmRzIG9uIEFDUElcbjE4ODQ6XHRcdHNlbGVjdCBVQ1MyX1NUUklOR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUyNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEFSQ0hfS0VFUF9NRU1CTE9DSyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gd2UgbmVlZCB0byBzZWUgaG93IGBBUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIGJlaW5nIHNlbGVjdGVkIG9yIGVuYWJsZWQgYmV5b25kIHdoYXQgd2UmIzM5O3ZlIGFscmVhZHkgbG9va2VkIGF0LiBNeSBpbml0aWFsIGdyZXAgd2FzIGhlbHBmdWwsIGJ1dCB3ZSBoYXZlIHRvIGJlIHRob3JvdWdoLiBJIHNlZSB0aGF0IGBJTlRFTF9URFhfSE9TVGAgaW4gYGFyY2gveDg2L0tjb25maWdgIHNlbGVjdHMgaXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSYjMzk7cmUgYWxzbyBzZWVpbmcgaXQgdGllZCB0byB0aGluZ3MgbGlrZSBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgVklSVElPX01FTWAuIFRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgYXNwZWN0cyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBsaWtlbHkgdXNlLWNhc2UuCgpOb3csIGBWSVJUSU9fTUVNYCB3YXJyYW50cyBjbG9zZXIgYXR0ZW50aW9uLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHZpcnRpbyBkZXZpY2VzLCB0aGVyZSBjb3VsZCBiZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQgbWUgZGVsdmUgaW50byB0aGUgYGRyaXZlcnMvdmlydGlvL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhY3RpbmcgYXMgYSBzb3VyY2Ugb2YgZW5hYmxlbWVudCBvciBhIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IHNpZGUtZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRJT19NRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xMTI9Y29uZmlnIFZJUlRJT19CQUxMT09OXG4tLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xMjItXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjEyMzpjb25maWcgVklSVElPX01FTVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbWVtIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqVmlydGlvIEtjb25maWcgSW5zcGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdmlydGlvL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMTIzLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21ldGhpbmcgc3BlY2lmaWMgSSYjMzk7bSBsb29raW5nIGZvciB0aGVyZSwgZWl0aGVyIHJlbGF0ZWQgdG8gYSBmZWF0dXJlIGZsYWcsIGEgZGVwZW5kZW5jeSwgb3IgYSBjb25kaXRpb25hbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIHZpcnRpbyBkZXZpY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggb3Igc29tZXRoaW5nIG1vcmUgZ2xvYmFsIHdpdGhpbiB0aGUgdmlydGlvIGZyYW1ld29yay4gSSBzdXNwZWN0IHRoZSBsaW5lIG51bWJlciBpcyBpbXBvcnRhbnQuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XG4gMTIxOlx0XHQgSWYgdW5zdXJlLCBzYXkgTS5cbiAxMjI6XHRcbiAxMjM6XHRjb25maWcgVklSVElPX01FTVxuIDEyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG1lbSBkcml2ZXJcJiMzNDtcbiAxMjU6XHRcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcbiAxMjY6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4gMTI4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbiAxMjk6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4gMTMwOlx0XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gMTMxOlx0XHRoZWxwXG4gMTMyOlx0XHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxuIDEzMzpcdFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXG4gMTM0Olx0XG4gMTM1Olx0XHQgVGhpcyBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHg4Ni02NCwgYXJtNjQsIHJpc2N2IGFuZCBzMzkwLlxuIDEzNjpcdFx0IEFsdGhvdWdoIGl0IHNob3VsZCBjb21waWxlIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBpbXBsZW1lbnRcbiAxMzc6XHRcdCBtZW1vcnkgaG90KHVuKXBsdWcsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhbmQvb3IgY29tbW9uXG4gMTM4Olx0XHQgY29kZSBjaGFuZ2VzIG1heSBiZSByZXF1aXJlZCBmb3IgdmlydGlvLW1lbSwga2R1bXAgYW5kIGtleGVjIHRvXG4gMTM5Olx0XHQgd29yayBhcyBleHBlY3RlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0ODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkludmVzdGlnYXRpbmcgYERFVl9EQVhfS01FTWAqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIERBWCBhbmQgS01FTS4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGRlcGVuZGVuY2llcyBmb3IgYSBmZWF0dXJlIGxpa2UgYERFVl9EQVhfS01FTWAuIFRpbWUgdG8gbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdGRlcGVuZHMgb24gREVWX0RBWCBcdTAwMjZcdTAwMjYgRlNfREFYXG4gIDcxOlx0XHRkZWZhdWx0IERFVl9EQVhcbiAgNzI6XHRcbiAgNzM6XHRjb25maWcgREVWX0RBWF9LTUVNXG4gIDc0Olx0XHR0cmlzdGF0ZSBcJiMzNDtLTUVNIERBWDogbWFwIGRheC1kZXZpY2VzIGFzIFN5c3RlbS1SQU1cJiMzNDtcbiAgNzU6XHRcdGRlZmF1bHQgREVWX0RBWFxuICA3NjpcdFx0ZGVwZW5kcyBvbiBERVZfREFYXG4gIDc3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xuICA3ODpcdFx0aGVscFxuICA3OTpcdFx0ICBTdXBwb3J0IGFjY2VzcyB0byBwZXJzaXN0ZW50LCBvciBvdGhlciBwZXJmb3JtYW5jZVxuICA4MDpcdFx0ICBkaWZmZXJlbnRpYXRlZCBtZW1vcnkgYXMgaWYgaXQgd2VyZSBTeXN0ZW0gUkFNLiBUaGlzIGFsbG93c1xuICA4MTpcdFx0ICBlYXNpZXIgdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGJ5IHVubW9kaWZpZWQgYXBwbGljYXRpb25zLCBvclxuICA4MjpcdFx0ICBhZGRzIGNvcmUga2VybmVsIG1lbW9yeSBzZXJ2aWNlcyB0byBoZXRlcm9nZW5lb3VzIG1lbW9yeSB0eXBlc1xuICA4MzpcdFx0ICAoSE1FTSkgbWFya2VkIFwmIzM0O3Jlc2VydmVkXCYjMzQ7IGJ5IHBsYXRmb3JtIGZpcm13YXJlLlxuICA4NDpcdFxuICA4NTpcdFx0ICBUbyB1c2UgdGhpcyBmZWF0dXJlLCBhIERBWCBkZXZpY2UgbXVzdCBiZSB1bmJvdW5kIGZyb20gdGhlXG4gIDg2Olx0XHQgIGRldmljZV9kYXggZHJpdmVyIGFuZCBib3VuZCB0byB0aGlzIGttZW0gZHJpdmVyIG9uIGVhY2ggYm9vdC5cbiAgODc6XHRcbiAgODg6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuICA4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTk1OQoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiA5MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIGFuZCBDb25maWd1cmF0aW9uIERldGVybWluYXRpb24gZm9yIE1lbWJsb2NrIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZXNlIEZvY3VzU3ltYm9scy4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBwYXRjaCBhbmQgaWRlbnRpZnlpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWRkZWQgb3IgY2hhbmdlZCBpbiBgbW0vbWVtYmxvY2suY2AuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgKGEgbmV3IHN0YXRpYyBoZWxwZXIpLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLCBhbHNvIHN0YXRpYyBoZWxwZXJzLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBndWlkZWxpbmVzIHJldmVhbHMgdGhhdCB3aGlsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSB0cmlja3ksIHN0YXRpYyBmdW5jdGlvbnMgKndpdGhpbiAuYyBmaWxlcyogZG8gZ2V0IGNvbXBpbGVkIGludG8gc3ltYm9scyBpbiBgdm1saW51eGAsIHVubGVzcyBjb21wbGV0ZWx5IGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZC4gQnV0IG5vbi1zdGF0aWMgY2FsbGVycyBhbmQgZW50cnlwb2ludHMgYXJlIGFsc28gdmFsaWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgdXNlZnVsIGFzIEZvY3VzU3ltYm9scywgc28gSSYjMzk7bGwgYmUgc3VyZSB0byBpbmNsdWRlIHRob3NlLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBtZW1ibG9ja19hZGRfcmFuZ2VgIGlzIGNhbGxlZCBieSBgbWVtYmxvY2tfYWRkYCwgYG1lbWJsb2NrX2FkZF9ub2RlYCwgYF9fbWVtYmxvY2tfcmVzZXJ2ZWAsIGFuZCBgbWVtYmxvY2tfcGh5c21lbV9hZGRgLiBBbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIGlzIGNhbGxlZCBieSBgbWVtYmxvY2tfcmVtb3ZlX3JhbmdlYCAod2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBieSBgbWVtYmxvY2tfcmVtb3ZlYCBhbmQgYG1lbWJsb2NrX3BoeXNfZnJlZWApLCBgbWVtYmxvY2tfc2V0Y2xyX2ZsYWdgLCBgbWVtYmxvY2tfc2V0X25vZGVgLCBhbmQgYG1lbWJsb2NrX2NhcF9tZW1vcnlfcmFuZ2VgLiBPa2F5LCBiYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBhbmQga2VlcGluZyB0aGUgZ3VpZGFuY2UgZnJvbSBTZWN0aW9uIDQgaW4gbWluZCwgdGhlc2Ugc3ltYm9scyBsb29rIHByb21pc2luZzoKCiogICBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAKKiAgIGBtZW1ibG9ja19hZGRfcmFuZ2VgCiogICBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAKKiAgIGBtZW1ibG9ja19hZGRfbm9kZWAKKiAgIGBtZW1ibG9ja19yZW1vdmVfcmFuZ2VgCiogICBgbWVtYmxvY2tfcmVtb3ZlYAoqICAgYG1lbWJsb2NrX3BoeXNfZnJlZWAKCkFscmlnaHQsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGlmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHViaXF1aXRvdXMgaG90LXBhdGhzIHRoYXQgY291bGQgZGlsdXRlIHRoZSBmdXp6aW5nLiBObywgbWVtYmxvY2sgb3BlcmF0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byBib290IGFuZCBtZW1vcnkgaG90cGx1Zy9ob3RyZW1vdmUuIFRoZXkgYXJlIG5vdCBjYWxsZWQgb24gZXZlcnkgcGFnZSBmYXVsdCwgbWFsbG9jL2ZyZWUsIG9yIHJlYWQvd3JpdGUgc3lzY2FsbC4gU28sIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKTm93LCBmb3IgdGhlIHJlcXVpcmVkIGNvbmZpZ3MsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZzogYElOVEVMX1REWF9IT1NUYCAod2hpY2ggc2VsZWN0cyBgQVJDSF9LRUVQX01FTUJMT0NLYCBvbiB4ODZfNjQpLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgVklSVElPX01FTWAuCgpPa2F5LCBsZXQmIzM5O3MgcXVpY2tseSBnbyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDoKCjEuICAqKkNvcmUgdHJpYWdlIHBoaWxvc29waHk6KiogTWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vbWVtYmxvY2suY2ApLCByZXBsYWNlcyBsaW5lYXIgc2VhcmNoLCBleGVjdXRhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBob3RwbHVnL3JlbW92ZSB3aGVuIG1lbWJsb2NrIGlzIHJldGFpbmVkLCBzbyB3b3J0aCBmdXp6aW5nLiBDaGVjayEKMi4gICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBsaXN0IGFib3ZlLiBDaGVjayEKMy4gICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQgbGlzdCBhYm92ZS4gQ2hlY2shCgpBbmQgZmluYWxseSwgYSBzYW5pdHkgY2hlY2s6IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gR290IGl0LiBTbywgdGhhdCYjMzk7cyBldmVyeXRoaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtYmxvY2tfYnNlYXJjaF9zdGFydCYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19yZW1vdmVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3BoeXNfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1ibG9jay5jKSwgaW50cm9kdWNpbmcgYmluYXJ5IHNlYXJjaCAobWVtYmxvY2tfYnNlYXJjaF9zdGFydCkgdG8gZmluZCBjYW5kaWRhdGUgcmVnaW9ucyBpbiBtZW1ibG9ja19hZGRfcmFuZ2UgYW5kIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UuIFRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWdpb24gc3BsaXR0aW5nL21lcmdpbmcgYWxnb3JpdGhtcyByZWFjaGFibGUgYXQgcnVudGltZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGhvdHJlbW92ZSB3aGVuIG1lbWJsb2NrIG1ldGFkYXRhIGlzIHJldGFpbmVkIChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCByZWdpb24gbWFuaXB1bGF0aW9uIGxvZ2ljIGFuZCBib3VuZGFyaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O1ZJUlRJT19NRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1ibG9ja19ic2VhcmNoX3N0YXJ0JiMzNDssCiAgICAmIzM0O21lbWJsb2NrX2FkZF9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19pc29sYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX2FkZF9ub2RlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3JlbW92ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19yZW1vdmUmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcGh5c19mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbWJsb2NrLmMpLCBpbnRyb2R1Y2luZyBiaW5hcnkgc2VhcmNoIChtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KSB0byBmaW5kIGNhbmRpZGF0ZSByZWdpb25zIGluIG1lbWJsb2NrX2FkZF9yYW5nZSBhbmQgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZ2lvbiBzcGxpdHRpbmcvbWVyZ2luZyBhbGdvcml0aG1zIHJlYWNoYWJsZSBhdCBydW50aW1lIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHdoZW4gbWVtYmxvY2sgbWV0YWRhdGEgaXMgcmV0YWluZWQgKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHJlZ2lvbiBtYW5pcHVsYXRpb24gbG9naWMgYW5kIGJvdW5kYXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgcmVnaW9uIGxvb2t1cCBpbiBlYXJseSBib290IG1lbWJsb2NrIG1hbmFnZW1lbnQgKG1tL21lbWJsb2NrLmMpIGJ5IGludHJvZHVjaW5nIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoKSBhbmQgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKCkuIFRoZSBjaGFuZ2VzIG9wZXJhdGUgZXhjbHVzaXZlbHkgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMgYW5kIGludGVybmFsIGluZGljZXMuIFBvdGVudGlhbCBidWdzIGluIHRoaXMgbG9naWMgKHN1Y2ggYXMgaW5kZXggY2FsY3VsYXRpb24gZXJyb3JzIG9yIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGFzc2VydGlvbi9ib3VuZHMgY2hlY2tpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZmllbGQgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY2ZjBlODI1YmZjODM3MmQ1NWRkOGIwYmY4YjE1MDFjMDkwZmQ0NDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggOWNlODYzNDlhMjlmYS4uODg5NDA0NzRiMDIwMyAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1ibG9jay5jCkBAIC0xNjAsNiAmIzQzOzE2MCwxMSBAQCBzdGF0aWMgX19yZWZkYXRhIHN0cnVjdCBtZW1ibG9ja190eXBlICptZW1ibG9ja19tZW1vcnkgPSAmYW1wO21lbWJsb2NrLm1lbW9yeTsKIAkgICAgIGkgJmx0OyBtZW1ibG9ja190eXBlLSZndDtjbnQ7CQkJCQlcCiAJICAgICBpJiM0MzsmIzQzOywgcmduID0gJmFtcDttZW1ibG9ja190eXBlLSZndDtyZWdpb25zW2ldKQogCiYjNDM7I2RlZmluZSBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaSwgbWVtYmxvY2tfdHlwZSwgcmduLCBzdGFydCkJXAomIzQzOwlmb3IgKGkgPSAoc3RhcnQpLCByZ24gPSAmYW1wO21lbWJsb2NrX3R5cGUtJmd0O3JlZ2lvbnNbaV07CQlcCiYjNDM7CSAgICAgaSAmbHQ7IG1lbWJsb2NrX3R5cGUtJmd0O2NudDsJCQkJCVwKJiM0MzsJICAgICBpJiM0MzsmIzQzOywgcmduID0gJmFtcDttZW1ibG9ja190eXBlLSZndDtyZWdpb25zW2ldKQomIzQzOwogI2RlZmluZSBtZW1ibG9ja19kYmcoZm10LCAuLi4pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKG1lbWJsb2NrX2RlYnVnKQkJCQkJXApAQCAtNTkxLDYgJiM0Mzs1OTYsMzMgQEAgc3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2luc2VydF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJdHlwZS0mZ3Q7dG90YWxfc2l6ZSAmIzQzOz0gc2l6ZTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCAmZ3Q7IGJhc2UKJiM0MzsgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBzZWFyY2gKJiM0MzsgKiBAYmFzZTogYmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjYW5kaWRhdGUgcmFuZ2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgQGJhc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYnNlYXJjaF9zdGFydChzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKJiM0MzsJCQkJCQkgIHBoeXNfYWRkcl90IGJhc2UpCiYjNDM7ewomIzQzOwlpbnQgbWlkLCBsb3cgPSAwOwomIzQzOwlpbnQgaGlnaCA9IHR5cGUtJmd0O2NudDsKJiM0MzsKJiM0MzsJaWYgKHR5cGUtJmd0O2NudCAmYW1wOyZhbXA7IGJhc2UgJmd0Oz0gdHlwZS0mZ3Q7cmVnaW9uc1t0eXBlLSZndDtjbnQgLSAxXS5iYXNlICYjNDM7CiYjNDM7CQkJCSB0eXBlLSZndDtyZWdpb25zW3R5cGUtJmd0O2NudCAtIDFdLnNpemUpCiYjNDM7CQlyZXR1cm4gdHlwZS0mZ3Q7Y250OwomIzQzOwomIzQzOwl3aGlsZSAobG93ICZsdDsgaGlnaCkgewomIzQzOwkJbWlkID0gKGxvdyAmIzQzOyBoaWdoKSAvIDI7CiYjNDM7CQlpZiAodHlwZS0mZ3Q7cmVnaW9uc1ttaWRdLmJhc2UgJiM0MzsgdHlwZS0mZ3Q7cmVnaW9uc1ttaWRdLnNpemUgJmx0Oz0gYmFzZSkKJiM0MzsJCQlsb3cgPSBtaWQgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQloaWdoID0gbWlkOwomIzQzOwl9CiYjNDM7CXJldHVybiBsb3c7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBtZW1ibG9ja19hZGRfcmFuZ2UgLSBhZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbgogICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gYWRkIG5ldyByZWdpb24gaW50bwpAQCAtNjUxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJYmFzZSA9IG9iYXNlOwogCW5yX25ldyA9IDA7CiAKLQlmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7CiYjNDM7CWZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbiwKJiM0MzsJCQkJICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHsKIAkJcGh5c19hZGRyX3QgcmJhc2UgPSByZ24tJmd0O2Jhc2U7CiAJCXBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSAmIzQzOyByZ24tJmd0O3NpemU7CiAKQEAgLTgyNyw3ICYjNDM7ODYwLDggQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKIAkJaWYgKG1lbWJsb2NrX2RvdWJsZV9hcnJheSh0eXBlLCBiYXNlLCBzaXplKSAmbHQ7IDApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvcl9lYWNoX21lbWJsb2NrX3R5cGUoaWR4LCB0eXBlLCByZ24pIHsKJiM0MzsJZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLAomIzQzOwkJCQkgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkgewogCQlwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi0mZ3Q7YmFzZTsKIAkJcGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICYjNDM7IHJnbi0mZ3Q7c2l6ZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiB0aGUgTWVtYmxvY2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIEtNU0FOIG5lZWRzIHRvIGJlIGJyb3VnaHQgdG8gYmVhciBoZXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpdHNlbGYuIEFscmlnaHQsIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9tZW1ibG9jay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBwaWVjZXM6IGEgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbWAgbWFjcm8sIGEgaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAsIGFuZCBpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgbGluZWFyIHNjYW5zIHdpdGggYmluYXJ5IHNlYXJjaGVzLCBzZWFyY2hpbmcgZm9yIHRoZSBmaXJzdCBvdmVybGFwcGluZyByZWdpb24uCgpUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCBhIGJldHRlciBncmFzcCBvZiB3aGF0IGBtZW1ibG9ja2AgYWN0dWFsbHkgKmRvZXMqLiBJIGtub3cgaXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIGVhcmx5IGJvb3QgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBsZXQmIzM5O3MgcmVmcmVzaC4gSSYjMzk7bGwgcmVhZCB0aGUgY29kZSBhcm91bmQgbGluZSA1OTEgaW4gYG1tL21lbWJsb2NrLmNgLiBDb250ZXh0IGlzIGtleSBoZXJlOyBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uIGFyZSB1c2VkIGluIHRoZSBicm9hZGVyIHBpY3R1cmUuIFRoZW4gSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGFyZSB2dWxuZXJhYmxlIHRvIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0ICovXG4gNTgxOlx0c3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2luc2VydF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gNTgyOlx0XHRcdFx0XHRcdFx0ICAgaW50IGlkeCwgcGh5c19hZGRyX3QgYmFzZSxcbiA1ODM6XHRcdFx0XHRcdFx0XHQgICBwaHlzX2FkZHJfdCBzaXplLFxuIDU4NDpcdFx0XHRcdFx0XHRcdCAgIGludCBuaWQsXG4gNTg1Olx0XHRcdFx0XHRcdFx0ICAgZW51bSBtZW1ibG9ja19mbGFncyBmbGFncylcbiA1ODY6XHR7XG4gNTg3Olx0XHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24gPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaWR4XTtcbiA1ODg6XHRcbiA1ODk6XHRcdEJVR19PTih0eXBlLVx1MDAzZWNudCBcdTAwM2U9IHR5cGUtXHUwMDNlbWF4KTtcbiA1OTA6XHRcdG1lbW1vdmUocmduICYjNDM7IDEsIHJnbiwgKHR5cGUtXHUwMDNlY250IC0gaWR4KSAqIHNpemVvZigqcmduKSk7XG4gNTkxOlx0XHRyZ24tXHUwMDNlYmFzZSA9IGJhc2U7XG4gNTkyOlx0XHRyZ24tXHUwMDNlc2l6ZSA9IHNpemU7XG4gNTkzOlx0XHRyZ24tXHUwMDNlZmxhZ3MgPSBmbGFncztcbiA1OTQ6XHRcdG1lbWJsb2NrX3NldF9yZWdpb25fbm9kZShyZ24sIG5pZCk7XG4gNTk1Olx0XHR0eXBlLVx1MDAzZWNudCYjNDM7JiM0Mzs7XG4gNTk2Olx0XHR0eXBlLVx1MDAzZXRvdGFsX3NpemUgJiM0Mzs9IHNpemU7XG4gNTk3Olx0fVxuIDU5ODpcdFxuIDU5OTpcdC8qKlxuIDYwMDpcdCAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCBcdTAwM2UgYmFzZVxuIDYwMTpcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIHNlYXJjaFxuIDYwMjpcdCAqIEBiYXNlOiBiYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNhbmRpZGF0ZSByYW5nZVxuIDYwMzpcdCAqXG4gNjA0Olx0ICogUmV0dXJucyB0aGUgZmlyc3QgcmVnaW9uIGluZGV4IHRoYXQgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCBAYmFzZS5cbiA2MDU6XHQgKi9cbiA2MDY6XHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIDYwNzpcdFx0XHRcdFx0XHRcdCAgcGh5c19hZGRyX3QgYmFzZSlcbiA2MDg6XHR7XG4gNjA5Olx0XHRpbnQgbWlkLCBsb3cgPSAwO1xuIDYxMDpcdFx0aW50IGhpZ2ggPSB0eXBlLVx1MDAzZWNudDtcbiA2MTE6XHRcbiA2MTI6XHRcdGlmICh0eXBlLVx1MDAzZWNudCBcdTAwMjZcdTAwMjYgYmFzZSBcdTAwM2U9IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLmJhc2UgJiM0MztcbiA2MTM6XHRcdFx0XHRcdCB0eXBlLVx1MDAzZXJlZ2lvbnNbdHlwZS1cdTAwM2VjbnQgLSAxXS5zaXplKVxuIDYxNDpcdFx0XHRyZXR1cm4gdHlwZS1cdTAwM2VjbnQ7XG4gNjE1Olx0XG4gNjE2Olx0XHR3aGlsZSAobG93IFx1MDAzYyBoaWdoKSB7XG4gNjE3Olx0XHRcdG1pZCA9IChsb3cgJiM0MzsgaGlnaCkgLyAyO1xuIDYxODpcdFx0XHRpZiAodHlwZS1cdTAwM2VyZWdpb25zW21pZF0uYmFzZSAmIzQzOyB0eXBlLVx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFx1MDAzYz0gYmFzZSlcbiA2MTk6XHRcdFx0XHRsb3cgPSBtaWQgJiM0MzsgMTtcbiA2MjA6XHRcdFx0ZWxzZVxuIDYyMTpcdFx0XHRcdGhpZ2ggPSBtaWQ7XG4gNjIyOlx0XHR9XG4gNjIzOlx0XHRyZXR1cm4gbG93O1xuIDYyNDpcdH1cbiA2MjU6XHRcbiA2MjY6XHQvKipcbiA2Mjc6XHQgKiBtZW1ibG9ja19hZGRfcmFuZ2UgLSBhZGQgbmV3IG1lbWJsb2NrIHJlZ2lvblxuIDYyODpcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGFkZCBuZXcgcmVnaW9uIGludG9cbiA2Mjk6XHQgKiBAYmFzZTogYmFzZSBhZGRyZXNzIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMwOlx0ICogQHNpemU6IHNpemUgb2YgdGhlIG5ldyByZWdpb25cbiA2MzE6XHQgKiBAbmlkOiBuaWQgb2YgdGhlIG5ldyByZWdpb25cbiA2MzI6XHQgKiBAZmxhZ3M6IGZsYWdzIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMzOlx0ICpcbiA2MzQ6XHQgKiBBZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbiBbQGJhc2UsIEBiYXNlICYjNDM7IEBzaXplKSBpbnRvIEB0eXBlLiAgVGhlIG5ldyByZWdpb25cbiA2MzU6XHQgKiBpcyBhbGxvd2VkIHRvIG92ZXJsYXAgd2l0aCBleGlzdGluZyBvbmVzIC0gb3ZlcmxhcHMgZG9uJiMzOTt0IGFmZmVjdCBhbHJlYWR5XG4gNjM2Olx0ICogZXhpc3RpbmcgcmVnaW9ucy4gIEB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbWluaW1hbCAoYWxsIG5laWdoYm91cmluZ1xuIDYzNzpcdCAqIGNvbXBhdGlibGUgcmVnaW9ucyBhcmUgbWVyZ2VkKSBhZnRlciB0aGUgYWRkaXRpb24uXG4gNjM4Olx0ICpcbiA2Mzk6XHQgKiBSZXR1cm46XG4gNjQwOlx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiA2NDE6XHQgKi9cbiA2NDI6XHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gNjQzOlx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuIDY0NDpcdFx0XHRcdFx0aW50IG5pZCwgZW51bSBtZW1ibG9ja19mbGFncyBmbGFncylcbiA2NDU6XHR7XG4gNjQ2Olx0XHRib29sIGluc2VydCA9IGZhbHNlO1xuIDY0NzpcdFx0cGh5c19hZGRyX3Qgb2Jhc2UgPSBiYXNlO1xuIDY0ODpcdFx0cGh5c19hZGRyX3QgZW5kID0gYmFzZSAmIzQzOyBtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCBcdTAwMjZzaXplKTtcbiA2NDk6XHRcdGludCBpZHgsIG5yX25ldywgc3RhcnRfcmduID0gLTEsIGVuZF9yZ247XG4gNjUwOlx0XHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ247XG4gNjUxOlx0XG4gNjUyOlx0XHRpZiAoIXNpemUpXG4gNjUzOlx0XHRcdHJldHVybiAwO1xuIDY1NDpcdFxuIDY1NTpcdFx0Lyogc3BlY2lhbCBjYXNlIGZvciBlbXB0eSBhcnJheSAqL1xuIDY1NjpcdFx0aWYgKHR5cGUtXHUwMDNlcmVnaW9uc1swXS5zaXplID09IDApIHtcbiA2NTc6XHRcdFx0V0FSTl9PTih0eXBlLVx1MDAzZWNudCAhPSAwIHx8IHR5cGUtXHUwMDNldG90YWxfc2l6ZSk7XG4gNjU4Olx0XHRcdHR5cGUtXHUwMDNlcmVnaW9uc1swXS5iYXNlID0gYmFzZTtcbiA2NTk6XHRcdFx0dHlwZS1cdTAwM2VyZWdpb25zWzBdLnNpemUgPSBzaXplO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCBpbiBgbW0vbWVtYmxvY2suY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIHdpdGhpbiBgbW0vbWVtYmxvY2suY2AuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBpcyBiZWluZyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIG1lbWJsb2NrIHN0cnVjdHVyZSwgcGVyaGFwcyB0byBoYW5kbGUgbWVtb3J5IGhvdHBsdWcsIG9yIG1heWJlIGZvciBzb21ldGhpbmcgbGlrZSBpc29sYXRpbmcgbWVtb3J5IHJhbmdlcyBmb3IgYSBzcGVjaWZpYyBOVU1BIG5vZGUgb3IgSU9NTVUgYXNzaWdubWVudC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgd2l0aCB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBpdC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1lbWJsb2NrIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgSSBzaG91bGQgbG9vayBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGl0IGlzIGhhbmRsaW5nIGFueSBwb3RlbnRpYWwgbWVtb3J5IGZyYWdtZW50YXRpb24gaXNzdWVzLCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFx0XHQgICAgICAgKG5yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAvIFNaXzFNLCBtZW1fc2l6ZV9tYik7XG4gODIxOlx0XHRcdHJldHVybiBmYWxzZTtcbiA4MjI6XHRcdH1cbiA4MjM6XHRcbiA4MjQ6XHRcdHJldHVybiB0cnVlO1xuIDgyNTpcdH1cbiA4MjY6XHRcbiA4Mjc6XHRcbiA4Mjg6XHQvKipcbiA4Mjk6XHQgKiBtZW1ibG9ja19pc29sYXRlX3JhbmdlIC0gaXNvbGF0ZSBnaXZlbiByYW5nZSBpbnRvIGRpc2pvaW50IG1lbWJsb2Nrc1xuIDgzMDpcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGlzb2xhdGUgcmFuZ2UgZm9yXG4gODMxOlx0ICogQGJhc2U6IGJhc2Ugb2YgcmFuZ2UgdG8gaXNvbGF0ZVxuIDgzMjpcdCAqIEBzaXplOiBzaXplIG9mIHJhbmdlIHRvIGlzb2xhdGVcbiA4MzM6XHQgKiBAc3RhcnRfcmduOiBvdXQgcGFyYW1ldGVyIGZvciB0aGUgc3RhcnQgb2YgaXNvbGF0ZWQgcmVnaW9uXG4gODM0Olx0ICogQGVuZF9yZ246IG91dCBwYXJhbWV0ZXIgZm9yIHRoZSBlbmQgb2YgaXNvbGF0ZWQgcmVnaW9uXG4gODM1Olx0ICpcbiA4MzY6XHQgKiBXYWxrIEB0eXBlIGFuZCBlbnN1cmUgdGhhdCByZWdpb25zIGRvbiYjMzk7dCBjcm9zcyB0aGUgYm91bmRhcmllcyBkZWZpbmVkIGJ5XG4gODM3Olx0ICogW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkuICBDcm9zc2luZyByZWdpb25zIGFyZSBzcGxpdCBhdCB0aGUgYm91bmRhcmllcyxcbiA4Mzg6XHQgKiB3aGljaCBtYXkgY3JlYXRlIGF0IG1vc3QgdHdvIG1vcmUgcmVnaW9ucy4gIFRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiA4Mzk6XHQgKiByZWdpb24gaW5zaWRlIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQHN0YXJ0X3JnbiBhbmQgdGhlIGluZGV4IG9mIHRoZVxuIDg0MDpcdCAqIGZpcnN0IHJlZ2lvbiBhZnRlciB0aGUgcmFuZ2UgaXMgcmV0dXJuZWQgaW4gKkBlbmRfcmduLlxuIDg0MTpcdCAqXG4gODQyOlx0ICogUmV0dXJuOlxuIDg0MzpcdCAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXG4gODQ0Olx0ICovXG4gODQ1Olx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiA4NDY6XHRcdFx0XHRcdFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiA4NDc6XHRcdFx0XHRcdFx0aW50ICpzdGFydF9yZ24sIGludCAqZW5kX3JnbilcbiA4NDg6XHR7XG4gODQ5Olx0XHRwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICYjNDM7IG1lbWJsb2NrX2NhcF9zaXplKGJhc2UsIFx1MDAyNnNpemUpO1xuIDg1MDpcdFx0aW50IGlkeDtcbiA4NTE6XHRcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbjtcbiA4NTI6XHRcbiA4NTM6XHRcdCpzdGFydF9yZ24gPSAqZW5kX3JnbiA9IDA7XG4gODU0Olx0XG4gODU1Olx0XHRpZiAoIXNpemUpXG4gODU2Olx0XHRcdHJldHVybiAwO1xuIDg1NzpcdFxuIDg1ODpcdFx0Lyogd2UmIzM5O2xsIGNyZWF0ZSBhdCBtb3N0IHR3byBtb3JlIHJlZ2lvbnMgKi9cbiA4NTk6XHRcdHdoaWxlICh0eXBlLVx1MDAzZWNudCAmIzQzOyAyIFx1MDAzZSB0eXBlLVx1MDAzZW1heClcbiA4NjA6XHRcdFx0aWYgKG1lbWJsb2NrX2RvdWJsZV9hcnJheSh0eXBlLCBiYXNlLCBzaXplKSBcdTAwM2MgMClcbiA4NjE6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4NjI6XHRcbiA4NjM6XHRcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiA4NjQ6XHRcdFx0XHRcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XG4gODY1Olx0XHRcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVx1MDAzZWJhc2U7XG4gODY2Olx0XHRcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSAmIzQzOyByZ24tXHUwMDNlc2l6ZTtcbiA4Njc6XHRcbiA4Njg6XHRcdFx0aWYgKHJiYXNlIFx1MDAzZT0gZW5kKVxuIDg2OTpcdFx0XHRcdGJyZWFrO1xuIDg3MDpcdFx0XHRpZiAocmVuZCBcdTAwM2M9IGJhc2UpXG4gODcxOlx0XHRcdFx0Y29udGludWU7XG4gODcyOlx0XG4gODczOlx0XHRcdGlmIChyYmFzZSBcdTAwM2MgYmFzZSkge1xuIDg3NDpcdFx0XHRcdC8qXG4gODc1Olx0XHRcdFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYmVsb3cuICBTcGxpdCBhbmQgY29udGludWVcbiA4NzY6XHRcdFx0XHQgKiB0byBwcm9jZXNzIHRoZSBuZXh0IHJlZ2lvbiAtIHRoZSBuZXcgdG9wIGhhbGYuXG4gODc3Olx0XHRcdFx0ICovXG4gODc4Olx0XHRcdFx0cmduLVx1MDAzZWJhc2UgPSBiYXNlO1xuIDg3OTpcdFx0XHRcdHJnbi1cdTAwM2VzaXplIC09IGJhc2UgLSByYmFzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0MQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA2MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1ibG9jayBPcHRpbWl6YXRpb24gZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAsIGFuIG9wdGltaXphdGlvbiBmb3IgZmluZGluZyB0aGUgc3RhcnRpbmcgaW5kZXggaW4gdGhlIGBtZW1ibG9ja2AgZGF0YSBzdHJ1Y3R1cmUgZHVyaW5nIG1lbW9yeSByYW5nZSBhZGRpdGlvbiBhbmQgaXNvbGF0aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBhcmUgd2UgY3JlYXRpbmcgYW55IHJpc2tzIGhlcmU/CgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgaWYgdGhpcyBwYXRjaCBhbGxvY2F0ZXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvcGllcyBpdCB0byB1c2VyIHNwYWNlLCBvciBldmFsdWF0ZXMgaXQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0IGxvb2tzIGxpa2UgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgIHdvcmtzIHNvbGVseSB3aXRoIGB0eXBlLSZndDtjbnRgIGFuZCB0aGUgYGJhc2VgIGFuZCBgc2l6ZWAgZmllbGRzIG9mIGB0eXBlLSZndDtyZWdpb25zYC4gQ3J1Y2lhbGx5LCB0aG9zZSByZWdpb25zIGZyb20gMCB1cCB0byBgdHlwZS0mZ3Q7Y250IC0gMWAgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgbWVtYmxvY2sgcmVnaW9ucywgdmFsaWQgYW5kIHJlYWR5IHRvIGdvLiBFdmVuIGlmIGB0eXBlLSZndDtjbnRgIGlzIHplcm8sIHRoZSB3aGlsZSBsb29wIHdpbGwgcXVpY2tseSB0ZXJtaW5hdGUuIEFuZCwgZm9yIHRoZSBsb29wIHVzaW5nIHRoZSBzdGFydCBpbmRleCwgaWYgYHN0YXJ0YCBpcyBlcXVhbCB0byBgdHlwZS0mZ3Q7Y250YCBpdCBkb2VzIG5vdCBydW4sIGFuZCBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbnRlZ2Vycy9wb2ludGVycy4KCkRvZXMgdGhpcyBoYXZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBOby4gVGhpcyBjb2RlIGlzIGVhcmx5LWJvb3QsIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgYG1lbWJsb2NrYCBzdWJzeXN0ZW0uIE5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgaXMgZXhwb3NlZCB0byB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIElmIHdlICpkaWQqIGhhdmUgYW4gaW5kZXhpbmcgYnVnLCBvciBgc3RhcnRgIHdhcyBzb21laG93IG91dCBvZiBib3VuZHMsIHRoYXQgd291bGQgdHJpZ2dlciBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgd2hpY2ggS0FTQU4gd291bGQgaW1tZWRpYXRlbHkgY2F0Y2guIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBubyBwYWRkaW5nIGxlYWtzLCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLgoKU28sIEkgdGhpbmsgd2UmIzM5O3JlIHNhZmUuIEtNU0FOIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgbmVlZGVkIGhlcmUuIExldCYjMzk7cyBkb3VibGUtY2hlY2ssIHRob3VnaCwgYmFzZWQgb24gbXkgbWVudGFsIGNoZWNrbGlzdDoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBOb3QgaW4gdGhpcyBwYXRjaC4KClJpZ2h0LiBUaW1lIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTiB0byBzb2xpZGlmeSBteSByZWFzb25pbmcuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUgYmVjYXVzZSB0aGVzZSBjaGFuZ2VzIG1vZGlmeSBhcnJheSBpbmRleGluZyBhbmQgbG9vcCBpbml0aWFsaXphdGlvbiBvdmVyIGB0eXBlLSZndDtyZWdpb25zYC4gQW55IGluZGV4aW5nIGVycm9ycyBvciBib3VuZHMgbWlzbWF0Y2hlcyB3aWxsIGJlIGNhdWdodCBhcyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzLiBBcyBmb3IgS01TQU4sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc2VuZCBpdCB0byB1c2VyLXNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBUaGUgYG1lbWJsb2NrYCBzdWJzeXN0ZW0gbWFuYWdlcyBpbml0aWFsaXplZCBwaHlzaWNhbCBtZW1vcnkgcmFuZ2VzIGZyb20gZWFybHkgYm9vdCwgd2l0aCByZWdpb24gc3RydWN0dXJlcyBmdWxseSBpbml0aWFsaXplZC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHJlZ2lvbiBsb29rdXAgaW4gZWFybHkgYm9vdCBtZW1ibG9jayBtYW5hZ2VtZW50IChtbS9tZW1ibG9jay5jKSBieSBpbnRyb2R1Y2luZyBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KCkgYW5kIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbSgpLiBUaGUgY2hhbmdlcyBvcGVyYXRlIGV4Y2x1c2l2ZWx5IG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBtZW1ibG9jayByZWdpb25zIGFuZCBpbnRlcm5hbCBpbmRpY2VzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGxvZ2ljIChzdWNoIGFzIGluZGV4IGNhbGN1bGF0aW9uIGVycm9ycyBvciBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBhc3NlcnRpb24vYm91bmRzIGNoZWNraW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgcGFkZGluZy91bmluaXRpYWxpemVkIGZpZWxkIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgcmVnaW9uIGxvb2t1cCBpbiBlYXJseSBib290IG1lbWJsb2NrIG1hbmFnZW1lbnQgKG1tL21lbWJsb2NrLmMpIGJ5IGludHJvZHVjaW5nIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoKSBhbmQgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKCkuIFRoZSBjaGFuZ2VzIG9wZXJhdGUgZXhjbHVzaXZlbHkgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMgYW5kIGludGVybmFsIGluZGljZXMuIFBvdGVudGlhbCBidWdzIGluIHRoaXMgbG9naWMgKHN1Y2ggYXMgaW5kZXggY2FsY3VsYXRpb24gZXJyb3JzIG9yIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGFzc2VydGlvbi9ib3VuZHMgY2hlY2tpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZmllbGQgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MTMuNDE4MzQ4ODkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjQ3MDU1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiVklSVElPX01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWJsb2NrX2JzZWFyY2hfc3RhcnRcIixcbiAgICBcIm1lbWJsb2NrX2FkZF9yYW5nZVwiLFxuICAgIFwibWVtYmxvY2tfaXNvbGF0ZV9yYW5nZVwiLFxuICAgIFwibWVtYmxvY2tfYWRkX25vZGVcIixcbiAgICBcIm1lbWJsb2NrX3JlbW92ZV9yYW5nZVwiLFxuICAgIFwibWVtYmxvY2tfcmVtb3ZlXCIsXG4gICAgXCJtZW1ibG9ja19waHlzX2ZyZWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyByZWdpb24gbG9va3VwIGluIGVhcmx5IGJvb3QgbWVtYmxvY2sgbWFuYWdlbWVudCAobW0vbWVtYmxvY2suYykgYnkgaW50cm9kdWNpbmcgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCgpIGFuZCBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oKS4gVGhlIGNoYW5nZXMgb3BlcmF0ZSBleGNsdXNpdmVseSBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgbWVtYmxvY2sgcmVnaW9ucyBhbmQgaW50ZXJuYWwgaW5kaWNlcy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBsb2dpYyAoc3VjaCBhcyBpbmRleCBjYWxjdWxhdGlvbiBlcnJvcnMgb3IgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYXNzZXJ0aW9uL2JvdW5kcyBjaGVja2luZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIHBhZGRpbmcvdW5pbml0aWFsaXplZCBmaWVsZCBpbml0aWFsaXphdGlvbiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbWJsb2NrLmMpLCBpbnRyb2R1Y2luZyBiaW5hcnkgc2VhcmNoIChtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KSB0byBmaW5kIGNhbmRpZGF0ZSByZWdpb25zIGluIG1lbWJsb2NrX2FkZF9yYW5nZSBhbmQgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZ2lvbiBzcGxpdHRpbmcvbWVyZ2luZyBhbGdvcml0aG1zIHJlYWNoYWJsZSBhdCBydW50aW1lIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHdoZW4gbWVtYmxvY2sgbWV0YWRhdGEgaXMgcmV0YWluZWQgKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHJlZ2lvbiBtYW5pcHVsYXRpb24gbG9naWMgYW5kIGJvdW5kYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjEzLjQxODM1NjM1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1ODA1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjZmMGU4MjViZmM4MzcyZDU1ZGQ4YjBiZjhiMTUwMWMwOTBmZDQ0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXFxuaW5kZXggOWNlODYzNDlhMjlmYS4uODg5NDA0NzRiMDIwMyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1ibG9jay5jXFxuKysrIGIvbW0vbWVtYmxvY2suY1xcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9IFxcdTAwMjZtZW1ibG9jay5tZW1vcnk7XFxuIFxcdCAgICAgaSBcXHUwMDNjIG1lbWJsb2NrX3R5cGUtXFx1MDAzZWNudDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgaSsrLCByZ24gPSBcXHUwMDI2bWVtYmxvY2tfdHlwZS1cXHUwMDNlcmVnaW9uc1tpXSlcXG4gXFxuKyNkZWZpbmUgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGksIG1lbWJsb2NrX3R5cGUsIHJnbiwgc3RhcnQpXFx0XFxcXFxcbitcXHRmb3IgKGkgPSAoc3RhcnQpLCByZ24gPSBcXHUwMDI2bWVtYmxvY2tfdHlwZS1cXHUwMDNlcmVnaW9uc1tpXTtcXHRcXHRcXFxcXFxuK1xcdCAgICAgaSBcXHUwMDNjIG1lbWJsb2NrX3R5cGUtXFx1MDAzZWNudDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAgICAgaSsrLCByZ24gPSBcXHUwMDI2bWVtYmxvY2tfdHlwZS1cXHUwMDNlcmVnaW9uc1tpXSlcXG4rXFxuICNkZWZpbmUgbWVtYmxvY2tfZGJnKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0aWYgKG1lbWJsb2NrX2RlYnVnKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNTkxLDYgKzU5NiwzMyBAQCBzdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gXFx0dHlwZS1cXHUwMDNldG90YWxfc2l6ZSArPSBzaXplO1xcbiB9XFxuIFxcbisvKipcXG4rICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kIFxcdTAwM2UgYmFzZVxcbisgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBzZWFyY2hcXG4rICogQGJhc2U6IGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2FuZGlkYXRlIHJhbmdlXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgQGJhc2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHBoeXNfYWRkcl90IGJhc2UpXFxuK3tcXG4rXFx0aW50IG1pZCwgbG93ID0gMDtcXG4rXFx0aW50IGhpZ2ggPSB0eXBlLVxcdTAwM2VjbnQ7XFxuK1xcbitcXHRpZiAodHlwZS1cXHUwMDNlY250IFxcdTAwMjZcXHUwMDI2IGJhc2UgXFx1MDAzZT0gdHlwZS1cXHUwMDNlcmVnaW9uc1t0eXBlLVxcdTAwM2VjbnQgLSAxXS5iYXNlICtcXG4rXFx0XFx0XFx0XFx0IHR5cGUtXFx1MDAzZXJlZ2lvbnNbdHlwZS1cXHUwMDNlY250IC0gMV0uc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIHR5cGUtXFx1MDAzZWNudDtcXG4rXFxuK1xcdHdoaWxlIChsb3cgXFx1MDAzYyBoaWdoKSB7XFxuK1xcdFxcdG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7XFxuK1xcdFxcdGlmICh0eXBlLVxcdTAwM2VyZWdpb25zW21pZF0uYmFzZSArIHR5cGUtXFx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFxcdTAwM2M9IGJhc2UpXFxuK1xcdFxcdFxcdGxvdyA9IG1pZCArIDE7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aGlnaCA9IG1pZDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gbG93O1xcbit9XFxuK1xcbiAvKipcXG4gICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cXG4gICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gYWRkIG5ldyByZWdpb24gaW50b1xcbkBAIC02NTEsNyArNjgzLDggQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXHRiYXNlID0gb2Jhc2U7XFxuIFxcdG5yX25ldyA9IDA7XFxuIFxcbi1cXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XFxuK1xcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4rXFx0XFx0XFx0XFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcXG4gXFx0XFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXFx1MDAzZWJhc2U7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gXFxuQEAgLTgyNyw3ICs4NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXHRcXHRpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XFxuK1xcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4rXFx0XFx0XFx0XFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcXG4gXFx0XFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXFx1MDAzZWJhc2U7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjEzLjk0NTEyMjk0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTI0NzI0ODQxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJWSVJUSU9fTUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtYmxvY2tfYnNlYXJjaF9zdGFydFwiLFxuICAgIFwibWVtYmxvY2tfYWRkX3JhbmdlXCIsXG4gICAgXCJtZW1ibG9ja19pc29sYXRlX3JhbmdlXCIsXG4gICAgXCJtZW1ibG9ja19hZGRfbm9kZVwiLFxuICAgIFwibWVtYmxvY2tfcmVtb3ZlX3JhbmdlXCIsXG4gICAgXCJtZW1ibG9ja19yZW1vdmVcIixcbiAgICBcIm1lbWJsb2NrX3BoeXNfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbWJsb2NrLmMpLCBpbnRyb2R1Y2luZyBiaW5hcnkgc2VhcmNoIChtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KSB0byBmaW5kIGNhbmRpZGF0ZSByZWdpb25zIGluIG1lbWJsb2NrX2FkZF9yYW5nZSBhbmQgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZ2lvbiBzcGxpdHRpbmcvbWVyZ2luZyBhbGdvcml0aG1zIHJlYWNoYWJsZSBhdCBydW50aW1lIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHdoZW4gbWVtYmxvY2sgbWV0YWRhdGEgaXMgcmV0YWluZWQgKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHJlZ2lvbiBtYW5pcHVsYXRpb24gbG9naWMgYW5kIGJvdW5kYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjZmMGU4MjViZmM4MzcyZDU1ZGQ4YjBiZjhiMTUwMWMwOTBmZDQ0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDA6NTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggOWNlODYzNDlhMjlmYS4uODg5NDA0NzRiMDIwMyAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbisrKyBiL21tL21lbWJsb2NrLmNcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9IFx1MDAyNm1lbWJsb2NrLm1lbW9yeTtcbiBcdCAgICAgaSBcdTAwM2MgbWVtYmxvY2tfdHlwZS1cdTAwM2VjbnQ7XHRcdFx0XHRcdFxcXG4gXHQgICAgIGkrKywgcmduID0gXHUwMDI2bWVtYmxvY2tfdHlwZS1cdTAwM2VyZWdpb25zW2ldKVxuIFxuKyNkZWZpbmUgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGksIG1lbWJsb2NrX3R5cGUsIHJnbiwgc3RhcnQpXHRcXFxuK1x0Zm9yIChpID0gKHN0YXJ0KSwgcmduID0gXHUwMDI2bWVtYmxvY2tfdHlwZS1cdTAwM2VyZWdpb25zW2ldO1x0XHRcXFxuK1x0ICAgICBpIFx1MDAzYyBtZW1ibG9ja190eXBlLVx1MDAzZWNudDtcdFx0XHRcdFx0XFxcbitcdCAgICAgaSsrLCByZ24gPSBcdTAwMjZtZW1ibG9ja190eXBlLVx1MDAzZXJlZ2lvbnNbaV0pXG4rXG4gI2RlZmluZSBtZW1ibG9ja19kYmcoZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbiBcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0aWYgKG1lbWJsb2NrX2RlYnVnKVx0XHRcdFx0XHRcXFxuQEAgLTU5MSw2ICs1OTYsMzMgQEAgc3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2luc2VydF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHR0eXBlLVx1MDAzZXRvdGFsX3NpemUgKz0gc2l6ZTtcbiB9XG4gXG4rLyoqXG4rICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kIFx1MDAzZSBiYXNlXG4rICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gc2VhcmNoXG4rICogQGJhc2U6IGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2FuZGlkYXRlIHJhbmdlXG4rICpcbisgKiBSZXR1cm5zIHRoZSBmaXJzdCByZWdpb24gaW5kZXggdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBvdmVybGFwIEBiYXNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4rXHRcdFx0XHRcdFx0ICBwaHlzX2FkZHJfdCBiYXNlKVxuK3tcbitcdGludCBtaWQsIGxvdyA9IDA7XG4rXHRpbnQgaGlnaCA9IHR5cGUtXHUwMDNlY250O1xuK1xuK1x0aWYgKHR5cGUtXHUwMDNlY250IFx1MDAyNlx1MDAyNiBiYXNlIFx1MDAzZT0gdHlwZS1cdTAwM2VyZWdpb25zW3R5cGUtXHUwMDNlY250IC0gMV0uYmFzZSArXG4rXHRcdFx0XHQgdHlwZS1cdTAwM2VyZWdpb25zW3R5cGUtXHUwMDNlY250IC0gMV0uc2l6ZSlcbitcdFx0cmV0dXJuIHR5cGUtXHUwMDNlY250O1xuK1xuK1x0d2hpbGUgKGxvdyBcdTAwM2MgaGlnaCkge1xuK1x0XHRtaWQgPSAobG93ICsgaGlnaCkgLyAyO1xuK1x0XHRpZiAodHlwZS1cdTAwM2VyZWdpb25zW21pZF0uYmFzZSArIHR5cGUtXHUwMDNlcmVnaW9uc1ttaWRdLnNpemUgXHUwMDNjPSBiYXNlKVxuK1x0XHRcdGxvdyA9IG1pZCArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHRoaWdoID0gbWlkO1xuK1x0fVxuK1x0cmV0dXJuIGxvdztcbit9XG4rXG4gLyoqXG4gICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cbiAgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXG5AQCAtNjUxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcdGJhc2UgPSBvYmFzZTtcbiBcdG5yX25ldyA9IDA7XG4gXG4tXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XG4rXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaWR4LCB0eXBlLCByZ24sXG4rXHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgKyByZ24tXHUwMDNlc2l6ZTtcbiBcbkBAIC04MjcsNyArODYwLDggQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcdFx0aWYgKG1lbWJsb2NrX2RvdWJsZV9hcnJheSh0eXBlLCBiYXNlLCBzaXplKSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvcl9lYWNoX21lbWJsb2NrX3R5cGUoaWR4LCB0eXBlLCByZ24pIHtcbitcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbitcdFx0XHRcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XG4gXHRcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVx1MDAzZWJhc2U7XG4gXHRcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cdTAwM2VzaXplO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MTMuOTQ1MTI1MDQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4NTEwMTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiB3b3J0aCBvdXIgdGltZSBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdyB0byBiZXN0IGFwcHJvYWNoIGl0LiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBnb2luZyB0byBiZSBuZWNlc3Nhcnk/IEFuZCB3aGF0IGFyZSBvdXIga2V5IGZvY3VzIHN5bWJvbHM/XG5cbkZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmaWxlLCBgbW0vbWVtYmxvY2suY2AuIEhtbSwgSSBzZWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkOiBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYCwgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgLCBgbWVtYmxvY2tfYWRkX3JhbmdlYCwgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gVGhhdCBgX19pbml0X21lbWJsb2NrYCBwcmVmaXguLi4gd2FpdCBhIG1pbnV0ZSEgQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbmx5IHVzZWQgZHVyaW5nIGVhcmx5IGJvb3QsIHRoZSBpbml0IHBoYXNlLCBvciBpcyB0aGVyZSBhIHBvc3NpYmlsaXR5IHRoYXQgYG1lbWJsb2NrYCBjb2RlIGlzIGFjY2Vzc2libGUgYXQgcnVudGltZSwgcGVyaGFwcyBmb3Igc29tZXRoaW5nIGxpa2UgbWVtb3J5IGhvdHBsdWc/XG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG1lbWJsb2NrX2FkZF9yYW5nZWAsIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCwgb3Igb3RoZXIgYG1lbWJsb2NrXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGxhdGVyLCBpbiB0aGUgbWFpbiBydW50aW1lIG9mIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byBjaGVjayBgbW0vbWVtYmxvY2suY2AgYW5kIHRyYWNlIHRob3NlIGNhbGxzLiBUaW1lIHRvIGJyZWFrIG91dCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgYW5kIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MjEuMjMwMjI5MzE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTYyODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2FkZF9yYW5nZXxtZW1ibG9ja19pc29sYXRlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1ibG9jay5jPTYwNj1zdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbi0tXFxubW0vbWVtYmxvY2suYy02MjYtLyoqXFxubW0vbWVtYmxvY2suYzo2Mjc6ICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cXG5tbS9tZW1ibG9jay5jLTYyOC0gKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXFxuLS1cXG5tbS9tZW1ibG9jay5jLTY0MS0gKi9cXG5tbS9tZW1ibG9jay5jOjY0MjpzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxubW0vbWVtYmxvY2suYy02NDMtXFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtNzU2LSAqIEFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uIFtAYmFzZSwgQGJhc2UgKyBAc2l6ZSkgdG8gdGhlIFxcXCJtZW1vcnlcXFwiXFxubW0vbWVtYmxvY2suYzo3NTc6ICogdHlwZS4gU2VlIG1lbWJsb2NrX2FkZF9yYW5nZSgpIGRlc2NyaXB0aW9uIGZvciBtb2RlIGRldGFpbHNcXG5tbS9tZW1ibG9jay5jLTc1OC0gKlxcbi0tXFxubW0vbWVtYmxvY2suYz03NjI9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfbm9kZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbi0tXFxubW0vbWVtYmxvY2suYy03NjktXFxubW0vbWVtYmxvY2suYzo3NzA6XFx0cmV0dXJuIG1lbWJsb2NrX2FkZF9yYW5nZShcXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCBuaWQsIGZsYWdzKTtcXG5tbS9tZW1ibG9jay5jLTc3MS19XFxuLS1cXG5tbS9tZW1ibG9jay5jLTc3OC0gKiBBZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbiBbQGJhc2UsIEBiYXNlICsgQHNpemUpIHRvIHRoZSBcXFwibWVtb3J5XFxcIlxcbm1tL21lbWJsb2NrLmM6Nzc5OiAqIHR5cGUuIFNlZSBtZW1ibG9ja19hZGRfcmFuZ2UoKSBkZXNjcmlwdGlvbiBmb3IgbW9kZSBkZXRhaWxzXFxubW0vbWVtYmxvY2suYy03ODAtICpcXG4tLVxcbm1tL21lbWJsb2NrLmM9Nzg0PWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTc5MC1cXG5tbS9tZW1ibG9jay5jOjc5MTpcXHRyZXR1cm4gbWVtYmxvY2tfYWRkX3JhbmdlKFxcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIE1BWF9OVU1OT0RFUywgMCk7XFxubW0vbWVtYmxvY2suYy03OTItfVxcbi0tXFxubW0vbWVtYmxvY2suYz04MDU9Ym9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcylcXG4tLVxcbm1tL21lbWJsb2NrLmMtODI4LS8qKlxcbm1tL21lbWJsb2NrLmM6ODI5OiAqIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UgLSBpc29sYXRlIGdpdmVuIHJhbmdlIGludG8gZGlzam9pbnQgbWVtYmxvY2tzXFxubW0vbWVtYmxvY2suYy04MzAtICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gaXNvbGF0ZSByYW5nZSBmb3JcXG4tLVxcbm1tL21lbWJsb2NrLmMtODQ0LSAqL1xcbm1tL21lbWJsb2NrLmM6ODQ1OnN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxubW0vbWVtYmxvY2suYy04NDYtXFx0XFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmM9OTA2PXN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTExLVxcbm1tL21lbWJsb2NrLmM6OTEyOlxcdHJldCA9IG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UodHlwZSwgYmFzZSwgc2l6ZSwgXFx1MDAyNnN0YXJ0X3JnbiwgXFx1MDAyNmVuZF9yZ24pO1xcbm1tL21lbWJsb2NrLmMtOTEzLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwNDE9aW50IF9faW5pdF9tZW1ibG9jayBfX21lbWJsb2NrX3Jlc2VydmUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTA0OC1cXG5tbS9tZW1ibG9jay5jOjEwNDk6XFx0cmV0dXJuIG1lbWJsb2NrX2FkZF9yYW5nZShcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUsIG5pZCwgZmxhZ3MpO1xcbm1tL21lbWJsb2NrLmMtMTA1MC19XFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwNTM9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzbWVtX2FkZChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbi0tXFxubW0vbWVtYmxvY2suYy0xMDU5LVxcbm1tL21lbWJsb2NrLmM6MTA2MDpcXHRyZXR1cm4gbWVtYmxvY2tfYWRkX3JhbmdlKFxcdTAwMjZwaHlzbWVtLCBiYXNlLCBzaXplLCBNQVhfTlVNTk9ERVMsIDApO1xcbm1tL21lbWJsb2NrLmMtMTA2MS19XFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwNzY9c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0Y2xyX2ZsYWcoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxuLS1cXG5tbS9tZW1ibG9jay5jLTEwODAtXFxubW0vbWVtYmxvY2suYzoxMDgxOlxcdHJldCA9IG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UodHlwZSwgYmFzZSwgc2l6ZSwgXFx1MDAyNnN0YXJ0X3JnbiwgXFx1MDAyNmVuZF9yZ24pO1xcbm1tL21lbWJsb2NrLmMtMTA4Mi1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtYmxvY2suYz0xNTIzPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTUyOS1cXG5tbS9tZW1ibG9jay5jOjE1MzA6XFx0cmV0ID0gbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSh0eXBlLCBiYXNlLCBzaXplLCBcXHUwMDI2c3RhcnRfcmduLCBcXHUwMDI2ZW5kX3Jnbik7XFxubW0vbWVtYmxvY2suYy0xNTMxLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTIwNTM9dm9pZCBfX2luaXQgbWVtYmxvY2tfY2FwX21lbW9yeV9yYW5nZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yMDY1LVxcbm1tL21lbWJsb2NrLmM6MjA2NjpcXHRyZXQgPSBtZW1ibG9ja19pc29sYXRlX3JhbmdlKFxcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsXFxubW0vbWVtYmxvY2suYy0yMDY3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGFydF9yZ24sIFxcdTAwMjZlbmRfcmduKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MjEuMzIzNzk3MDA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MTE3MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYF9faW5pdF9tZW1ibG9ja2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgX19pbml0X21lbWJsb2NrYC4gTXkgZmlyc3Qgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBkZXRlcm1pbmUgd2hlcmUgYW5kIGhvdyBpdCdzIGRlZmluZWQuIEdpdmVuIHRoYXQgSSdtIGxpa2VseSBkZWFsaW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIEknbGwgYXNzdW1lIGl0J3MgcGFydCBvZiB0aGUga2VybmVsIG9yIGEgcmVsYXRlZCBsaWJyYXJ5LiBTbywgSSBuZWVkIHRvIGZpbmQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgc2luY2UgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGRlZmluZWQsIEknbGwgcmVhY2ggZm9yIGBncmVwYC4gQSBzaW1wbGUgYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBfX2luaXRfbWVtYmxvY2tgIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgc2NhbiB0aGUgcmVzdWx0cyB0byBzZWUgdGhlIGZpbGUgYW5kIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIHF1aWNrbHkgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MzoyMy4zODQ5Njk3MzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjU5MzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIF9faW5pdF9tZW1ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE2LSNpZm5kZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDoxMTc6I2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTExOC0jZGVmaW5lIF9faW5pdGRhdGFfbWVtYmxvY2sgX19tZW1pbml0ZGF0YVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaD0xMTk9dm9pZCBtZW1ibG9ja19kaXNjYXJkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMjAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTIxOiNkZWZpbmUgX19pbml0X21lbWJsb2NrXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTEyMi0jZGVmaW5lIF9faW5pdGRhdGFfbWVtYmxvY2tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MjUuOTE3NTc0MzM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczODQzNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBfX21lbWluaXRgIOKAkyB0aGF0J3MgZWl0aGVyIHRoZSBzYW1lIGFzIGBfX2luaXRgLCBvciBpdCdzIHJldGFpbmVkIGlmIG1lbW9yeSBob3RwbHVnIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJlbGF0aW9uc2hpcCBjb3JyZWN0bHkuIE5vdywgYSBrZXkgcXVlc3Rpb24gY29tZXMgdG8gbWluZDogaG93IGNydWNpYWwgaXMgdGhlIG1lbWJsb2NrIG1lY2hhbmlzbSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gU3BlY2lmaWNhbGx5LCBpcyBgbWVtYmxvY2tgIHN0aWxsIHJlbGV2YW50IGR1cmluZyBydW50aW1lIHdoZW4gbWVtb3J5IGhvdHBsdWcgaXMgaW52b2x2ZWQ/IE9yIGlzIGl0cyByb2xlIGxpbWl0ZWQgdG8gdGhlIGJvb3QgcHJvY2Vzcz8gSXMgaXQgZGlzY2FyZGVkIGxhdGVyLCBvciBkb2VzIGl0IHNlcnZlIHNvbWUgcHVycG9zZSB0aHJvdWdob3V0IHRoZSBzeXN0ZW0ncyBsaWZlPyBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIG15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgZGV0YWlsZWQgYXVkaXQgb2YgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoZSBgbWVtYmxvY2tfYWRkYCwgYG1lbWJsb2NrX2FkZF9yYW5nZWAsIGFuZCBvdGhlciBgbWVtYmxvY2tgIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgZXhhY3RseSBob3cgYG1lbWJsb2NrYCBpcyB1dGlsaXplZCwgd2hpY2ggaW4gdHVybiB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gYm90aCB0aGUgaW5pdGlhbCBib290IHNlcXVlbmNlIGFuZCBhbnkgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHRha2luZyBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjI4LjY1NjAxNDc0NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM2NTg1OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2FkZFxcXFwofG1lbWJsb2NrX2FkZF9ub2RlXFxcXCh8bWVtYmxvY2tfcmVzZXJ2ZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdD0xMzQ9WW91IGNhbiBzcGVjaWZ5IGVpdGhlciBSQU0gbWVtb3J5IG9yIHBlcmlwaGVyYWwgZGV2aWNlcycgbWVtb3J5LiBIb3dldmVyLCB3aGVuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdDoxMzU6c3BlY2lmeWluZyBSQU0sIGJlIHN1cmUgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IGJ5IGlzc3VpbmcgbWVtYmxvY2tfcmVzZXJ2ZSgpXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xMzYtdmVyeSBlYXJseSBpbiB0aGUgYXJjaGl0ZWN0dXJlIGNvZGUsIGUuZy46Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xMzktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdDoxNDA6XFx0bWVtYmxvY2tfcmVzZXJ2ZShyYW1vb3BzX2RhdGEubWVtX2FkZHJlc3MsIHJhbW9vcHNfZGF0YS5tZW1fc2l6ZSk7XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xNDEtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2lyb25nYXRlLmM9MjAyPWFsYmFjb3JlX2luaXRfYXJjaCh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jLTI0MS0jZW5kaWZcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2lyb25nYXRlLmM6MjQyOlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUocGNpX21lbSwgbWVtdG9wIC0gcGNpX21lbSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jLTI0My1cXHRcXHRwcmludGsoXFxcImlyb25nYXRlX2luaXRfYXJjaDogdGVtcG9yYXJpbHkgcmVzZXJ2aW5nIFxcXCJcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9Mjg2PXNldHVwX21lbW9yeSh2b2lkICprZXJuZWxfZW5kKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zMDctXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozMDg6XFx0XFx0bWVtYmxvY2tfYWRkKFBGTl9QSFlTKGNsdXN0ZXItXFx1MDAzZXN0YXJ0X3BmbiksXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zMDktXFx0XFx0XFx0ICAgICBjbHVzdGVyLVxcdTAwM2VudW1wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzE0LVxcdFxcdGlmIChjbHVzdGVyLVxcdTAwM2V1c2FnZSBcXHUwMDI2IDMpXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozMTU6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShQRk5fUEhZUyhjbHVzdGVyLVxcdTAwM2VzdGFydF9wZm4pLFxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzE2LVxcdFxcdFxcdFxcdCAgICAgICAgIGNsdXN0ZXItXFx1MDAzZW51bXBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zNDYtXFx0a2VybmVsX3NpemUgPSB2aXJ0X3RvX3BoeXMoa2VybmVsX2VuZCkgLSBLRVJORUxfU1RBUlRfUEhZUztcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM0NzpcXHRtZW1ibG9ja19yZXNlcnZlKEtFUk5FTF9TVEFSVF9QSFlTLCBrZXJuZWxfc2l6ZSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zNDgtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM2Mi1cXHRcXHR9IGVsc2Uge1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6MzYzOlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUodmlydF90b19waHlzKCh2b2lkICopaW5pdHJkX3N0YXJ0KSxcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM2NC1cXHRcXHRcXHRcXHRcXHRJTklUUkRfU0laRSk7XFxuLS1cXG5hcmNoL2FyYy9tbS9pbml0LmM9NTE9dm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKVxcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTYwLVxcdFxcdGluX3VzZSA9IDE7XFxuYXJjaC9hcmMvbW0vaW5pdC5jOjYxOlxcdFxcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDAsIE1FTUJMT0NLX05PTkUpO1xcbmFyY2gvYXJjL21tL2luaXQuYy02Mi1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTY2LVxcdFxcdGluX3VzZSA9IDE7XFxuYXJjaC9hcmMvbW0vaW5pdC5jOjY3OlxcdFxcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDEsIE1FTUJMT0NLX05PTkUpO1xcbmFyY2gvYXJjL21tL2luaXQuYzo2ODpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xcbmFyY2gvYXJjL21tL2luaXQuYy02OS0jZW5kaWZcXG4tLVxcbmFyY2gvYXJjL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gvYXJjL21tL2luaXQuYy0xMjMtXFxuYXJjaC9hcmMvbW0vaW5pdC5jOjEyNDpcXHRtZW1ibG9ja19yZXNlcnZlKENPTkZJR19MSU5VWF9MSU5LX0JBU0UsXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEyNS1cXHRcXHRcXHQgX19wYShfZW5kKSAtIENPTkZJR19MSU5VWF9MSU5LX0JBU0UpO1xcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEyOC1cXHRpZiAocGh5c19pbml0cmRfc2l6ZSkge1xcbmFyY2gvYXJjL21tL2luaXQuYzoxMjk6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7XFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzMC1cXHRcXHRpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHBoeXNfaW5pdHJkX3N0YXJ0KTtcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jPTc2MD1pbnQgX19pbml0IGFybV9hZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04MTYtXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM6ODE3OlxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODE4LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9MTA5Nj12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy0xMTA3LVxcdFxcdGlmIChtZGVzYylcXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzoxMTA4OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoX19hdGFnc19wb2ludGVyLFxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTExMDktXFx0XFx0XFx0XFx0XFx0IGZkdF90b3RhbHNpemUoYXRhZ3NfdmFkZHIpKTtcXG4tLVxcbmFyY2gvYXJtL21hY2gtaGlzaS9wbGF0bWNwbS5jPTI2NT1zdGF0aWMgaW50IF9faW5pdCBoaXAwNF9zbXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg3LVxcbmFyY2gvYXJtL21hY2gtaGlzaS9wbGF0bWNwbS5jOjI4ODpcXHRyZXQgPSBtZW1ibG9ja19yZXNlcnZlKGhpcDA0X2Jvb3RfbWV0aG9kWzBdLCBoaXAwNF9ib290X21ldGhvZFsxXSk7XFxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg5LVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9NjY9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc2Nhbl9tZW0odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy05MS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6OTI6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBNVkVCVV9ERFJfVFJBSU5JTkdfQVJFQV9TWik7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTkzLVxcdH1cXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy05Ny1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6OTg6c3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZClcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtOTkte1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEwMi0jZWxzZVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMDM6c3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZCkge31cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTA0LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYz0xMTM0PXN0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9maXh1cChzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqY21kbGluZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMtMTEzNi1cXHRzaGFycHNsX3NhdmVfcGFyYW0oKTtcXG5hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jOjExMzc6XFx0bWVtYmxvY2tfYWRkKDB4YTAwMDAwMDAsIFNaXzY0TSk7XFxuYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYy0xMTM4LX1cXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2ludGVncmF0b3IuYz05MT12b2lkIF9faW5pdCBpbnRlZ3JhdG9yX3Jlc2VydmUodm9pZClcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbnRlZ3JhdG9yLmMtOTIte1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2ludGVncmF0b3IuYzo5MzpcXHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbnRlZ3JhdG9yLmMtOTQtfVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTUyPXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX21lbW9yeV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtNTQtXFx0aWYgKCFfX3BhKFBBR0VfT0ZGU0VUKSlcXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6NTU6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKFBBR0VfT0ZGU0VUKSwgMHg4MDAwMCk7XFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTU2LX1cXG4tLVxcbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtMTgyLVxcdC8qIFJlZ2lzdGVyIHRoZSBrZXJuZWwgdGV4dCwga2VybmVsIGRhdGEgYW5kIGluaXRyZCB3aXRoIG1lbWJsb2NrLiAqL1xcbmFyY2gvYXJtL21tL2luaXQuYzoxODM6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKEtFUk5FTF9TVEFSVCksIEtFUk5FTF9FTkQgLSBLRVJORUxfU1RBUlQpO1xcbmFyY2gvYXJtL21tL2luaXQuYy0xODQtXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtMTg2LVxcbmFyY2gvYXJtL21tL2luaXQuYzoxODc6XFx0YXJtX21tX21lbWJsb2NrX3Jlc2VydmUoKTtcXG5hcmNoL2FybS9tbS9pbml0LmMtMTg4LVxcbi0tXFxuYXJjaC9hcm0vbW0vbW0uaD04OT12b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZCk7XFxuYXJjaC9hcm0vbW0vbW0uaDo5MDp2b2lkIGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpO1xcbmFyY2gvYXJtL21tL21tLmgtOTEtI2lmZGVmIENPTkZJR19DTUFfQVJFQVNcXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jPTEyNzM9c3RhdGljIF9faW5pdCB2b2lkIHByZXBhcmVfcGFnZV90YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vbW11LmMtMTMzNC0gKi9cXG5hcmNoL2FybS9tbS9tbXUuYzoxMzM1OnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXFxuYXJjaC9hcm0vbW0vbW11LmMtMTMzNi17XFxuLS1cXG5hcmNoL2FybS9tbS9tbXUuYy0xMzQwLVxcdCAqL1xcbmFyY2gvYXJtL21tL21tdS5jOjEzNDE6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKHN3YXBwZXJfcGdfZGlyKSwgU1dBUFBFUl9QR19ESVJfU0laRSk7XFxuYXJjaC9hcm0vbW0vbW11LmMtMTM0Mi1cXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jLTEzNDctXFx0ICovXFxuYXJjaC9hcm0vbW0vbW11LmM6MTM0ODpcXHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTtcXG5hcmNoL2FybS9tbS9tbXUuYy0xMzQ5LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm0vbW0vbm9tbXUuYz02Mz11bnNpZ25lZCBsb25nIHNldHVwX3ZlY3RvcnNfYmFzZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vbm9tbXUuYy04MS1cXG5hcmNoL2FybS9tbS9ub21tdS5jOjgyOnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXFxuYXJjaC9hcm0vbW0vbm9tbXUuYy04My17XFxuLS1cXG5hcmNoL2FybS9tbS9ub21tdS5jLTkwLVxcdCAqL1xcbmFyY2gvYXJtL21tL25vbW11LmM6OTE6XFx0bWVtYmxvY2tfcmVzZXJ2ZSh2ZWN0b3JzX2Jhc2UsIDIgKiBQQUdFX1NJWkUpO1xcbmFyY2gvYXJtL21tL25vbW11LmMtOTItI2Vsc2UgLyogaWZuZGVmIENPTkZJR19DUFVfVjdNICovXFxuLS1cXG5hcmNoL2FybS9tbS9ub21tdS5jLTEwMS1cXHQgKi9cXG5hcmNoL2FybS9tbS9ub21tdS5jOjEwMjpcXHRtZW1ibG9ja19yZXNlcnZlKDAsIDEpO1xcbmFyY2gvYXJtL21tL25vbW11LmMtMTAzLX1cXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYz0yMzU9dm9pZCBjcmFzaF9wb3N0X3Jlc3VtZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTI0Ny0gKiBOb3RlIHRoYXQgYWxsIHRoZSBwYWdlcyBpbiBjcmFzaCBkdW1wIGtlcm5lbCBtZW1vcnkgaGF2ZSBiZWVuIGluaXRpYWxseVxcbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYzoyNDg6ICogbWFya2VkIGFzIFJlc2VydmVkIGFzIG1lbW9yeSB3YXMgYWxsb2NhdGVkIHZpYSBtZW1ibG9ja19yZXNlcnZlKCkuXFxuYXJjaC9hcm02NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTI0OS0gKlxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYz0xNzA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21hY2hpbmVfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jLTE3Ni1cXHRpZiAoZHRfdmlydClcXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jOjE3NzpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKGR0X3BoeXMsIHNpemUpO1xcbmFyY2gvYXJtNjQva2VybmVsL3NldHVwLmMtMTc4LVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmM9MTk2PXZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI1Ni1cXHRcXHRtZW1ibG9ja19tZW1fbGltaXRfcmVtb3ZlX21hcChtZW1vcnlfbGltaXQpO1xcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjI1NzpcXHRcXHRtZW1ibG9ja19hZGQoX19wYV9zeW1ib2woX3RleHQpLCAocmVzb3VyY2Vfc2l6ZV90KShfZW5kIC0gX3RleHQpKTtcXG5hcmNoL2FybTY0L21tL2luaXQuYy0yNTgtXFx0fVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMjgyLVxcdFxcdH0gZWxzZSB7XFxuYXJjaC9hcm02NC9tbS9pbml0LmM6MjgzOlxcdFxcdFxcdG1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTtcXG5hcmNoL2FybTY0L21tL2luaXQuYy0yODQtXFx0XFx0XFx0bWVtYmxvY2tfY2xlYXJfbm9tYXAoYmFzZSwgc2l6ZSk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmM6Mjg1OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMjg2LVxcdFxcdH1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5Mi1cXHQgKi9cXG5hcmNoL2FybTY0L21tL2luaXQuYzoyOTM6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChfdGV4dCksIF9lbmQgLSBfdGV4dCk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMjk0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOSVRSRCkgXFx1MDAyNlxcdTAwMjYgcGh5c19pbml0cmRfc2l6ZSkge1xcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTE2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbml0cmQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYy0zNy1cXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6Mzg6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKGluaXRyZF9zdGFydCksIHNpemUpO1xcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYy0zOS1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjctXFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jOjY4OlxcdG1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RhcnQpLCBfZW5kIC0gX3N0YXJ0KTtcXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjktXFxuLS1cXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jPTEwND12b2lkIF9faW5pdCBzZXR1cF9hcmNoX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMjMtXFxuYXJjaC9oZXhhZ29uL21tL2luaXQuYzoxMjQ6XFx0bWVtYmxvY2tfYWRkKFBIWVNfT0ZGU0VULFxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTI1LVxcdFxcdCAgICAgKGJvb3RtZW1fbGFzdHBnIC0gQVJDSF9QRk5fT0ZGU0VUKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4tLVxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTI3LVxcdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgKi9cXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jOjEyODpcXHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULFxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTI5LVxcdFxcdFxcdCAoYm9vdG1lbV9zdGFydHBnIC0gQVJDSF9QRk5fT0ZGU0VUKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4tLVxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTM1LVxcdG1pbl9sb3dfcGZuID0gQVJDSF9QRk5fT0ZGU0VUO1xcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmM6MTM2OlxcdG1lbWJsb2NrX3Jlc2VydmUoUEZOX1BIWVMobWF4X2xvd19wZm4pLCBETUFfUkVTRVJWRURfQllURVMpO1xcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTM3LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2FjcGkuYz0zNzg9dm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX21lbV9hcmVhKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyLCBzaXplX3Qgc2l6ZSlcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvYWNwaS5jLTM3OS17XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2FjcGkuYzozODA6XFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvYWNwaS5jLTM4MS19XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM9ODI9c3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJpbWFyeV9kaXNwbGF5KHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmMtOTctXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jOjk4OlxcdG1lbWJsb2NrX3Jlc2VydmUoX19zY3JlZW5faW5mb19sZmJfYmFzZShcXHUwMDI2c3lzZmJfcHJpbWFyeV9kaXNwbGF5LnNjcmVlbiksXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTk5LVxcdFxcdFxcdCBzeXNmYl9wcmltYXJ5X2Rpc3BsYXkuc2NyZWVuLmxmYl9zaXplKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lZmkuYz0xMDI9dm9pZCBfX2luaXQgZWZpX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lZmkuYy0xNTgtXFx0XFx0ICovXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jOjE1OTpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKChwaHlzX2FkZHJfdClib290X21lbW1hcCwgc2l6ZW9mKCp0YmwpICsgZGF0YS5zaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmMtMTYwLVxcdFxcdHNldF9iaXQoRUZJX1BSRVNFUlZFX0JTX1JFR0lPTlMsIFxcdTAwMjZlZmkuZmxhZ3MpO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jPTEzPXZvaWQgX19pbml0IG1lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy0zMS1cXHRcXHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYzozMjpcXHRcXHRcXHRtZW1ibG9ja19hZGQobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTMzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTM2LVxcdFxcdGNhc2UgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlk6XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjM3OlxcdFxcdFxcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtMzgtXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNDMtXFx0XFx0Y2FzZSBFRklfTUVNT1JZX01BUFBFRF9JT19QT1JUX1NQQUNFOlxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYzo0NDpcXHRcXHRcXHRtZW1ibG9ja19yZXNlcnZlKG1lbV9zdGFydCwgbWVtX3NpemUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy00NS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy01My1cXHQvKiBSZXNlcnZlIHRoZSBmaXJzdCAyTUIgKi9cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6NTQ6XFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgMHgyMDAwMDApO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy01NS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTYtXFx0LyogUmVzZXJ2ZSB0aGUga2VybmVsIHRleHQvZGF0YS9ic3MgKi9cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6NTc6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcXHUwMDI2X3RleHQpLFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy01OC1cXHRcXHRcXHQgX19wYV9zeW1ib2woXFx1MDAyNl9lbmQpIC0gX19wYV9zeW1ib2woXFx1MDAyNl90ZXh0KSk7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz0xOTE9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yMjEtXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzoyMjI6XFx0XFx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yMjMtXFx0ZWxzZVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjIyNDpcXHRcXHRtZW1ibG9ja19hZGRfbm9kZShzdGFydCwgc2l6ZSwgcGFfdG9fbmlkKHN0YXJ0KSwgTUVNQkxPQ0tfTk9ORSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjI1LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9MjMwPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX3Jlc2VydmVfdm1jb3JlKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNTctXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MjU4OlxcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1OS1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfa2VybmVsX3NlY3Rpb25zX21lbSh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzg2LVxcdFxcdHByX2luZm8oXFxcIktlcm5lbCBzZWN0aW9ucyBhcmUgbm90IGluIHRoZSBtZW1vcnkgbWFwc1xcXFxuXFxcIik7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6Mzg3OlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzg4LVxcdH1cXG4tLVxcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYz0yMDY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9tbS5jLTMzMC1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTklUUkQpIFxcdTAwMjZcXHUwMDI2IG02OGtfcmFtZGlzay5zaXplKVxcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYzozMzE6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShtNjhrX3JhbWRpc2suYWRkciwgbTY4a19yYW1kaXNrLnNpemUpO1xcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYy0zMzItXFxuLS1cXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmM9ODI9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jLTE0Mi1cXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmM6MTQzOlxcdG1lbWJsb2NrX2FkZChfcmFtYmFzZSwgbWVtb3J5X2VuZCAtIF9yYW1iYXNlKTtcXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmM6MTQ0OlxcdG1lbWJsb2NrX3Jlc2VydmUoX3JhbWJhc2UsIG1lbW9yeV9zdGFydCAtIF9yYW1iYXNlKTtcXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMtMTQ1LVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jLTE1OS1cXHRcXHRcXHQoaW5pdHJkX2VuZCBcXHUwMDNjIG1lbW9yeV9lbmQpKVxcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYzoxNjA6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpO1xcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYy0xNjEtI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKSAqL1xcbi0tXFxuYXJjaC9tNjhrL21tL21jZm1tdS5jPTE0OD12b2lkIF9faW5pdCBjZl9ib290bWVtX2FsbG9jKHZvaWQpXFxuLS1cXG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTU1LVxcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYzoxNTY6XFx0bWVtYmxvY2tfYWRkX25vZGUobTY4a19tZW1vcnlbMF0uYWRkciwgbTY4a19tZW1vcnlbMF0uc2l6ZSwgMCxcXG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTU3LVxcdFxcdFxcdCAgTUVNQkxPQ0tfTk9ORSk7XFxuLS1cXG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTY4LVxcdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgKi9cXG5hcmNoL202OGsvbW0vbWNmbW11LmM6MTY5OlxcdG1lbWJsb2NrX3Jlc2VydmUoX3JhbWJhc2UsIG1lbXN0YXJ0IC0gX3JhbWJhc2UpO1xcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy0xNzAtXFxuLS1cXG5hcmNoL202OGsvbW0vbW90b3JvbGEuYz00MzA9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ1MS1cXHRtYXhfYWRkciA9IG1pbl9hZGRyICsgbTY4a19tZW1vcnlbMF0uc2l6ZSAtIDE7XFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmM6NDUyOlxcdG1lbWJsb2NrX2FkZF9ub2RlKG02OGtfbWVtb3J5WzBdLmFkZHIsIG02OGtfbWVtb3J5WzBdLnNpemUsIDAsXFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDUzLVxcdFxcdFxcdCAgTUVNQkxPQ0tfTk9ORSk7XFxuLS1cXG5hcmNoL202OGsvbW0vbW90b3JvbGEuYy00NjMtXFx0XFx0fVxcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jOjQ2NDpcXHRcXHRtZW1ibG9ja19hZGRfbm9kZShtNjhrX21lbW9yeVtpXS5hZGRyLCBtNjhrX21lbW9yeVtpXS5zaXplLCBpLFxcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ2NS1cXHRcXHRcXHRcXHQgIE1FTUJMT0NLX05PTkUpO1xcbi0tXFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDgyLVxcdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGluIGhlYWQuUyAqL1xcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jOjQ4MzpcXHRtZW1ibG9ja19yZXNlcnZlKG02OGtfbWVtb3J5WzBdLmFkZHIsIGF2YWlsbWVtIC0gbTY4a19tZW1vcnlbMF0uYWRkcik7XFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDg0LVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYz0xNjU9YXNtbGlua2FnZSB2b2lkIF9faW5pdCBtbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYy0xOTgtXFx0a3NpemUgPSBQQUdFX0FMSUdOKCgodTMyKV9lbmQgLSAodTMyKUNPTkZJR19LRVJORUxfU1RBUlQpKTtcXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjE5OTpcXHRtZW1ibG9ja19yZXNlcnZlKGtzdGFydCwga3NpemUpO1xcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjAwLVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYy0yMDUtXFx0XFx0c2l6ZSA9IGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQ7XFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYzoyMDY6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3ZpcnRfdG9fcGh5cyhpbml0cmRfc3RhcnQpLCBzaXplKTtcXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIwNy1cXHR9XFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jPTgzPXZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYy05Ny1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jOjk4OlxcdG1lbWJsb2NrX2FkZCgwLCBtZW1zaXplKTtcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jLTk5LX1cXG4tLVxcbmFyY2gvbWlwcy9hdGgyNS9hcjIzMTUuYz0yNTU9dm9pZCBfX2luaXQgYXIyMzE1X3BsYXRfbWVtX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvYXRoMjUvYXIyMzE1LmMtMjY5LVxcdG1lbXNpemUgXFx1MDAzY1xcdTAwM2M9IDM7XFxuYXJjaC9taXBzL2F0aDI1L2FyMjMxNS5jOjI3MDpcXHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XFxuYXJjaC9taXBzL2F0aDI1L2FyMjMxNS5jLTI3MS1cXHRpb3VubWFwKHNkcmFtX2Jhc2UpO1xcbi0tXFxuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jPTM1MT12b2lkIF9faW5pdCBhcjUzMTJfcGxhdF9tZW1fc2V0dXAodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9hdGgyNS9hcjUzMTIuYy0zNjUtXFx0bWVtc2l6ZSBcXHUwMDNjXFx1MDAzYz0gMjA7XFxuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jOjM2NjpcXHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XFxuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jLTM2Ny1cXHRpb3VubWFwKHNkcmFtX2Jhc2UpO1xcbi0tXFxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jPTU4PXN0YXRpYyBfX2luaXQgdm9pZCBwcm9tX2luaXRfbWVtKHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMtMTAyLVxcdFxcdG1lbSAtPSAweDEwMDA7XFxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jOjEwMzpcXHRtZW1ibG9ja19hZGQoMCwgbWVtKTtcXG5hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMtMTA0LX1cXG4tLVxcbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmM9MTU1PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXFxuYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYy0xNTYte1xcbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmM6MTU3OlxcdG1lbWJsb2NrX2FkZCgwLCBiY202M3h4X2dldF9tZW1vcnlfc2l6ZSgpKTtcXG5hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jLTE1OC1cXG4tLVxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM9OTI4PXN0YXRpYyBfX2luaXQgdm9pZCBtZW1vcnlfZXhjbHVkZV9wYWdlKHU2NCBhZGRyLCB1NjQgKm1lbSwgdTY0ICpzaXplKVxcbi0tXFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05MzEtXFx0XFx0dTY0IGluYyA9IGFkZHIgLSAqbWVtO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6OTMyOlxcdFxcdG1lbWJsb2NrX2FkZCgqbWVtLCBpbmMpO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTMzLVxcdFxcdCptZW0gKz0gaW5jO1xcbi0tXFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYz05Njc9dm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTkxLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6OTkyOlxcdG1lbWJsb2NrX2FkZChyZXNlcnZlX2xvd19tZW0sIG1heF9tZW1vcnkpO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTkzLVxcdHRvdGFsICs9IG1heF9tZW1vcnk7XFxuLS1cXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTk5Ni1cXHRpZiAoY3Jhc2hrX3NpemUgXFx1MDAzZSAwKSB7XFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzo5OTc6XFx0XFx0bWVtYmxvY2tfYWRkKGNyYXNoa19iYXNlLCBjcmFzaGtfc2l6ZSk7XFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTgtXFx0XFx0Y3Jhc2hrX2VuZCA9IGNyYXNoa19iYXNlICsgY3Jhc2hrX3NpemU7XFxuLS1cXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwMzctXFx0XFx0XFx0XFx0LyogcmVnaW9uIGlzIGZ1bGx5IGluICovXFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzoxMDM4OlxcdFxcdFxcdFxcdG1lbWJsb2NrX2FkZChtZW1vcnksIGNyYXNoa19iYXNlIC0gbWVtb3J5KTtcXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwMzktXFx0XFx0XFx0XFx0dG90YWwgKz0gY3Jhc2hrX2Jhc2UgLSBtZW1vcnk7XFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzoxMDQwOlxcdFxcdFxcdFxcdG1lbWJsb2NrX2FkZChjcmFzaGtfZW5kLCBlbmQgLSBjcmFzaGtfZW5kKTtcXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwNDEtXFx0XFx0XFx0XFx0dG90YWwgKz0gZW5kIC0gY3Jhc2hrX2VuZDtcXG4tLVxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA2Ny0jZW5kaWZcXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jOjEwNjg6XFx0XFx0XFx0bWVtYmxvY2tfYWRkKG1lbW9yeSwgbWVtX2FsbG9jX3NpemUpO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA2OS1cXHRcXHRcXHR0b3RhbCArPSBtZW1fYWxsb2Nfc2l6ZTtcXG4tLVxcbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYz05Nz12b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYy0xMTItXFxuYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jOjExMzpcXHRtZW1ibG9ja19hZGQoMCwgbWVtc3opO1xcbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYy0xMTQtXFxuLS1cXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmM9MzA9c3RhdGljIF9faW5pdCB2b2lkIHBtYXhfc2V0dXBfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTUxLVxcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYzo1MjpcXHRtZW1ibG9ja19hZGQoMCwgKHVuc2lnbmVkIGxvbmcpbWVtb3J5X3BhZ2UgLSBDS1NFRzEgLSBDSFVOS19TSVpFKTtcXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtNTMtfVxcbi0tXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jPTU5PXN0YXRpYyBfX2luaXQgdm9pZCByZXhfc2V0dXBfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTc2LVxcdFxcdGVsc2Uge1xcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYzo3NzpcXHRcXHRcXHRtZW1ibG9ja19hZGQobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTc4LVxcdFxcdFxcdG1lbV9zdGFydCArPSBtZW1fc2l6ZSArICg4ICogYm0tXFx1MDAzZXBhZ2VzaXplKTtcXG4tLVxcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYy04Mi1cXHRpZiAobWVtX3NpemUpXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jOjgzOlxcdFxcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtODQtfVxcbi0tXFxuYXJjaC9taXBzL2RlYy9zZXR1cC5jPTEzNz12b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2RlYy9zZXR1cC5jLTE1MC1cXHQvKiBTdGF5IGF3YXkgZnJvbSB0aGUgZmlybXdhcmUgd29ya2luZyBtZW1vcnkgYXJlYSBmb3Igbm93LiAqL1xcbmFyY2gvbWlwcy9kZWMvc2V0dXAuYzoxNTE6XFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgX19wYV9zeW1ib2woXFx1MDAyNl90ZXh0KSAtIFBIWVNfT0ZGU0VUKTtcXG5hcmNoL21pcHMvZGVjL3NldHVwLmMtMTUyLX1cXG4tLVxcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmM9MTIzPXZvaWQgX193ZWFrIF9faW5pdCBwcm9tX21lbWluaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTUzLVxcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmM6MTU0OlxcdFxcdG1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTtcXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1NS1cXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1Ni1cXHRcXHRpZiAodHlwZSA9PSBtZW1fcmVzZXJ2ZWQpXFxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYzoxNTc6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTtcXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1OC1cXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1OS1cXHRcXHRpZiAodHlwZSA9PSBtZW1fcHJvbV91c2VkKSB7XFxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYzoxNjA6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTtcXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE2MS1cXHRcXHRcXHRpZiAobnJfcHJvbV9tZW0gXFx1MDAzZT0gNSkge1xcbi0tXFxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmM9MTAwPXN0YXRpYyB2b2lkIF9faW5pdCBzbmlfbWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jLTEzMC1cXHRcXHRcXHRtZW1jb25mW2ldLnNpemUsIG1lbWNvbmZbaV0uYmFzZSk7XFxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmM6MTMxOlxcdFxcdG1lbWJsb2NrX2FkZChtZW1jb25mW2ldLmJhc2UsIG1lbWNvbmZbaV0uc2l6ZSk7XFxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmMtMTMyLVxcdH1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz05OD12b2lkIF9faW5pdCBkZXRlY3RfbWVtb3J5X3JlZ2lvbihwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3Qgc3pfbWluLCBwaHlzX2FkZHJfdCBzel9tYXgpXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMTEzLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoxMTQ6XFx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMTE1LX1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0yMTU9c3RhdGljIHZvaWQgX19pbml0IGZpbmFsaXplX2luaXRyZCh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTIyOS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MjMwOlxcdG1lbWJsb2NrX3Jlc2VydmUoX19wYShpbml0cmRfc3RhcnQpLCBzaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMjMxLVxcdGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yODQtXFx0LyogUmVzZXJ2ZSBtZW1vcnkgb2NjdXBpZWQgYnkga2VybmVsLiAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoyODU6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcXHUwMDI2X3RleHQpLFxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yODYtXFx0XFx0XFx0X19wYV9zeW1ib2woXFx1MDAyNl9lbmQpIC0gX19wYV9zeW1ib2woXFx1MDAyNl90ZXh0KSk7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMjk2LVxcdGlmIChyYW1zdGFydCBcXHUwMDNlIFBIWVNfT0ZGU0VUKVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoyOTc6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgcmFtc3RhcnQgLSBQSFlTX09GRlNFVCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTI5OC1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0zNDY9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMzcwLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MzcxOlxcdFxcdG1lbWJsb2NrX2FkZF9ub2RlKHN0YXJ0LCBzaXplLCBwYV90b19uaWQoc3RhcnQpLCBNRU1CTE9DS19OT05FKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMzcyLVxcdGVsc2VcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MzczOlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTM3NC1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0zNzk9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtbWFwKGNoYXIgKnApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMzk4LVxcdFxcdHN0YXJ0X2F0ID0gbWVtcGFyc2UocCsxLCBcXHUwMDI2cCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjM5OTpcXHRcXHRtZW1ibG9ja19hZGQoc3RhcnRfYXQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDAwLVxcdH0gZWxzZSBpZiAoKnAgPT0gJyMnKSB7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDA0LVxcdFxcdHN0YXJ0X2F0ID0gbWVtcGFyc2UocCsxLCBcXHUwMDI2cCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQwNTpcXHRcXHRtZW1ibG9ja19hZGQoc3RhcnRfYXQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NDA2OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnRfYXQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDA3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NDIwPXN0YXRpYyB2b2lkIF9faW5pdCBtaXBzX3Jlc2VydmVfdm1jb3JlKHZvaWQpXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDQyLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0NDM6XFx0bWVtYmxvY2tfcmVzZXJ2ZShlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQ0NC0jZW5kaWZcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz01MDg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2tlcm5lbF9zZWN0aW9uc19tZW0odm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy01MTQtXFx0XFx0cHJfaW5mbyhcXFwiS2VybmVsIHNlY3Rpb25zIGFyZSBub3QgaW4gdGhlIG1lbW9yeSBtYXBzXFxcXG5cXFwiKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NTE1OlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTUxNi1cXHR9XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NjMzPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjc2LVxcdC8qIFJlc2VydmUgZm9yIGhpYmVybmF0aW9uLiAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo2Nzc6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcXHUwMDI2X19ub3NhdmVfYmVnaW4pLFxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy02NzgtXFx0XFx0X19wYV9zeW1ib2woXFx1MDAyNl9fbm9zYXZlX2VuZCkgLSBfX3BhX3N5bWJvbChcXHUwMDI2X19ub3NhdmVfYmVnaW4pKTtcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYz0yMDEwPXZvaWQgcmVzZXJ2ZV9leGNlcHRpb25fc3BhY2UocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jLTIwMTctXFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKVxcbmFyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYzoyMDE4OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoYWRkciwgc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jLTIwMTktfVxcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYz0xOD12b2lkIF9faW5pdCBwcm9tX2luaXRfbWVtb3J5KHZvaWQpXFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYy0xOS17XFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzoyMDpcXHRtZW1ibG9ja19hZGQoMHgwLCAobWVtc2l6ZSBcXHUwMDNjXFx1MDAzYyAyMCkpO1xcbmFyY2gvbWlwcy9sb29uZ3NvbjJlZi9jb21tb24vbWVtLmMtMjEtXFxuLS1cXG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jLTQwLVxcdGlmIChoaWdobWVtc2l6ZSBcXHUwMDNlIDApXFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzo0MTpcXHRcXHRtZW1ibG9ja19hZGQoTE9PTkdTT05fSElHSE1FTV9TVEFSVCwgaGlnaG1lbXNpemUgXFx1MDAzY1xcdTAwM2MgMjApO1xcbmFyY2gvbWlwcy9sb29uZ3NvbjJlZi9jb21tb24vbWVtLmMtNDItI2VuZGlmIC8qICFDT05GSUdfNjRCSVQgKi9cXG4tLVxcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYz01MD12b2lkIF9faW5pdCBzem1lbSh1bnNpZ25lZCBpbnQgbm9kZSlcXG4tLVxcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy04MS1cXHRcXHRcXHRcXHQodTMyKW5vZGVfaWQsIG1lbV90eXBlLCBcXHUwMDI2bWVtX3N0YXJ0LCBcXHUwMDI2bWVtX3NpemUpO1xcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYzo4MjpcXHRcXHRcXHRtZW1ibG9ja19hZGRfbm9kZShtZW1fc3RhcnQsIG1lbV9zaXplLCBub2RlLFxcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy04My1cXHRcXHRcXHRcXHRcXHQgIE1FTUJMT0NLX05PTkUpO1xcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTkxLVxcdFxcdFxcdFxcdCh1MzIpbm9kZV9pZCwgbWVtX3R5cGUsIFxcdTAwMjZtZW1fc3RhcnQsIFxcdTAwMjZtZW1fc2l6ZSk7XFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjkyOlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTkzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTEwNC1cXHRpZiAobG9vbmdzb25fc3lzY29uZi52Z2FiaW9zX2FkZHIpXFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjEwNTpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKHZpcnRfdG9fcGh5cygodm9pZCAqKWxvb25nc29uX3N5c2NvbmYudmdhYmlvc19hZGRyKSxcXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtMTA2LVxcdFxcdFxcdFxcdFNaXzI1NkspO1xcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jPTgyPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jLTExMC1cXHRcXHQvKiBSZXNlcnZlIHRoZSBrZXJuZWwgdGV4dC9kYXRhL2JzcyAqL1xcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYzoxMTE6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShrZXJuZWxfc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjMxLjI5MjYwODAwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjE3MjEyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgYmxvY2sgc2l0dWF0aW9uIG9uIHg4Ni9hbWQ2NDpcblxuKipJbnZlc3RpZ2F0aW5nIG1lbWJsb2NrIG9uIHg4Ni9hbWQ2NCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgbWVtYmxvY2tgIGlzIHV0aWxpemVkIG9uIHg4Ni9hbWQ2NC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCBhIGdyZXAgd2l0aGluIHRoZSBgYXJjaC94ODYvYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBmb2N1c2luZyBvbiB0aGUgY29yZSBhcmNoaXRlY3R1cmFsIGltcGxlbWVudGF0aW9uLiBJJ2xsIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBgbWVtYmxvY2tfYWRkYCBhbmQgYG1lbWJsb2NrX3Jlc2VydmVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIGFzIGBtZW1ibG9ja19hZGRgIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgYWRkaW5nIGF2YWlsYWJsZSBtZW1vcnkgcmFuZ2VzIHRvIHRoZSBtZW1ibG9jayBsaXN0LCB3aGlsZSBgbWVtYmxvY2tfcmVzZXJ2ZWAgaXMgd2hhdCBpcyB1c2VkIHRvIHJlc2VydmUgcmFuZ2VzIGFuZCBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSB1c2luZyB0aGVtLiBCeSBzZWFyY2hpbmcgZm9yIHRoZXNlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hbmFnZWQsIHdoaWNoIGRyaXZlcnMgYXJlIHVzaW5nIGl0LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEJJT1Mgb3IgZmlybXdhcmUsIGFuZCBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIGJvb3QgcHJvY2VzcyBtZW1vcnkgbWFwIG9uIHg4Ni4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhlIHN5c3RlbSdzIG1lbW9yeSBpcyBpbml0aWFsbHkgc2V0IHVwIGFuZCBob3cgaXQgZXZvbHZlcyBhcyB0aGUga2VybmVsIGJvb3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY1MywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjMzLjkxNDMzMjI2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTk3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2FkZHxtZW1ibG9ja19yZXNlcnZlfG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2V8bWVtYmxvY2tfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY2hlY2suYz05Mj12b2lkIF9faW5pdCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jaGVjay5jLTEyMy1cXG5hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYzoxMjQ6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xcbmFyY2gveDg2L2tlcm5lbC9jaGVjay5jLTEyNS1cXHRcXHRzY2FuX2FyZWFzW251bV9zY2FuX2FyZWFzXS5hZGRyID0gc3RhcnQ7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM0MS1cXHRcXHRpZiAoZW50cnktXFx1MDAzZXR5cGUgPT0gRTgyMF9UWVBFX1NPRlRfUkVTRVJWRUQpXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQyOlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoZW50cnktXFx1MDAzZWFkZHIsIGVudHJ5LVxcdTAwM2VzaXplKTtcXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDMtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDYtXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQ3OlxcdFxcdG1lbWJsb2NrX2FkZChlbnRyeS1cXHUwMDNlYWRkciwgZW50cnktXFx1MDAzZXNpemUpO1xcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM0OC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNzMtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzc0OlxcdFxcdG1lbWJsb2NrX3JlbW92ZShQRk5fUEhZUyhtYXhfcGZuKSwgLTEpO1xcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM3NS1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmM9NTY9dm9pZCBfX2luaXQgcmVzZXJ2ZV9iaW9zX3JlZ2lvbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmMtOTYtXFx0LyogUmVzZXJ2ZSBhbGwgbWVtb3J5IGJldHdlZW4gYmlvc19zdGFydCBhbmQgdGhlIDFNQiBtYXJrOiAqL1xcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmM6OTc6XFx0bWVtYmxvY2tfcmVzZXJ2ZShiaW9zX3N0YXJ0LCAweDEwMDAwMCAtIGJpb3Nfc3RhcnQpO1xcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmMtOTgtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYz01NTI9c3RhdGljIHZvaWQgX19pbml0IHNtcF9yZXNlcnZlX21lbW9yeShzdHJ1Y3QgbXBmX2ludGVsICptcGYpXFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01NTMte1xcbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmM6NTU0OlxcdG1lbWJsb2NrX3Jlc2VydmUobXBmLVxcdTAwM2VwaHlzcHRyLCBnZXRfbXBjX3NpemUobXBmLVxcdTAwM2VwaHlzcHRyKSk7XFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01NTUtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYz01NTc9c3RhdGljIGludCBfX2luaXQgc21wX3NjYW5fY29uZmlnKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jLTU4Mi1cXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jOjU4MzpcXHRcXHRcXHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemVvZigqbXBmKSk7XFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01ODQtXFx0XFx0XFx0aWYgKG1wZi1cXHUwMDNlcGh5c3B0cilcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTI4Mz1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9icmsodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTI4NS1cXHRpZiAoX2Jya19lbmQgXFx1MDAzZSBfYnJrX3N0YXJ0KVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjI4NjpcXHRcXHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oX19wYV9zeW1ib2woX2Jya19zdGFydCksXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtMjg3LVxcdFxcdFxcdFxcdCAgICAgIF9icmtfZW5kIC0gX2Jya19zdGFydCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz0zNDk9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfaW5pdHJkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy0zNTktXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6MzYwOlxcdG1lbWJsb2NrX3Jlc2VydmVfa2VybihyYW1kaXNrX2ltYWdlLCByYW1kaXNrX2VuZCAtIHJhbWRpc2tfaW1hZ2UpO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTM2MS19XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz00MDE9c3RhdGljIHZvaWQgX19pbml0IGFkZF9lYXJseV9pbWFfYnVmZmVyKHU2NCBwaHlzX2FkZHIpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy00MTItXFx0aWYgKGRhdGEtXFx1MDAzZXNpemUpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0MTM6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKGRhdGEtXFx1MDAzZWFkZHIsIGRhdGEtXFx1MDAzZXNpemUpO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQxNC1cXHRcXHRpbWFfa2V4ZWNfYnVmZmVyX3BoeXMgPSBkYXRhLVxcdTAwM2VhZGRyO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NTY5PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZV9zZXR1cF9kYXRhKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy01ODYtXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6NTg3OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmVfa2VybihwYV9kYXRhLCBzaXplb2YoKmRhdGEpICsgZGF0YS1cXHUwMDNlbGVuKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy01ODgtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy02MDAtXFx0XFx0XFx0aWYgKGluZGlyZWN0LVxcdTAwM2V0eXBlICE9IFNFVFVQX0lORElSRUNUKVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjYwMTpcXHRcXHRcXHRcXHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oaW5kaXJlY3QtXFx1MDAzZWFkZHIsIGluZGlyZWN0LVxcdTAwM2VsZW4pO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTYwMi1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz03MTk9c3RhdGljIHZvaWQgX19pbml0IHRyaW1fc25iX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNzQ2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9wYWdlcyk7IGkrKykge1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjc0NzpcXHRcXHRpZiAobWVtYmxvY2tfcmVzZXJ2ZShiYWRfcGFnZXNbaV0sIFBBR0VfU0laRSkpXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNzQ4LVxcdFxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkcgXFxcImZhaWxlZCB0byByZXNlcnZlIDB4JTA4bHhcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz03OTc9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtb3J5KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy04MDItXFx0ICogX19lbmRfb2Zfa2VybmVsX3Jlc2VydmUgc3ltYm9sIG11c3QgYmUgZXhwbGljaXRseSByZXNlcnZlZCB3aXRoIGFcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo4MDM6XFx0ICogc2VwYXJhdGUgbWVtYmxvY2tfcmVzZXJ2ZSgpIG9yIHRoZXkgd2lsbCBiZSBkaXNjYXJkZWQuXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtODA0LVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjgwNTpcXHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oX19wYV9zeW1ib2woX3RleHQpLFxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwNi1cXHRcXHRcXHQgICAgICAodW5zaWduZWQgbG9uZylfX2VuZF9vZl9rZXJuZWxfcmVzZXJ2ZSAtICh1bnNpZ25lZCBsb25nKV90ZXh0KTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgxOC1cXHQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo4MTk6XFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl82NEspO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgyMC1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TPTEzMD1TRUNUSU9OU1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMtMzc1LVxcdCAqIGF1dG9tYXRpY2FsbHkgcmVzZXJ2ZWQgaW4gc2V0dXBfYXJjaCgpLiBBbnl0aGluZyBhZnRlciBoZXJlIG11c3QgYmVcXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUzozNzY6XFx0ICogZXhwbGljaXRseSByZXNlcnZlZCB1c2luZyBtZW1ibG9ja19yZXNlcnZlKCkgb3IgaXQgd2lsbCBiZSBkaXNjYXJkZWRcXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUy0zNzctXFx0ICogYW5kIHRyZWF0ZWQgYXMgYXZhaWxhYmxlIG1lbW9yeS5cXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYz0xOTI9aW50IF9faW5pdCBlZmlfbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uodm9pZClcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYy0yMjYtXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jOjIyNzpcXHRtZW1ibG9ja19yZXNlcnZlKHBtYXAsIGVmaS5tZW1tYXAubnJfbWFwICogZWZpLm1lbW1hcC5kZXNjX3NpemUpO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYy0yMjgtXFx0c2V0X2JpdChFRklfUFJFU0VSVkVfQlNfUkVHSU9OUywgXFx1MDAyNmVmaS5mbGFncyk7XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmM9MzI0PXZvaWQgX19pbml0IGVmaV9yZXNlcnZlX2Jvb3Rfc2VydmljZXModm9pZClcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNDItXFx0XFx0LypcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmM6MzQzOlxcdFxcdCAqIEJlY2F1c2UgdGhlIGZvbGxvd2luZyBtZW1ibG9ja19yZXNlcnZlKCkgaXMgcGFpcmVkXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jLTM0NC1cXHRcXHQgKiB3aXRoIGZyZWVfcmVzZXJ2ZWRfYXJlYSgpIGZvciB0aGlzIHJlZ2lvbiBpblxcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jLTM1Ni1cXHRcXHRpZiAoIWFscmVhZHlfcmVzZXJ2ZWQpIHtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmM6MzU3OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIHNpemUpO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNTgtXFxuLS1cXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmM9NDc9dm9pZCBfX2luaXQgcmVzZXJ2ZV9yZWFsX21vZGUodm9pZClcXG4tLVxcbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy02Ni1cXHQgKi9cXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmM6Njc6XFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl8xTSk7XFxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jLTY4LVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTYxPXN0YXRpYyB2b2lkIF9faW5pdCBfX3NucF9maXh1cF9lODIwX3RhYmxlcyh1NjQgcGEpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xODctXFx0XFx0aWYgKCFtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQocGEsIFBNRF9TSVpFKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxODg6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShwYSwgUE1EX1NJWkUpO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE4OS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmM9NDE1PXZvaWQgX19pbml0IHhlbl9hZGRfZXh0cmFfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5fcGZucylcXG4tLVxcbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00MzktXFxuYXJjaC94ODYveGVuL2VubGlnaHRlbi5jOjQ0MDpcXHRtZW1ibG9ja19yZXNlcnZlKFBGTl9QSFlTKHN0YXJ0X3BmbiksIFBGTl9QSFlTKG5fcGZucykpO1xcbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00NDEtfVxcbi0tXFxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYz01MD1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9zaGFyZWRfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYy02OS1cXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jOjcwOlxcdG1lbWJsb2NrX3Jlc2VydmUocGEsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYy03MS1cXHRIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gZWFybHlfbWVtcmVtYXAocGEsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM9MTc2OD12b2lkIF9faW5pdCB4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIG1heF9wZm4pXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMTg5MS1cXHR4ZW5fcHRfc2l6ZSA9IChwdF9lbmQgLSBwdF9iYXNlKSAqIFBBR0VfU0laRTtcXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MTg5MjpcXHRtZW1ibG9ja19yZXNlcnZlKHhlbl9wdF9iYXNlLCB4ZW5fcHRfc2l6ZSk7XFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTE4OTMtXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM9MjA3Nj12b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV9zcGVjaWFsX3BhZ2VzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMjA3OS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MDpcXHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoeGVuX3N0YXJ0X2luZm8pLCBQQUdFX1NJWkUpO1xcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDgxLVxcdGlmICh4ZW5fc3RhcnRfaW5mby1cXHUwMDNlc3RvcmVfbWZuKSB7XFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTIwODItXFx0XFx0cGFkZHIgPSBQRk5fUEhZUyhtZm5fdG9fcGZuKHhlbl9zdGFydF9pbmZvLVxcdTAwM2VzdG9yZV9tZm4pKTtcXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MzpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKHBhZGRyLCBQQUdFX1NJWkUpO1xcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg0LVxcdH1cXG4tLVxcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg2LVxcdFxcdHBhZGRyID0gUEZOX1BIWVMobWZuX3RvX3Bmbih4ZW5fc3RhcnRfaW5mby1cXHUwMDNlY29uc29sZS5kb21VLm1mbikpO1xcbmFyY2gveDg2L3hlbi9tbXVfcHYuYzoyMDg3OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUocGFkZHIsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTIwODgtXFx0fVxcbi0tXFxuYXJjaC94ODYveGVuL3NldHVwLmM9ODM9c3RhdGljIHZvaWQgX19pbml0IHhlbl9kZWxfZXh0cmFfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxuYXJjaC94ODYveGVuL3NldHVwLmMtMTA5LVxcdFxcdFxcdHhlbl9leHRyYV9tZW1baV0ubl9wZm5zID0gc3RhcnRfcGZuIC0gc3RhcnRfcjtcXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYzoxMTA6XFx0XFx0XFx0LyogQ2FsbGluZyBtZW1ibG9ja19yZXNlcnZlKCkgYWdhaW4gaXMgb2theS4gKi9cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy0xMTEtXFx0XFx0XFx0eGVuX2FkZF9leHRyYV9tZW0oc3RhcnRfcGZuICsgbl9wZm5zLCBzdGFydF9yICsgc2l6ZV9yIC1cXG4tLVxcbmFyY2gveDg2L3hlbi9zZXR1cC5jPTYwMT1waHlzX2FkZHJfdCBfX2luaXQgeGVuX2ZpbmRfZnJlZV9hcmVhKHBoeXNfYWRkcl90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy02MTgtXFx0XFx0aWYgKGFkZHIgXFx1MDAzZT0gc3RhcnQgKyBzaXplKSB7XFxuYXJjaC94ODYveGVuL3NldHVwLmM6NjE5OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIHNpemUpO1xcbmFyY2gveDg2L3hlbi9zZXR1cC5jLTYyMC1cXHRcXHRcXHRyZXR1cm4gc3RhcnQ7XFxuLS1cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYz03NzA9c3RhdGljIHZvaWQgX19pbml0IHhlbl9yZXNlcnZlX3hlbl9tZm5saXN0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy03ODItXFxuYXJjaC94ODYveGVuL3NldHVwLmM6NzgzOlxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIHNpemUpO1xcbmFyY2gveDg2L3hlbi9zZXR1cC5jLTc4NC1cXHRpZiAoIXhlbl9pc19lODIwX3Jlc2VydmVkKHN0YXJ0LCBzaXplKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MzQuMDI0OTM3NDQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzYyMDQxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIFVzYWdlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AuIE15IGZpcnN0IHRob3VnaHQgaXMsIHdoaWNoIGFyY2hpdGVjdHVyZXMgYXJlIGV2ZW4gYm90aGVyaW5nIHRvIGRlZmluZSBgQVJDSF9LRUVQX01FTUJMT0NLYD8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIFRvIGZpZ3VyZSB0aGlzIG91dCwgdGhlIG9idmlvdXMgbW92ZSBpcyB0byB1c2UgYGdyZXBgLiBJJ2xsIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYEFSQ0hfS0VFUF9NRU1CTE9DS2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIHRoZSBhcmNoaXRlY3R1cmVzIEkgbmVlZCB0byBsb29rIGF0IG1vcmUgY2xvc2VseS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB3aHkgdGhvc2UgcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIG5lZWQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgd2hhdCBpdCBzaWduaWZpZXMgaW4gdGhlaXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MzozNi4wNjExNDY2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMjY4Nzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0tFRVBfTUVNQkxPQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0yPWNvbmZpZyBBUk1cXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMzUtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL2FybS9LY29uZmlnOjM2OlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL2FybS9LY29uZmlnLTM3LVxcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctNjMtXFx0c2VsZWN0IEFSQ0hfSEFWRV9UUkFDRV9NTUlPX0FDQ0VTU1xcbmFyY2gvYXJtNjQvS2NvbmZpZzo2NDpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9hcm02NC9LY29uZmlnLTY1LVxcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTgtXFx0c2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaWYgIVBSRUVNUFRJT05cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjU5OlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTYwLVxcdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9Mj1jb25maWcgTUlQU1xcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMjEtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL21pcHMvS2NvbmZpZzoyMjpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9taXBzL0tjb25maWctMjMtXFx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjMtXFx0c2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTY0OlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjUtXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFx0aWYgUFBDX1JBRElYX01NVVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTYwLVxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbmFyY2gvcmlzY3YvS2NvbmZpZzo2MTpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLIGlmIEFDUEkgfHwgS0VYRUNcXG5hcmNoL3Jpc2N2L0tjb25maWctNjItXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFx0aWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE4NjU9Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzAtXFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuYXJjaC94ODYvS2NvbmZpZzoxODcxOlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzItXFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTEwNzM9c3RhdGljIGludCBlZmlfbWVtX3Jlc2VydmVfaW9tZW0ocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMDk1LVxcdCAqL1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jOjEwOTY6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykgXFx1MDAyNlxcdTAwMjYgIXJldClcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMDk3LVxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoYWRkciwgc2l6ZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTExNS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTE2OiNpZm5kZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTctI2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU2MD1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy01ODYtXFxua2VybmVsL2tleGVjX2ZpbGUuYzo1ODc6I2lmZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU4OC1zdGF0aWMgaW50IGtleGVjX3dhbGtfbWVtYmxvY2soc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NzE2PWludCBrZXhlY19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZilcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzM4LVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NzM5OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0MC1cXHRcXHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbi0tXFxubW0vS2NvbmZpZz00ODI9Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXFxuLS1cXG5tbS9LY29uZmlnLTQ4Ny0jIEFsc28sIG1lbWJsb2NrcyBhcmUgdXBkYXRlZCB3aXRoIG1lbW9yeSBob3QodW4pcGx1Zy5cXG5tbS9LY29uZmlnOjQ4ODpjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vS2NvbmZpZy00ODktXFx0Ym9vbFxcbi0tXFxubW0vbWVtYmxvY2suYy0xMDAtICpcXG5tbS9tZW1ibG9jay5jOjEwMTogKiBVbmxlc3MgYW4gYXJjaGl0ZWN0dXJlIGVuYWJsZXMgJUNPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0ssIHRoZVxcbm1tL21lbWJsb2NrLmMtMTAyLSAqIG1lbWJsb2NrIGRhdGEgc3RydWN0dXJlcyAoZXhjZXB0IFxcXCJwaHlzbWVtXFxcIikgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlXFxuLS1cXG5tbS9tZW1ibG9jay5jPTM2OT1zdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyByKVxcbi0tXFxubW0vbWVtYmxvY2suYy0zODUtXFxubW0vbWVtYmxvY2suYzozODY6I2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vbWVtYmxvY2suYy0zODctLyoqXFxuLS1cXG5tbS9tZW1ibG9jay5jPTk2Nj11bnNpZ25lZCBsb25nIGZyZWVfcmVzZXJ2ZWRfYXJlYSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgcG9pc29uLCBjb25zdCBjaGFyICpzKVxcbi0tXFxubW0vbWVtYmxvY2suYy05ODQtXFxubW0vbWVtYmxvY2suYzo5ODU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpIHtcXG5tbS9tZW1ibG9jay5jLTk4Ni1cXHRcXHRpZiAoc3RhcnRfcGEgXFx1MDAzYyBlbmRfcGEpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwMjI9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzX2ZyZWUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTAzMS1cXG5tbS9tZW1ibG9jay5jOjEwMzI6XFx0aWYgKCFzbGFiX2lzX2F2YWlsYWJsZSgpIHx8IElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtYmxvY2suYy0xMDMzLVxcdFxcdHJldCA9IG1lbWJsb2NrX3JlbW92ZV9yYW5nZShcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0yOTExPV9fc2V0dXAoXFxcInJlc2VydmVfbWVtPVxcXCIsIHJlc2VydmVfbWVtKTtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjkxMy0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vbWVtYmxvY2suYzoyOTE0OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vbWVtYmxvY2suYy0yOTE1LXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4tLVxcbm1tL21lbWJsb2NrLmM9Mjk3NT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHN0cnVjdCBkZW50cnkgKnJvb3QpIHsgfVxcbm1tL21lbWJsb2NrLmMtMjk3Ni1cXG5tbS9tZW1ibG9jay5jOjI5Nzc6I2VuZGlmIC8qIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0sgKi9cXG5tbS9tZW1ibG9jay5jLTI5NzgtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI5OTk9c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTMwMDItXFxubW0vbWVtYmxvY2suYzozMDAzOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSBcXHUwMDI2XFx1MDAyNiAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxcbm1tL21lbWJsb2NrLmMtMzAwNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUzMD1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTYwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTU2MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU2Mi1cXHRcXHRpZiAocmVzLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjMxLWVycm9yX21lbWJsb2NrX3JlbW92ZTpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjMzLVxcdFxcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIyOTM9c3RhdGljIGludCB0cnlfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzMzLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzUtXFx0XFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MzguNDYzODQyODk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTAzMzYwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgdGhlIG1lbW9yeSBob3RwbHVnIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoYXQgYG1lbWJsb2NrX2FkZF9ub2RlYCBhbmQgYG1lbWJsb2NrX3JlbW92ZWAgYXJlIGtleSBmdW5jdGlvbnMgYmVpbmcgdXRpbGl6ZWQsIGFuZCB0aGVpciBvcGVyYXRpb24gc2VlbXMgY29udGluZ2VudCBvbiBgSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNvbmRpdGlvbmFsLCBhcyBpdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSBzeXN0ZW0gbWFpbnRhaW5zIGEgcGVyc2lzdGVudCBgbWVtYmxvY2tgIHJlcHJlc2VudGF0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBoYXZlIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBlbXBsb3llZCBpbiBob3RwbHVnIHNjZW5hcmlvcy4gTXkgZm9jdXMgd2lsbCBiZSBhcm91bmQgbGluZSAxNTYwIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AsIGFzIHRoYXQncyB3aGVyZSBJIGFzc3VtZSB0aGUgbW9zdCBwZXJ0aW5lbnQgbG9naWMgd2lsbCByZXNpZGUgaW4gdGVybXMgb2YgYWRkaW5nIGFuZCByZW1vdmluZyBtZW1vcnkgYmxvY2tzIGR1cmluZyBob3RwbHVnIG9wZXJhdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NDAuNTU0MTgyMDIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODUyNDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTE0MTg9c3RhdGljIHZvaWQgcmVtb3ZlX21lbW9yeV9ibG9ja3NfYW5kX2FsdG1hcHModTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0MTkte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQyMDpcXHR1bnNpZ25lZCBsb25nIG1lbWJsb2NrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyMS1cXHR1NjQgY3VyX3N0YXJ0O1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDI3LVxcdGZvciAoY3VyX3N0YXJ0ID0gc3RhcnQ7IGN1cl9zdGFydCBcXHUwMDNjIHN0YXJ0ICsgc2l6ZTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0Mjg6XFx0ICAgICBjdXJfc3RhcnQgKz0gbWVtYmxvY2tfc2l6ZSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyOS1cXHRcXHRzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IE5VTEw7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0MzktXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDQwOlxcdFxcdHJlbW92ZV9tZW1vcnlfYmxvY2tfZGV2aWNlcyhjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0MTpcXHRcXHRhcmNoX3JlbW92ZV9tZW1vcnkoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBhbHRtYXAsIE5VTEwpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ0Mi1cXHRcXHRhbHRtYXBfZnJlZShhbHRtYXApO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NDgte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0OTpcXHR1bnNpZ25lZCBsb25nIG1lbWJsb2NrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ1MC1cXHR1NjQgY3VyX3N0YXJ0O1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDUzLVxcdGZvciAoY3VyX3N0YXJ0ID0gc3RhcnQ7IGN1cl9zdGFydCBcXHUwMDNjIHN0YXJ0ICsgc2l6ZTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NTQ6XFx0ICAgICBjdXJfc3RhcnQgKz0gbWVtYmxvY2tfc2l6ZSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ1NS1cXHRcXHRzdHJ1Y3QgbWhwX3BhcmFtcyBwYXJhbXMgPSB7IC5wZ3Byb3QgPVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDU4LVxcdFxcdFxcdC5iYXNlX3BmbiA9IFBIWVNfUEZOKGN1cl9zdGFydCksXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDU5OlxcdFxcdFxcdC5lbmRfcGZuID0gUEhZU19QRk4oY3VyX3N0YXJ0ICsgbWVtYmxvY2tfc2l6ZSAtIDEpLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ2MC1cXHRcXHR9O1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDcwLVxcdFxcdC8qIGNhbGwgYXJjaCdzIG1lbW9yeSBob3RhZGQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NzE6XFx0XFx0cmV0ID0gYXJjaF9hZGRfbWVtb3J5KG5pZCwgY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBcXHUwMDI2cGFyYW1zKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ3Ny1cXHRcXHQvKiBjcmVhdGUgbWVtb3J5IGJsb2NrIGRldmljZXMgYWZ0ZXIgbWVtb3J5IHdhcyBhZGRlZCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ3ODpcXHRcXHRyZXQgPSBjcmVhdGVfbWVtb3J5X2Jsb2NrX2RldmljZXMoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBuaWQsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW1zLmFsdG1hcCwgZ3JvdXApO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ4MC1cXHRcXHRpZiAocmV0KSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDgxOlxcdFxcdFxcdGFyY2hfcmVtb3ZlX21lbW9yeShjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIHBhcmFtcy5hbHRtYXAsIE5VTEwpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ4Mi1cXHRcXHRcXHRhbHRtYXBfZnJlZShwYXJhbXMuYWx0bWFwKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ5My1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0OTQ6c3RhdGljIGludCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0OTUte1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTA3PXN0YXRpYyBib29sIG5vZGVfaXNfbWVtb3J5bGVzcyhpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTIwLVxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUyMTpcXHRyZXR1cm4gIWZvcl9lYWNoX21lbW9yeV9ibG9jayhcXHUwMDI2bmlkLCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYik7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTIyLX1cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUzMD1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTMzLVxcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTM0OlxcdGVudW0gbWVtYmxvY2tfZmxhZ3MgbWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19OT05FO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzNS1cXHRzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCA9IE5VTEw7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NjItXFx0XFx0aWYgKHJlcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRClcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjM6XFx0XFx0XFx0bWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19EUklWRVJfTUFOQUdFRDtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjQ6XFx0XFx0cmV0ID0gbWVtYmxvY2tfYWRkX25vZGUoc3RhcnQsIHNpemUsIG5pZCwgbWVtYmxvY2tfZmxhZ3MpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU2NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTcwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTU3MTpcXHRcXHRnb3RvIGVycm9yX21lbWJsb2NrX3JlbW92ZTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NzItXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTc2LVxcdFxcdFxcdG5vZGVfc2V0X29mZmxpbmUobmlkKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1Nzc6XFx0XFx0XFx0Z290byBlcnJvcl9tZW1ibG9ja19yZW1vdmU7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTc4LVxcdFxcdH1cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYzMC1cXHR9XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMxOmVycm9yX21lbWJsb2NrX3JlbW92ZTpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzItXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMzOlxcdFxcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjM0LWVycm9yX21lbV9ob3RwbHVnX2VuZDpcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTk4NT1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjIwMi1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIyMDM6c3RhdGljIGludCBjaGVja19tZW1ibG9ja19vZmZsaW5lZF9jYihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIyMDQte1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMjkzPXN0YXRpYyBpbnQgdHJ5X3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMwNy1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMDg6XFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFxcdTAwMjZuaWQsIGNoZWNrX21lbWJsb2NrX29mZmxpbmVkX2NiKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMDktXFx0aWYgKHJjKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNTpcXHRcXHRtZW1ibG9ja19yZW1vdmUoc3RhcnQsIHNpemUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMzNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NDAuNjIyNzExMzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4NzM0NjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBNZW1vcnkgQmxvY2sgUmV0ZW50aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIGVuYWJsZWQsIHNwZWNpZmljYWxseSBvbiBhbWQ2NC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHBlcmhhcHMgYENPTkZJR19JTlRFTF9URFhfSE9TVGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgd2FzIHJlc3BvbnNpYmxlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJIGNhbid0IGp1c3QganVtcCB0byBhIGNvbmNsdXNpb24uXG5cblJpZ2h0LCBzbywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBzZWxlY3Qgb3IgcmVsYXRlIHRvIGtlZXBpbmcgdGhlIG1lbW9yeSBibG9jayBhcm91bmQ/IEkgbmVlZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3LiBJIGhhZCBhbHJlYWR5IHVzZWQgYGdyZXBgIGVhcmxpZXIgZm9yIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIGFjcm9zcyB0aGUgS2NvbmZpZyBmaWxlcywgYnV0IGxldCdzIHJlY2FwIHRoZSBmaW5kaW5ncyB0byBiZSBjZXJ0YWluLlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDogYEFSQ0hfS0VFUF9NRU1CTE9DS2AgaXMgc2VsZWN0ZWQgYnkgQVJNLCBBUk02NCwgTE9PTkdBUkNILCBNSVBTLCBQUEMsIGFuZCBSSVNDViwgYnV0IFJJU0NWIGhhcyBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBBQ1BJYCBvciBgS0VYRUNgLiBPbiB4ODYsIGBJTlRFTF9URFhfSE9TVGAgc2VsZWN0cyBpdC4gQWxyaWdodC5cblxuQnV0IHdoYXQgYWJvdXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucz8gTGlrZSBpZiBgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hgIGlzIGVuYWJsZWQ/IEkgaGF2ZSB0byBnbyB0aHJvdWdoIGFsbCBvZiB0aGUgcG9zc2liaWxpdGllcy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJ20gbWlzc2luZz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBtbS9LY29uZmlnYCBhcm91bmQgbGluZSA0ODIgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhpcyB0eXBlIG9mIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjQzLjYxMDA1OTU2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFx0Ym9vbFxcbiA0NzY6XFx0XFxuIDQ3NzpcXHRjb25maWcgSEFWRV9HVVBfRkFTVFxcbiA0Nzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNDc5OlxcdFxcdGJvb2xcXG4gNDgwOlxcdFxcbiA0ODE6XFx0IyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3ZlclxcbiA0ODI6XFx0Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXFxuIDQ4MzpcXHRcXHRib29sXFxuIDQ4NDpcXHRcXG4gNDg1OlxcdCMgRG9uJ3QgZGlzY2FyZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZWQgdG8gdHJhY2sgXFxcIm1lbW9yeVxcXCIgYW5kIFxcXCJyZXNlcnZlZFxcXCIgbWVtYmxvY2tzXFxuIDQ4NjpcXHQjIGFmdGVyIGVhcmx5IGJvb3QsIHNvIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHRlc3QgZm9yIHZhbGlkaXR5IG9mIG1lbW9yeS5cXG4gNDg3OlxcdCMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxcbiA0ODg6XFx0Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbiA0ODk6XFx0XFx0Ym9vbFxcbiA0OTA6XFx0XFxuIDQ5MTpcXHQjIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0LlxcbiA0OTI6XFx0Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXFxuIDQ5MzpcXHRcXHRib29sXFxuIDQ5NDpcXHRcXG4gNDk1OlxcdGNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXFxuIDQ5NjpcXHRcXHRib29sXFxuIDQ5NzpcXHRcXG4gNDk4OlxcdCMgSU9SRVNPVVJDRV9TWVNURU1fUkFNIHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCByZXNvdXJjZSB0cmVlIHRoYXQgYXJlIG1hcmtlZFxcbiA0OTk6XFx0IyBJT1JFU09VUkNFX0VYQ0xVU0lWRSBjYW5ub3QgYmUgbWFwcGVkIHRvIHVzZXIgc3BhY2UsIGZvciBleGFtcGxlLCB2aWFcXG4gNTAwOlxcdCMgL2Rldi9tZW0uXFxuIDUwMTpcXHRjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gNTAyOlxcdFxcdGRlZl9ib29sIHlcXG4gNTAzOlxcdFxcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXFxuIDUwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NDMuNjEwMTYxNDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTQ3MDM2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgSG90cGx1ZyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIENhbiBzeXprYWxsZXIgb3IgYW55dGhpbmcgcnVubmluZyBpbiB1c2Vyc3BhY2UgYWN0dWFsbHkgdHJpZ2dlciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIG9yIG90aGVyIHJlbGF0ZWQga2VybmVsIHBhdGhzIGF0IHJ1bnRpbWU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBBbmQsIGNhbiBzeXprYWxsZXIgZXZlbiBiZSB1c2VkIHRvIGZ1enogdGhlIGJvb3QgY29kZT8gTm8sIEknbSBwcmV0dHkgc3VyZSBpdCdzIGRlc2lnbmVkIHRvIGZvY3VzIG9uIGxpdmUga2VybmVsIHN0YXRlcywgaGl0dGluZyBpdCB0aHJvdWdoIHN5c2NhbGxzIGFuZCBwZXJoYXBzIHZpcnR1YWwgZGV2aWNlcyBvciBzeXNmcy4gU28sIGJhY2sgdG8gdGhlIGluaXRpYWwgcXVlc3Rpb246IGlzIHRoZXJlIGEgd2F5IGZvciB1c2Vyc3BhY2UgdG8gbWFuaXB1bGF0ZSBtZW1vcnkgaG90cGx1ZywgYWRkaW5nIG9yIHJlbW92aW5nIG1lbW9yeSB0aHJvdWdoIHN5c2ZzLCBkYXgsIG9yIGFueXRoaW5nIGVsc2U/XG5cblJpZ2h0LCBsZXQncyBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTG9va2luZyBhdCBgbW0vbWVtb3J5X2hvdHBsdWcuY2AsIEkgc2VlIGBfX2FkZF9tZW1vcnlfcmVzb3VyY2VgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbi4gQWhhISBJIHNlZSBpdCdzIGNhbGxlZCBieTogYGFkZF9tZW1vcnlgLCBgYWRkX21lbW9yeV9yZXNvdXJjZWAsIGFuZCBgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIE5vdyB0aGUgaW52ZXN0aWdhdGlvbiBiZWdpbnMuLi4gd2hlcmUgYXJlICp0aG9zZSogZnVuY3Rpb25zIGNhbGxlZCBmcm9tPyBUaGF0J3MgdGhlIHRyYWlsIEkgbmVlZCB0byBmb2xsb3cuIFRpbWUgdG8gc3RhcnQgdHJhY2luZyB0aG9zZSBjYWxscyBhbmQgc2VlIGlmIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0IGNhbiBiZSBpZGVudGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjIwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjQ2LjQwNDg2NzM2N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODIxNjUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfbWVtb3J5XFxcXCh8YWRkX21lbW9yeV9yZXNvdXJjZVxcXFwofGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdD0xNzM9bWVtb3J5IGZhc3RlciB0aGFuIGV4cGVjdGVkOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTc2LSAgbWVtX2hvdHBsdWdfbG9ja1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjE3NzotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSB3aWxsIGZpcnN0IHRha2UgdGhlIG1lbV9ob3RwbHVnX2xvY2ssIGZvbGxvd2VkIGJ5XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTc4LSAgdGhlIGRldmljZV9sb2NrKCkgKHdoaWxlIGNyZWF0aW5nIHRoZSBkZXZpY2VzLCBkdXJpbmcgYnVzX2FkZF9kZXZpY2UoKSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3Q9ODc9Tk9USUZZX1NUT1DlgZzmraLlr7npgJrnn6XpmJ/liJfnmoTov5vkuIDmraXlpITnkIbjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdC0xMDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjEwNjotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKeWwhummluWFiOS9v+eUqG1lbV9ob3RwbHVnX2xvY2vvvIznhLblkI7mmK9kZXZpY2VfbG9jaygp77yI5Zyo5YibXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0LTEwNy0gIOW7uuiuvuWkh+aXtu+8jOWcqGJ1c19hZGRfZGV2aWNlKCnmnJ/pl7TvvInjgIJcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmg9MjA9c3RhdGljIGNvbnN0IHN0cnVjdCB0YWd0YWJsZSBfX3RhZ3RhYmxlXyMjZm4gX190YWcgPSB7IHRhZywgZm4gfVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgtMjEtXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaDoyMjpleHRlcm4gaW50IGFybV9hZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgtMjMtZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgZWFybHlfcHJpbnQoY29uc3QgY2hhciAqc3RyLCAuLi4pO1xcbi0tXFxuYXJjaC9hcm0va2VybmVsL2F0YWdzX3BhcnNlLmM9NjU9c3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX21lbTMyKGNvbnN0IHN0cnVjdCB0YWcgKnRhZylcXG5hcmNoL2FybS9rZXJuZWwvYXRhZ3NfcGFyc2UuYy02Ni17XFxuYXJjaC9hcm0va2VybmVsL2F0YWdzX3BhcnNlLmM6Njc6XFx0cmV0dXJuIGFybV9hZGRfbWVtb3J5KHRhZy1cXHUwMDNldS5tZW0uc3RhcnQsIHRhZy1cXHUwMDNldS5tZW0uc2l6ZSk7XFxuYXJjaC9hcm0va2VybmVsL2F0YWdzX3BhcnNlLmMtNjgtfVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9NzQ2PXZvaWQgX19pbml0IGR1bXBfbWFjaGluZV90YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtNzU5LVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjc2MDppbnQgX19pbml0IGFybV9hZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtNzYxLXtcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jPTgyNj1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9tZW0oY2hhciAqcClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg0OC1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4NDk6XFx0YXJtX2FkZF9tZW1vcnkoc3RhcnQsIHNpemUpO1xcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg1MC1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MTk3NT1zdHJ1Y3QgcmFuZ2UgYXJjaF9nZXRfbWFwcGFibGVfcmFuZ2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjAwNi1cXG5hcmNoL2FybTY0L21tL21tdS5jOjIwMDc6aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjAwOC1cXHRcXHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYz02ND12b2lkIF9faW5pdCBmaXhyYW5nZV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ2RfdCAqcGdkX2Jhc2UpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTA2LSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM6MTA3OmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTA4LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYz0xMjk9aW50IF9fcmVmIGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0xNDQtXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jOjE0NTppbnQgX19yZWYgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTE0Ni1cXHRcXHRcXHQgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYz01NjQ9c3RhdGljIGludCBkbHBhcl9hZGRfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU4Ni1cXHQvKiBBZGQgdGhlIG1lbW9yeSAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jOjU4NzpcXHRyYyA9IF9fYWRkX21lbW9yeShuaWQsIGxtYi1cXHUwMDNlYmFzZV9hZGRyLCBibG9ja19zeiwgTUhQX01FTU1BUF9PTl9NRU1PUlkpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU4OC1cXHRpZiAocmMpIHtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jPTE3MTI9c3RydWN0IHJhbmdlIGFyY2hfZ2V0X21hcHBhYmxlX3JhbmdlKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNzIwLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE3MjE6aW50IF9fcmVmIGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE3MjIte1xcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYz0yNzE9ZGV2aWNlX2luaXRjYWxsKHMzOTBfY21hX21lbV9pbml0KTtcXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmMtMjc0LVxcbmFyY2gvczM5MC9tbS9pbml0LmM6Mjc1OmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI3Ni1cXHRcXHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjM9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05OTAtXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjk5MTppbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk5Mi1cXHRcXHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYz0xNjg9c3RhdGljIGludCBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlKHN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2UpXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjEyLVxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmM6MjEzOlxcdFxcdHJlc3VsdCA9IF9fYWRkX21lbW9yeShtZ2lkLCBpbmZvLVxcdTAwM2VzdGFydF9hZGRyLCBpbmZvLVxcdTAwM2VsZW5ndGgsXFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxNC1cXHRcXHRcXHRcXHQgICAgICBtaHBfZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxNi1cXHRcXHQvKlxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYzoyMTc6XFx0XFx0ICogSWYgdGhlIG1lbW9yeSBibG9jayBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBrZXJuZWwsIGFkZF9tZW1vcnkoKVxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYzoyMTg6XFx0XFx0ICogcmV0dXJucyAtRUVYSVNULiBJZiBhZGRfbWVtb3J5KCkgcmV0dXJucyB0aGUgb3RoZXIgZXJyb3IsIGl0XFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxOS1cXHRcXHQgKiBtZWFucyB0aGF0IHRoaXMgbWVtb3J5IGJsb2NrIGlzIG5vdCB1c2VkIGJ5IHRoZSBrZXJuZWwuXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjMyLVxcdFxcdC8qXFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIzMzpcXHRcXHQgKiBBZGQgbnVtX2VuYWJsZSBldmVuIGlmIGFkZF9tZW1vcnkoKSByZXR1cm5zIC1FRVhJU1QsIHNvIHRoZVxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYy0yMzQtXFx0XFx0ICogZGV2aWNlIGlzIGJvdW5kIHRvIHRoaXMgZHJpdmVyLlxcbi0tXFxuZHJpdmVycy9hY3BpL3NjYW4uYz0yODIwPXZvaWQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTI4NjAtXFx0LypcXG5kcml2ZXJzL2FjcGkvc2Nhbi5jOjI4NjE6XFx0ICogQWx0aG91Z2ggd2UgY2FsbCBfX2FkZF9tZW1vcnkoKSB0aGF0IGlzIGRvY3VtZW50ZWQgdG8gcmVxdWlyZSB0aGVcXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTI4NjItXFx0ICogZGV2aWNlX2hvdHBsdWdfbG9jaywgaXQgaXMgbm90IG5lY2Vzc2FyeSBoZXJlIGJlY2F1c2UgdGhpcyBpcyBhblxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU3Mj1zdGF0aWMgc3NpemVfdCBwcm9iZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTU5MC1cXHRuaWQgPSBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZChwaHlzX2FkZHIpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1OTE6XFx0cmV0ID0gX19hZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OTItXFx0XFx0XFx0ICAgTUlOX01FTU9SWV9CTE9DS19TSVpFICogc2VjdGlvbnNfcGVyX2Jsb2NrLFxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZz03Mz1jb25maWcgREVWX0RBWF9LTUVNXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTc2LVxcdGRlcGVuZHMgb24gREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWc6Nzc6XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyAjIGZvciBhZGRfbWVtb3J5KCkgYW5kIGZyaWVuZHNcXG5kcml2ZXJzL2RheC9LY29uZmlnLTc4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY6LyogTWVtb3J5IHJlc291cmNlIG5hbWUgdXNlZCBmb3IgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCgpLiAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNy1zdGF0aWMgY29uc3QgY2hhciAqa21lbV9uYW1lO1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTg3PXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xMjYtXFx0XFx0ICovXFxuZHJpdmVycy9kYXgva21lbS5jOjEyNzpcXHRcXHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVxcdTAwM2VtZ2lkLCByYW5nZS5zdGFydCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMTI4LVxcdFxcdFxcdFxcdHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0xNjM9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTctXFx0XFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcXG5kcml2ZXJzL2RheC9rbWVtLmM6MTk4OlxcdFxcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTktXFx0XFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjAwOlxcdFxcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBsYXRlci5cXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAxLVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0xODU9c3RhdGljIHZvaWQgcWNvbV90em1lbV9jbGVhbnVwX2FyZWEoc3RydWN0IHFjb21fdHptZW1fYXJlYSAqYXJlYSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMTk0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6MTk1OnN0YXRpYyBpbnQgcWNvbV90em1lbV9wb29sX2FkZF9tZW1vcnkoc3RydWN0IHFjb21fdHptZW1fcG9vbCAqcG9vbCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTE5Ni1cXHRcXHRcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0yNDU9cWNvbV90em1lbV9wb29sX25ldyhjb25zdCBzdHJ1Y3QgcWNvbV90em1lbV9wb29sX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0yODItXFx0aWYgKGNvbmZpZy1cXHUwMDNlaW5pdGlhbF9zaXplKSB7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzoyODM6XFx0XFx0cmV0ID0gcWNvbV90em1lbV9wb29sX2FkZF9tZW1vcnkocG9vbCwgY29uZmlnLVxcdTAwM2Vpbml0aWFsX3NpemUsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0yODQtXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0zNzU9c3RhdGljIGJvb2wgcWNvbV90em1lbV90cnlfZ3Jvd19wb29sKHN0cnVjdCBxY29tX3R6bWVtX3Bvb2wgKnBvb2wsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5Mi1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjM5MzpcXHRyZXR1cm4gIXFjb21fdHptZW1fcG9vbF9hZGRfbWVtb3J5KHBvb2wsIHJlcXVlc3RlZCwgZ2ZwKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5NC19XFxuLS1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYz03MDg9c3RhdGljIHZvaWQgaHZfbWVtX2hvdF9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtNzMwLVxcdFxcdG5pZCA9IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKFBGTl9QSFlTKHN0YXJ0X3BmbikpO1xcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jOjczMTpcXHRcXHRyZXQgPSBhZGRfbWVtb3J5KG5pZCwgUEZOX1BIWVMoKHN0YXJ0X3BmbikpLFxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTczMi1cXHRcXHRcXHRcXHQgSEFfQllURVNfSU5fQ0hVTkssIE1IUF9NRVJHRV9SRVNPVVJDRSk7XFxuLS1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYz0xNjkyPXN0YXRpYyBpbnQgaG90X2FkZF9lbmFibGVkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xNjk4LVxcdCAqIERNX01FTV9IT1RfQUREX1JFUVVFU1QgZG9lc24ndCBoYXZlIHRoZSBOVU1BIG5vZGUgaW5mb3JtYXRpb24gZm9yXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MTY5OTpcXHQgKiBhZGRfbWVtb3J5KCkuXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMTcwMC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTE5MzA9c3RhdGljIGludCBiYWxsb29uX3Byb2JlKHN0cnVjdCBodl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTE5NDEtXFx0ICogSG90LWFkZCBtdXN0IG9wZXJhdGUgaW4gY2h1bmtzIHRoYXQgYXJlIG9mIHNpemUgZXF1YWwgdG8gdGhlXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MTk0MjpcXHQgKiBtZW1vcnkgYmxvY2sgc2l6ZSBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBjb3JlIGFkZF9tZW1vcnkoKVxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTE5NDMtXFx0ICogaW50ZXJmYWNlIHJlcXVpcmVzLiBUaGUgSHlwZXItViBpbnRlcmZhY2UgcmVxdWlyZXMgdGhhdCB0aGUgbWVtb3J5XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jPTE4OT1zdGF0aWMgc3NpemVfdCBzY2xwX2NvbmZpZ19tZW1fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfbWVtLmMtMjIyLVxcdFxcdCAqIFNldCBlbnRpcmUgbWVtb3J5IGJsb2NrIENNTUEgc3RhdGUgdG8gbm9kYXQuIExhdGVyLCB3aGVuXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYzoyMjM6XFx0XFx0ICogcGFnZSB0YWJsZXMgcGFnZXMgYXJlIGFsbG9jYXRlZCB2aWEgX19hZGRfbWVtb3J5KCksIHRob3NlXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYy0yMjQtXFx0XFx0ICogcmVnaW9ucyBhcmUgbWFya2VkIF9fYXJjaF9zZXRfcGFnZV9kYXQoKS5cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfbWVtLmMtMjI2LVxcdFxcdF9fYXJjaF9zZXRfcGFnZV9ub2RhdCgodm9pZCAqKV9fdmEoYWRkciksIGJsb2NrX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYzoyMjc6XFx0XFx0cmMgPSBfX2FkZF9tZW1vcnkoMCwgYWRkciwgYmxvY2tfc2l6ZSxcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jLTIyOC1cXHRcXHRcXHRcXHQgIHNjbHBfbWVtLVxcdTAwM2VtZW1tYXBfb25fbWVtb3J5ID9cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz02Nz1lbnVtIHZpcnRpb19tZW1fc2JtX21iX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02OS1cXHRWSVJUSU9fTUVNX1NCTV9NQl9VTlVTRUQgPSAwLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo3MDpcXHQvKiAoUGFydGlhbGx5KSBwbHVnZ2VkLCBub3QgYWRkZWQgdG8gTGludXguIEVycm9yIG9uIGFkZF9tZW1vcnkoKS4gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNzEtXFx0VklSVElPX01FTV9TQk1fTUJfUExVR0dFRCxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz05MD1lbnVtIHZpcnRpb19tZW1fYmJtX2JiX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05Mi1cXHRWSVJUSU9fTUVNX0JCTV9CQl9VTlVTRUQgPSAwLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo5MzpcXHQvKiBQbHVnZ2VkLCBub3QgYWRkZWQgdG8gTGludXguIEVycm9yIG9uIGFkZF9tZW1vcnkoKS4gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtOTQtXFx0VklSVElPX01FTV9CQk1fQkJfUExVR0dFRCxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMDI9c3RydWN0IHZpcnRpb19tZW0ge1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE0Mi1cXHQgKiBDb3B5IG9mIFxcXCJTeXN0ZW0gUkFNICh2aXJ0aW9fbWVtKVxcXCIgdG8gYmUgdXNlZCBmb3JcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTQzOlxcdCAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoKS5cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTQ0LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTU4OD1zdGF0aWMgaW50IHZpcnRpb19tZW1fc2JtX3NiX3N0YXRlc19wcmVwYXJlX25leHRfbWIoc3RydWN0IHZpcnRpb19tZW0gKnZtKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTYxOS0gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjIwOnN0YXRpYyBib29sIHZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeShzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVpbnQ2NF90IHNpemUpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTYyMS17XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjM1LSAqL1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo2MzY6c3RhdGljIGludCB2aXJ0aW9fbWVtX2FkZF9tZW1vcnkoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1aW50NjRfdCBhZGRyLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MzctXFx0XFx0XFx0XFx0IHVpbnQ2NF90IHNpemUpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjU1LVxcdGF0b21pYzY0X2FkZChzaXplLCBcXHUwMDI2dm0tXFx1MDAzZW9mZmxpbmVfc2l6ZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY1NjpcXHRyYyA9IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQodm0tXFx1MDAzZW1naWQsIGFkZHIsIHNpemUsIHZtLVxcdTAwM2VyZXNvdXJjZV9uYW1lLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02NTctXFx0XFx0XFx0XFx0ICAgICAgIE1IUF9NRVJHRV9SRVNPVVJDRSB8IE1IUF9OSURfSVNfTUdJRCk7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjY5LS8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY3MDogKiBTZWUgdmlydGlvX21lbV9hZGRfbWVtb3J5KCk6IFRyeSBhZGRpbmcgYSBzaW5nbGUgTGludXggbWVtb3J5IGJsb2NrLlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02NzEtICovXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTY3Mj1zdGF0aWMgaW50IHZpcnRpb19tZW1fc2JtX2FkZF9tYihzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVuc2lnbmVkIGxvbmcgbWJfaWQpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjc2LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo2Nzc6XFx0cmV0dXJuIHZpcnRpb19tZW1fYWRkX21lbW9yeSh2bSwgYWRkciwgc2l6ZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY3OC19XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjgwLS8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY4MTogKiBTZWUgdmlydGlvX21lbV9hZGRfbWVtb3J5KCk6IFRyeSBhZGRpbmcgYSBiaWcgYmxvY2suXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY4Mi0gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9NjgzPXN0YXRpYyBpbnQgdmlydGlvX21lbV9iYm1fYWRkX2JiKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdW5zaWduZWQgbG9uZyBiYl9pZClcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02ODctXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY4ODpcXHRyZXR1cm4gdmlydGlvX21lbV9hZGRfbWVtb3J5KHZtLCBhZGRyLCBzaXplKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjg5LX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz05NzQ9c3RhdGljIHZvaWQgdmlydGlvX21lbV9iYm1fbm90aWZ5X2NhbmNlbF9vZmZsaW5lKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05ODUtLypcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6OTg2OiAqIFRoaXMgY2FsbGJhY2sgd2lsbCBlaXRoZXIgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBhZGRfbWVtb3J5KCkgb3JcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtOTg3LSAqIGFzeW5jaHJvbm91c2x5IChlLmcuLCB0cmlnZ2VyZWQgdmlhIHVzZXIgc3BhY2UpLiBXZSBoYXZlIHRvIGJlIGNhcmVmdWxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6OTg4OiAqIHdpdGggbG9ja2luZyB3aGVuIGNhbGxpbmcgYWRkX21lbW9yeSgpLlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05ODktICovXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTk5MD1zdGF0aWMgaW50IHZpcnRpb19tZW1fbWVtb3J5X25vdGlmaWVyX2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTA4Ny1cXHRcXHRpZiAoIWF0b21pY19yZWFkKFxcdTAwMjZ2bS1cXHUwMDNld3FfYWN0aXZlKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMDg4OlxcdFxcdCAgICB2aXJ0aW9fbWVtX2NvdWxkX2FkZF9tZW1vcnkodm0sIHZtLVxcdTAwM2VvZmZsaW5lX3RocmVzaG9sZCAvIDIpKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMDg5LVxcdFxcdFxcdHZpcnRpb19tZW1fcmV0cnkodm0pO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTE3NjA9c3RhdGljIGludCB2aXJ0aW9fbWVtX3NibV9wbHVnX3JlcXVlc3Qoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1aW50NjRfdCBkaWZmKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE3OTMtXFx0dmlydGlvX21lbV9zYm1fZm9yX2VhY2hfbWIodm0sIG1iX2lkLCBWSVJUSU9fTUVNX1NCTV9NQl9VTlVTRUQpIHtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTc5NDpcXHRcXHRpZiAoIXZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE3OTUtXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTgwNC1cXHR3aGlsZSAobmJfc2IpIHtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTgwNTpcXHRcXHRpZiAoIXZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE4MDYtXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTg3OD1zdGF0aWMgaW50IHZpcnRpb19tZW1fYmJtX3BsdWdfcmVxdWVzdChzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVpbnQ2NF90IGRpZmYpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTg4OC1cXHR2aXJ0aW9fbWVtX2JibV9mb3JfZWFjaF9iYih2bSwgYmJfaWQsIFZJUlRJT19NRU1fQkJNX0JCX1VOVVNFRCkge1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxODg5OlxcdFxcdGlmICghdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHZtLCB2bS1cXHUwMDNlYmJtLmJiX3NpemUpKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xODkwLVxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE5MDEtXFx0d2hpbGUgKG5iX2JiKSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE5MDI6XFx0XFx0aWYgKCF2aXJ0aW9fbWVtX2NvdWxkX2FkZF9tZW1vcnkodm0sIHZtLVxcdTAwM2ViYm0uYmJfc2l6ZSkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE5MDMtXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9Mjg3OT1zdGF0aWMgaW50IHZpcnRpb19tZW1fY3JlYXRlX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0yOTAxLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyOTAyOlxcdC8qIFRoZSBtZW1vcnkgaXMgbm90IGFjdHVhbGx5IGJ1c3kgLSBtYWtlIGFkZF9tZW1vcnkoKSB3b3JrLiAqL1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0yOTAzLVxcdHZtLVxcdTAwM2VwYXJlbnRfcmVzb3VyY2UtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JT1JFU09VUkNFX0JVU1k7XFxuLS1cXG5kcml2ZXJzL3hlbi9iYWxsb29uLmM9MjY0PXN0YXRpYyBlbnVtIGJwX3N0YXRlIHJlc2VydmVfYWRkaXRpb25hbF9tZW1vcnkodm9pZClcXG4tLVxcbmRyaXZlcnMveGVuL2JhbGxvb24uYy0yOTYtICAgICAgICAvKlxcbmRyaXZlcnMveGVuL2JhbGxvb24uYzoyOTc6ICAgICAgICAgKiBhZGRfbWVtb3J5KCkgd2lsbCBidWlsZCBwYWdlIHRhYmxlcyBmb3IgdGhlIG5ldyBtZW1vcnkgc29cXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMjk4LSAgICAgICAgICogdGhlIHAybSBtdXN0IGNvbnRhaW4gaW52YWxpZCBlbnRyaWVzIHNvIHRoZSBjb3JyZWN0XFxuLS1cXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMzE4LVxcdC8qXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jOjMxOTpcXHQgKiBhZGRfbWVtb3J5X3Jlc291cmNlKCkgd2lsbCBjYWxsIG9ubGluZV9wYWdlcygpIHdoaWNoIGluIGl0cyB0dXJuXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyMC1cXHQgKiB3aWxsIGNhbGwgeGVuX29ubGluZV9wYWdlKCkgY2FsbGJhY2sgY2F1c2luZyBkZWFkbG9jayBpZiB3ZSBkb24ndFxcbi0tXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyNC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmJhbGxvb25fbXV0ZXgpO1xcbmRyaXZlcnMveGVuL2JhbGxvb24uYzozMjU6XFx0LyogYWRkX21lbW9yeV9yZXNvdXJjZSgpIHJlcXVpcmVzIHRoZSBkZXZpY2VfaG90cGx1ZyBsb2NrICovXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyNi1cXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jOjMyNzpcXHRyYyA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXNvdXJjZSwgTUhQX01FUkdFX1JFU09VUkNFKTtcXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMzI4LVxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTMyPXN0cnVjdCBwYWdlICpwZm5fdG9fb25saW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4pO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zMy1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzQ6LyogRmxhZ3MgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kcyB0byBzcGVjaWZ5IG1lbW9yeSBob3RwbHVnIGRldGFpbHMuICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTM1LXR5cGVkZWYgaW50IF9fYml0d2lzZSBtaHBfdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC00MC0gKiBBbGxvdyBtZXJnaW5nIG9mIHRoZSBhZGRlZCBTeXN0ZW0gUkFNIHJlc291cmNlIHdpdGggYWRqYWNlbnQsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjQxOiAqIG1lcmdlYWJsZSByZXNvdXJjZXMuIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGFkZF9tZW1vcnlfcmVzb3VyY2UoKVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC00Mi0gKiB3aXRoIHRoaXMgZmxhZyBzZXQsIHRoZSByZXNvdXJjZSBwb2ludGVyIG11c3Qgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgaXRcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0xMjM9ZXh0ZXJuIGludCB0cnlfb25saW5lX25vZGUoaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTEyNC1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MTI1OmV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTEyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMDE9aW50IF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzAyOmV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwMzpleHRlcm4gaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzA0OmV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zMDUtXFx0XFx0XFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwNjppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwNy1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwOC1cXHRcXHRcXHRcXHRlbnVtIG1tb3Agb25saW5lX3R5cGUpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDozMDk6ZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMxMC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTMyMj1zdGF0aWMgaW50IGNoZWNrX3Bmbl9zcGFuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0zMjgtXFx0ICogb25saW5lLCBzbyB0aGlzIGNoZWNrIHNob3VsZCBvbmx5IGZpcmUgZm9yIGRpcmVjdFxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MzI5OlxcdCAqIGFyY2hfe2FkZCxyZW1vdmV9X21lbW9yeSgpIHVzZXJzIG91dHNpZGUgb2YgYWRkX21lbW9yeV9yZXNvdXJjZSgpLlxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMzMwLVxcdCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzAtXFx0XFx0LyogY2FsbCBhcmNoJ3MgbWVtb3J5IGhvdGFkZCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ3MTpcXHRcXHRyZXQgPSBhcmNoX2FkZF9tZW1vcnkobmlkLCBjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIFxcdTAwMjZwYXJhbXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ3Mi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTA3PXN0YXRpYyBib29sIG5vZGVfaXNfbWVtb3J5bGVzcyhpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTI5LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUzMDpzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzMS1cXHRcXHRcXHRcXHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTkwLVxcdH0gZWxzZSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTkxOlxcdFxcdHJldCA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHN0YXJ0LCBzaXplLCBcXHUwMDI2cGFyYW1zKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1OTItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzgtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjM5OmludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjQwLXtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDE6XFx0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi1cXHRcXHRcXHRcXHQgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0NC1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDU6LyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjQ2OmludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Ny17XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NTQtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjU1OlxcdHJldCA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjU2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjYwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY2MTppbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjYyLXtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY2NS1cXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjY2OlxcdHJjID0gX19hZGRfbWVtb3J5KG5pZCwgc3RhcnQsIHNpemUsIG1ocF9mbGFncyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjY3LVxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNjcxPUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA0LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcwNTppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA2LVxcdFxcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyNy1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3Mjg6XFx0cmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyOS1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzM2PUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcXFwia21lbVxcXCIpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzUyLSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTc1MzppbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc1NC1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzU1LXtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3NTY6XFx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc1Ny1cXHRcXHRcXHRtaHBfZmxhZ3MsXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjAzLVxcdCAqIG92ZXIgdGhlIGRldmljZSBtZW1vcnkgaXMgdW4tYWNjZXNzaWJsZSB0aHVzIHdlIGRvIG5vdCB3YW50IHRvXFxubW0vbWVtcmVtYXAuYzoyMDQ6XFx0ICogY3JlYXRlIGEgbGluZWFyIG1hcHBpbmcgZm9yIHRoZSBtZW1vcnkgbGlrZSBhcmNoX2FkZF9tZW1vcnkoKVxcbm1tL21lbXJlbWFwLmMtMjA1LVxcdCAqIHdvdWxkIGRvLlxcbi0tXFxubW0vbWVtcmVtYXAuYy0yMDgtXFx0ICogdGhlIENQVSwgd2UgZG8gd2FudCB0aGUgbGluZWFyIG1hcHBpbmcgYW5kIHRodXMgdXNlXFxubW0vbWVtcmVtYXAuYzoyMDk6XFx0ICogYXJjaF9hZGRfbWVtb3J5KCkuXFxubW0vbWVtcmVtYXAuYy0yMTAtXFx0ICovXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTIyMC1cXG5tbS9tZW1yZW1hcC5jOjIyMTpcXHRcXHRlcnJvciA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2VfbGVuKHJhbmdlKSxcXG5tbS9tZW1yZW1hcC5jLTIyMi1cXHRcXHRcXHRcXHRcXHRwYXJhbXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1Mzo0OS4wMTMwODk5OTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4NDM2MzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBQcm9iZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIG1lbW9yeSBwcm9iaW5nLiBJIHNlZSB0aGF0IGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGhhcyBhIGZ1bmN0aW9uIGNhbGxlZCBgcHJvYmVfc3RvcmVgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgaGFuZGxlciBmb3Igd3JpdGVzIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9wcm9iZWAuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGZ1bmN0aW9uIGBwcm9iZV9zdG9yZWAgcmVjZWl2ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBhbmQgdGhlbiBjYWxscyBgX19hZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLCAuLi4pYC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gQSByZWQgZmxhZyEgTXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUga2lja2luZyBpbi4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBJcyB0aGlzIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmM6cHJvYmVfc3RvcmVgIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2U/IEkgbmVlZCB0byBrbm93IGlmIGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIGNhbiB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24uIEl0IHdvdWxkIGJlIGEgc2VyaW91cyBzZWN1cml0eSBjb25jZXJuIGlmIHNvLiBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGFuZCBjb25maXJtIGV4YWN0bHkgaG93IHRoaXMgcHJvYmUgbWVjaGFuaXNtIGlzIGV4cG9zZWQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaXRzIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1Mzo1MS4yOTc0NTYxMjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjU6XFx0LypcXG4gNTY2OlxcdCAqIFNvbWUgYXJjaGl0ZWN0dXJlcyB3aWxsIGhhdmUgY3VzdG9tIGRyaXZlcnMgdG8gZG8gdGhpcywgYW5kXFxuIDU2NzpcXHQgKiB3aWxsIG5vdCBuZWVkIHRvIGRvIGl0IGZyb20gdXNlcnNwYWNlLiAgVGhlIGZha2UgaG90LWFkZCBjb2RlXFxuIDU2ODpcXHQgKiBhcyB3ZWxsIGFzIHBwYzY0IHdpbGwgZG8gYWxsIG9mIHRoZWlyIGRpc2NvdmVyeSBpbiB1c2Vyc3BhY2VcXG4gNTY5OlxcdCAqIGFuZCB3aWxsIHJlcXVpcmUgdGhpcyBpbnRlcmZhY2UuXFxuIDU3MDpcXHQgKi9cXG4gNTcxOlxcdCNpZmRlZiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkVcXG4gNTcyOlxcdHN0YXRpYyBzc2l6ZV90IHByb2JlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIDU3MzpcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNTc0OlxcdHtcXG4gNTc1OlxcdFxcdHU2NCBwaHlzX2FkZHI7XFxuIDU3NjpcXHRcXHRpbnQgbmlkLCByZXQ7XFxuIDU3NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3Blcl9ibG9jayA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRyZXQgPSBrc3RydG91bGwoYnVmLCAwLCBcXHUwMDI2cGh5c19hZGRyKTtcXG4gNTgwOlxcdFxcdGlmIChyZXQpXFxuIDU4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRpZiAocGh5c19hZGRyIFxcdTAwMjYgKChwYWdlc19wZXJfYmxvY2sgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgLSAxKSlcXG4gNTg0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRyZXQgPSBsb2NrX2RldmljZV9ob3RwbHVnX3N5c2ZzKCk7XFxuIDU4NzpcXHRcXHRpZiAocmV0KVxcbiA1ODg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0bmlkID0gbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQocGh5c19hZGRyKTtcXG4gNTkxOlxcdFxcdHJldCA9IF9fYWRkX21lbW9yeShuaWQsIHBoeXNfYWRkcixcXG4gNTkyOlxcdFxcdFxcdFxcdCAgIE1JTl9NRU1PUllfQkxPQ0tfU0laRSAqIHNlY3Rpb25zX3Blcl9ibG9jayxcXG4gNTkzOlxcdFxcdFxcdFxcdCAgIE1IUF9OT05FKTtcXG4gNTk0OlxcdFxcbiA1OTU6XFx0XFx0aWYgKHJldClcXG4gNTk2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1OTc6XFx0XFxuIDU5ODpcXHRcXHRyZXQgPSBjb3VudDtcXG4gNTk5OlxcdG91dDpcXG4gNjAwOlxcdFxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiA2MDE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKHByb2JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NTEuMjk3Njk1ODAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NDc0ODM3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbWVtYmxvY2suY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYG1lbWJsb2NrLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBjaGFuZ2VkIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG1hY3JvLCBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYC4gVGhpcyBsb29rcyBsaWtlIGEgdmFyaWF0aW9uIG9mIHRoZSBleGlzdGluZyBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWAgbWFjcm8sIHdpdGggYSBrZXkgZGlmZmVyZW5jZTogaXQgYWxsb3dzIHNwZWNpZnlpbmcgYSBzdGFydGluZyBpbmRleCwgYHN0YXJ0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwcm9iYWJseSBpbnRyb2R1Y2VzIG1vcmUgdGFyZ2V0ZWQgaXRlcmF0aW9uLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIG9yIHdoZW4gd2UgKmtub3cqIGEgc3RhcnRpbmcgcG9pbnQgdGhhdCB3ZSBjYW4gb3B0aW1pemUgZnJvbS5cblxuTm93LCBsZXQgbWUgem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHVzaW5nIHRoaXMgbmV3IG1hY3JvLCBzcGVjaWZpY2FsbHkgYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gTG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGNoYW5nZXMsIEkgc2VlIHRoYXQgdGhpcyBuZXcgbWFjcm8gaXMgYmVpbmcgdXNlZCBpbiB0aGVzZSB0d28gZnVuY3Rpb25zIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWAgbWFjcm8uIFRoZSBrZXkgaXMgaW4gdGhlIHBhcmFtZXRlcnMuIFRoZSBcImZyb21cIiBpbmRleCBhcHBlYXJzIHRvIGJlIGNvbWluZyBmcm9tIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAuIEl0IGxvb2tzIGxpa2UgaXQncyBhIGJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24uXG5cblNvLCB0aGUgY29kZSBub3cgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBhIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHN1aXRhYmxlIHN0YXJ0aW5nIGluZGV4IGZvciBhZGRpbmcgYSBtZW1vcnkgcmFuZ2UuIEkgY2FuIHNlZSB0aGF0IGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCBjYWxjdWxhdGVzIGFuIGluZGV4IHRoYXQgaXMgdGhlIGZpcnN0IHJlZ2lvbiB3aGVyZSB0aGUgcG90ZW50aWFsIG92ZXJsYXAgYmFzZSBhZGRyZXNzIHN0YXJ0cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbiEgSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCAqYWxsKiBleGlzdGluZyBtZW1ibG9jayByZWdpb25zLCB0aGUgY29kZSBub3cgdXNlcyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgdG8gbmFycm93IHRoZSBzZWFyY2gsIGVmZmVjdGl2ZWx5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBtZW1ibG9jayBsaXN0cy4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIGFkZGluZyBvciBpc29sYXRpbmcgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBkdXJpbmcgZWFybHkgYm9vdCBzdGFnZXMgb3IgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy5cblxuT2theSwgbGV0IG1lIGNvbmZpcm0gbXkgaHlwb3RoZXNpcyBieSByZWFkaW5nIGZ1cnRoZXIgaW50byB0aGUgc291cmNlLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZTogaG93IGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCBpcyB1c2VkLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIG51YW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NTcuMDQ1MTgzNDMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzMDpcXHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbmV3IHJlZ2lvblxcbiA2MzE6XFx0ICogQG5pZDogbmlkIG9mIHRoZSBuZXcgcmVnaW9uXFxuIDYzMjpcXHQgKiBAZmxhZ3M6IGZsYWdzIG9mIHRoZSBuZXcgcmVnaW9uXFxuIDYzMzpcXHQgKlxcbiA2MzQ6XFx0ICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSArIEBzaXplKSBpbnRvIEB0eXBlLiAgVGhlIG5ldyByZWdpb25cXG4gNjM1OlxcdCAqIGlzIGFsbG93ZWQgdG8gb3ZlcmxhcCB3aXRoIGV4aXN0aW5nIG9uZXMgLSBvdmVybGFwcyBkb24ndCBhZmZlY3QgYWxyZWFkeVxcbiA2MzY6XFx0ICogZXhpc3RpbmcgcmVnaW9ucy4gIEB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbWluaW1hbCAoYWxsIG5laWdoYm91cmluZ1xcbiA2Mzc6XFx0ICogY29tcGF0aWJsZSByZWdpb25zIGFyZSBtZXJnZWQpIGFmdGVyIHRoZSBhZGRpdGlvbi5cXG4gNjM4OlxcdCAqXFxuIDYzOTpcXHQgKiBSZXR1cm46XFxuIDY0MDpcXHQgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiA2NDE6XFx0ICovXFxuIDY0MjpcXHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxuIDY0MzpcXHRcXHRcXHRcXHRcXHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbiA2NDQ6XFx0XFx0XFx0XFx0XFx0aW50IG5pZCwgZW51bSBtZW1ibG9ja19mbGFncyBmbGFncylcXG4gNjQ1OlxcdHtcXG4gNjQ2OlxcdFxcdGJvb2wgaW5zZXJ0ID0gZmFsc2U7XFxuIDY0NzpcXHRcXHRwaHlzX2FkZHJfdCBvYmFzZSA9IGJhc2U7XFxuIDY0ODpcXHRcXHRwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICsgbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXFx1MDAyNnNpemUpO1xcbiA2NDk6XFx0XFx0aW50IGlkeCwgbnJfbmV3LCBzdGFydF9yZ24gPSAtMSwgZW5kX3JnbjtcXG4gNjUwOlxcdFxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbjtcXG4gNjUxOlxcdFxcbiA2NTI6XFx0XFx0aWYgKCFzaXplKVxcbiA2NTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdC8qIHNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgYXJyYXkgKi9cXG4gNjU2OlxcdFxcdGlmICh0eXBlLVxcdTAwM2VyZWdpb25zWzBdLnNpemUgPT0gMCkge1xcbiA2NTc6XFx0XFx0XFx0V0FSTl9PTih0eXBlLVxcdTAwM2VjbnQgIT0gMCB8fCB0eXBlLVxcdTAwM2V0b3RhbF9zaXplKTtcXG4gNjU4OlxcdFxcdFxcdHR5cGUtXFx1MDAzZXJlZ2lvbnNbMF0uYmFzZSA9IGJhc2U7XFxuIDY1OTpcXHRcXHRcXHR0eXBlLVxcdTAwM2VyZWdpb25zWzBdLnNpemUgPSBzaXplO1xcbiA2NjA6XFx0XFx0XFx0dHlwZS1cXHUwMDNlcmVnaW9uc1swXS5mbGFncyA9IGZsYWdzO1xcbiA2NjE6XFx0XFx0XFx0bWVtYmxvY2tfc2V0X3JlZ2lvbl9ub2RlKFxcdTAwMjZ0eXBlLVxcdTAwM2VyZWdpb25zWzBdLCBuaWQpO1xcbiA2NjI6XFx0XFx0XFx0dHlwZS1cXHUwMDNldG90YWxfc2l6ZSA9IHNpemU7XFxuIDY2MzpcXHRcXHRcXHR0eXBlLVxcdTAwM2VjbnQgPSAxO1xcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2NTpcXHRcXHR9XFxuIDY2NjpcXHRcXG4gNjY3OlxcdFxcdC8qXFxuIDY2ODpcXHRcXHQgKiBUaGUgd29yc3QgY2FzZSBpcyB3aGVuIG5ldyByYW5nZSBvdmVybGFwcyBhbGwgZXhpc3RpbmcgcmVnaW9ucyxcXG4gNjY5OlxcdFxcdCAqIHRoZW4gd2UnbGwgbmVlZCB0eXBlLVxcdTAwM2VjbnQgKyAxIGVtcHR5IHJlZ2lvbnMgaW4gQHR5cGUuIFNvIGlmXFxuIDY3MDpcXHRcXHQgKiB0eXBlLVxcdTAwM2VjbnQgKiAyICsgMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdHlwZS1cXHUwMDNlbWF4LCB3ZSBrbm93XFxuIDY3MTpcXHRcXHQgKiB0aGF0IHRoZXJlIGlzIGVub3VnaCBlbXB0eSByZWdpb25zIGluIEB0eXBlLCBhbmQgd2UgY2FuIGluc2VydFxcbiA2NzI6XFx0XFx0ICogcmVnaW9ucyBkaXJlY3RseS5cXG4gNjczOlxcdFxcdCAqL1xcbiA2NzQ6XFx0XFx0aWYgKHR5cGUtXFx1MDAzZWNudCAqIDIgKyAxIFxcdTAwM2M9IHR5cGUtXFx1MDAzZW1heClcXG4gNjc1OlxcdFxcdFxcdGluc2VydCA9IHRydWU7XFxuIDY3NjpcXHRcXG4gNjc3OlxcdHJlcGVhdDpcXG4gNjc4OlxcdFxcdC8qXFxuIDY3OTpcXHRcXHQgKiBUaGUgZm9sbG93aW5nIGlzIGV4ZWN1dGVkIHR3aWNlLiAgT25jZSB3aXRoICVmYWxzZSBAaW5zZXJ0IGFuZFxcbiA2ODA6XFx0XFx0ICogdGhlbiB3aXRoICV0cnVlLiAgVGhlIGZpcnN0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgbmVlZGVkXFxuIDY4MTpcXHRcXHQgKiB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGFyZWEuICBUaGUgc2Vjb25kIGFjdHVhbGx5IGluc2VydHMgdGhlbS5cXG4gNjgyOlxcdFxcdCAqL1xcbiA2ODM6XFx0XFx0YmFzZSA9IG9iYXNlO1xcbiA2ODQ6XFx0XFx0bnJfbmV3ID0gMDtcXG4gNjg1OlxcdFxcbiA2ODY6XFx0XFx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLFxcbiA2ODc6XFx0XFx0XFx0XFx0XFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcXG4gNjg4OlxcdFxcdFxcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVxcdTAwM2ViYXNlO1xcbiA2ODk6XFx0XFx0XFx0cGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICsgcmduLVxcdTAwM2VzaXplO1xcbiA2OTA6XFx0XFxuIDY5MTpcXHRcXHRcXHRpZiAocmJhc2UgXFx1MDAzZT0gZW5kKVxcbiA2OTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY5MzpcXHRcXHRcXHRpZiAocmVuZCBcXHUwMDNjPSBiYXNlKVxcbiA2OTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDY5NTpcXHRcXHRcXHQvKlxcbiA2OTY6XFx0XFx0XFx0ICogQHJnbiBvdmVybGFwcy4gIElmIGl0IHNlcGFyYXRlcyB0aGUgbG93ZXIgcGFydCBvZiBuZXdcXG4gNjk3OlxcdFxcdFxcdCAqIGFyZWEsIGluc2VydCB0aGF0IHBvcnRpb24uXFxuIDY5ODpcXHRcXHRcXHQgKi9cXG4gNjk5OlxcdFxcdFxcdGlmIChyYmFzZSBcXHUwMDNlIGJhc2UpIHtcXG4gNzAwOlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbiA3MDE6XFx0XFx0XFx0XFx0V0FSTl9PTihuaWQgIT0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJnbikpO1xcbiA3MDI6XFx0I2VuZGlmXFxuIDcwMzpcXHRcXHRcXHRcXHRXQVJOX09OKGZsYWdzICE9IE1FTUJMT0NLX05PTkUgXFx1MDAyNlxcdTAwMjYgZmxhZ3MgIT0gcmduLVxcdTAwM2VmbGFncyk7XFxuIDcwNDpcXHRcXHRcXHRcXHRucl9uZXcrKztcXG4gNzA1OlxcdFxcdFxcdFxcdGlmIChpbnNlcnQpIHtcXG4gNzA2OlxcdFxcdFxcdFxcdFxcdGlmIChzdGFydF9yZ24gPT0gLTEpXFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHRzdGFydF9yZ24gPSBpZHg7XFxuIDcwODpcXHRcXHRcXHRcXHRcXHRlbmRfcmduID0gaWR4ICsgMTtcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdG1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4KyssIGJhc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjU3LjA0NTM5Mzk0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU3OTYwNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gVGhhdCBmdW5jdGlvbiBoYXMgdGhlIHBvdGVudGlhbCB0byBiZSBhIGNydWNpYWwgY29tcG9uZW50IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgYW5kIGl0J3Mgd2hlcmUgSSBzaG91bGQgYmUgZGlyZWN0aW5nIG15IGltbWVkaWF0ZSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpdHMgaW5wdXRzLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgcm9sZSBpcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIHdoYXRldmVyIHByb2JsZW0gSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBJIGNhbiBnbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjU5LjEwMzM1NjY3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtYmxvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0ICogZmlyc3QgcmVnaW9uIGFmdGVyIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQGVuZF9yZ24uXFxuIDg0MTpcXHQgKlxcbiA4NDI6XFx0ICogUmV0dXJuOlxcbiA4NDM6XFx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cXG4gODQ0OlxcdCAqL1xcbiA4NDU6XFx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gODQ2OlxcdFxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuIDg0NzpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgKnN0YXJ0X3JnbiwgaW50ICplbmRfcmduKVxcbiA4NDg6XFx0e1xcbiA4NDk6XFx0XFx0cGh5c19hZGRyX3QgZW5kID0gYmFzZSArIG1lbWJsb2NrX2NhcF9zaXplKGJhc2UsIFxcdTAwMjZzaXplKTtcXG4gODUwOlxcdFxcdGludCBpZHg7XFxuIDg1MTpcXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ247XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdCpzdGFydF9yZ24gPSAqZW5kX3JnbiA9IDA7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdGlmICghc2l6ZSlcXG4gODU2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHQvKiB3ZSdsbCBjcmVhdGUgYXQgbW9zdCB0d28gbW9yZSByZWdpb25zICovXFxuIDg1OTpcXHRcXHR3aGlsZSAodHlwZS1cXHUwMDNlY250ICsgMiBcXHUwMDNlIHR5cGUtXFx1MDAzZW1heClcXG4gODYwOlxcdFxcdFxcdGlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgYmFzZSwgc2l6ZSkgXFx1MDAzYyAwKVxcbiA4NjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4gODY0OlxcdFxcdFxcdFxcdFxcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XFxuIDg2NTpcXHRcXHRcXHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cXHUwMDNlYmFzZTtcXG4gODY2OlxcdFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gODY3OlxcdFxcbiA4Njg6XFx0XFx0XFx0aWYgKHJiYXNlIFxcdTAwM2U9IGVuZClcXG4gODY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NzA6XFx0XFx0XFx0aWYgKHJlbmQgXFx1MDAzYz0gYmFzZSlcXG4gODcxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRcXHRpZiAocmJhc2UgXFx1MDAzYyBiYXNlKSB7XFxuIDg3NDpcXHRcXHRcXHRcXHQvKlxcbiA4NzU6XFx0XFx0XFx0XFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYmVsb3cuICBTcGxpdCBhbmQgY29udGludWVcXG4gODc2OlxcdFxcdFxcdFxcdCAqIHRvIHByb2Nlc3MgdGhlIG5leHQgcmVnaW9uIC0gdGhlIG5ldyB0b3AgaGFsZi5cXG4gODc3OlxcdFxcdFxcdFxcdCAqL1xcbiA4Nzg6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gYmFzZTtcXG4gODc5OlxcdFxcdFxcdFxcdHJnbi1cXHUwMDNlc2l6ZSAtPSBiYXNlIC0gcmJhc2U7XFxuIDg4MDpcXHRcXHRcXHRcXHR0eXBlLVxcdTAwM2V0b3RhbF9zaXplIC09IGJhc2UgLSByYmFzZTtcXG4gODgxOlxcdFxcdFxcdFxcdG1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4LCByYmFzZSwgYmFzZSAtIHJiYXNlLFxcbiA4ODI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShyZ24pLFxcbiA4ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJnbi1cXHUwMDNlZmxhZ3MpO1xcbiA4ODQ6XFx0XFx0XFx0fSBlbHNlIGlmIChyZW5kIFxcdTAwM2UgZW5kKSB7XFxuIDg4NTpcXHRcXHRcXHRcXHQvKlxcbiA4ODY6XFx0XFx0XFx0XFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYWJvdmUuICBTcGxpdCBhbmQgcmVkbyB0aGVcXG4gODg3OlxcdFxcdFxcdFxcdCAqIGN1cnJlbnQgcmVnaW9uIC0gdGhlIG5ldyBib3R0b20gaGFsZi5cXG4gODg4OlxcdFxcdFxcdFxcdCAqL1xcbiA4ODk6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gZW5kO1xcbiA4OTA6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2VzaXplIC09IGVuZCAtIHJiYXNlO1xcbiA4OTE6XFx0XFx0XFx0XFx0dHlwZS1cXHUwMDNldG90YWxfc2l6ZSAtPSBlbmQgLSByYmFzZTtcXG4gODkyOlxcdFxcdFxcdFxcdG1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4LS0sIHJiYXNlLCBlbmQgLSByYmFzZSxcXG4gODkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZ24tXFx1MDAzZWZsYWdzKTtcXG4gODk1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg5NjpcXHRcXHRcXHRcXHQvKiBAcmduIGlzIGZ1bGx5IGNvbnRhaW5lZCwgcmVjb3JkIGl0ICovXFxuIDg5NzpcXHRcXHRcXHRcXHRpZiAoISplbmRfcmduKVxcbiA4OTg6XFx0XFx0XFx0XFx0XFx0KnN0YXJ0X3JnbiA9IGlkeDtcXG4gODk5OlxcdFxcdFxcdFxcdCplbmRfcmduID0gaWR4ICsgMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NTkuMTAzNTA0MzMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyOTYzOTc3MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVHJpYWdlOiBBbmFseXppbmcgTW9kaWZpY2F0aW9ucyB0byBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIGhhdmUgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBjb3JlIHRyaWFnZSBxdWVzdGlvbnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeSBsYWlkIG91dCBpbiBTZWN0aW9uIDEsIDIsIGFuZCAzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZHluYW1pY2FsbHkgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gU2ltcGx5IHB1dCwgY2FuIHN5emthbGxlciwgb3IgYW55IGZ1enppbmcgc3RyYXRlZ3ksIGFjdHVhbGx5ICpoaXQqIHRoaXMgY29kZT9cblxuTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgY2FsbCBwYXRocyBvZiBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLiAgSSBzZWUgdGhhdCB0aGV5J3JlIGJvdGggZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsZWQgZnJvbSBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgdmlhIGBtZW1ibG9ja19hZGRfbm9kZWAgYW5kIGBtZW1ibG9ja19yZW1vdmVgLiAgU3BlY2lmaWNhbGx5LCBgX19hZGRfbWVtb3J5X3Jlc291cmNlKClgIHdoaWNoIHRoZW4gY2FsbHMgYG1lbWJsb2NrX2FkZF9ub2RlYCBhbmQgYG1lbWJsb2NrX3JlbW92ZWAgaXMgY2FsbGVkIGZyb20gbWVtb3J5IGhvdHBsdWcgcm91dGluZXMgbGlrZSB2aXJ0aW8tbWVtLCBzeXNmcyBtZW1vcnkgcHJvYmUsIERBWC9kZXZfZGF4IGttZW0sIGFuZCBtZW1vcnkgb2ZmbGluZSBvcGVyYXRpb25zLlxuXG5DcnVjaWFsbHksIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZGl0aW9ucyB0aGVzZSBwYXRocyBhcmUgdGFrZW4uIGBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLYCBzZWVtcyByZWxldmFudCwgYXMgaXQgYWZmZWN0cyB0aGUgdXNlIG9mIGBtZW1ibG9ja19hZGRfbm9kZWAgaW4gYF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpYC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0LCB3aGVuIGBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBlbmFibGVkLCBvbiBhcmNoaXRlY3R1cmVzIGxpa2UgSU5URUxfVERYX0hPU1Qgb3IgYXJtNjQsIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2lsbCBpbmRlZWQgbGVhZCB0byB0aGUgZXhlY3V0aW9uIG9mIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuICBJIGNhbiBzZWUgdGhhdCB3aGVuIG1lbW9yeSBpcyBob3RwbHVnZ2VkIHZpYSB2aXJ0aW9fbWVtLCBzeXNmcywgb3Iga21lbSwgYF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpYCBpcyBjYWxsZWQsIGFuZCwgaWYgYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIHNldCwgY2FsbHMgYG1lbWJsb2NrX2FkZF9ub2RlKClgIGFuZCBgbWVtYmxvY2tfcmVtb3ZlKClgIHdoaWNoIGluIHR1cm4sIGNhbGwgb3VyIG1vZGlmaWVkIGZ1bmN0aW9ucy5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBiYXNlZCBvbiBjb25maWcgb3B0aW9ucy4gYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLYCwgYENPTkZJR19JTlRFTF9URFhfSE9TVGAsIGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgYXJlIGFsbCBwcmltZSBzdXNwZWN0cyBmb3IgY3JlYXRpbmcgYSB2aWFibGUgZnV6emluZyB0YXJnZXQuXG5cblRoZSBtb2RpZmljYXRpb25zIHRoZW1zZWx2ZXMgaW52b2x2ZSByZXBsYWNpbmcgYSBsaW5lYXIgc2VhcmNoIChgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWApIHdpdGggYSBiaW5hcnkgc2VhcmNoIChgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGApIHRvIGZpbmQgdGhlIHN0YXJ0aW5nIGluZGV4IHdpdGhpbiB0aGUgYG1lbWJsb2NrX3R5cGVgLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwgYWxnb3JpdGhtaWMgY2hhbmdlIHdpdGhpbiBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBhIGNvcmUgc3Vic3lzdGVtIGluIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vbWVtYmxvY2suY2ApIGhhcyBzZWVuIGEgY2hhbmdlIHRvIGl0cyBmdW5kYW1lbnRhbCBsb2dpYy5cblxuTGV0J3Mgbm93IGFuYWx5emUgdGhlIGNvZGUgdGhhdCBoYXMgY2hhbmdlZC4gYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWdpb24gd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIG1lbW9yeSB0aGF0IHdlJ3JlIGluc2VydGluZyBvciByZW1vdmluZyBkb2Vzbid0IG92ZXJsYXAuIExvb2tpbmcgY2xvc2VseSBhdCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAsIEkgY2FuIHNlZSB0aGF0IHRoZSBiaW5hcnkgc2VhcmNoIHJlc3VsdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbkluIGBtZW1ibG9ja19hZGRfcmFuZ2VgLCB0aGUgYmluYXJ5IHNlYXJjaCBpcyBwZXJmb3JtZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbWAgbG9vcC4gVGhlIGtleSBpcyB0aGF0IGJhc2UgZG9lc24ndCBjaGFuZ2UgZHVyaW5nIHRoZSBsb29wIChzbyB0aGUgc2VhcmNoIG9ubHkgaGFzIHRvIGhhcHBlbiBvbmNlKSwgYW5kIHRoZSBsb29wIG9ubHkgcHJvY2Vzc2VzIHRob3NlIGVudHJpZXMgd2hpY2ggY291bGQgYmUgYWZmZWN0ZWQgYnkgdGhlIG1lbWJsb2NrIG9wZXJhdGlvbi5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB2aWEgcnVudGltZSBtZW1vcnkgaG90cGx1ZyBwYXRocywgYW5kIHRoZSBhbGdvcml0aG1pYyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3NDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MTIuMDY3NDg0NzM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3MDY3OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RQTFVHfGNvbmZpZyBBUkNIX0tFRVBfTUVNQkxPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NDgyPWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxcbi0tXFxubW0vS2NvbmZpZy00ODctIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXFxubW0vS2NvbmZpZzo0ODg6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL0tjb25maWctNDg5LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9NTA1PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MDgtIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbm1tL0tjb25maWc6NTA5Om1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUxMC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MTIuMTY4MjAwODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5MzUyMDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYElOVEVMX1REWF9IT1NUYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyBgYXJjaC94ODYvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gdGhhdCBURFggKFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMpIGlzIGFuIHg4Ni1zcGVjaWZpYyB0ZWNobm9sb2d5IGZyb20gSW50ZWwuIEkga25vdyB0aGlzIGZyb20gd29ya2luZyB3aXRoIHNpbWlsYXIgaGFyZHdhcmUgc2VjdXJpdHkgZmVhdHVyZXMgaW4gdGhlIHBhc3QuIEl0J3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgbmVzdGVkIHNvbWV3aGVyZSBpbiB0aGUgeDg2LXJlbGF0ZWQgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IEkgZmluZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGJlIHJlbGF0ZWQsIGFuZCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MTQuMDYxNzI1Mzg3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTY4MDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTg0Nj1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjQtXFxuYXJjaC94ODYvS2NvbmZpZzoxODY1OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L0tjb25maWctMTg2Ni1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjE0LjE0NzQxMzk0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDA5NjI3NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIGBJTlRFTF9URFhfSE9TVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSBhbmQgcGFyc2UgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBJTlRFTF9URFhfSE9TVGAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgYW5kIHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMuIEZpcnN0LCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoaXMgb25lIHJlbGllcyBvbi4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0ICptdXN0KiBiZSBkZWZpbmVkIG9yIGVuYWJsZWQgKmJlZm9yZSogSSBjYW4gZXZlbiBjb25zaWRlciBjb25maWd1cmluZyBURFggaG9zdCBzdXBwb3J0LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGNvcnJlY3QuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSBhcmUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBDUFUgZmVhdHVyZSBmbGFncyB0aGF0IG11c3QgYmUgcHJlc2VudC4gQW5kLCBnaXZlbiB0aGF0IHRoaXMgcmVsYXRlcyB0byBJbnRlbCdzIFREWCwgSSdtIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIHByb2Nlc3NvciBvciBwbGF0Zm9ybSBzZXJpZXMgbWlnaHQgYmUgbmVlZGVkLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMuLi5JJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGRlcGVuZGVuY3kgb24gdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgd2hlbiBlbmFibGluZyB0aGlzIHN1cHBvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MjMuMTU3MDQ0NTY5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjU6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NjpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NzpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4NzA6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MTpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzM6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3NDpcXHRcXHRoZWxwXFxuMTg3NTpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzY6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc3OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODgwOlxcdFxcbjE4ODE6XFx0Y29uZmlnIEVGSVxcbjE4ODI6XFx0XFx0Ym9vbCBcXFwiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XFxcIlxcbjE4ODM6XFx0XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuMTg4NDpcXHRcXHRzZWxlY3QgVUNTMl9TVFJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MjMuMTU3MTk1ODQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMzA1NjAyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQVJDSF9LRUVQX01FTUJMT0NLIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBiZWluZyBzZWxlY3RlZCBvciBlbmFibGVkIGJleW9uZCB3aGF0IHdlJ3ZlIGFscmVhZHkgbG9va2VkIGF0LiBNeSBpbml0aWFsIGdyZXAgd2FzIGhlbHBmdWwsIGJ1dCB3ZSBoYXZlIHRvIGJlIHRob3JvdWdoLiBJIHNlZSB0aGF0IGBJTlRFTF9URFhfSE9TVGAgaW4gYGFyY2gveDg2L0tjb25maWdgIHNlbGVjdHMgaXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSBhbHNvIHNlZWluZyBpdCB0aWVkIHRvIHRoaW5ncyBsaWtlIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBWSVJUSU9fTUVNYC4gVGhlIGhvdHBsdWcgYW5kIGhvdHJlbW92ZSBhc3BlY3RzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGxpa2VseSB1c2UtY2FzZS5cblxuTm93LCBgVklSVElPX01FTWAgd2FycmFudHMgY2xvc2VyIGF0dGVudGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB2aXJ0aW8gZGV2aWNlcywgdGhlcmUgY291bGQgYmUgaW50ZXJlc3RpbmcgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gTGV0IG1lIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlIGFuZCBjb25maXJtIHRoYXQgaXQncyBhY3RpbmcgYXMgYSBzb3VyY2Ugb2YgZW5hYmxlbWVudCBvciBhIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IHNpZGUtZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozNS40NjI4MDA1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTA0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRJT19NRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0aW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWc9MTEyPWNvbmZpZyBWSVJUSU9fQkFMTE9PTlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xMjItXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzoxMjM6Y29uZmlnIFZJUlRJT19NRU1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyNC1cXHR0cmlzdGF0ZSBcXFwiVmlydGlvIG1lbSBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjM1LjUwOTkxNjkxOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjUwMDIzMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlZpcnRpbyBLY29uZmlnIEluc3BlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdmlydGlvL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMTIzLiBUaGVyZSdzIHByb2JhYmx5IHNvbWV0aGluZyBzcGVjaWZpYyBJJ20gbG9va2luZyBmb3IgdGhlcmUsIGVpdGhlciByZWxhdGVkIHRvIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgY29uZGl0aW9uYWwuIExldCdzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIHZpcnRpbyBkZXZpY2UgSSdtIHdvcmtpbmcgd2l0aCBvciBzb21ldGhpbmcgbW9yZSBnbG9iYWwgd2l0aGluIHRoZSB2aXJ0aW8gZnJhbWV3b3JrLiBJIHN1c3BlY3QgdGhlIGxpbmUgbnVtYmVyIGlzIGltcG9ydGFudC4gVGltZSB0byBnZXQgbXkgZXllcyBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozNy4xNTk5NDM2ODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0aW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFxuIDEyMTpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIFZJUlRJT19NRU1cXG4gMTI0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gbWVtIGRyaXZlclxcXCJcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcXG4gMTI2OlxcdFxcdGRlcGVuZHMgb24gVklSVElPXFxuIDEyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuIDEyODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4gMTI5OlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuIDEzMDpcXHRcXHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxuIDEzMTpcXHRcXHRoZWxwXFxuIDEzMjpcXHRcXHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxcbiAxMzM6XFx0XFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdCBUaGlzIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgeDg2LTY0LCBhcm02NCwgcmlzY3YgYW5kIHMzOTAuXFxuIDEzNjpcXHRcXHQgQWx0aG91Z2ggaXQgc2hvdWxkIGNvbXBpbGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGF0IGltcGxlbWVudFxcbiAxMzc6XFx0XFx0IG1lbW9yeSBob3QodW4pcGx1ZywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFuZC9vciBjb21tb25cXG4gMTM4OlxcdFxcdCBjb2RlIGNoYW5nZXMgbWF5IGJlIHJlcXVpcmVkIGZvciB2aXJ0aW8tbWVtLCBrZHVtcCBhbmQga2V4ZWMgdG9cXG4gMTM5OlxcdFxcdCB3b3JrIGFzIGV4cGVjdGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozNy4xNjAwMzQxNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNjk5NjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipJbnZlc3RpZ2F0aW5nIGBERVZfREFYX0tNRU1gKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIERBWCBhbmQgS01FTS4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBkZXBlbmRlbmNpZXMgZm9yIGEgZmVhdHVyZSBsaWtlIGBERVZfREFYX0tNRU1gLiBUaW1lIHRvIG5hdmlnYXRlIHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozOS40NzcwMzQ0NTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kYXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHRkZXBlbmRzIG9uIERFVl9EQVggXFx1MDAyNlxcdTAwMjYgRlNfREFYXFxuICA3MTpcXHRcXHRkZWZhdWx0IERFVl9EQVhcXG4gIDcyOlxcdFxcbiAgNzM6XFx0Y29uZmlnIERFVl9EQVhfS01FTVxcbiAgNzQ6XFx0XFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG4gIDc1OlxcdFxcdGRlZmF1bHQgREVWX0RBWFxcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBERVZfREFYXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBTdXBwb3J0IGFjY2VzcyB0byBwZXJzaXN0ZW50LCBvciBvdGhlciBwZXJmb3JtYW5jZVxcbiAgODA6XFx0XFx0ICBkaWZmZXJlbnRpYXRlZCBtZW1vcnkgYXMgaWYgaXQgd2VyZSBTeXN0ZW0gUkFNLiBUaGlzIGFsbG93c1xcbiAgODE6XFx0XFx0ICBlYXNpZXIgdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGJ5IHVubW9kaWZpZWQgYXBwbGljYXRpb25zLCBvclxcbiAgODI6XFx0XFx0ICBhZGRzIGNvcmUga2VybmVsIG1lbW9yeSBzZXJ2aWNlcyB0byBoZXRlcm9nZW5lb3VzIG1lbW9yeSB0eXBlc1xcbiAgODM6XFx0XFx0ICAoSE1FTSkgbWFya2VkIFxcXCJyZXNlcnZlZFxcXCIgYnkgcGxhdGZvcm0gZmlybXdhcmUuXFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdCAgVG8gdXNlIHRoaXMgZmVhdHVyZSwgYSBEQVggZGV2aWNlIG11c3QgYmUgdW5ib3VuZCBmcm9tIHRoZVxcbiAgODY6XFx0XFx0ICBkZXZpY2VfZGF4IGRyaXZlciBhbmQgYm91bmQgdG8gdGhpcyBrbWVtIGRyaXZlciBvbiBlYWNoIGJvb3QuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbiAgODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjM5LjQ3NzEyMTUxNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODY3ODkxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXRlcm1pbmF0aW9uIGZvciBNZW1ibG9jayBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgRm9jdXNTeW1ib2xzLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgcGF0Y2ggYW5kIGlkZW50aWZ5aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFkZGVkIG9yIGNoYW5nZWQgaW4gYG1tL21lbWJsb2NrLmNgLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgIChhIG5ldyBzdGF0aWMgaGVscGVyKSwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCwgYWxzbyBzdGF0aWMgaGVscGVycy5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBndWlkZWxpbmVzIHJldmVhbHMgdGhhdCB3aGlsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSB0cmlja3ksIHN0YXRpYyBmdW5jdGlvbnMgKndpdGhpbiAuYyBmaWxlcyogZG8gZ2V0IGNvbXBpbGVkIGludG8gc3ltYm9scyBpbiBgdm1saW51eGAsIHVubGVzcyBjb21wbGV0ZWx5IGlubGluZWQuIFRoYXQncyBnb29kLiBCdXQgbm9uLXN0YXRpYyBjYWxsZXJzIGFuZCBlbnRyeXBvaW50cyBhcmUgYWxzbyB2YWxpZCBhbmQgcG90ZW50aWFsbHkgbW9yZSB1c2VmdWwgYXMgRm9jdXNTeW1ib2xzLCBzbyBJJ2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS5cblxuTGV0J3MgdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG1lbWJsb2NrX2FkZF9yYW5nZWAgaXMgY2FsbGVkIGJ5IGBtZW1ibG9ja19hZGRgLCBgbWVtYmxvY2tfYWRkX25vZGVgLCBgX19tZW1ibG9ja19yZXNlcnZlYCwgYW5kIGBtZW1ibG9ja19waHlzbWVtX2FkZGAuIEFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAgaXMgY2FsbGVkIGJ5IGBtZW1ibG9ja19yZW1vdmVfcmFuZ2VgICh3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBtZW1ibG9ja19yZW1vdmVgIGFuZCBgbWVtYmxvY2tfcGh5c19mcmVlYCksIGBtZW1ibG9ja19zZXRjbHJfZmxhZ2AsIGBtZW1ibG9ja19zZXRfbm9kZWAsIGFuZCBgbWVtYmxvY2tfY2FwX21lbW9yeV9yYW5nZWAuIE9rYXksIGJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24sIGFuZCBrZWVwaW5nIHRoZSBndWlkYW5jZSBmcm9tIFNlY3Rpb24gNCBpbiBtaW5kLCB0aGVzZSBzeW1ib2xzIGxvb2sgcHJvbWlzaW5nOlxuXG4qICAgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgXG4qICAgYG1lbWJsb2NrX2FkZF9yYW5nZWBcbiogICBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWBcbiogICBgbWVtYmxvY2tfYWRkX25vZGVgXG4qICAgYG1lbWJsb2NrX3JlbW92ZV9yYW5nZWBcbiogICBgbWVtYmxvY2tfcmVtb3ZlYFxuKiAgIGBtZW1ibG9ja19waHlzX2ZyZWVgXG5cbkFscmlnaHQsIGxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdWJpcXVpdG91cyBob3QtcGF0aHMgdGhhdCBjb3VsZCBkaWx1dGUgdGhlIGZ1enppbmcuIE5vLCBtZW1ibG9jayBvcGVyYXRpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIHRvIGJvb3QgYW5kIG1lbW9yeSBob3RwbHVnL2hvdHJlbW92ZS4gVGhleSBhcmUgbm90IGNhbGxlZCBvbiBldmVyeSBwYWdlIGZhdWx0LCBtYWxsb2MvZnJlZSwgb3IgcmVhZC93cml0ZSBzeXNjYWxsLiBTbywgd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBmb3IgdGhlIHJlcXVpcmVkIGNvbmZpZ3MsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nOiBgSU5URUxfVERYX0hPU1RgICh3aGljaCBzZWxlY3RzIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9uIHg4Nl82NCksIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBWSVJUSU9fTUVNYC5cblxuT2theSwgbGV0J3MgcXVpY2tseSBnbyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gICoqQ29yZSB0cmlhZ2UgcGhpbG9zb3BoeToqKiBNZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1ibG9jay5jYCksIHJlcGxhY2VzIGxpbmVhciBzZWFyY2gsIGV4ZWN1dGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGhvdHBsdWcvcmVtb3ZlIHdoZW4gbWVtYmxvY2sgaXMgcmV0YWluZWQsIHNvIHdvcnRoIGZ1enppbmcuIENoZWNrIVxuMi4gICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBsaXN0IGFib3ZlLiBDaGVjayFcbjMuICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkIGxpc3QgYWJvdmUuIENoZWNrIVxuXG5BbmQgZmluYWxseSwgYSBzYW5pdHkgY2hlY2s6IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gR290IGl0LiBTbywgdGhhdCdzIGV2ZXJ5dGhpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTU5LCJPdXRwdXRUb2tlbnMiOjIyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjQ2LjM0NTAxNTM0NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTg5MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIlZJUlRJT19NRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1ibG9ja19ic2VhcmNoX3N0YXJ0XCIsXG4gICAgXCJtZW1ibG9ja19hZGRfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2FkZF9ub2RlXCIsXG4gICAgXCJtZW1ibG9ja19yZW1vdmVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX3JlbW92ZVwiLFxuICAgIFwibWVtYmxvY2tfcGh5c19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vbWVtYmxvY2suYyksIGludHJvZHVjaW5nIGJpbmFyeSBzZWFyY2ggKG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQpIHRvIGZpbmQgY2FuZGlkYXRlIHJlZ2lvbnMgaW4gbWVtYmxvY2tfYWRkX3JhbmdlIGFuZCBtZW1ibG9ja19pc29sYXRlX3JhbmdlLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVnaW9uIHNwbGl0dGluZy9tZXJnaW5nIGFsZ29yaXRobXMgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgd2hlbiBtZW1ibG9jayBtZXRhZGF0YSBpcyByZXRhaW5lZCAoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgcmVnaW9uIG1hbmlwdWxhdGlvbiBsb2dpYyBhbmQgYm91bmRhcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIlZJUlRJT19NRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1ibG9ja19ic2VhcmNoX3N0YXJ0XCIsXG4gICAgXCJtZW1ibG9ja19hZGRfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2FkZF9ub2RlXCIsXG4gICAgXCJtZW1ibG9ja19yZW1vdmVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX3JlbW92ZVwiLFxuICAgIFwibWVtYmxvY2tfcGh5c19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vbWVtYmxvY2suYyksIGludHJvZHVjaW5nIGJpbmFyeSBzZWFyY2ggKG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQpIHRvIGZpbmQgY2FuZGlkYXRlIHJlZ2lvbnMgaW4gbWVtYmxvY2tfYWRkX3JhbmdlIGFuZCBtZW1ibG9ja19pc29sYXRlX3JhbmdlLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVnaW9uIHNwbGl0dGluZy9tZXJnaW5nIGFsZ29yaXRobXMgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgd2hlbiBtZW1ibG9jayBtZXRhZGF0YSBpcyByZXRhaW5lZCAoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgcmVnaW9uIG1hbmlwdWxhdGlvbiBsb2dpYyBhbmQgYm91bmRhcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6NDYuNDE3NjExODExWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI0Nzc4MjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjQ2LjQxODEwODc5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTMyNDcyODA3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyByZWdpb24gbG9va3VwIGluIGVhcmx5IGJvb3QgbWVtYmxvY2sgbWFuYWdlbWVudCAobW0vbWVtYmxvY2suYykgYnkgaW50cm9kdWNpbmcgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCgpIGFuZCBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oKS4gVGhlIGNoYW5nZXMgb3BlcmF0ZSBleGNsdXNpdmVseSBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgbWVtYmxvY2sgcmVnaW9ucyBhbmQgaW50ZXJuYWwgaW5kaWNlcy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBsb2dpYyAoc3VjaCBhcyBpbmRleCBjYWxjdWxhdGlvbiBlcnJvcnMgb3IgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYXNzZXJ0aW9uL2JvdW5kcyBjaGVja2luZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIHBhZGRpbmcvdW5pbml0aWFsaXplZCBmaWVsZCBpbml0aWFsaXphdGlvbiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2ZjBlODI1YmZjODM3MmQ1NWRkOGIwYmY4YjE1MDFjMDkwZmQ0NDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcbmluZGV4IDljZTg2MzQ5YTI5ZmEuLjg4OTQwNDc0YjAyMDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1ibG9jay5jXG4rKysgYi9tbS9tZW1ibG9jay5jXG5AQCAtMTYwLDYgKzE2MCwxMSBAQCBzdGF0aWMgX19yZWZkYXRhIHN0cnVjdCBtZW1ibG9ja190eXBlICptZW1ibG9ja19tZW1vcnkgPSBcdTAwMjZtZW1ibG9jay5tZW1vcnk7XG4gXHQgICAgIGkgXHUwMDNjIG1lbWJsb2NrX3R5cGUtXHUwMDNlY250O1x0XHRcdFx0XHRcXFxuIFx0ICAgICBpKyssIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXSlcbiBcbisjZGVmaW5lIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpLCBtZW1ibG9ja190eXBlLCByZ24sIHN0YXJ0KVx0XFxcbitcdGZvciAoaSA9IChzdGFydCksIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXTtcdFx0XFxcbitcdCAgICAgaSBcdTAwM2MgbWVtYmxvY2tfdHlwZS1cdTAwM2VjbnQ7XHRcdFx0XHRcdFxcXG4rXHQgICAgIGkrKywgcmduID0gXHUwMDI2bWVtYmxvY2tfdHlwZS1cdTAwM2VyZWdpb25zW2ldKVxuK1xuICNkZWZpbmUgbWVtYmxvY2tfZGJnKGZtdCwgLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdGlmIChtZW1ibG9ja19kZWJ1ZylcdFx0XHRcdFx0XFxcbkBAIC01OTEsNiArNTk2LDMzIEBAIHN0YXRpYyB2b2lkIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pbnNlcnRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0dHlwZS1cdTAwM2V0b3RhbF9zaXplICs9IHNpemU7XG4gfVxuIFxuKy8qKlxuKyAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCBcdTAwM2UgYmFzZVxuKyAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIHNlYXJjaFxuKyAqIEBiYXNlOiBiYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNhbmRpZGF0ZSByYW5nZVxuKyAqXG4rICogUmV0dXJucyB0aGUgZmlyc3QgcmVnaW9uIGluZGV4IHRoYXQgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCBAYmFzZS5cbisgKi9cbitzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuK1x0XHRcdFx0XHRcdCAgcGh5c19hZGRyX3QgYmFzZSlcbit7XG4rXHRpbnQgbWlkLCBsb3cgPSAwO1xuK1x0aW50IGhpZ2ggPSB0eXBlLVx1MDAzZWNudDtcbitcbitcdGlmICh0eXBlLVx1MDAzZWNudCBcdTAwMjZcdTAwMjYgYmFzZSBcdTAwM2U9IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLmJhc2UgK1xuK1x0XHRcdFx0IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLnNpemUpXG4rXHRcdHJldHVybiB0eXBlLVx1MDAzZWNudDtcbitcbitcdHdoaWxlIChsb3cgXHUwMDNjIGhpZ2gpIHtcbitcdFx0bWlkID0gKGxvdyArIGhpZ2gpIC8gMjtcbitcdFx0aWYgKHR5cGUtXHUwMDNlcmVnaW9uc1ttaWRdLmJhc2UgKyB0eXBlLVx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFx1MDAzYz0gYmFzZSlcbitcdFx0XHRsb3cgPSBtaWQgKyAxO1xuK1x0XHRlbHNlXG4rXHRcdFx0aGlnaCA9IG1pZDtcbitcdH1cbitcdHJldHVybiBsb3c7XG4rfVxuK1xuIC8qKlxuICAqIG1lbWJsb2NrX2FkZF9yYW5nZSAtIGFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uXG4gICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gYWRkIG5ldyByZWdpb24gaW50b1xuQEAgLTY1MSw3ICs2ODMsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRiYXNlID0gb2Jhc2U7XG4gXHRucl9uZXcgPSAwO1xuIFxuLVx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikge1xuK1x0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLFxuK1x0XHRcdFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXHUwMDNlYmFzZTtcbiBcdFx0cGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICsgcmduLVx1MDAzZXNpemU7XG4gXG5AQCAtODI3LDcgKzg2MCw4IEBAIHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRcdGlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgYmFzZSwgc2l6ZSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XG4rXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaWR4LCB0eXBlLCByZ24sXG4rXHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgKyByZ24tXHUwMDNlc2l6ZTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjQ2LjQxODExMDExWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNTU3NjA5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIE1lbWJsb2NrIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gbmVlZHMgdG8gYmUgYnJvdWdodCB0byBiZWFyIGhlcmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaXRzZWxmLiBBbHJpZ2h0LCBpdCdzIHRvdWNoaW5nIGBtbS9tZW1ibG9jay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBwaWVjZXM6IGEgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbWAgbWFjcm8sIGEgaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAsIGFuZCBpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgc29tZSBsaW5lYXIgc2NhbnMgd2l0aCBiaW5hcnkgc2VhcmNoZXMsIHNlYXJjaGluZyBmb3IgdGhlIGZpcnN0IG92ZXJsYXBwaW5nIHJlZ2lvbi5cblxuVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hhdCBgbWVtYmxvY2tgIGFjdHVhbGx5ICpkb2VzKi4gSSBrbm93IGl0J3MgZnVuZGFtZW50YWwgZm9yIGVhcmx5IGJvb3QgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBsZXQncyByZWZyZXNoLiBJJ2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTkxIGluIGBtbS9tZW1ibG9jay5jYC4gQ29udGV4dCBpcyBrZXkgaGVyZTsgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiBhcmUgdXNlZCBpbiB0aGUgYnJvYWRlciBwaWN0dXJlLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBhcmUgdnVsbmVyYWJsZSB0byBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjUxLjQ3Mzg3NDAyOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtYmxvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODA6XFx0ICovXFxuIDU4MTpcXHRzdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gNTgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBpZHgsIHBoeXNfYWRkcl90IGJhc2UsXFxuIDU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBwaHlzX2FkZHJfdCBzaXplLFxcbiA1ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50IG5pZCxcXG4gNTg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGVudW0gbWVtYmxvY2tfZmxhZ3MgZmxhZ3MpXFxuIDU4NjpcXHR7XFxuIDU4NzpcXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24gPSBcXHUwMDI2dHlwZS1cXHUwMDNlcmVnaW9uc1tpZHhdO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHRCVUdfT04odHlwZS1cXHUwMDNlY250IFxcdTAwM2U9IHR5cGUtXFx1MDAzZW1heCk7XFxuIDU5MDpcXHRcXHRtZW1tb3ZlKHJnbiArIDEsIHJnbiwgKHR5cGUtXFx1MDAzZWNudCAtIGlkeCkgKiBzaXplb2YoKnJnbikpO1xcbiA1OTE6XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gYmFzZTtcXG4gNTkyOlxcdFxcdHJnbi1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuIDU5MzpcXHRcXHRyZ24tXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIDU5NDpcXHRcXHRtZW1ibG9ja19zZXRfcmVnaW9uX25vZGUocmduLCBuaWQpO1xcbiA1OTU6XFx0XFx0dHlwZS1cXHUwMDNlY250Kys7XFxuIDU5NjpcXHRcXHR0eXBlLVxcdTAwM2V0b3RhbF9zaXplICs9IHNpemU7XFxuIDU5NzpcXHR9XFxuIDU5ODpcXHRcXG4gNTk5OlxcdC8qKlxcbiA2MDA6XFx0ICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kIFxcdTAwM2UgYmFzZVxcbiA2MDE6XFx0ICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gc2VhcmNoXFxuIDYwMjpcXHQgKiBAYmFzZTogYmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjYW5kaWRhdGUgcmFuZ2VcXG4gNjAzOlxcdCAqXFxuIDYwNDpcXHQgKiBSZXR1cm5zIHRoZSBmaXJzdCByZWdpb24gaW5kZXggdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBvdmVybGFwIEBiYXNlLlxcbiA2MDU6XFx0ICovXFxuIDYwNjpcXHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiA2MDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwaHlzX2FkZHJfdCBiYXNlKVxcbiA2MDg6XFx0e1xcbiA2MDk6XFx0XFx0aW50IG1pZCwgbG93ID0gMDtcXG4gNjEwOlxcdFxcdGludCBoaWdoID0gdHlwZS1cXHUwMDNlY250O1xcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHRpZiAodHlwZS1cXHUwMDNlY250IFxcdTAwMjZcXHUwMDI2IGJhc2UgXFx1MDAzZT0gdHlwZS1cXHUwMDNlcmVnaW9uc1t0eXBlLVxcdTAwM2VjbnQgLSAxXS5iYXNlICtcXG4gNjEzOlxcdFxcdFxcdFxcdFxcdCB0eXBlLVxcdTAwM2VyZWdpb25zW3R5cGUtXFx1MDAzZWNudCAtIDFdLnNpemUpXFxuIDYxNDpcXHRcXHRcXHRyZXR1cm4gdHlwZS1cXHUwMDNlY250O1xcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHR3aGlsZSAobG93IFxcdTAwM2MgaGlnaCkge1xcbiA2MTc6XFx0XFx0XFx0bWlkID0gKGxvdyArIGhpZ2gpIC8gMjtcXG4gNjE4OlxcdFxcdFxcdGlmICh0eXBlLVxcdTAwM2VyZWdpb25zW21pZF0uYmFzZSArIHR5cGUtXFx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFxcdTAwM2M9IGJhc2UpXFxuIDYxOTpcXHRcXHRcXHRcXHRsb3cgPSBtaWQgKyAxO1xcbiA2MjA6XFx0XFx0XFx0ZWxzZVxcbiA2MjE6XFx0XFx0XFx0XFx0aGlnaCA9IG1pZDtcXG4gNjIyOlxcdFxcdH1cXG4gNjIzOlxcdFxcdHJldHVybiBsb3c7XFxuIDYyNDpcXHR9XFxuIDYyNTpcXHRcXG4gNjI2OlxcdC8qKlxcbiA2Mjc6XFx0ICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cXG4gNjI4OlxcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGFkZCBuZXcgcmVnaW9uIGludG9cXG4gNjI5OlxcdCAqIEBiYXNlOiBiYXNlIGFkZHJlc3Mgb2YgdGhlIG5ldyByZWdpb25cXG4gNjMwOlxcdCAqIEBzaXplOiBzaXplIG9mIHRoZSBuZXcgcmVnaW9uXFxuIDYzMTpcXHQgKiBAbmlkOiBuaWQgb2YgdGhlIG5ldyByZWdpb25cXG4gNjMyOlxcdCAqIEBmbGFnczogZmxhZ3Mgb2YgdGhlIG5ldyByZWdpb25cXG4gNjMzOlxcdCAqXFxuIDYzNDpcXHQgKiBBZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbiBbQGJhc2UsIEBiYXNlICsgQHNpemUpIGludG8gQHR5cGUuICBUaGUgbmV3IHJlZ2lvblxcbiA2MzU6XFx0ICogaXMgYWxsb3dlZCB0byBvdmVybGFwIHdpdGggZXhpc3Rpbmcgb25lcyAtIG92ZXJsYXBzIGRvbid0IGFmZmVjdCBhbHJlYWR5XFxuIDYzNjpcXHQgKiBleGlzdGluZyByZWdpb25zLiAgQHR5cGUgaXMgZ3VhcmFudGVlZCB0byBiZSBtaW5pbWFsIChhbGwgbmVpZ2hib3VyaW5nXFxuIDYzNzpcXHQgKiBjb21wYXRpYmxlIHJlZ2lvbnMgYXJlIG1lcmdlZCkgYWZ0ZXIgdGhlIGFkZGl0aW9uLlxcbiA2Mzg6XFx0ICpcXG4gNjM5OlxcdCAqIFJldHVybjpcXG4gNjQwOlxcdCAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXFxuIDY0MTpcXHQgKi9cXG4gNjQyOlxcdHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gNjQzOlxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuIDY0NDpcXHRcXHRcXHRcXHRcXHRpbnQgbmlkLCBlbnVtIG1lbWJsb2NrX2ZsYWdzIGZsYWdzKVxcbiA2NDU6XFx0e1xcbiA2NDY6XFx0XFx0Ym9vbCBpbnNlcnQgPSBmYWxzZTtcXG4gNjQ3OlxcdFxcdHBoeXNfYWRkcl90IG9iYXNlID0gYmFzZTtcXG4gNjQ4OlxcdFxcdHBoeXNfYWRkcl90IGVuZCA9IGJhc2UgKyBtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCBcXHUwMDI2c2l6ZSk7XFxuIDY0OTpcXHRcXHRpbnQgaWR4LCBucl9uZXcsIHN0YXJ0X3JnbiA9IC0xLCBlbmRfcmduO1xcbiA2NTA6XFx0XFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduO1xcbiA2NTE6XFx0XFxuIDY1MjpcXHRcXHRpZiAoIXNpemUpXFxuIDY1MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0Lyogc3BlY2lhbCBjYXNlIGZvciBlbXB0eSBhcnJheSAqL1xcbiA2NTY6XFx0XFx0aWYgKHR5cGUtXFx1MDAzZXJlZ2lvbnNbMF0uc2l6ZSA9PSAwKSB7XFxuIDY1NzpcXHRcXHRcXHRXQVJOX09OKHR5cGUtXFx1MDAzZWNudCAhPSAwIHx8IHR5cGUtXFx1MDAzZXRvdGFsX3NpemUpO1xcbiA2NTg6XFx0XFx0XFx0dHlwZS1cXHUwMDNlcmVnaW9uc1swXS5iYXNlID0gYmFzZTtcXG4gNjU5OlxcdFxcdFxcdHR5cGUtXFx1MDAzZXJlZ2lvbnNbMF0uc2l6ZSA9IHNpemU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjUxLjQ3NDA2MDMzOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxMDc3MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIGluIGBtbS9tZW1ibG9jay5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIHdpdGhpbiBgbW0vbWVtYmxvY2suY2AuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIHdoZXJlIGl0J3MgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgaXMgYmVpbmcgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBtZW1ibG9jayBzdHJ1Y3R1cmUsIHBlcmhhcHMgdG8gaGFuZGxlIG1lbW9yeSBob3RwbHVnLCBvciBtYXliZSBmb3Igc29tZXRoaW5nIGxpa2UgaXNvbGF0aW5nIG1lbW9yeSByYW5nZXMgZm9yIGEgc3BlY2lmaWMgTlVNQSBub2RlIG9yIElPTU1VIGFzc2lnbm1lbnQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBMZXQncyBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtZW1ibG9jayBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkgc2hvdWxkIGxvb2sgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9jayBjb250ZW50aW9uIGlzc3VlcyB0aGF0IG1heSBhcmlzZSBpbiBhIG11bHRpLXRocmVhZGVkIG9yIGludGVycnVwdC1kcml2ZW4gZW52aXJvbm1lbnQuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBpdCBpcyBoYW5kbGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcywgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6NTMuNzI1MTQwNzYxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyMDpcXHRcXHRcXHQgICAgICAgKG5yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC8gU1pfMU0sIG1lbV9zaXplX21iKTtcXG4gODIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODIyOlxcdFxcdH1cXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDgyNTpcXHR9XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcbiA4Mjg6XFx0LyoqXFxuIDgyOTpcXHQgKiBtZW1ibG9ja19pc29sYXRlX3JhbmdlIC0gaXNvbGF0ZSBnaXZlbiByYW5nZSBpbnRvIGRpc2pvaW50IG1lbWJsb2Nrc1xcbiA4MzA6XFx0ICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gaXNvbGF0ZSByYW5nZSBmb3JcXG4gODMxOlxcdCAqIEBiYXNlOiBiYXNlIG9mIHJhbmdlIHRvIGlzb2xhdGVcXG4gODMyOlxcdCAqIEBzaXplOiBzaXplIG9mIHJhbmdlIHRvIGlzb2xhdGVcXG4gODMzOlxcdCAqIEBzdGFydF9yZ246IG91dCBwYXJhbWV0ZXIgZm9yIHRoZSBzdGFydCBvZiBpc29sYXRlZCByZWdpb25cXG4gODM0OlxcdCAqIEBlbmRfcmduOiBvdXQgcGFyYW1ldGVyIGZvciB0aGUgZW5kIG9mIGlzb2xhdGVkIHJlZ2lvblxcbiA4MzU6XFx0ICpcXG4gODM2OlxcdCAqIFdhbGsgQHR5cGUgYW5kIGVuc3VyZSB0aGF0IHJlZ2lvbnMgZG9uJ3QgY3Jvc3MgdGhlIGJvdW5kYXJpZXMgZGVmaW5lZCBieVxcbiA4Mzc6XFx0ICogW0BiYXNlLCBAYmFzZSArIEBzaXplKS4gIENyb3NzaW5nIHJlZ2lvbnMgYXJlIHNwbGl0IGF0IHRoZSBib3VuZGFyaWVzLFxcbiA4Mzg6XFx0ICogd2hpY2ggbWF5IGNyZWF0ZSBhdCBtb3N0IHR3byBtb3JlIHJlZ2lvbnMuICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0XFxuIDgzOTpcXHQgKiByZWdpb24gaW5zaWRlIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQHN0YXJ0X3JnbiBhbmQgdGhlIGluZGV4IG9mIHRoZVxcbiA4NDA6XFx0ICogZmlyc3QgcmVnaW9uIGFmdGVyIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQGVuZF9yZ24uXFxuIDg0MTpcXHQgKlxcbiA4NDI6XFx0ICogUmV0dXJuOlxcbiA4NDM6XFx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cXG4gODQ0OlxcdCAqL1xcbiA4NDU6XFx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gODQ2OlxcdFxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuIDg0NzpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgKnN0YXJ0X3JnbiwgaW50ICplbmRfcmduKVxcbiA4NDg6XFx0e1xcbiA4NDk6XFx0XFx0cGh5c19hZGRyX3QgZW5kID0gYmFzZSArIG1lbWJsb2NrX2NhcF9zaXplKGJhc2UsIFxcdTAwMjZzaXplKTtcXG4gODUwOlxcdFxcdGludCBpZHg7XFxuIDg1MTpcXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ247XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdCpzdGFydF9yZ24gPSAqZW5kX3JnbiA9IDA7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdGlmICghc2l6ZSlcXG4gODU2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHQvKiB3ZSdsbCBjcmVhdGUgYXQgbW9zdCB0d28gbW9yZSByZWdpb25zICovXFxuIDg1OTpcXHRcXHR3aGlsZSAodHlwZS1cXHUwMDNlY250ICsgMiBcXHUwMDNlIHR5cGUtXFx1MDAzZW1heClcXG4gODYwOlxcdFxcdFxcdGlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgYmFzZSwgc2l6ZSkgXFx1MDAzYyAwKVxcbiA4NjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4gODY0OlxcdFxcdFxcdFxcdFxcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XFxuIDg2NTpcXHRcXHRcXHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cXHUwMDNlYmFzZTtcXG4gODY2OlxcdFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gODY3OlxcdFxcbiA4Njg6XFx0XFx0XFx0aWYgKHJiYXNlIFxcdTAwM2U9IGVuZClcXG4gODY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NzA6XFx0XFx0XFx0aWYgKHJlbmQgXFx1MDAzYz0gYmFzZSlcXG4gODcxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRcXHRpZiAocmJhc2UgXFx1MDAzYyBiYXNlKSB7XFxuIDg3NDpcXHRcXHRcXHRcXHQvKlxcbiA4NzU6XFx0XFx0XFx0XFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYmVsb3cuICBTcGxpdCBhbmQgY29udGludWVcXG4gODc2OlxcdFxcdFxcdFxcdCAqIHRvIHByb2Nlc3MgdGhlIG5leHQgcmVnaW9uIC0gdGhlIG5ldyB0b3AgaGFsZi5cXG4gODc3OlxcdFxcdFxcdFxcdCAqL1xcbiA4Nzg6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gYmFzZTtcXG4gODc5OlxcdFxcdFxcdFxcdHJnbi1cXHUwMDNlc2l6ZSAtPSBiYXNlIC0gcmJhc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjUzLjcyNTM0NjQwMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTQwMDIyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtYmxvY2sgT3B0aW1pemF0aW9uIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCwgYW4gb3B0aW1pemF0aW9uIGZvciBmaW5kaW5nIHRoZSBzdGFydGluZyBpbmRleCBpbiB0aGUgYG1lbWJsb2NrYCBkYXRhIHN0cnVjdHVyZSBkdXJpbmcgbWVtb3J5IHJhbmdlIGFkZGl0aW9uIGFuZCBpc29sYXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnk7IGFyZSB3ZSBjcmVhdGluZyBhbnkgcmlza3MgaGVyZT9cblxuRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IGlmIHRoaXMgcGF0Y2ggYWxsb2NhdGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb3BpZXMgaXQgdG8gdXNlciBzcGFjZSwgb3IgZXZhbHVhdGVzIGl0IGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCBsb29rcyBsaWtlIGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCB3b3JrcyBzb2xlbHkgd2l0aCBgdHlwZS1cdTAwM2VjbnRgIGFuZCB0aGUgYGJhc2VgIGFuZCBgc2l6ZWAgZmllbGRzIG9mIGB0eXBlLVx1MDAzZXJlZ2lvbnNgLiBDcnVjaWFsbHksIHRob3NlIHJlZ2lvbnMgZnJvbSAwIHVwIHRvIGB0eXBlLVx1MDAzZWNudCAtIDFgIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMsIHZhbGlkIGFuZCByZWFkeSB0byBnby4gRXZlbiBpZiBgdHlwZS1cdTAwM2VjbnRgIGlzIHplcm8sIHRoZSB3aGlsZSBsb29wIHdpbGwgcXVpY2tseSB0ZXJtaW5hdGUuIEFuZCwgZm9yIHRoZSBsb29wIHVzaW5nIHRoZSBzdGFydCBpbmRleCwgaWYgYHN0YXJ0YCBpcyBlcXVhbCB0byBgdHlwZS1cdTAwM2VjbnRgIGl0IGRvZXMgbm90IHJ1biwgYW5kIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGludGVnZXJzL3BvaW50ZXJzLlxuXG5Eb2VzIHRoaXMgaGF2ZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGRhdGEgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gTm8uIFRoaXMgY29kZSBpcyBlYXJseS1ib290LCBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGBtZW1ibG9ja2Agc3Vic3lzdGVtLiBOb3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3RoaW5nIGlzIGV4cG9zZWQgdG8gdW5pbml0aWFsaXplZCBidWZmZXJzLiBJZiB3ZSAqZGlkKiBoYXZlIGFuIGluZGV4aW5nIGJ1Zywgb3IgYHN0YXJ0YCB3YXMgc29tZWhvdyBvdXQgb2YgYm91bmRzLCB0aGF0IHdvdWxkIHRyaWdnZXIgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIHdoaWNoIEtBU0FOIHdvdWxkIGltbWVkaWF0ZWx5IGNhdGNoLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBubyBwYWRkaW5nIGxlYWtzLCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5TbywgSSB0aGluayB3ZSdyZSBzYWZlLiBLTVNBTiBkb2Vzbid0IHNlZW0gdG8gYmUgbmVlZGVkIGhlcmUuIExldCdzIGRvdWJsZS1jaGVjaywgdGhvdWdoLCBiYXNlZCBvbiBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gTm90IGluIHRoaXMgcGF0Y2guXG5cblJpZ2h0LiBUaW1lIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTiB0byBzb2xpZGlmeSBteSByZWFzb25pbmcuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUgYmVjYXVzZSB0aGVzZSBjaGFuZ2VzIG1vZGlmeSBhcnJheSBpbmRleGluZyBhbmQgbG9vcCBpbml0aWFsaXphdGlvbiBvdmVyIGB0eXBlLVx1MDAzZXJlZ2lvbnNgLiBBbnkgaW5kZXhpbmcgZXJyb3JzIG9yIGJvdW5kcyBtaXNtYXRjaGVzIHdpbGwgYmUgY2F1Z2h0IGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMuIEFzIGZvciBLTVNBTiwgdGhlIHBhdGNoIGRvZXNuJ3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHNlbmQgaXQgdG8gdXNlci1zcGFjZSwgYW5kIGRvZXMgbm90IHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBicmFuY2hlcy4gVGhlIGBtZW1ibG9ja2Agc3Vic3lzdGVtIG1hbmFnZXMgaW5pdGlhbGl6ZWQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBmcm9tIGVhcmx5IGJvb3QsIHdpdGggcmVnaW9uIHN0cnVjdHVyZXMgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cbk9rYXksIEknbSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQxLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjU5LjY2NTM3MDYxMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHJlZ2lvbiBsb29rdXAgaW4gZWFybHkgYm9vdCBtZW1ibG9jayBtYW5hZ2VtZW50IChtbS9tZW1ibG9jay5jKSBieSBpbnRyb2R1Y2luZyBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KCkgYW5kIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbSgpLiBUaGUgY2hhbmdlcyBvcGVyYXRlIGV4Y2x1c2l2ZWx5IG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBtZW1ibG9jayByZWdpb25zIGFuZCBpbnRlcm5hbCBpbmRpY2VzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGxvZ2ljIChzdWNoIGFzIGluZGV4IGNhbGN1bGF0aW9uIGVycm9ycyBvciBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBhc3NlcnRpb24vYm91bmRzIGNoZWNraW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgcGFkZGluZy91bmluaXRpYWxpemVkIGZpZWxkIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHJlZ2lvbiBsb29rdXAgaW4gZWFybHkgYm9vdCBtZW1ibG9jayBtYW5hZ2VtZW50IChtbS9tZW1ibG9jay5jKSBieSBpbnRyb2R1Y2luZyBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KCkgYW5kIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbSgpLiBUaGUgY2hhbmdlcyBvcGVyYXRlIGV4Y2x1c2l2ZWx5IG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBtZW1ibG9jayByZWdpb25zIGFuZCBpbnRlcm5hbCBpbmRpY2VzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGxvZ2ljIChzdWNoIGFzIGluZGV4IGNhbGN1bGF0aW9uIGVycm9ycyBvciBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBhc3NlcnRpb24vYm91bmRzIGNoZWNraW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgcGFkZGluZy91bmluaXRpYWxpemVkIGZpZWxkIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 00:32:24 +0000 UTC FinishedAt: 2026-09-05 00:55:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "INTEL_TDX_HOST", "VIRTIO_MEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "INTEL_TDX_HOST", "VIRTIO_MEM" ], "series_id": "d03d54d6-b4df-4da5-b71b-9535c79e3c91" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memblock_bsearch_start", "memblock_add_range", "memblock_isolate_range", "memblock_add_node", "memblock_remove_range", "memblock_remove", "memblock_phys_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7VklSVElPX01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWJsb2NrX2JzZWFyY2hfc3RhcnQmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfYWRkX3JhbmdlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX2lzb2xhdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfYWRkX25vZGUmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcmVtb3ZlX3JhbmdlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3JlbW92ZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19waHlzX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgcmVnaW9uIGxvb2t1cCBpbiBlYXJseSBib290IG1lbWJsb2NrIG1hbmFnZW1lbnQgKG1tL21lbWJsb2NrLmMpIGJ5IGludHJvZHVjaW5nIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoKSBhbmQgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKCkuIFRoZSBjaGFuZ2VzIG9wZXJhdGUgZXhjbHVzaXZlbHkgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMgYW5kIGludGVybmFsIGluZGljZXMuIFBvdGVudGlhbCBidWdzIGluIHRoaXMgbG9naWMgKHN1Y2ggYXMgaW5kZXggY2FsY3VsYXRpb24gZXJyb3JzIG9yIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGFzc2VydGlvbi9ib3VuZHMgY2hlY2tpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZmllbGQgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vbWVtYmxvY2suYyksIGludHJvZHVjaW5nIGJpbmFyeSBzZWFyY2ggKG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQpIHRvIGZpbmQgY2FuZGlkYXRlIHJlZ2lvbnMgaW4gbWVtYmxvY2tfYWRkX3JhbmdlIGFuZCBtZW1ibG9ja19pc29sYXRlX3JhbmdlLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVnaW9uIHNwbGl0dGluZy9tZXJnaW5nIGFsZ29yaXRobXMgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgd2hlbiBtZW1ibG9jayBtZXRhZGF0YSBpcyByZXRhaW5lZCAoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgcmVnaW9uIG1hbmlwdWxhdGlvbiBsb2dpYyBhbmQgYm91bmRhcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2ZjBlODI1YmZjODM3MmQ1NWRkOGIwYmY4YjE1MDFjMDkwZmQ0NDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi44ODk0MDQ3NGIwMjAzIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTE2MCw2ICYjNDM7MTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9IFx1MDAyNm1lbWJsb2NrLm1lbW9yeTtcbiBcdCAgICAgaSBcdTAwM2MgbWVtYmxvY2tfdHlwZS1cdTAwM2VjbnQ7XHRcdFx0XHRcdFxcXG4gXHQgICAgIGkmIzQzOyYjNDM7LCByZ24gPSBcdTAwMjZtZW1ibG9ja190eXBlLVx1MDAzZXJlZ2lvbnNbaV0pXG4gXG4mIzQzOyNkZWZpbmUgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGksIG1lbWJsb2NrX3R5cGUsIHJnbiwgc3RhcnQpXHRcXFxuJiM0MztcdGZvciAoaSA9IChzdGFydCksIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXTtcdFx0XFxcbiYjNDM7XHQgICAgIGkgXHUwMDNjIG1lbWJsb2NrX3R5cGUtXHUwMDNlY250O1x0XHRcdFx0XHRcXFxuJiM0MztcdCAgICAgaSYjNDM7JiM0MzssIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXSlcbiYjNDM7XG4gI2RlZmluZSBtZW1ibG9ja19kYmcoZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbiBcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0aWYgKG1lbWJsb2NrX2RlYnVnKVx0XHRcdFx0XHRcXFxuQEAgLTU5MSw2ICYjNDM7NTk2LDMzIEBAIHN0YXRpYyB2b2lkIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pbnNlcnRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0dHlwZS1cdTAwM2V0b3RhbF9zaXplICYjNDM7PSBzaXplO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCBcdTAwM2UgYmFzZVxuJiM0MzsgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBzZWFyY2hcbiYjNDM7ICogQGJhc2U6IGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2FuZGlkYXRlIHJhbmdlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgQGJhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuJiM0MztcdFx0XHRcdFx0XHQgIHBoeXNfYWRkcl90IGJhc2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbWlkLCBsb3cgPSAwO1xuJiM0MztcdGludCBoaWdoID0gdHlwZS1cdTAwM2VjbnQ7XG4mIzQzO1xuJiM0MztcdGlmICh0eXBlLVx1MDAzZWNudCBcdTAwMjZcdTAwMjYgYmFzZSBcdTAwM2U9IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLmJhc2UgJiM0MztcbiYjNDM7XHRcdFx0XHQgdHlwZS1cdTAwM2VyZWdpb25zW3R5cGUtXHUwMDNlY250IC0gMV0uc2l6ZSlcbiYjNDM7XHRcdHJldHVybiB0eXBlLVx1MDAzZWNudDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxvdyBcdTAwM2MgaGlnaCkge1xuJiM0MztcdFx0bWlkID0gKGxvdyAmIzQzOyBoaWdoKSAvIDI7XG4mIzQzO1x0XHRpZiAodHlwZS1cdTAwM2VyZWdpb25zW21pZF0uYmFzZSAmIzQzOyB0eXBlLVx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFx1MDAzYz0gYmFzZSlcbiYjNDM7XHRcdFx0bG93ID0gbWlkICYjNDM7IDE7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhpZ2ggPSBtaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBsb3c7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cbiAgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXG5AQCAtNjUxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRiYXNlID0gb2Jhc2U7XG4gXHRucl9uZXcgPSAwO1xuIFxuLVx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikge1xuJiM0MztcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiYjNDM7XHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgJiM0MzsgcmduLVx1MDAzZXNpemU7XG4gXG5AQCAtODI3LDcgJiM0Mzs4NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikge1xuJiM0MztcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiYjNDM7XHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgJiM0MzsgcmduLVx1MDAzZXNpemU7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtYmxvY2tfYnNlYXJjaF9zdGFydCYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19yZW1vdmVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3BoeXNfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1ibG9jay5jKSwgaW50cm9kdWNpbmcgYmluYXJ5IHNlYXJjaCAobWVtYmxvY2tfYnNlYXJjaF9zdGFydCkgdG8gZmluZCBjYW5kaWRhdGUgcmVnaW9ucyBpbiBtZW1ibG9ja19hZGRfcmFuZ2UgYW5kIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UuIFRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWdpb24gc3BsaXR0aW5nL21lcmdpbmcgYWxnb3JpdGhtcyByZWFjaGFibGUgYXQgcnVudGltZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGhvdHJlbW92ZSB3aGVuIG1lbWJsb2NrIG1ldGFkYXRhIGlzIHJldGFpbmVkIChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCByZWdpb24gbWFuaXB1bGF0aW9uIGxvZ2ljIGFuZCBib3VuZGFyaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjZmMGU4MjViZmM4MzcyZDU1ZGQ4YjBiZjhiMTUwMWMwOTBmZDQ0MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDA6NTM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi44ODk0MDQ3NGIwMjAzIDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTE2MCw2ICYjNDM7MTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9ICZhbXA7bWVtYmxvY2subWVtb3J5OwogCSAgICAgaSAmbHQ7IG1lbWJsb2NrX3R5cGUtJmd0O2NudDsJCQkJCVwKIAkgICAgIGkmIzQzOyYjNDM7LCByZ24gPSAmYW1wO21lbWJsb2NrX3R5cGUtJmd0O3JlZ2lvbnNbaV0pCiAKJiM0MzsjZGVmaW5lIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpLCBtZW1ibG9ja190eXBlLCByZ24sIHN0YXJ0KQlcCiYjNDM7CWZvciAoaSA9IChzdGFydCksIHJnbiA9ICZhbXA7bWVtYmxvY2tfdHlwZS0mZ3Q7cmVnaW9uc1tpXTsJCVwKJiM0MzsJICAgICBpICZsdDsgbWVtYmxvY2tfdHlwZS0mZ3Q7Y250OwkJCQkJXAomIzQzOwkgICAgIGkmIzQzOyYjNDM7LCByZ24gPSAmYW1wO21lbWJsb2NrX3R5cGUtJmd0O3JlZ2lvbnNbaV0pCiYjNDM7CiAjZGVmaW5lIG1lbWJsb2NrX2RiZyhmbXQsIC4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAobWVtYmxvY2tfZGVidWcpCQkJCQlcCkBAIC01OTEsNiAmIzQzOzU5NiwzMyBAQCBzdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKIAl0eXBlLSZndDt0b3RhbF9zaXplICYjNDM7PSBzaXplOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kICZndDsgYmFzZQomIzQzOyAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIHNlYXJjaAomIzQzOyAqIEBiYXNlOiBiYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNhbmRpZGF0ZSByYW5nZQomIzQzOyAqCiYjNDM7ICogUmV0dXJucyB0aGUgZmlyc3QgcmVnaW9uIGluZGV4IHRoYXQgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCBAYmFzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAomIzQzOwkJCQkJCSAgcGh5c19hZGRyX3QgYmFzZSkKJiM0Mzt7CiYjNDM7CWludCBtaWQsIGxvdyA9IDA7CiYjNDM7CWludCBoaWdoID0gdHlwZS0mZ3Q7Y250OwomIzQzOwomIzQzOwlpZiAodHlwZS0mZ3Q7Y250ICZhbXA7JmFtcDsgYmFzZSAmZ3Q7PSB0eXBlLSZndDtyZWdpb25zW3R5cGUtJmd0O2NudCAtIDFdLmJhc2UgJiM0MzsKJiM0MzsJCQkJIHR5cGUtJmd0O3JlZ2lvbnNbdHlwZS0mZ3Q7Y250IC0gMV0uc2l6ZSkKJiM0MzsJCXJldHVybiB0eXBlLSZndDtjbnQ7CiYjNDM7CiYjNDM7CXdoaWxlIChsb3cgJmx0OyBoaWdoKSB7CiYjNDM7CQltaWQgPSAobG93ICYjNDM7IGhpZ2gpIC8gMjsKJiM0MzsJCWlmICh0eXBlLSZndDtyZWdpb25zW21pZF0uYmFzZSAmIzQzOyB0eXBlLSZndDtyZWdpb25zW21pZF0uc2l6ZSAmbHQ7PSBiYXNlKQomIzQzOwkJCWxvdyA9IG1pZCAmIzQzOyAxOwomIzQzOwkJZWxzZQomIzQzOwkJCWhpZ2ggPSBtaWQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGxvdzsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1lbWJsb2NrX2FkZF9yYW5nZSAtIGFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uCiAgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvCkBAIC02NTEsNyAmIzQzOzY4Myw4IEBAIHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKIAliYXNlID0gb2Jhc2U7CiAJbnJfbmV3ID0gMDsKIAotCWZvcl9lYWNoX21lbWJsb2NrX3R5cGUoaWR4LCB0eXBlLCByZ24pIHsKJiM0MzsJZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLAomIzQzOwkJCQkgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkgewogCQlwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi0mZ3Q7YmFzZTsKIAkJcGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICYjNDM7IHJnbi0mZ3Q7c2l6ZTsKIApAQCAtODI3LDcgJiM0Mzs4NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAogCQlpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpICZsdDsgMCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikgewomIzQzOwlmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaWR4LCB0eXBlLCByZ24sCiYjNDM7CQkJCSAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7CiAJCXBoeXNfYWRkcl90IHJiYXNlID0gcmduLSZndDtiYXNlOwogCQlwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgJiM0MzsgcmduLSZndDtzaXplOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGV2ZW4gd29ydGggb3VyIHRpbWUgZnV6emluZywgYW5kIGlmIHNvLCBob3cgdG8gYmVzdCBhcHByb2FjaCBpdC4gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5PyBBbmQgd2hhdCBhcmUgb3VyIGtleSBmb2N1cyBzeW1ib2xzPwoKRmlyc3QsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmaWxlLCBgbW0vbWVtYmxvY2suY2AuIEhtbSwgSSBzZWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkOiBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYCwgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgLCBgbWVtYmxvY2tfYWRkX3JhbmdlYCwgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gVGhhdCBgX19pbml0X21lbWJsb2NrYCBwcmVmaXguLi4gd2FpdCBhIG1pbnV0ZSEgQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbmx5IHVzZWQgZHVyaW5nIGVhcmx5IGJvb3QsIHRoZSBpbml0IHBoYXNlLCBvciBpcyB0aGVyZSBhIHBvc3NpYmlsaXR5IHRoYXQgYG1lbWJsb2NrYCBjb2RlIGlzIGFjY2Vzc2libGUgYXQgcnVudGltZSwgcGVyaGFwcyBmb3Igc29tZXRoaW5nIGxpa2UgbWVtb3J5IGhvdHBsdWc/CgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBtZW1ibG9ja19hZGRfcmFuZ2VgLCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAsIG9yIG90aGVyIGBtZW1ibG9ja18qYCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBsYXRlciwgaW4gdGhlIG1haW4gcnVudGltZSBvZiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBtbS9tZW1ibG9jay5jYCBhbmQgdHJhY2UgdGhvc2UgY2FsbHMuIFRpbWUgdG8gYnJlYWsgb3V0IGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBhbmQgZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfYWRkX3JhbmdlfG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYz02MDY9c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYnNlYXJjaF9zdGFydChzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbi0tXG5tbS9tZW1ibG9jay5jLTYyNi0vKipcbm1tL21lbWJsb2NrLmM6NjI3OiAqIG1lbWJsb2NrX2FkZF9yYW5nZSAtIGFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uXG5tbS9tZW1ibG9jay5jLTYyOC0gKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXG4tLVxubW0vbWVtYmxvY2suYy02NDEtICovXG5tbS9tZW1ibG9jay5jOjY0MjpzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG5tbS9tZW1ibG9jay5jLTY0My1cdFx0XHRcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4tLVxubW0vbWVtYmxvY2suYy03NTYtICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkgdG8gdGhlIFwmIzM0O21lbW9yeVwmIzM0O1xubW0vbWVtYmxvY2suYzo3NTc6ICogdHlwZS4gU2VlIG1lbWJsb2NrX2FkZF9yYW5nZSgpIGRlc2NyaXB0aW9uIGZvciBtb2RlIGRldGFpbHNcbm1tL21lbWJsb2NrLmMtNzU4LSAqXG4tLVxubW0vbWVtYmxvY2suYz03NjI9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfbm9kZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtNzY5LVxubW0vbWVtYmxvY2suYzo3NzA6XHRyZXR1cm4gbWVtYmxvY2tfYWRkX3JhbmdlKFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgbmlkLCBmbGFncyk7XG5tbS9tZW1ibG9jay5jLTc3MS19XG4tLVxubW0vbWVtYmxvY2suYy03NzgtICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkgdG8gdGhlIFwmIzM0O21lbW9yeVwmIzM0O1xubW0vbWVtYmxvY2suYzo3Nzk6ICogdHlwZS4gU2VlIG1lbWJsb2NrX2FkZF9yYW5nZSgpIGRlc2NyaXB0aW9uIGZvciBtb2RlIGRldGFpbHNcbm1tL21lbWJsb2NrLmMtNzgwLSAqXG4tLVxubW0vbWVtYmxvY2suYz03ODQ9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbi0tXG5tbS9tZW1ibG9jay5jLTc5MC1cbm1tL21lbWJsb2NrLmM6NzkxOlx0cmV0dXJuIG1lbWJsb2NrX2FkZF9yYW5nZShcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIE1BWF9OVU1OT0RFUywgMCk7XG5tbS9tZW1ibG9jay5jLTc5Mi19XG4tLVxubW0vbWVtYmxvY2suYz04MDU9Ym9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcylcbi0tXG5tbS9tZW1ibG9jay5jLTgyOC0vKipcbm1tL21lbWJsb2NrLmM6ODI5OiAqIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UgLSBpc29sYXRlIGdpdmVuIHJhbmdlIGludG8gZGlzam9pbnQgbWVtYmxvY2tzXG5tbS9tZW1ibG9jay5jLTgzMC0gKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBpc29sYXRlIHJhbmdlIGZvclxuLS1cbm1tL21lbWJsb2NrLmMtODQ0LSAqL1xubW0vbWVtYmxvY2suYzo4NDU6c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbm1tL21lbWJsb2NrLmMtODQ2LVx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmM9OTA2PXN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbi0tXG5tbS9tZW1ibG9jay5jLTkxMS1cbm1tL21lbWJsb2NrLmM6OTEyOlx0cmV0ID0gbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSh0eXBlLCBiYXNlLCBzaXplLCBcdTAwMjZzdGFydF9yZ24sIFx1MDAyNmVuZF9yZ24pO1xubW0vbWVtYmxvY2suYy05MTMtXHRpZiAocmV0KVxuLS1cbm1tL21lbWJsb2NrLmM9MTA0MT1pbnQgX19pbml0X21lbWJsb2NrIF9fbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtMTA0OC1cbm1tL21lbWJsb2NrLmM6MTA0OTpcdHJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUsIG5pZCwgZmxhZ3MpO1xubW0vbWVtYmxvY2suYy0xMDUwLX1cbi0tXG5tbS9tZW1ibG9jay5jPTEwNTM9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzbWVtX2FkZChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbm1tL21lbWJsb2NrLmMtMTA1OS1cbm1tL21lbWJsb2NrLmM6MTA2MDpcdHJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoXHUwMDI2cGh5c21lbSwgYmFzZSwgc2l6ZSwgTUFYX05VTU5PREVTLCAwKTtcbm1tL21lbWJsb2NrLmMtMTA2MS19XG4tLVxubW0vbWVtYmxvY2suYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3NldGNscl9mbGFnKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuLS1cbm1tL21lbWJsb2NrLmMtMTA4MC1cbm1tL21lbWJsb2NrLmM6MTA4MTpcdHJldCA9IG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UodHlwZSwgYmFzZSwgc2l6ZSwgXHUwMDI2c3RhcnRfcmduLCBcdTAwMjZlbmRfcmduKTtcbm1tL21lbWJsb2NrLmMtMTA4Mi1cdGlmIChyZXQpXG4tLVxubW0vbWVtYmxvY2suYz0xNTIzPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9tZW1ibG9jay5jLTE1MjktXG5tbS9tZW1ibG9jay5jOjE1MzA6XHRyZXQgPSBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHR5cGUsIGJhc2UsIHNpemUsIFx1MDAyNnN0YXJ0X3JnbiwgXHUwMDI2ZW5kX3Jnbik7XG5tbS9tZW1ibG9jay5jLTE1MzEtXHRpZiAocmV0KVxuLS1cbm1tL21lbWJsb2NrLmM9MjA1Mz12b2lkIF9faW5pdCBtZW1ibG9ja19jYXBfbWVtb3J5X3JhbmdlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4tLVxubW0vbWVtYmxvY2suYy0yMDY1LVxubW0vbWVtYmxvY2suYzoyMDY2Olx0cmV0ID0gbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsXG5tbS9tZW1ibG9jay5jLTIwNjctXHRcdFx0XHRcdFx0XHUwMDI2c3RhcnRfcmduLCBcdTAwMjZlbmRfcmduKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYF9faW5pdF9tZW1ibG9ja2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBfX2luaXRfbWVtYmxvY2tgLiBNeSBmaXJzdCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGRldGVybWluZSB3aGVyZSBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQuIEdpdmVuIHRoYXQgSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBJJiMzOTtsbCBhc3N1bWUgaXQmIzM5O3MgcGFydCBvZiB0aGUga2VybmVsIG9yIGEgcmVsYXRlZCBsaWJyYXJ5LiBTbywgSSBuZWVkIHRvIGZpbmQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgc2luY2UgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgZGVmaW5lZCwgSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwYC4gQSBzaW1wbGUgYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBfX2luaXRfbWVtYmxvY2tgIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgc2NhbiB0aGUgcmVzdWx0cyB0byBzZWUgdGhlIGZpbGUgYW5kIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIHF1aWNrbHkgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBfX2luaXRfbWVtYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTExND1leHRlcm4gc3RydWN0IG1lbWJsb2NrIG1lbWJsb2NrO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTYtI2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTE3OiNkZWZpbmUgX19pbml0X21lbWJsb2NrIF9fbWVtaW5pdFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTExOC0jZGVmaW5lIF9faW5pdGRhdGFfbWVtYmxvY2sgX19tZW1pbml0ZGF0YVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTExOT12b2lkIG1lbWJsb2NrX2Rpc2NhcmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTIwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTIxOiNkZWZpbmUgX19pbml0X21lbWJsb2NrXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTIyLSNkZWZpbmUgX19pbml0ZGF0YV9tZW1ibG9ja1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIEZpcnN0IHRoaW5ncyBmaXJzdDogYF9fbWVtaW5pdGAg4oCTIHRoYXQmIzM5O3MgZWl0aGVyIHRoZSBzYW1lIGFzIGBfX2luaXRgLCBvciBpdCYjMzk7cyByZXRhaW5lZCBpZiBtZW1vcnkgaG90cGx1ZyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgY29ycmVjdGx5LiBOb3csIGEga2V5IHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IGhvdyBjcnVjaWFsIGlzIHRoZSBtZW1ibG9jayBtZWNoYW5pc20gaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IFNwZWNpZmljYWxseSwgaXMgYG1lbWJsb2NrYCBzdGlsbCByZWxldmFudCBkdXJpbmcgcnVudGltZSB3aGVuIG1lbW9yeSBob3RwbHVnIGlzIGludm9sdmVkPyBPciBpcyBpdHMgcm9sZSBsaW1pdGVkIHRvIHRoZSBib290IHByb2Nlc3M/IElzIGl0IGRpc2NhcmRlZCBsYXRlciwgb3IgZG9lcyBpdCBzZXJ2ZSBzb21lIHB1cnBvc2UgdGhyb3VnaG91dCB0aGUgc3lzdGVtJiMzOTtzIGxpZmU/IFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIGNsYXJpZmljYXRpb24uCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIG15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgZGV0YWlsZWQgYXVkaXQgb2YgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoZSBgbWVtYmxvY2tfYWRkYCwgYG1lbWJsb2NrX2FkZF9yYW5nZWAsIGFuZCBvdGhlciBgbWVtYmxvY2tgIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgZXhhY3RseSBob3cgYG1lbWJsb2NrYCBpcyB1dGlsaXplZCwgd2hpY2ggaW4gdHVybiB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gYm90aCB0aGUgaW5pdGlhbCBib290IHNlcXVlbmNlIGFuZCBhbnkgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHRha2luZyBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1ibG9ja19hZGRcXCh8bWVtYmxvY2tfYWRkX25vZGVcXCh8bWVtYmxvY2tfcmVzZXJ2ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdD0xMzQ9WW91IGNhbiBzcGVjaWZ5IGVpdGhlciBSQU0gbWVtb3J5IG9yIHBlcmlwaGVyYWwgZGV2aWNlcyYjMzk7IG1lbW9yeS4gSG93ZXZlciwgd2hlblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdDoxMzU6c3BlY2lmeWluZyBSQU0sIGJlIHN1cmUgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IGJ5IGlzc3VpbmcgbWVtYmxvY2tfcmVzZXJ2ZSgpXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3JhbW9vcHMucnN0LTEzNi12ZXJ5IGVhcmx5IGluIHRoZSBhcmNoaXRlY3R1cmUgY29kZSwgZS5nLjo6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xMzktXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3JhbW9vcHMucnN0OjE0MDpcdG1lbWJsb2NrX3Jlc2VydmUocmFtb29wc19kYXRhLm1lbV9hZGRyZXNzLCByYW1vb3BzX2RhdGEubWVtX3NpemUpO1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xNDEtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jPTIwMj1hbGJhY29yZV9pbml0X2FyY2godm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2lyb25nYXRlLmMtMjQxLSNlbmRpZlxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jOjI0MjpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwY2lfbWVtLCBtZW10b3AgLSBwY2lfbWVtKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfaXJvbmdhdGUuYy0yNDMtXHRcdHByaW50ayhcJiMzNDtpcm9uZ2F0ZV9pbml0X2FyY2g6IHRlbXBvcmFyaWx5IHJlc2VydmluZyBcJiMzNDtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTI4Nj1zZXR1cF9tZW1vcnkodm9pZCAqa2VybmVsX2VuZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTMwNy1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6MzA4Olx0XHRtZW1ibG9ja19hZGQoUEZOX1BIWVMoY2x1c3Rlci1cdTAwM2VzdGFydF9wZm4pLFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zMDktXHRcdFx0ICAgICBjbHVzdGVyLVx1MDAzZW51bXBhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTMxNC1cdFx0aWYgKGNsdXN0ZXItXHUwMDNldXNhZ2UgXHUwMDI2IDMpXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjMxNTpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKFBGTl9QSFlTKGNsdXN0ZXItXHUwMDNlc3RhcnRfcGZuKSxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzE2LVx0XHRcdFx0ICAgICAgICAgY2x1c3Rlci1cdTAwM2VudW1wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zNDYtXHRrZXJuZWxfc2l6ZSA9IHZpcnRfdG9fcGh5cyhrZXJuZWxfZW5kKSAtIEtFUk5FTF9TVEFSVF9QSFlTO1xuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozNDc6XHRtZW1ibG9ja19yZXNlcnZlKEtFUk5FTF9TVEFSVF9QSFlTLCBrZXJuZWxfc2l6ZSk7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM0OC1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM2Mi1cdFx0fSBlbHNlIHtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6MzYzOlx0XHRcdG1lbWJsb2NrX3Jlc2VydmUodmlydF90b19waHlzKCh2b2lkICopaW5pdHJkX3N0YXJ0KSxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzY0LVx0XHRcdFx0XHRJTklUUkRfU0laRSk7XG4tLVxuYXJjaC9hcmMvbW0vaW5pdC5jPTUxPXZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSlcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtNjAtXHRcdGluX3VzZSA9IDE7XG5hcmNoL2FyYy9tbS9pbml0LmM6NjE6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDAsIE1FTUJMT0NLX05PTkUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jLTYyLVx0fSBlbHNlIHtcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtNjYtXHRcdGluX3VzZSA9IDE7XG5hcmNoL2FyYy9tbS9pbml0LmM6Njc6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDEsIE1FTUJMT0NLX05PTkUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jOjY4Olx0XHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jLTY5LSNlbmRpZlxuLS1cbmFyY2gvYXJjL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtMTIzLVxuYXJjaC9hcmMvbW0vaW5pdC5jOjEyNDpcdG1lbWJsb2NrX3Jlc2VydmUoQ09ORklHX0xJTlVYX0xJTktfQkFTRSxcbmFyY2gvYXJjL21tL2luaXQuYy0xMjUtXHRcdFx0IF9fcGEoX2VuZCkgLSBDT05GSUdfTElOVVhfTElOS19CQVNFKTtcbi0tXG5hcmNoL2FyYy9tbS9pbml0LmMtMTI4LVx0aWYgKHBoeXNfaW5pdHJkX3NpemUpIHtcbmFyY2gvYXJjL21tL2luaXQuYzoxMjk6XHRcdG1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpO1xuYXJjaC9hcmMvbW0vaW5pdC5jLTEzMC1cdFx0aW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShwaHlzX2luaXRyZF9zdGFydCk7XG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9NzYwPWludCBfX2luaXQgYXJtX2FkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04MTYtXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4MTc6XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODE4LVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9MTA5Nj12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtMTEwNy1cdFx0aWYgKG1kZXNjKVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM6MTEwODpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKF9fYXRhZ3NfcG9pbnRlcixcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTExMDktXHRcdFx0XHRcdCBmZHRfdG90YWxzaXplKGF0YWdzX3ZhZGRyKSk7XG4tLVxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmM9MjY1PXN0YXRpYyBpbnQgX19pbml0IGhpcDA0X3NtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg3LVxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmM6Mjg4Olx0cmV0ID0gbWVtYmxvY2tfcmVzZXJ2ZShoaXAwNF9ib290X21ldGhvZFswXSwgaGlwMDRfYm9vdF9tZXRob2RbMV0pO1xuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg5LVx0aWYgKHJldClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9NjY9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc2Nhbl9tZW0odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtOTEtXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6OTI6XHRcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgTVZFQlVfRERSX1RSQUlOSU5HX0FSRUFfU1opO1xuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTkzLVx0fVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy05Ny1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzo5ODpzdGF0aWMgdm9pZCBfX2luaXQgbXZlYnVfbWVtYmxvY2tfcmVzZXJ2ZSh2b2lkKVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTk5LXtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTAyLSNlbHNlXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTAzOnN0YXRpYyB2b2lkIF9faW5pdCBtdmVidV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpIHt9XG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTA0LSNlbmRpZlxuLS1cbmFyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmM9MTEzND1zdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfZml4dXAoc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUpXG4tLVxuYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYy0xMTM2LVx0c2hhcnBzbF9zYXZlX3BhcmFtKCk7XG5hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jOjExMzc6XHRtZW1ibG9ja19hZGQoMHhhMDAwMDAwMCwgU1pfNjRNKTtcbmFyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMtMTEzOC19XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW50ZWdyYXRvci5jPTkxPXZvaWQgX19pbml0IGludGVncmF0b3JfcmVzZXJ2ZSh2b2lkKVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW50ZWdyYXRvci5jLTkyLXtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2ludGVncmF0b3IuYzo5MzpcdG1lbWJsb2NrX3Jlc2VydmUoUEhZU19PRkZTRVQsIF9fcGEoc3dhcHBlcl9wZ19kaXIpIC0gUEhZU19PRkZTRVQpO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW50ZWdyYXRvci5jLTk0LX1cbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9NTI9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfbWVtb3J5X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtNTQtXHRpZiAoIV9fcGEoUEFHRV9PRkZTRVQpKVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjU1Olx0XHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoUEFHRV9PRkZTRVQpLCAweDgwMDAwKTtcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy01Ni19XG4tLVxuYXJjaC9hcm0vbW0vaW5pdC5jPTE4MD12b2lkIF9faW5pdCBhcm1fbWVtYmxvY2tfaW5pdChjb25zdCBzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYylcbi0tXG5hcmNoL2FybS9tbS9pbml0LmMtMTgyLVx0LyogUmVnaXN0ZXIgdGhlIGtlcm5lbCB0ZXh0LCBrZXJuZWwgZGF0YSBhbmQgaW5pdHJkIHdpdGggbWVtYmxvY2suICovXG5hcmNoL2FybS9tbS9pbml0LmM6MTgzOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKEtFUk5FTF9TVEFSVCksIEtFUk5FTF9FTkQgLSBLRVJORUxfU1RBUlQpO1xuYXJjaC9hcm0vbW0vaW5pdC5jLTE4NC1cbi0tXG5hcmNoL2FybS9tbS9pbml0LmMtMTg2LVxuYXJjaC9hcm0vbW0vaW5pdC5jOjE4NzpcdGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKCk7XG5hcmNoL2FybS9tbS9pbml0LmMtMTg4LVxuLS1cbmFyY2gvYXJtL21tL21tLmg9ODk9dm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpO1xuYXJjaC9hcm0vbW0vbW0uaDo5MDp2b2lkIGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpO1xuYXJjaC9hcm0vbW0vbW0uaC05MS0jaWZkZWYgQ09ORklHX0NNQV9BUkVBU1xuLS1cbmFyY2gvYXJtL21tL21tdS5jPTEyNzM9c3RhdGljIF9faW5pdCB2b2lkIHByZXBhcmVfcGFnZV90YWJsZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL21tdS5jLTEzMzQtICovXG5hcmNoL2FybS9tbS9tbXUuYzoxMzM1OnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXG5hcmNoL2FybS9tbS9tbXUuYy0xMzM2LXtcbi0tXG5hcmNoL2FybS9tbS9tbXUuYy0xMzQwLVx0ICovXG5hcmNoL2FybS9tbS9tbXUuYzoxMzQxOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKHN3YXBwZXJfcGdfZGlyKSwgU1dBUFBFUl9QR19ESVJfU0laRSk7XG5hcmNoL2FybS9tbS9tbXUuYy0xMzQyLVxuLS1cbmFyY2gvYXJtL21tL21tdS5jLTEzNDctXHQgKi9cbmFyY2gvYXJtL21tL21tdS5jOjEzNDg6XHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTtcbmFyY2gvYXJtL21tL21tdS5jLTEzNDktI2VuZGlmXG4tLVxuYXJjaC9hcm0vbW0vbm9tbXUuYz02Mz11bnNpZ25lZCBsb25nIHNldHVwX3ZlY3RvcnNfYmFzZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL25vbW11LmMtODEtXG5hcmNoL2FybS9tbS9ub21tdS5jOjgyOnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXG5hcmNoL2FybS9tbS9ub21tdS5jLTgzLXtcbi0tXG5hcmNoL2FybS9tbS9ub21tdS5jLTkwLVx0ICovXG5hcmNoL2FybS9tbS9ub21tdS5jOjkxOlx0bWVtYmxvY2tfcmVzZXJ2ZSh2ZWN0b3JzX2Jhc2UsIDIgKiBQQUdFX1NJWkUpO1xuYXJjaC9hcm0vbW0vbm9tbXUuYy05Mi0jZWxzZSAvKiBpZm5kZWYgQ09ORklHX0NQVV9WN00gKi9cbi0tXG5hcmNoL2FybS9tbS9ub21tdS5jLTEwMS1cdCAqL1xuYXJjaC9hcm0vbW0vbm9tbXUuYzoxMDI6XHRtZW1ibG9ja19yZXNlcnZlKDAsIDEpO1xuYXJjaC9hcm0vbW0vbm9tbXUuYy0xMDMtfVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYz0yMzU9dm9pZCBjcmFzaF9wb3N0X3Jlc3VtZSh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYy0yNDctICogTm90ZSB0aGF0IGFsbCB0aGUgcGFnZXMgaW4gY3Jhc2ggZHVtcCBrZXJuZWwgbWVtb3J5IGhhdmUgYmVlbiBpbml0aWFsbHlcbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYzoyNDg6ICogbWFya2VkIGFzIFJlc2VydmVkIGFzIG1lbW9yeSB3YXMgYWxsb2NhdGVkIHZpYSBtZW1ibG9ja19yZXNlcnZlKCkuXG5hcmNoL2FybTY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMjQ5LSAqXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYz0xNzA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21hY2hpbmVfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0xNzYtXHRpZiAoZHRfdmlydClcbmFyY2gvYXJtNjQva2VybmVsL3NldHVwLmM6MTc3Olx0XHRtZW1ibG9ja19yZXNlcnZlKGR0X3BoeXMsIHNpemUpO1xuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYy0xNzgtXG4tLVxuYXJjaC9hcm02NC9tbS9pbml0LmM9MTk2PXZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybTY0L21tL2luaXQuYy0yNTYtXHRcdG1lbWJsb2NrX21lbV9saW1pdF9yZW1vdmVfbWFwKG1lbW9yeV9saW1pdCk7XG5hcmNoL2FybTY0L21tL2luaXQuYzoyNTc6XHRcdG1lbWJsb2NrX2FkZChfX3BhX3N5bWJvbChfdGV4dCksIChyZXNvdXJjZV9zaXplX3QpKF9lbmQgLSBfdGV4dCkpO1xuYXJjaC9hcm02NC9tbS9pbml0LmMtMjU4LVx0fVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI4Mi1cdFx0fSBlbHNlIHtcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjI4MzpcdFx0XHRtZW1ibG9ja19hZGQoYmFzZSwgc2l6ZSk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0yODQtXHRcdFx0bWVtYmxvY2tfY2xlYXJfbm9tYXAoYmFzZSwgc2l6ZSk7XG5hcmNoL2FybTY0L21tL2luaXQuYzoyODU6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTtcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI4Ni1cdFx0fVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5Mi1cdCAqL1xuYXJjaC9hcm02NC9tbS9pbml0LmM6MjkzOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChfdGV4dCksIF9lbmQgLSBfdGV4dCk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0yOTQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTklUUkQpIFx1MDAyNlx1MDAyNiBwaHlzX2luaXRyZF9zaXplKSB7XG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTE2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbml0cmQodm9pZClcbi0tXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtMzctXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6Mzg6XHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoaW5pdHJkX3N0YXJ0KSwgc2l6ZSk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtMzktXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTYyPXN0YXRpYyB2b2lkIF9faW5pdCBjc2t5X21lbWJsb2NrX2luaXQodm9pZClcbi0tXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjctXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6Njg6XHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoX3N0YXJ0KSwgX2VuZCAtIF9zdGFydCk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjktXG4tLVxuYXJjaC9oZXhhZ29uL21tL2luaXQuYz0xMDQ9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jLTEyMy1cbmFyY2gvaGV4YWdvbi9tbS9pbml0LmM6MTI0Olx0bWVtYmxvY2tfYWRkKFBIWVNfT0ZGU0VULFxuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMjUtXHRcdCAgICAgKGJvb3RtZW1fbGFzdHBnIC0gQVJDSF9QRk5fT0ZGU0VUKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4tLVxuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMjctXHQvKiBSZXNlcnZlIGtlcm5lbCB0ZXh0L2RhdGEvYnNzICovXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jOjEyODpcdG1lbWJsb2NrX3Jlc2VydmUoUEhZU19PRkZTRVQsXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jLTEyOS1cdFx0XHQgKGJvb3RtZW1fc3RhcnRwZyAtIEFSQ0hfUEZOX09GRlNFVCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuLS1cbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTM1LVx0bWluX2xvd19wZm4gPSBBUkNIX1BGTl9PRkZTRVQ7XG5hcmNoL2hleGFnb24vbW0vaW5pdC5jOjEzNjpcdG1lbWJsb2NrX3Jlc2VydmUoUEZOX1BIWVMobWF4X2xvd19wZm4pLCBETUFfUkVTRVJWRURfQllURVMpO1xuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMzctXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2FjcGkuYz0zNzg9dm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX21lbV9hcmVhKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyLCBzaXplX3Qgc2l6ZSlcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9hY3BpLmMtMzc5LXtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9hY3BpLmM6MzgwOlx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9hY3BpLmMtMzgxLX1cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM9ODI9c3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJpbWFyeV9kaXNwbGF5KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTk3LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jOjk4Olx0bWVtYmxvY2tfcmVzZXJ2ZShfX3NjcmVlbl9pbmZvX2xmYl9iYXNlKFx1MDAyNnN5c2ZiX3ByaW1hcnlfZGlzcGxheS5zY3JlZW4pLFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTk5LVx0XHRcdCBzeXNmYl9wcmltYXJ5X2Rpc3BsYXkuc2NyZWVuLmxmYl9zaXplKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM9MTAyPXZvaWQgX19pbml0IGVmaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTE1OC1cdFx0ICovXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM6MTU5Olx0XHRtZW1ibG9ja19yZXNlcnZlKChwaHlzX2FkZHJfdClib290X21lbW1hcCwgc2l6ZW9mKCp0YmwpICYjNDM7IGRhdGEuc2l6ZSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmMtMTYwLVx0XHRzZXRfYml0KEVGSV9QUkVTRVJWRV9CU19SRUdJT05TLCBcdTAwMjZlZmkuZmxhZ3MpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYz0xMz12b2lkIF9faW5pdCBtZW1ibG9ja19pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTMxLVx0XHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjMyOlx0XHRcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy0zMy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtMzYtXHRcdGNhc2UgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlk6XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6Mzc6XHRcdFx0bWVtYmxvY2tfYWRkKG1lbV9zdGFydCwgbWVtX3NpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTM4LVx0XHRcdGZhbGx0aHJvdWdoO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy00My1cdFx0Y2FzZSBFRklfTUVNT1JZX01BUFBFRF9JT19QT1JUX1NQQUNFOlxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjQ0Olx0XHRcdG1lbWJsb2NrX3Jlc2VydmUobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNDUtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTUzLVx0LyogUmVzZXJ2ZSB0aGUgZmlyc3QgMk1CICovXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6NTQ6XHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCAweDIwMDAwMCk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTUtXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTYtXHQvKiBSZXNlcnZlIHRoZSBrZXJuZWwgdGV4dC9kYXRhL2JzcyAqL1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjU3Olx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcdTAwMjZfdGV4dCksXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTgtXHRcdFx0IF9fcGFfc3ltYm9sKFx1MDAyNl9lbmQpIC0gX19wYV9zeW1ib2woXHUwMDI2X3RleHQpKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz0xOTE9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjIxLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjIyMjpcdFx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTIyMy1cdGVsc2VcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjIyNDpcdFx0bWVtYmxvY2tfYWRkX25vZGUoc3RhcnQsIHNpemUsIHBhX3RvX25pZChzdGFydCksIE1FTUJMT0NLX05PTkUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjI1LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTIzMD1zdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX3ZtY29yZSh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1Ny1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1ODpcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjU5LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfa2VybmVsX3NlY3Rpb25zX21lbSh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM4Ni1cdFx0cHJfaW5mbyhcJiMzNDtLZXJuZWwgc2VjdGlvbnMgYXJlIG5vdCBpbiB0aGUgbWVtb3J5IG1hcHNcXG5cJiMzNDspO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6Mzg3Olx0XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzg4LVx0fVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYz0yMDY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYy0zMzAtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTklUUkQpIFx1MDAyNlx1MDAyNiBtNjhrX3JhbWRpc2suc2l6ZSlcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYzozMzE6XHRcdG1lbWJsb2NrX3Jlc2VydmUobTY4a19yYW1kaXNrLmFkZHIsIG02OGtfcmFtZGlzay5zaXplKTtcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYy0zMzItXG4tLVxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jPTgyPXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMtMTQyLVxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jOjE0MzpcdG1lbWJsb2NrX2FkZChfcmFtYmFzZSwgbWVtb3J5X2VuZCAtIF9yYW1iYXNlKTtcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYzoxNDQ6XHRtZW1ibG9ja19yZXNlcnZlKF9yYW1iYXNlLCBtZW1vcnlfc3RhcnQgLSBfcmFtYmFzZSk7XG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMtMTQ1LVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYy0xNTktXHRcdFx0KGluaXRyZF9lbmQgXHUwMDNjIG1lbW9yeV9lbmQpKVxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jOjE2MDpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpO1xuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jLTE2MS0jZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTklUUkQpICovXG4tLVxuYXJjaC9tNjhrL21tL21jZm1tdS5jPTE0OD12b2lkIF9faW5pdCBjZl9ib290bWVtX2FsbG9jKHZvaWQpXG4tLVxuYXJjaC9tNjhrL21tL21jZm1tdS5jLTE1NS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYzoxNTY6XHRtZW1ibG9ja19hZGRfbm9kZShtNjhrX21lbW9yeVswXS5hZGRyLCBtNjhrX21lbW9yeVswXS5zaXplLCAwLFxuYXJjaC9tNjhrL21tL21jZm1tdS5jLTE1Ny1cdFx0XHQgIE1FTUJMT0NLX05PTkUpO1xuLS1cbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy0xNjgtXHQvKiBSZXNlcnZlIGtlcm5lbCB0ZXh0L2RhdGEvYnNzICovXG5hcmNoL202OGsvbW0vbWNmbW11LmM6MTY5Olx0bWVtYmxvY2tfcmVzZXJ2ZShfcmFtYmFzZSwgbWVtc3RhcnQgLSBfcmFtYmFzZSk7XG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTcwLVxuLS1cbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jPTQzMD12b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ1MS1cdG1heF9hZGRyID0gbWluX2FkZHIgJiM0MzsgbTY4a19tZW1vcnlbMF0uc2l6ZSAtIDE7XG5hcmNoL202OGsvbW0vbW90b3JvbGEuYzo0NTI6XHRtZW1ibG9ja19hZGRfbm9kZShtNjhrX21lbW9yeVswXS5hZGRyLCBtNjhrX21lbW9yeVswXS5zaXplLCAwLFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDUzLVx0XHRcdCAgTUVNQkxPQ0tfTk9ORSk7XG4tLVxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDYzLVx0XHR9XG5hcmNoL202OGsvbW0vbW90b3JvbGEuYzo0NjQ6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKG02OGtfbWVtb3J5W2ldLmFkZHIsIG02OGtfbWVtb3J5W2ldLnNpemUsIGksXG5hcmNoL202OGsvbW0vbW90b3JvbGEuYy00NjUtXHRcdFx0XHQgIE1FTUJMT0NLX05PTkUpO1xuLS1cbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ4Mi1cdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGluIGhlYWQuUyAqL1xuYXJjaC9tNjhrL21tL21vdG9yb2xhLmM6NDgzOlx0bWVtYmxvY2tfcmVzZXJ2ZShtNjhrX21lbW9yeVswXS5hZGRyLCBhdmFpbG1lbSAtIG02OGtfbWVtb3J5WzBdLmFkZHIpO1xuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDg0LVxuLS1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTE5OC1cdGtzaXplID0gUEFHRV9BTElHTigoKHUzMilfZW5kIC0gKHUzMilDT05GSUdfS0VSTkVMX1NUQVJUKSk7XG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjE5OTpcdG1lbWJsb2NrX3Jlc2VydmUoa3N0YXJ0LCBrc2l6ZSk7XG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIwMC1cbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIwNS1cdFx0c2l6ZSA9IGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQ7XG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjIwNjpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3ZpcnRfdG9fcGh5cyhpbml0cmRfc3RhcnQpLCBzaXplKTtcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjA3LVx0fVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmM9ODM9dm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYy05Ny1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmM6OTg6XHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jLTk5LX1cbi0tXG5hcmNoL21pcHMvYXRoMjUvYXIyMzE1LmM9MjU1PXZvaWQgX19pbml0IGFyMjMxNV9wbGF0X21lbV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9hdGgyNS9hcjIzMTUuYy0yNjktXHRtZW1zaXplIFx1MDAzY1x1MDAzYz0gMztcbmFyY2gvbWlwcy9hdGgyNS9hcjIzMTUuYzoyNzA6XHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XG5hcmNoL21pcHMvYXRoMjUvYXIyMzE1LmMtMjcxLVx0aW91bm1hcChzZHJhbV9iYXNlKTtcbi0tXG5hcmNoL21pcHMvYXRoMjUvYXI1MzEyLmM9MzUxPXZvaWQgX19pbml0IGFyNTMxMl9wbGF0X21lbV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9hdGgyNS9hcjUzMTIuYy0zNjUtXHRtZW1zaXplIFx1MDAzY1x1MDAzYz0gMjA7XG5hcmNoL21pcHMvYXRoMjUvYXI1MzEyLmM6MzY2Olx0bWVtYmxvY2tfYWRkKDAsIG1lbXNpemUpO1xuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jLTM2Ny1cdGlvdW5tYXAoc2RyYW1fYmFzZSk7XG4tLVxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jPTU4PXN0YXRpYyBfX2luaXQgdm9pZCBwcm9tX2luaXRfbWVtKHZvaWQpXG4tLVxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jLTEwMi1cdFx0bWVtIC09IDB4MTAwMDtcbmFyY2gvbWlwcy9iY200N3h4L3Byb20uYzoxMDM6XHRtZW1ibG9ja19hZGQoMCwgbWVtKTtcbmFyY2gvbWlwcy9iY200N3h4L3Byb20uYy0xMDQtfVxuLS1cbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmM9MTU1PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXG5hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jLTE1Ni17XG5hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jOjE1NzpcdG1lbWJsb2NrX2FkZCgwLCBiY202M3h4X2dldF9tZW1vcnlfc2l6ZSgpKTtcbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmMtMTU4LVxuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM9OTI4PXN0YXRpYyBfX2luaXQgdm9pZCBtZW1vcnlfZXhjbHVkZV9wYWdlKHU2NCBhZGRyLCB1NjQgKm1lbSwgdTY0ICpzaXplKVxuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTMxLVx0XHR1NjQgaW5jID0gYWRkciAtICptZW07XG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jOjkzMjpcdFx0bWVtYmxvY2tfYWRkKCptZW0sIGluYyk7XG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTkzMy1cdFx0Km1lbSAmIzQzOz0gaW5jO1xuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM9OTY3PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXG4tLVxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTEtI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jOjk5MjpcdG1lbWJsb2NrX2FkZChyZXNlcnZlX2xvd19tZW0sIG1heF9tZW1vcnkpO1xuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTMtXHR0b3RhbCAmIzQzOz0gbWF4X21lbW9yeTtcbi0tXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTk5Ni1cdGlmIChjcmFzaGtfc2l6ZSBcdTAwM2UgMCkge1xuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzo5OTc6XHRcdG1lbWJsb2NrX2FkZChjcmFzaGtfYmFzZSwgY3Jhc2hrX3NpemUpO1xuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTgtXHRcdGNyYXNoa19lbmQgPSBjcmFzaGtfYmFzZSAmIzQzOyBjcmFzaGtfc2l6ZTtcbi0tXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwMzctXHRcdFx0XHQvKiByZWdpb24gaXMgZnVsbHkgaW4gKi9cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6MTAzODpcdFx0XHRcdG1lbWJsb2NrX2FkZChtZW1vcnksIGNyYXNoa19iYXNlIC0gbWVtb3J5KTtcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTAzOS1cdFx0XHRcdHRvdGFsICYjNDM7PSBjcmFzaGtfYmFzZSAtIG1lbW9yeTtcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6MTA0MDpcdFx0XHRcdG1lbWJsb2NrX2FkZChjcmFzaGtfZW5kLCBlbmQgLSBjcmFzaGtfZW5kKTtcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA0MS1cdFx0XHRcdHRvdGFsICYjNDM7PSBlbmQgLSBjcmFzaGtfZW5kO1xuLS1cbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA2Ny0jZW5kaWZcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6MTA2ODpcdFx0XHRtZW1ibG9ja19hZGQobWVtb3J5LCBtZW1fYWxsb2Nfc2l6ZSk7XG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwNjktXHRcdFx0dG90YWwgJiM0Mzs9IG1lbV9hbGxvY19zaXplO1xuLS1cbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYz05Nz12b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZClcbi0tXG5hcmNoL21pcHMvY29iYWx0L3NldHVwLmMtMTEyLVxuYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jOjExMzpcdG1lbWJsb2NrX2FkZCgwLCBtZW1zeik7XG5hcmNoL21pcHMvY29iYWx0L3NldHVwLmMtMTE0LVxuLS1cbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYz0zMD1zdGF0aWMgX19pbml0IHZvaWQgcG1heF9zZXR1cF9tZW1vcnlfcmVnaW9uKHZvaWQpXG4tLVxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTUxLVxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jOjUyOlx0bWVtYmxvY2tfYWRkKDAsICh1bnNpZ25lZCBsb25nKW1lbW9yeV9wYWdlIC0gQ0tTRUcxIC0gQ0hVTktfU0laRSk7XG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtNTMtfVxuLS1cbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYz01OT1zdGF0aWMgX19pbml0IHZvaWQgcmV4X3NldHVwX21lbW9yeV9yZWdpb24odm9pZClcbi0tXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtNzYtXHRcdGVsc2Uge1xuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jOjc3Olx0XHRcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYy03OC1cdFx0XHRtZW1fc3RhcnQgJiM0Mzs9IG1lbV9zaXplICYjNDM7ICg4ICogYm0tXHUwMDNlcGFnZXNpemUpO1xuLS1cbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYy04Mi1cdGlmIChtZW1fc2l6ZSlcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYzo4MzpcdFx0bWVtYmxvY2tfYWRkKG1lbV9zdGFydCwgbWVtX3NpemUpO1xuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTg0LX1cbi0tXG5hcmNoL21pcHMvZGVjL3NldHVwLmM9MTM3PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXG4tLVxuYXJjaC9taXBzL2RlYy9zZXR1cC5jLTE1MC1cdC8qIFN0YXkgYXdheSBmcm9tIHRoZSBmaXJtd2FyZSB3b3JraW5nIG1lbW9yeSBhcmVhIGZvciBub3cuICovXG5hcmNoL21pcHMvZGVjL3NldHVwLmM6MTUxOlx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgX19wYV9zeW1ib2woXHUwMDI2X3RleHQpIC0gUEhZU19PRkZTRVQpO1xuYXJjaC9taXBzL2RlYy9zZXR1cC5jLTE1Mi19XG4tLVxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYz0xMjM9dm9pZCBfX3dlYWsgX19pbml0IHByb21fbWVtaW5pdCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTUzLVxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYzoxNTQ6XHRcdG1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTtcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTU1LVxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYy0xNTYtXHRcdGlmICh0eXBlID09IG1lbV9yZXNlcnZlZClcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmM6MTU3Olx0XHRcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1OC1cbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTU5LVx0XHRpZiAodHlwZSA9PSBtZW1fcHJvbV91c2VkKSB7XG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jOjE2MDpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYy0xNjEtXHRcdFx0aWYgKG5yX3Byb21fbWVtIFx1MDAzZT0gNSkge1xuLS1cbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jPTEwMD1zdGF0aWMgdm9pZCBfX2luaXQgc25pX21lbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmMtMTMwLVx0XHRcdG1lbWNvbmZbaV0uc2l6ZSwgbWVtY29uZltpXS5iYXNlKTtcbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jOjEzMTpcdFx0bWVtYmxvY2tfYWRkKG1lbWNvbmZbaV0uYmFzZSwgbWVtY29uZltpXS5zaXplKTtcbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jLTEzMi1cdH1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9OTg9dm9pZCBfX2luaXQgZGV0ZWN0X21lbW9yeV9yZWdpb24ocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IHN6X21pbiwgcGh5c19hZGRyX3Qgc3pfbWF4KVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0xMTMtXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MTE0Olx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0xMTUtfVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0yMTU9c3RhdGljIHZvaWQgX19pbml0IGZpbmFsaXplX2luaXRyZCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yMjktXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MjMwOlx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKGluaXRyZF9zdGFydCksIHNpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTIzMS1cdGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTI2Nz1zdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTI4NC1cdC8qIFJlc2VydmUgbWVtb3J5IG9jY3VwaWVkIGJ5IGtlcm5lbC4gKi9cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoyODU6XHRtZW1ibG9ja19yZXNlcnZlKF9fcGFfc3ltYm9sKFx1MDAyNl90ZXh0KSxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yODYtXHRcdFx0X19wYV9zeW1ib2woXHUwMDI2X2VuZCkgLSBfX3BhX3N5bWJvbChcdTAwMjZfdGV4dCkpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yOTYtXHRpZiAocmFtc3RhcnQgXHUwMDNlIFBIWVNfT0ZGU0VUKVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjI5NzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgcmFtc3RhcnQgLSBQSFlTX09GRlNFVCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMjk4LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0zNDY9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTM3MC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzozNzE6XHRcdG1lbWJsb2NrX2FkZF9ub2RlKHN0YXJ0LCBzaXplLCBwYV90b19uaWQoc3RhcnQpLCBNRU1CTE9DS19OT05FKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0zNzItXHRlbHNlXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MzczOlx0XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTM3NC1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX21lbW1hcChjaGFyICpwKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0zOTgtXHRcdHN0YXJ0X2F0ID0gbWVtcGFyc2UocCYjNDM7MSwgXHUwMDI2cCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6Mzk5Olx0XHRtZW1ibG9ja19hZGQoc3RhcnRfYXQsIG1lbV9zaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MDAtXHR9IGVsc2UgaWYgKCpwID09ICYjMzk7IyYjMzk7KSB7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQwNC1cdFx0c3RhcnRfYXQgPSBtZW1wYXJzZShwJiM0MzsxLCBcdTAwMjZwKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0MDU6XHRcdG1lbWJsb2NrX2FkZChzdGFydF9hdCwgbWVtX3NpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQwNjpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydF9hdCwgbWVtX3NpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQwNy1cdH0gZWxzZSB7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTQyMD1zdGF0aWMgdm9pZCBfX2luaXQgbWlwc19yZXNlcnZlX3ZtY29yZSh2b2lkKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDItXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NDQzOlx0bWVtYmxvY2tfcmVzZXJ2ZShlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDQ0LSNlbmRpZlxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz01MDg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2tlcm5lbF9zZWN0aW9uc19tZW0odm9pZClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNTE0LVx0XHRwcl9pbmZvKFwmIzM0O0tlcm5lbCBzZWN0aW9ucyBhcmUgbm90IGluIHRoZSBtZW1vcnkgbWFwc1xcblwmIzM0Oyk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NTE1Olx0XHRtZW1ibG9ja19hZGQoc3RhcnQsIHNpemUpO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTUxNi1cdH1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NjMzPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY3Ni1cdC8qIFJlc2VydmUgZm9yIGhpYmVybmF0aW9uLiAqL1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjY3NzpcdG1lbWJsb2NrX3Jlc2VydmUoX19wYV9zeW1ib2woXHUwMDI2X19ub3NhdmVfYmVnaW4pLFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY3OC1cdFx0X19wYV9zeW1ib2woXHUwMDI2X19ub3NhdmVfZW5kKSAtIF9fcGFfc3ltYm9sKFx1MDAyNl9fbm9zYXZlX2JlZ2luKSk7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jPTIwMTA9dm9pZCByZXNlcnZlX2V4Y2VwdGlvbl9zcGFjZShwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jLTIwMTctXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApXG5hcmNoL21pcHMva2VybmVsL3RyYXBzLmM6MjAxODpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYy0yMDE5LX1cbi0tXG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jPTE4PXZvaWQgX19pbml0IHByb21faW5pdF9tZW1vcnkodm9pZClcbmFyY2gvbWlwcy9sb29uZ3NvbjJlZi9jb21tb24vbWVtLmMtMTkte1xuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzoyMDpcdG1lbWJsb2NrX2FkZCgweDAsIChtZW1zaXplIFx1MDAzY1x1MDAzYyAyMCkpO1xuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYy0yMS1cbi0tXG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jLTQwLVx0aWYgKGhpZ2htZW1zaXplIFx1MDAzZSAwKVxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzo0MTpcdFx0bWVtYmxvY2tfYWRkKExPT05HU09OX0hJR0hNRU1fU1RBUlQsIGhpZ2htZW1zaXplIFx1MDAzY1x1MDAzYyAyMCk7XG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jLTQyLSNlbmRpZiAvKiAhQ09ORklHXzY0QklUICovXG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jPTUwPXZvaWQgX19pbml0IHN6bWVtKHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy04MS1cdFx0XHRcdCh1MzIpbm9kZV9pZCwgbWVtX3R5cGUsIFx1MDAyNm1lbV9zdGFydCwgXHUwMDI2bWVtX3NpemUpO1xuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjgyOlx0XHRcdG1lbWJsb2NrX2FkZF9ub2RlKG1lbV9zdGFydCwgbWVtX3NpemUsIG5vZGUsXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtODMtXHRcdFx0XHRcdCAgTUVNQkxPQ0tfTk9ORSk7XG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTkxLVx0XHRcdFx0KHUzMilub2RlX2lkLCBtZW1fdHlwZSwgXHUwMDI2bWVtX3N0YXJ0LCBcdTAwMjZtZW1fc2l6ZSk7XG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmM6OTI6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShtZW1fc3RhcnQsIG1lbV9zaXplKTtcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy05My1cdFx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtMTA0LVx0aWYgKGxvb25nc29uX3N5c2NvbmYudmdhYmlvc19hZGRyKVxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjEwNTpcdFx0bWVtYmxvY2tfcmVzZXJ2ZSh2aXJ0X3RvX3BoeXMoKHZvaWQgKilsb29uZ3Nvbl9zeXNjb25mLnZnYWJpb3NfYWRkciksXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtMTA2LVx0XHRcdFx0U1pfMjU2Syk7XG4tLVxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jPTgyPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxuLS1cbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYy0xMTAtXHRcdC8qIFJlc2VydmUgdGhlIGtlcm5lbCB0ZXh0L2RhdGEvYnNzICovXG5hcmNoL21pcHMvbG9vbmdzb242NC9udW1hLmM6MTExOlx0XHRtZW1ibG9ja19yZXNlcnZlKGtlcm5lbF9zdGFydF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY1MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IGJsb2NrIHNpdHVhdGlvbiBvbiB4ODYvYW1kNjQ6CgoqKkludmVzdGlnYXRpbmcgbWVtYmxvY2sgb24geDg2L2FtZDY0KioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgbWVtYmxvY2tgIGlzIHV0aWxpemVkIG9uIHg4Ni9hbWQ2NC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCBhIGdyZXAgd2l0aGluIHRoZSBgYXJjaC94ODYvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgYXJjaGl0ZWN0dXJhbCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIGBtZW1ibG9ja19hZGRgIGFuZCBgbWVtYmxvY2tfcmVzZXJ2ZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgYXMgYG1lbWJsb2NrX2FkZGAgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgYXZhaWxhYmxlIG1lbW9yeSByYW5nZXMgdG8gdGhlIG1lbWJsb2NrIGxpc3QsIHdoaWxlIGBtZW1ibG9ja19yZXNlcnZlYCBpcyB3aGF0IGlzIHVzZWQgdG8gcmVzZXJ2ZSByYW5nZXMgYW5kIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIHVzaW5nIHRoZW0uIEJ5IHNlYXJjaGluZyBmb3IgdGhlc2UsIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB3aGVyZSBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFuYWdlZCwgd2hpY2ggZHJpdmVycyBhcmUgdXNpbmcgaXQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgQklPUyBvciBmaXJtd2FyZSwgYW5kIGdldCBhbiBvdmVydmlldyBvZiB0aGUgYm9vdCBwcm9jZXNzIG1lbW9yeSBtYXAgb24geDg2LiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgaXMgaW5pdGlhbGx5IHNldCB1cCBhbmQgaG93IGl0IGV2b2x2ZXMgYXMgdGhlIGtlcm5lbCBib290cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfYWRkfG1lbWJsb2NrX3Jlc2VydmV8bWVtYmxvY2tfaXNvbGF0ZV9yYW5nZXxtZW1ibG9ja19yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2NoZWNrLmM9OTI9dm9pZCBfX2luaXQgc2V0dXBfYmlvc19jb3JydXB0aW9uX2NoZWNrKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NoZWNrLmMtMTIzLVxuYXJjaC94ODYva2VybmVsL2NoZWNrLmM6MTI0Olx0XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XG5hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYy0xMjUtXHRcdHNjYW5fYXJlYXNbbnVtX3NjYW5fYXJlYXNdLmFkZHIgPSBzdGFydDtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDEtXHRcdGlmIChlbnRyeS1cdTAwM2V0eXBlID09IEU4MjBfVFlQRV9TT0ZUX1JFU0VSVkVEKVxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQyOlx0XHRcdG1lbWJsb2NrX3Jlc2VydmUoZW50cnktXHUwMDNlYWRkciwgZW50cnktXHUwMDNlc2l6ZSk7XG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDMtXG4tLVxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzQ2LVxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQ3Olx0XHRtZW1ibG9ja19hZGQoZW50cnktXHUwMDNlYWRkciwgZW50cnktXHUwMDNlc2l6ZSk7XG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDgtXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzczLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jOjEzNzQ6XHRcdG1lbWJsb2NrX3JlbW92ZShQRk5fUEhZUyhtYXhfcGZuKSwgLTEpO1xuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzc1LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9lYmRhLmM9NTY9dm9pZCBfX2luaXQgcmVzZXJ2ZV9iaW9zX3JlZ2lvbnModm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWJkYS5jLTk2LVx0LyogUmVzZXJ2ZSBhbGwgbWVtb3J5IGJldHdlZW4gYmlvc19zdGFydCBhbmQgdGhlIDFNQiBtYXJrOiAqL1xuYXJjaC94ODYva2VybmVsL2ViZGEuYzo5NzpcdG1lbWJsb2NrX3Jlc2VydmUoYmlvc19zdGFydCwgMHgxMDAwMDAgLSBiaW9zX3N0YXJ0KTtcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmMtOTgtfVxuLS1cbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmM9NTUyPXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IG1wZl9pbnRlbCAqbXBmKVxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01NTMte1xuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYzo1NTQ6XHRtZW1ibG9ja19yZXNlcnZlKG1wZi1cdTAwM2VwaHlzcHRyLCBnZXRfbXBjX3NpemUobXBmLVx1MDAzZXBoeXNwdHIpKTtcbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMtNTU1LX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jPTU1Nz1zdGF0aWMgaW50IF9faW5pdCBzbXBfc2Nhbl9jb25maWcodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jLTU4Mi1cbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmM6NTgzOlx0XHRcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZW9mKCptcGYpKTtcbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMtNTg0LVx0XHRcdGlmIChtcGYtXHUwMDNlcGh5c3B0cilcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz0yODM9c3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfYnJrKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtMjg1LVx0aWYgKF9icmtfZW5kIFx1MDAzZSBfYnJrX3N0YXJ0KVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6Mjg2Olx0XHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oX19wYV9zeW1ib2woX2Jya19zdGFydCksXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy0yODctXHRcdFx0XHQgICAgICBfYnJrX2VuZCAtIF9icmtfc3RhcnQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTM0OT1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfcmVzZXJ2ZV9pbml0cmQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy0zNTktXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzozNjA6XHRtZW1ibG9ja19yZXNlcnZlX2tlcm4ocmFtZGlza19pbWFnZSwgcmFtZGlza19lbmQgLSByYW1kaXNrX2ltYWdlKTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTM2MS19XG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NDAxPXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfZWFybHlfaW1hX2J1ZmZlcih1NjQgcGh5c19hZGRyKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQxMi1cdGlmIChkYXRhLVx1MDAzZXNpemUpIHtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQxMzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKGRhdGEtXHUwMDNlYWRkciwgZGF0YS1cdTAwM2VzaXplKTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQxNC1cdFx0aW1hX2tleGVjX2J1ZmZlcl9waHlzID0gZGF0YS1cdTAwM2VhZGRyO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTU2OT1zdGF0aWMgdm9pZCBfX2luaXQgbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Vfc2V0dXBfZGF0YSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTU4Ni1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjU4NzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKHBhX2RhdGEsIHNpemVvZigqZGF0YSkgJiM0MzsgZGF0YS1cdTAwM2VsZW4pO1xuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNTg4LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTYwMC1cdFx0XHRpZiAoaW5kaXJlY3QtXHUwMDNldHlwZSAhPSBTRVRVUF9JTkRJUkVDVClcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjYwMTpcdFx0XHRcdG1lbWJsb2NrX3Jlc2VydmVfa2VybihpbmRpcmVjdC1cdTAwM2VhZGRyLCBpbmRpcmVjdC1cdTAwM2VsZW4pO1xuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNjAyLVx0XHR9XG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NzE5PXN0YXRpYyB2b2lkIF9faW5pdCB0cmltX3NuYl9tZW1vcnkodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy03NDYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9wYWdlcyk7IGkmIzQzOyYjNDM7KSB7XG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo3NDc6XHRcdGlmIChtZW1ibG9ja19yZXNlcnZlKGJhZF9wYWdlc1tpXSwgUEFHRV9TSVpFKSlcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTc0OC1cdFx0XHRwcmludGsoS0VSTl9XQVJOSU5HIFwmIzM0O2ZhaWxlZCB0byByZXNlcnZlIDB4JTA4bHhcXG5cJiMzNDssXG4tLVxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9Nzk3PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbW9yeSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwMi1cdCAqIF9fZW5kX29mX2tlcm5lbF9yZXNlcnZlIHN5bWJvbCBtdXN0IGJlIGV4cGxpY2l0bHkgcmVzZXJ2ZWQgd2l0aCBhXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo4MDM6XHQgKiBzZXBhcmF0ZSBtZW1ibG9ja19yZXNlcnZlKCkgb3IgdGhleSB3aWxsIGJlIGRpc2NhcmRlZC5cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwNC1cdCAqL1xuYXJjaC94ODYva2VybmVsL3NldHVwLmM6ODA1Olx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKF9fcGFfc3ltYm9sKF90ZXh0KSxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwNi1cdFx0XHQgICAgICAodW5zaWduZWQgbG9uZylfX2VuZF9vZl9rZXJuZWxfcmVzZXJ2ZSAtICh1bnNpZ25lZCBsb25nKV90ZXh0KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy04MTgtXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjgxOTpcdG1lbWJsb2NrX3Jlc2VydmUoMCwgU1pfNjRLKTtcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgyMC1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUz0xMzA9U0VDVElPTlNcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUy0zNzUtXHQgKiBhdXRvbWF0aWNhbGx5IHJlc2VydmVkIGluIHNldHVwX2FyY2goKS4gQW55dGhpbmcgYWZ0ZXIgaGVyZSBtdXN0IGJlXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUzozNzY6XHQgKiBleHBsaWNpdGx5IHJlc2VydmVkIHVzaW5nIG1lbWJsb2NrX3Jlc2VydmUoKSBvciBpdCB3aWxsIGJlIGRpc2NhcmRlZFxuYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMtMzc3LVx0ICogYW5kIHRyZWF0ZWQgYXMgYXZhaWxhYmxlIG1lbW9yeS5cbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmM9MTkyPWludCBfX2luaXQgZWZpX21lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jLTIyNi1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYzoyMjc6XHRtZW1ibG9ja19yZXNlcnZlKHBtYXAsIGVmaS5tZW1tYXAubnJfbWFwICogZWZpLm1lbW1hcC5kZXNjX3NpemUpO1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jLTIyOC1cdHNldF9iaXQoRUZJX1BSRVNFUlZFX0JTX1JFR0lPTlMsIFx1MDAyNmVmaS5mbGFncyk7XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jPTMyND12b2lkIF9faW5pdCBlZmlfcmVzZXJ2ZV9ib290X3NlcnZpY2VzKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jLTM0Mi1cdFx0LypcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYzozNDM6XHRcdCAqIEJlY2F1c2UgdGhlIGZvbGxvd2luZyBtZW1ibG9ja19yZXNlcnZlKCkgaXMgcGFpcmVkXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmMtMzQ0LVx0XHQgKiB3aXRoIGZyZWVfcmVzZXJ2ZWRfYXJlYSgpIGZvciB0aGlzIHJlZ2lvbiBpblxuLS1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNTYtXHRcdGlmICghYWxyZWFkeV9yZXNlcnZlZCkge1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jOjM1NzpcdFx0XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBzaXplKTtcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNTgtXG4tLVxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jPTQ3PXZvaWQgX19pbml0IHJlc2VydmVfcmVhbF9tb2RlKHZvaWQpXG4tLVxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jLTY2LVx0ICovXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmM6Njc6XHRtZW1ibG9ja19yZXNlcnZlKDAsIFNaXzFNKTtcbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy02OC1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNjE9c3RhdGljIHZvaWQgX19pbml0IF9fc25wX2ZpeHVwX2U4MjBfdGFibGVzKHU2NCBwYSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xODctXHRcdGlmICghbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKHBhLCBQTURfU0laRSkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxODg6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwYSwgUE1EX1NJWkUpO1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTg5LVx0fVxuLS1cbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYz00MTU9dm9pZCBfX2luaXQgeGVuX2FkZF9leHRyYV9tZW0odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbl9wZm5zKVxuLS1cbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00MzktXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmM6NDQwOlx0bWVtYmxvY2tfcmVzZXJ2ZShQRk5fUEhZUyhzdGFydF9wZm4pLCBQRk5fUEhZUyhuX3BmbnMpKTtcbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00NDEtfVxuLS1cbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW5faHZtLmM9NTA9c3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfc2hhcmVkX2luZm8odm9pZClcbi0tXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jLTY5LVxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYzo3MDpcdG1lbWJsb2NrX3Jlc2VydmUocGEsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jLTcxLVx0SFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9IGVhcmx5X21lbXJlbWFwKHBhLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L3hlbi9tbXVfcHYuYz0xNzY4PXZvaWQgX19pbml0IHhlbl9zZXR1cF9rZXJuZWxfcGFnZXRhYmxlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbilcbi0tXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMTg5MS1cdHhlbl9wdF9zaXplID0gKHB0X2VuZCAtIHB0X2Jhc2UpICogUEFHRV9TSVpFO1xuYXJjaC94ODYveGVuL21tdV9wdi5jOjE4OTI6XHRtZW1ibG9ja19yZXNlcnZlKHhlbl9wdF9iYXNlLCB4ZW5fcHRfc2l6ZSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMTg5My1cbi0tXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM9MjA3Nj12b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV9zcGVjaWFsX3BhZ2VzKHZvaWQpXG4tLVxuYXJjaC94ODYveGVuL21tdV9wdi5jLTIwNzktXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MDpcdG1lbWJsb2NrX3Jlc2VydmUoX19wYSh4ZW5fc3RhcnRfaW5mbyksIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMjA4MS1cdGlmICh4ZW5fc3RhcnRfaW5mby1cdTAwM2VzdG9yZV9tZm4pIHtcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDgyLVx0XHRwYWRkciA9IFBGTl9QSFlTKG1mbl90b19wZm4oeGVuX3N0YXJ0X2luZm8tXHUwMDNlc3RvcmVfbWZuKSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShwYWRkciwgUEFHRV9TSVpFKTtcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg0LVx0fVxuLS1cbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg2LVx0XHRwYWRkciA9IFBGTl9QSFlTKG1mbl90b19wZm4oeGVuX3N0YXJ0X2luZm8tXHUwMDNlY29uc29sZS5kb21VLm1mbikpO1xuYXJjaC94ODYveGVuL21tdV9wdi5jOjIwODc6XHRcdG1lbWJsb2NrX3Jlc2VydmUocGFkZHIsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMjA4OC1cdH1cbi0tXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYz04Mz1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX2RlbF9leHRyYV9tZW0odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxuYXJjaC94ODYveGVuL3NldHVwLmMtMTA5LVx0XHRcdHhlbl9leHRyYV9tZW1baV0ubl9wZm5zID0gc3RhcnRfcGZuIC0gc3RhcnRfcjtcbmFyY2gveDg2L3hlbi9zZXR1cC5jOjExMDpcdFx0XHQvKiBDYWxsaW5nIG1lbWJsb2NrX3Jlc2VydmUoKSBhZ2FpbiBpcyBva2F5LiAqL1xuYXJjaC94ODYveGVuL3NldHVwLmMtMTExLVx0XHRcdHhlbl9hZGRfZXh0cmFfbWVtKHN0YXJ0X3BmbiAmIzQzOyBuX3BmbnMsIHN0YXJ0X3IgJiM0Mzsgc2l6ZV9yIC1cbi0tXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYz02MDE9cGh5c19hZGRyX3QgX19pbml0IHhlbl9maW5kX2ZyZWVfYXJlYShwaHlzX2FkZHJfdCBzaXplKVxuLS1cbmFyY2gveDg2L3hlbi9zZXR1cC5jLTYxOC1cdFx0aWYgKGFkZHIgXHUwMDNlPSBzdGFydCAmIzQzOyBzaXplKSB7XG5hcmNoL3g4Ni94ZW4vc2V0dXAuYzo2MTk6XHRcdFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgc2l6ZSk7XG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy02MjAtXHRcdFx0cmV0dXJuIHN0YXJ0O1xuLS1cbmFyY2gveDg2L3hlbi9zZXR1cC5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX3Jlc2VydmVfeGVuX21mbmxpc3Qodm9pZClcbi0tXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy03ODItXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYzo3ODM6XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBzaXplKTtcbmFyY2gveDg2L3hlbi9zZXR1cC5jLTc4NC1cdGlmICgheGVuX2lzX2U4MjBfcmVzZXJ2ZWQoc3RhcnQsIHNpemUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY3MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIFVzYWdlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZSBldmVuIGJvdGhlcmluZyB0byBkZWZpbmUgYEFSQ0hfS0VFUF9NRU1CTE9DS2A/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gaGVyZS4gVG8gZmlndXJlIHRoaXMgb3V0LCB0aGUgb2J2aW91cyBtb3ZlIGlzIHRvIHVzZSBgZ3JlcGAuIEkmIzM5O2xsIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYEFSQ0hfS0VFUF9NRU1CTE9DS2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIHRoZSBhcmNoaXRlY3R1cmVzIEkgbmVlZCB0byBsb29rIGF0IG1vcmUgY2xvc2VseS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB3aHkgdGhvc2UgcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIG5lZWQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgd2hhdCBpdCBzaWduaWZpZXMgaW4gdGhlaXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9LRUVQX01FTUJMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy0zNS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL2FybS9LY29uZmlnOjM2Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9hcm0vS2NvbmZpZy0zNy1cdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy02My1cdHNlbGVjdCBBUkNIX0hBVkVfVFJBQ0VfTU1JT19BQ0NFU1NcbmFyY2gvYXJtNjQvS2NvbmZpZzo2NDpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvYXJtNjQvS2NvbmZpZy02NS1cdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01OC1cdHNlbGVjdCBBUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlmICFQUkVFTVBUSU9OXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjU5Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0yMS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL21pcHMvS2NvbmZpZzoyMjpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvbWlwcy9LY29uZmlnLTIzLVx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2My1cdHNlbGVjdCBBUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTICAgICAgICBpZiBTUFVfQkFTRVxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTY0Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9wb3dlcnBjL0tjb25maWctMTY1LVx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXHRpZiBQUENfUkFESVhfTU1VXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuYXJjaC9yaXNjdi9LY29uZmlnOjYxOlx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSyBpZiBBQ1BJIHx8IEtFWEVDXG5hcmNoL3Jpc2N2L0tjb25maWctNjItXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcdGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4NjU9Y29uZmlnIElOVEVMX1REWF9IT1NUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODcwLVx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnOjE4NzE6XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzItXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTEwNzM9c3RhdGljIGludCBlZmlfbWVtX3Jlc2VydmVfaW9tZW0ocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTA5NS1cdCAqL1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6MTA5NjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFx1MDAyNlx1MDAyNiAhcmV0KVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTA5Ny1cdFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE1LVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjExNjojaWZuZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTctI2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz01NjA9c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU4Ni1cbmtlcm5lbC9rZXhlY19maWxlLmM6NTg3OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU4OC1zdGF0aWMgaW50IGtleGVjX3dhbGtfbWVtYmxvY2soc3RydWN0IGtleGVjX2J1ZiAqa2J1Zixcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTcxNj1pbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03MzgtXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjczOTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQwLVx0XHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xuLS1cbm1tL0tjb25maWc9NDgyPWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxuLS1cbm1tL0tjb25maWctNDg3LSMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxubW0vS2NvbmZpZzo0ODg6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xubW0vS2NvbmZpZy00ODktXHRib29sXG4tLVxubW0vbWVtYmxvY2suYy0xMDAtICpcbm1tL21lbWJsb2NrLmM6MTAxOiAqIFVubGVzcyBhbiBhcmNoaXRlY3R1cmUgZW5hYmxlcyAlQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSywgdGhlXG5tbS9tZW1ibG9jay5jLTEwMi0gKiBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgKGV4Y2VwdCBcJiMzNDtwaHlzbWVtXCYjMzQ7KSB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGVcbi0tXG5tbS9tZW1ibG9jay5jPTM2OT1zdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyByKVxuLS1cbm1tL21lbWJsb2NrLmMtMzg1LVxubW0vbWVtYmxvY2suYzozODY6I2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9tZW1ibG9jay5jLTM4Ny0vKipcbi0tXG5tbS9tZW1ibG9jay5jPTk2Nj11bnNpZ25lZCBsb25nIGZyZWVfcmVzZXJ2ZWRfYXJlYSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgcG9pc29uLCBjb25zdCBjaGFyICpzKVxuLS1cbm1tL21lbWJsb2NrLmMtOTg0LVxubW0vbWVtYmxvY2suYzo5ODU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xubW0vbWVtYmxvY2suYy05ODYtXHRcdGlmIChzdGFydF9wYSBcdTAwM2MgZW5kX3BhKVxuLS1cbm1tL21lbWJsb2NrLmM9MTAyMj1pbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3BoeXNfZnJlZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbm1tL21lbWJsb2NrLmMtMTAzMS1cbm1tL21lbWJsb2NrLmM6MTAzMjpcdGlmICghc2xhYl9pc19hdmFpbGFibGUoKSB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtYmxvY2suYy0xMDMzLVx0XHRyZXQgPSBtZW1ibG9ja19yZW1vdmVfcmFuZ2UoXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpO1xuLS1cbm1tL21lbWJsb2NrLmM9MjkxMT1fX3NldHVwKFwmIzM0O3Jlc2VydmVfbWVtPVwmIzM0OywgcmVzZXJ2ZV9tZW0pO1xuLS1cbm1tL21lbWJsb2NrLmMtMjkxMy0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5tbS9tZW1ibG9jay5jOjI5MTQ6I2lmZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcbm1tL21lbWJsb2NrLmMtMjkxNS1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4tLVxubW0vbWVtYmxvY2suYz0yOTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdCkgeyB9XG5tbS9tZW1ibG9jay5jLTI5NzYtXG5tbS9tZW1ibG9jay5jOjI5Nzc6I2VuZGlmIC8qIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0sgKi9cbm1tL21lbWJsb2NrLmMtMjk3OC1cbi0tXG5tbS9tZW1ibG9jay5jPTI5OTk9c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0zMDAyLVxubW0vbWVtYmxvY2suYzozMDAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFx1MDAyNlx1MDAyNiAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxubW0vbWVtYmxvY2suYy0zMDA0LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE1MzA9c3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NjAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTYyLVx0XHRpZiAocmVzLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzEtZXJyb3JfbWVtYmxvY2tfcmVtb3ZlOlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzMtXHRcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMjkzPXN0YXRpYyBpbnQgdHJ5X3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMzQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMzNS1cdFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBtZW1vcnkgaG90cGx1ZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGF0IGBtZW1ibG9ja19hZGRfbm9kZWAgYW5kIGBtZW1ibG9ja19yZW1vdmVgIGFyZSBrZXkgZnVuY3Rpb25zIGJlaW5nIHV0aWxpemVkLCBhbmQgdGhlaXIgb3BlcmF0aW9uIHNlZW1zIGNvbnRpbmdlbnQgb24gYElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSylgLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb25kaXRpb25hbCwgYXMgaXQgZGljdGF0ZXMgd2hldGhlciB0aGUgc3lzdGVtIG1haW50YWlucyBhIHBlcnNpc3RlbnQgYG1lbWJsb2NrYCByZXByZXNlbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QsIGJ1dCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByZWNpc2UgaW1wbGVtZW50YXRpb24sIGVzcGVjaWFsbHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZW1wbG95ZWQgaW4gaG90cGx1ZyBzY2VuYXJpb3MuIE15IGZvY3VzIHdpbGwgYmUgYXJvdW5kIGxpbmUgMTU2MCB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkgYXNzdW1lIHRoZSBtb3N0IHBlcnRpbmVudCBsb2dpYyB3aWxsIHJlc2lkZSBpbiB0ZXJtcyBvZiBhZGRpbmcgYW5kIHJlbW92aW5nIG1lbW9yeSBibG9ja3MgZHVyaW5nIGhvdHBsdWcgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xNDE4PXN0YXRpYyB2b2lkIHJlbW92ZV9tZW1vcnlfYmxvY2tzX2FuZF9hbHRtYXBzKHU2NCBzdGFydCwgdTY0IHNpemUpXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0MTkte1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDIwOlx0dW5zaWduZWQgbG9uZyBtZW1ibG9ja19zaXplID0gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyMS1cdHU2NCBjdXJfc3RhcnQ7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDI3LVx0Zm9yIChjdXJfc3RhcnQgPSBzdGFydDsgY3VyX3N0YXJ0IFx1MDAzYyBzdGFydCAmIzQzOyBzaXplO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDI4Olx0ICAgICBjdXJfc3RhcnQgJiM0Mzs9IG1lbWJsb2NrX3NpemUpIHtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyOS1cdFx0c3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBOVUxMO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQzOS1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0MDpcdFx0cmVtb3ZlX21lbW9yeV9ibG9ja19kZXZpY2VzKGN1cl9zdGFydCwgbWVtYmxvY2tfc2l6ZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NDE6XHRcdGFyY2hfcmVtb3ZlX21lbW9yeShjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIGFsdG1hcCwgTlVMTCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NDItXHRcdGFsdG1hcF9mcmVlKGFsdG1hcCk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDQ4LXtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0OTpcdHVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfc2l6ZSA9IG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NTAtXHR1NjQgY3VyX3N0YXJ0O1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ1My1cdGZvciAoY3VyX3N0YXJ0ID0gc3RhcnQ7IGN1cl9zdGFydCBcdTAwM2Mgc3RhcnQgJiM0Mzsgc2l6ZTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ1NDpcdCAgICAgY3VyX3N0YXJ0ICYjNDM7PSBtZW1ibG9ja19zaXplKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NTUtXHRcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDU4LVx0XHRcdC5iYXNlX3BmbiA9IFBIWVNfUEZOKGN1cl9zdGFydCksXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NTk6XHRcdFx0LmVuZF9wZm4gPSBQSFlTX1BGTihjdXJfc3RhcnQgJiM0MzsgbWVtYmxvY2tfc2l6ZSAtIDEpLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDYwLVx0XHR9O1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ3MC1cdFx0LyogY2FsbCBhcmNoJiMzOTtzIG1lbW9yeSBob3RhZGQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ3MTpcdFx0cmV0ID0gYXJjaF9hZGRfbWVtb3J5KG5pZCwgY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBcdTAwMjZwYXJhbXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDcyLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDc3LVx0XHQvKiBjcmVhdGUgbWVtb3J5IGJsb2NrIGRldmljZXMgYWZ0ZXIgbWVtb3J5IHdhcyBhZGRlZCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDc4Olx0XHRyZXQgPSBjcmVhdGVfbWVtb3J5X2Jsb2NrX2RldmljZXMoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBuaWQsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzktXHRcdFx0XHRcdFx0ICBwYXJhbXMuYWx0bWFwLCBncm91cCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0ODAtXHRcdGlmIChyZXQpIHtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ4MTpcdFx0XHRhcmNoX3JlbW92ZV9tZW1vcnkoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBwYXJhbXMuYWx0bWFwLCBOVUxMKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ4Mi1cdFx0XHRhbHRtYXBfZnJlZShwYXJhbXMuYWx0bWFwKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0OTMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0OTQ6c3RhdGljIGludCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ5NS17XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTA3PXN0YXRpYyBib29sIG5vZGVfaXNfbWVtb3J5bGVzcyhpbnQgbmlkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUyMC1cdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTIxOlx0cmV0dXJuICFmb3JfZWFjaF9tZW1vcnlfYmxvY2soXHUwMDI2bmlkLCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYik7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1MjItfVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUzMD1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzMy1cdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1MzQ6XHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzNS1cdHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwID0gTlVMTDtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NjItXHRcdGlmIChyZXMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTYzOlx0XHRcdG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQ7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjQ6XHRcdHJldCA9IG1lbWJsb2NrX2FkZF9ub2RlKHN0YXJ0LCBzaXplLCBuaWQsIG1lbWJsb2NrX2ZsYWdzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU2NS1cdFx0aWYgKHJldClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NzAtXHRpZiAocmV0IFx1MDAzYyAwKVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTcxOlx0XHRnb3RvIGVycm9yX21lbWJsb2NrX3JlbW92ZTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU3Mi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NzYtXHRcdFx0bm9kZV9zZXRfb2ZmbGluZShuaWQpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTc3Olx0XHRcdGdvdG8gZXJyb3JfbWVtYmxvY2tfcmVtb3ZlO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTc4LVx0XHR9XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjMwLVx0fVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMxOmVycm9yX21lbWJsb2NrX3JlbW92ZTpcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYzMi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMzOlx0XHRtZW1ibG9ja19yZW1vdmUoc3RhcnQsIHNpemUpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjM0LWVycm9yX21lbV9ob3RwbHVnX2VuZDpcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5ODU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMjAyLVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMjAzOnN0YXRpYyBpbnQgY2hlY2tfbWVtYmxvY2tfb2ZmbGluZWRfY2Ioc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIyMDQte1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MjI5Mz1zdGF0aWMgaW50IHRyeV9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzA3LVx0ICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMDg6XHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2bmlkLCBjaGVja19tZW1ibG9ja19vZmZsaW5lZF9jYik7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMDktXHRpZiAocmMpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM0LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMzU6XHRcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIE1lbW9yeSBCbG9jayBSZXRlbnRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBlbmFibGVkLCBzcGVjaWZpY2FsbHkgb24gYW1kNjQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBwZXJoYXBzIGBDT05GSUdfSU5URUxfVERYX0hPU1RgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHdhcyByZXNwb25zaWJsZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgY2FuJiMzOTt0IGp1c3QganVtcCB0byBhIGNvbmNsdXNpb24uCgpSaWdodCwgc28sIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgc2VsZWN0IG9yIHJlbGF0ZSB0byBrZWVwaW5nIHRoZSBtZW1vcnkgYmxvY2sgYXJvdW5kPyBJIG5lZWQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdmlldy4gSSBoYWQgYWxyZWFkeSB1c2VkIGBncmVwYCBlYXJsaWVyIGZvciBgQVJDSF9LRUVQX01FTUJMT0NLYCBhY3Jvc3MgdGhlIEtjb25maWcgZmlsZXMsIGJ1dCBsZXQmIzM5O3MgcmVjYXAgdGhlIGZpbmRpbmdzIHRvIGJlIGNlcnRhaW4uCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OiBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBzZWxlY3RlZCBieSBBUk0sIEFSTTY0LCBMT09OR0FSQ0gsIE1JUFMsIFBQQywgYW5kIFJJU0NWLCBidXQgUklTQ1YgaGFzIGEgY29uZGl0aW9uYWwgYmFzZWQgb24gYEFDUElgIG9yIGBLRVhFQ2AuIE9uIHg4NiwgYElOVEVMX1REWF9IT1NUYCBzZWxlY3RzIGl0LiBBbHJpZ2h0LgoKQnV0IHdoYXQgYWJvdXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucz8gTGlrZSBpZiBgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hgIGlzIGVuYWJsZWQ/IEkgaGF2ZSB0byBnbyB0aHJvdWdoIGFsbCBvZiB0aGUgcG9zc2liaWxpdGllcy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJiMzOTttIG1pc3Npbmc/IEkgc2hvdWxkIHJlYWxseSBjaGVjayBgbW0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNDgyIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGlzIHR5cGUgb2YgY29uZmlndXJhdGlvbiBsaXZlcy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzU6XHRcdGJvb2xcbiA0NzY6XHRcbiA0Nzc6XHRjb25maWcgSEFWRV9HVVBfRkFTVFxuIDQ3ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA0Nzk6XHRcdGJvb2xcbiA0ODA6XHRcbiA0ODE6XHQjIEVuYWJsZSBtZW1ibG9jayBzdXBwb3J0IGZvciBzY3JhdGNoIG1lbW9yeSB3aGljaCBpcyBuZWVkZWQgZm9yIGtleGVjIGhhbmRvdmVyXG4gNDgyOlx0Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXG4gNDgzOlx0XHRib29sXG4gNDg0Olx0XG4gNDg1Olx0IyBEb24mIzM5O3QgZGlzY2FyZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZWQgdG8gdHJhY2sgXCYjMzQ7bWVtb3J5XCYjMzQ7IGFuZCBcJiMzNDtyZXNlcnZlZFwmIzM0OyBtZW1ibG9ja3NcbiA0ODY6XHQjIGFmdGVyIGVhcmx5IGJvb3QsIHNvIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHRlc3QgZm9yIHZhbGlkaXR5IG9mIG1lbW9yeS5cbiA0ODc6XHQjIEFsc28sIG1lbWJsb2NrcyBhcmUgdXBkYXRlZCB3aXRoIG1lbW9yeSBob3QodW4pcGx1Zy5cbiA0ODg6XHRjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXG4gNDg5Olx0XHRib29sXG4gNDkwOlx0XG4gNDkxOlx0IyBLZWVwIGFyY2ggTlVNQSBtYXBwaW5nIGluZnJhc3RydWN0dXJlIHBvc3QtaW5pdC5cbiA0OTI6XHRjb25maWcgTlVNQV9LRUVQX01FTUlORk9cbiA0OTM6XHRcdGJvb2xcbiA0OTQ6XHRcbiA0OTU6XHRjb25maWcgTUVNT1JZX0lTT0xBVElPTlxuIDQ5NjpcdFx0Ym9vbFxuIDQ5NzpcdFxuIDQ5ODpcdCMgSU9SRVNPVVJDRV9TWVNURU1fUkFNIHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCByZXNvdXJjZSB0cmVlIHRoYXQgYXJlIG1hcmtlZFxuIDQ5OTpcdCMgSU9SRVNPVVJDRV9FWENMVVNJVkUgY2Fubm90IGJlIG1hcHBlZCB0byB1c2VyIHNwYWNlLCBmb3IgZXhhbXBsZSwgdmlhXG4gNTAwOlx0IyAvZGV2L21lbS5cbiA1MDE6XHRjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbiA1MDI6XHRcdGRlZl9ib29sIHlcbiA1MDM6XHRcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXG4gNTA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEhvdHBsdWcgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgQ2FuIHN5emthbGxlciBvciBhbnl0aGluZyBydW5uaW5nIGluIHVzZXJzcGFjZSBhY3R1YWxseSB0cmlnZ2VyIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgb3Igb3RoZXIgcmVsYXRlZCBrZXJuZWwgcGF0aHMgYXQgcnVudGltZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBBbmQsIGNhbiBzeXprYWxsZXIgZXZlbiBiZSB1c2VkIHRvIGZ1enogdGhlIGJvb3QgY29kZT8gTm8sIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgZGVzaWduZWQgdG8gZm9jdXMgb24gbGl2ZSBrZXJuZWwgc3RhdGVzLCBoaXR0aW5nIGl0IHRocm91Z2ggc3lzY2FsbHMgYW5kIHBlcmhhcHMgdmlydHVhbCBkZXZpY2VzIG9yIHN5c2ZzLiBTbywgYmFjayB0byB0aGUgaW5pdGlhbCBxdWVzdGlvbjogaXMgdGhlcmUgYSB3YXkgZm9yIHVzZXJzcGFjZSB0byBtYW5pcHVsYXRlIG1lbW9yeSBob3RwbHVnLCBhZGRpbmcgb3IgcmVtb3ZpbmcgbWVtb3J5IHRocm91Z2ggc3lzZnMsIGRheCwgb3IgYW55dGhpbmcgZWxzZT8KClJpZ2h0LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExvb2tpbmcgYXQgYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBJIHNlZSBgX19hZGRfbWVtb3J5X3Jlc291cmNlYCBpcyBhIGNydWNpYWwgZnVuY3Rpb24uIEFoYSEgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5OiBgYWRkX21lbW9yeWAsIGBhZGRfbWVtb3J5X3Jlc291cmNlYCwgYW5kIGBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gTm93IHRoZSBpbnZlc3RpZ2F0aW9uIGJlZ2lucy4uLiB3aGVyZSBhcmUgKnRob3NlKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20/IFRoYXQmIzM5O3MgdGhlIHRyYWlsIEkgbmVlZCB0byBmb2xsb3cuIFRpbWUgdG8gc3RhcnQgdHJhY2luZyB0aG9zZSBjYWxscyBhbmQgc2VlIGlmIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0IGNhbiBiZSBpZGVudGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGRfbWVtb3J5XFwofGFkZF9tZW1vcnlfcmVzb3VyY2VcXCh8YWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdD0xNzM9bWVtb3J5IGZhc3RlciB0aGFuIGV4cGVjdGVkOlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0LTE3Ni0gIG1lbV9ob3RwbHVnX2xvY2tcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjE3NzotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSB3aWxsIGZpcnN0IHRha2UgdGhlIG1lbV9ob3RwbHVnX2xvY2ssIGZvbGxvd2VkIGJ5XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdC0xNzgtICB0aGUgZGV2aWNlX2xvY2soKSAod2hpbGUgY3JlYXRpbmcgdGhlIGRldmljZXMsIGR1cmluZyBidXNfYWRkX2RldmljZSgpKS5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3Q9ODc9Tk9USUZZX1NUT1DlgZzmraLlr7npgJrnn6XpmJ/liJfnmoTov5vkuIDmraXlpITnkIbjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTA1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjEwNjotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKeWwhummluWFiOS9v+eUqG1lbV9ob3RwbHVnX2xvY2vvvIznhLblkI7mmK9kZXZpY2VfbG9jaygp77yI5Zyo5YibXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTA3LSAg5bu66K6+5aSH5pe277yM5ZyoYnVzX2FkZF9kZXZpY2UoKeacn+mXtO+8ieOAglxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmg9MjA9c3RhdGljIGNvbnN0IHN0cnVjdCB0YWd0YWJsZSBfX3RhZ3RhYmxlXyMjZm4gX190YWcgPSB7IHRhZywgZm4gfVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaC0yMS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmg6MjI6ZXh0ZXJuIGludCBhcm1fYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgtMjMtZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgZWFybHlfcHJpbnQoY29uc3QgY2hhciAqc3RyLCAuLi4pO1xuLS1cbmFyY2gvYXJtL2tlcm5lbC9hdGFnc19wYXJzZS5jPTY1PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19tZW0zMihjb25zdCBzdHJ1Y3QgdGFnICp0YWcpXG5hcmNoL2FybS9rZXJuZWwvYXRhZ3NfcGFyc2UuYy02Ni17XG5hcmNoL2FybS9rZXJuZWwvYXRhZ3NfcGFyc2UuYzo2NzpcdHJldHVybiBhcm1fYWRkX21lbW9yeSh0YWctXHUwMDNldS5tZW0uc3RhcnQsIHRhZy1cdTAwM2V1Lm1lbS5zaXplKTtcbmFyY2gvYXJtL2tlcm5lbC9hdGFnc19wYXJzZS5jLTY4LX1cbi0tXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYz03NDY9dm9pZCBfX2luaXQgZHVtcF9tYWNoaW5lX3RhYmxlKHZvaWQpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtNzU5LVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM6NzYwOmludCBfX2luaXQgYXJtX2FkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTc2MS17XG4tLVxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9ODI2PXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X21lbShjaGFyICpwKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg0OC1cbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjg0OTpcdGFybV9hZGRfbWVtb3J5KHN0YXJ0LCBzaXplKTtcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg1MC1cbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTE5NzU9c3RydWN0IHJhbmdlIGFyY2hfZ2V0X21hcHBhYmxlX3JhbmdlKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMDA2LVxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMDA3OmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjAwOC1cdFx0ICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTY0PXZvaWQgX19pbml0IGZpeHJhbmdlX2luaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHBnZF90ICpwZ2RfYmFzZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTA2LSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoxMDc6aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTEwOC17XG4tLVxuYXJjaC9wb3dlcnBjL21tL21lbS5jPTEyOT1pbnQgX19yZWYgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0xNDQtXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmM6MTQ1OmludCBfX3JlZiBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0xNDYtXHRcdFx0ICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jPTU2ND1zdGF0aWMgaW50IGRscGFyX2FkZF9sbWIoc3RydWN0IGRybWVtX2xtYiAqbG1iKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU4Ni1cdC8qIEFkZCB0aGUgbWVtb3J5ICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzo1ODc6XHRyYyA9IF9fYWRkX21lbW9yeShuaWQsIGxtYi1cdTAwM2ViYXNlX2FkZHIsIGJsb2NrX3N6LCBNSFBfTUVNTUFQX09OX01FTU9SWSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01ODgtXHRpZiAocmMpIHtcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0xNzEyPXN0cnVjdCByYW5nZSBhcmNoX2dldF9tYXBwYWJsZV9yYW5nZSh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE3MjAtXG5hcmNoL3Jpc2N2L21tL2luaXQuYzoxNzIxOmludCBfX3JlZiBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE3MjIte1xuLS1cbmFyY2gvczM5MC9tbS9pbml0LmM9MjcxPWRldmljZV9pbml0Y2FsbChzMzkwX2NtYV9tZW1faW5pdCk7XG4tLVxuYXJjaC9zMzkwL21tL2luaXQuYy0yNzQtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI3NTppbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI3Ni1cdFx0ICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2Mz1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy05OTAtXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTkxOmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05OTItXHRcdCAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYz0xNjg9c3RhdGljIGludCBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlKHN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2UpXG4tLVxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxMi1cdFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIxMzpcdFx0cmVzdWx0ID0gX19hZGRfbWVtb3J5KG1naWQsIGluZm8tXHUwMDNlc3RhcnRfYWRkciwgaW5mby1cdTAwM2VsZW5ndGgsXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjE0LVx0XHRcdFx0ICAgICAgbWhwX2ZsYWdzKTtcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjE2LVx0XHQvKlxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIxNzpcdFx0ICogSWYgdGhlIG1lbW9yeSBibG9jayBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBrZXJuZWwsIGFkZF9tZW1vcnkoKVxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIxODpcdFx0ICogcmV0dXJucyAtRUVYSVNULiBJZiBhZGRfbWVtb3J5KCkgcmV0dXJucyB0aGUgb3RoZXIgZXJyb3IsIGl0XG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjE5LVx0XHQgKiBtZWFucyB0aGF0IHRoaXMgbWVtb3J5IGJsb2NrIGlzIG5vdCB1c2VkIGJ5IHRoZSBrZXJuZWwuXG4tLVxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIzMi1cdFx0LypcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYzoyMzM6XHRcdCAqIEFkZCBudW1fZW5hYmxlIGV2ZW4gaWYgYWRkX21lbW9yeSgpIHJldHVybnMgLUVFWElTVCwgc28gdGhlXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjM0LVx0XHQgKiBkZXZpY2UgaXMgYm91bmQgdG8gdGhpcyBkcml2ZXIuXG4tLVxuZHJpdmVycy9hY3BpL3NjYW4uYz0yODIwPXZvaWQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9hY3BpL3NjYW4uYy0yODYwLVx0LypcbmRyaXZlcnMvYWNwaS9zY2FuLmM6Mjg2MTpcdCAqIEFsdGhvdWdoIHdlIGNhbGwgX19hZGRfbWVtb3J5KCkgdGhhdCBpcyBkb2N1bWVudGVkIHRvIHJlcXVpcmUgdGhlXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTI4NjItXHQgKiBkZXZpY2VfaG90cGx1Z19sb2NrLCBpdCBpcyBub3QgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGFuXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU3Mj1zdGF0aWMgc3NpemVfdCBwcm9iZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OTAtXHRuaWQgPSBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZChwaHlzX2FkZHIpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjU5MTpcdHJldCA9IF9fYWRkX21lbW9yeShuaWQsIHBoeXNfYWRkcixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OTItXHRcdFx0ICAgTUlOX01FTU9SWV9CTE9DS19TSVpFICogc2VjdGlvbnNfcGVyX2Jsb2NrLFxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWc9NzM9Y29uZmlnIERFVl9EQVhfS01FTVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNzYtXHRkZXBlbmRzIG9uIERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6Nzc6XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xuZHJpdmVycy9kYXgvS2NvbmZpZy03OC1cdGhlbHBcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjUtXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY6LyogTWVtb3J5IHJlc291cmNlIG5hbWUgdXNlZCBmb3IgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCgpLiAqL1xuZHJpdmVycy9kYXgva21lbS5jLTI3LXN0YXRpYyBjb25zdCBjaGFyICprbWVtX25hbWU7XG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTg3PXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMTI2LVx0XHQgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzoxMjc6XHRcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG5kcml2ZXJzL2RheC9rbWVtLmMtMTI4LVx0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTE2Mz1zdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTctXHRcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXG5kcml2ZXJzL2RheC9rbWVtLmM6MTk4Olx0XHQgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3RcbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTktXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG5kcml2ZXJzL2RheC9rbWVtLmM6MjAwOlx0XHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgbGF0ZXIuXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAxLVx0XHQgKi9cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTE4NT1zdGF0aWMgdm9pZCBxY29tX3R6bWVtX2NsZWFudXBfYXJlYShzdHJ1Y3QgcWNvbV90em1lbV9hcmVhICphcmVhKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMTk0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzoxOTU6c3RhdGljIGludCBxY29tX3R6bWVtX3Bvb2xfYWRkX21lbW9yeShzdHJ1Y3QgcWNvbV90em1lbV9wb29sICpwb29sLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0xOTYtXHRcdFx0XHQgICAgICBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM9MjQ1PXFjb21fdHptZW1fcG9vbF9uZXcoY29uc3Qgc3RydWN0IHFjb21fdHptZW1fcG9vbF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTI4Mi1cdGlmIChjb25maWctXHUwMDNlaW5pdGlhbF9zaXplKSB7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjI4MzpcdFx0cmV0ID0gcWNvbV90em1lbV9wb29sX2FkZF9tZW1vcnkocG9vbCwgY29uZmlnLVx1MDAzZWluaXRpYWxfc2l6ZSxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMjg0LVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTM3NT1zdGF0aWMgYm9vbCBxY29tX3R6bWVtX3RyeV9ncm93X3Bvb2woc3RydWN0IHFjb21fdHptZW1fcG9vbCAqcG9vbCxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5Mi1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6MzkzOlx0cmV0dXJuICFxY29tX3R6bWVtX3Bvb2xfYWRkX21lbW9yeShwb29sLCByZXF1ZXN0ZWQsIGdmcCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5NC19XG4tLVxuZHJpdmVycy9odi9odl9iYWxsb29uLmM9NzA4PXN0YXRpYyB2b2lkIGh2X21lbV9ob3RfYWRkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy03MzAtXHRcdG5pZCA9IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKFBGTl9QSFlTKHN0YXJ0X3BmbikpO1xuZHJpdmVycy9odi9odl9iYWxsb29uLmM6NzMxOlx0XHRyZXQgPSBhZGRfbWVtb3J5KG5pZCwgUEZOX1BIWVMoKHN0YXJ0X3BmbikpLFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtNzMyLVx0XHRcdFx0IEhBX0JZVEVTX0lOX0NIVU5LLCBNSFBfTUVSR0VfUkVTT1VSQ0UpO1xuLS1cbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTE2OTI9c3RhdGljIGludCBob3RfYWRkX2VuYWJsZWQodm9pZClcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xNjk4LVx0ICogRE1fTUVNX0hPVF9BRERfUkVRVUVTVCBkb2VzbiYjMzk7dCBoYXZlIHRoZSBOVU1BIG5vZGUgaW5mb3JtYXRpb24gZm9yXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoxNjk5Olx0ICogYWRkX21lbW9yeSgpLlxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMTcwMC1cdCAqL1xuLS1cbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTE5MzA9c3RhdGljIGludCBiYWxsb29uX3Byb2JlKHN0cnVjdCBodl9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xOTQxLVx0ICogSG90LWFkZCBtdXN0IG9wZXJhdGUgaW4gY2h1bmtzIHRoYXQgYXJlIG9mIHNpemUgZXF1YWwgdG8gdGhlXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoxOTQyOlx0ICogbWVtb3J5IGJsb2NrIHNpemUgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgdGhlIGNvcmUgYWRkX21lbW9yeSgpXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xOTQzLVx0ICogaW50ZXJmYWNlIHJlcXVpcmVzLiBUaGUgSHlwZXItViBpbnRlcmZhY2UgcmVxdWlyZXMgdGhhdCB0aGUgbWVtb3J5XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYz0xODk9c3RhdGljIHNzaXplX3Qgc2NscF9jb25maWdfbWVtX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYy0yMjItXHRcdCAqIFNldCBlbnRpcmUgbWVtb3J5IGJsb2NrIENNTUEgc3RhdGUgdG8gbm9kYXQuIExhdGVyLCB3aGVuXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jOjIyMzpcdFx0ICogcGFnZSB0YWJsZXMgcGFnZXMgYXJlIGFsbG9jYXRlZCB2aWEgX19hZGRfbWVtb3J5KCksIHRob3NlXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jLTIyNC1cdFx0ICogcmVnaW9ucyBhcmUgbWFya2VkIF9fYXJjaF9zZXRfcGFnZV9kYXQoKS5cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jLTIyNi1cdFx0X19hcmNoX3NldF9wYWdlX25vZGF0KCh2b2lkICopX192YShhZGRyKSwgYmxvY2tfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jOjIyNzpcdFx0cmMgPSBfX2FkZF9tZW1vcnkoMCwgYWRkciwgYmxvY2tfc2l6ZSxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfbWVtLmMtMjI4LVx0XHRcdFx0ICBzY2xwX21lbS1cdTAwM2VtZW1tYXBfb25fbWVtb3J5ID9cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9Njc9ZW51bSB2aXJ0aW9fbWVtX3NibV9tYl9zdGF0ZSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY5LVx0VklSVElPX01FTV9TQk1fTUJfVU5VU0VEID0gMCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo3MDpcdC8qIChQYXJ0aWFsbHkpIHBsdWdnZWQsIG5vdCBhZGRlZCB0byBMaW51eC4gRXJyb3Igb24gYWRkX21lbW9yeSgpLiAqL1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTcxLVx0VklSVElPX01FTV9TQk1fTUJfUExVR0dFRCxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9OTA9ZW51bSB2aXJ0aW9fbWVtX2JibV9iYl9zdGF0ZSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTkyLVx0VklSVElPX01FTV9CQk1fQkJfVU5VU0VEID0gMCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo5MzpcdC8qIFBsdWdnZWQsIG5vdCBhZGRlZCB0byBMaW51eC4gRXJyb3Igb24gYWRkX21lbW9yeSgpLiAqL1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTk0LVx0VklSVElPX01FTV9CQk1fQkJfUExVR0dFRCxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTAyPXN0cnVjdCB2aXJ0aW9fbWVtIHtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTQyLVx0ICogQ29weSBvZiBcJiMzNDtTeXN0ZW0gUkFNICh2aXJ0aW9fbWVtKVwmIzM0OyB0byBiZSB1c2VkIGZvclxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE0MzpcdCAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoKS5cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xNDQtXHQgKi9cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9NTg4PXN0YXRpYyBpbnQgdmlydGlvX21lbV9zYm1fc2Jfc3RhdGVzX3ByZXBhcmVfbmV4dF9tYihzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTYxOS0gKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo2MjA6c3RhdGljIGJvb2wgdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdWludDY0X3Qgc2l6ZSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MjEte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MzUtICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjM2OnN0YXRpYyBpbnQgdmlydGlvX21lbV9hZGRfbWVtb3J5KHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdWludDY0X3QgYWRkcixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MzctXHRcdFx0XHQgdWludDY0X3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjU1LVx0YXRvbWljNjRfYWRkKHNpemUsIFx1MDAyNnZtLVx1MDAzZW9mZmxpbmVfc2l6ZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjU2Olx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKHZtLVx1MDAzZW1naWQsIGFkZHIsIHNpemUsIHZtLVx1MDAzZXJlc291cmNlX25hbWUsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjU3LVx0XHRcdFx0ICAgICAgIE1IUF9NRVJHRV9SRVNPVVJDRSB8IE1IUF9OSURfSVNfTUdJRCk7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY2OS0vKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY3MDogKiBTZWUgdmlydGlvX21lbV9hZGRfbWVtb3J5KCk6IFRyeSBhZGRpbmcgYSBzaW5nbGUgTGludXggbWVtb3J5IGJsb2NrLlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY3MS0gKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz02NzI9c3RhdGljIGludCB2aXJ0aW9fbWVtX3NibV9hZGRfbWIoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIG1iX2lkKVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02NzYtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6Njc3Olx0cmV0dXJuIHZpcnRpb19tZW1fYWRkX21lbW9yeSh2bSwgYWRkciwgc2l6ZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjc4LX1cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjgwLS8qXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjgxOiAqIFNlZSB2aXJ0aW9fbWVtX2FkZF9tZW1vcnkoKTogVHJ5IGFkZGluZyBhIGJpZyBibG9jay5cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02ODItICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9NjgzPXN0YXRpYyBpbnQgdmlydGlvX21lbV9iYm1fYWRkX2JiKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdW5zaWduZWQgbG9uZyBiYl9pZClcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjg3LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY4ODpcdHJldHVybiB2aXJ0aW9fbWVtX2FkZF9tZW1vcnkodm0sIGFkZHIsIHNpemUpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY4OS19XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTk3ND1zdGF0aWMgdm9pZCB2aXJ0aW9fbWVtX2JibV9ub3RpZnlfY2FuY2VsX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05ODUtLypcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo5ODY6ICogVGhpcyBjYWxsYmFjayB3aWxsIGVpdGhlciBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIGFkZF9tZW1vcnkoKSBvclxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTk4Ny0gKiBhc3luY2hyb25vdXNseSAoZS5nLiwgdHJpZ2dlcmVkIHZpYSB1c2VyIHNwYWNlKS4gV2UgaGF2ZSB0byBiZSBjYXJlZnVsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6OTg4OiAqIHdpdGggbG9ja2luZyB3aGVuIGNhbGxpbmcgYWRkX21lbW9yeSgpLlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTk4OS0gKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz05OTA9c3RhdGljIGludCB2aXJ0aW9fbWVtX21lbW9yeV9ub3RpZmllcl9jYihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMDg3LVx0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnZtLVx1MDAzZXdxX2FjdGl2ZSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTA4ODpcdFx0ICAgIHZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgdm0tXHUwMDNlb2ZmbGluZV90aHJlc2hvbGQgLyAyKSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMDg5LVx0XHRcdHZpcnRpb19tZW1fcmV0cnkodm0pO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xNzYwPXN0YXRpYyBpbnQgdmlydGlvX21lbV9zYm1fcGx1Z19yZXF1ZXN0KHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdWludDY0X3QgZGlmZilcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTc5My1cdHZpcnRpb19tZW1fc2JtX2Zvcl9lYWNoX21iKHZtLCBtYl9pZCwgVklSVElPX01FTV9TQk1fTUJfVU5VU0VEKSB7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTc5NDpcdFx0aWYgKCF2aXJ0aW9fbWVtX2NvdWxkX2FkZF9tZW1vcnkodm0sIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE3OTUtXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE4MDQtXHR3aGlsZSAobmJfc2IpIHtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxODA1Olx0XHRpZiAoIXZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTgwNi1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTg3OD1zdGF0aWMgaW50IHZpcnRpb19tZW1fYmJtX3BsdWdfcmVxdWVzdChzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVpbnQ2NF90IGRpZmYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE4ODgtXHR2aXJ0aW9fbWVtX2JibV9mb3JfZWFjaF9iYih2bSwgYmJfaWQsIFZJUlRJT19NRU1fQkJNX0JCX1VOVVNFRCkge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE4ODk6XHRcdGlmICghdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHZtLCB2bS1cdTAwM2ViYm0uYmJfc2l6ZSkpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTg5MC1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTkwMS1cdHdoaWxlIChuYl9iYikge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE5MDI6XHRcdGlmICghdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHZtLCB2bS1cdTAwM2ViYm0uYmJfc2l6ZSkpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTkwMy1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9Mjg3OT1zdGF0aWMgaW50IHZpcnRpb19tZW1fY3JlYXRlX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjkwMS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyOTAyOlx0LyogVGhlIG1lbW9yeSBpcyBub3QgYWN0dWFsbHkgYnVzeSAtIG1ha2UgYWRkX21lbW9yeSgpIHdvcmsuICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjkwMy1cdHZtLVx1MDAzZXBhcmVudF9yZXNvdXJjZS1cdTAwM2VmbGFncyBcdTAwMjY9IH5JT1JFU09VUkNFX0JVU1k7XG4tLVxuZHJpdmVycy94ZW4vYmFsbG9vbi5jPTI2ND1zdGF0aWMgZW51bSBicF9zdGF0ZSByZXNlcnZlX2FkZGl0aW9uYWxfbWVtb3J5KHZvaWQpXG4tLVxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTI5Ni0gICAgICAgIC8qXG5kcml2ZXJzL3hlbi9iYWxsb29uLmM6Mjk3OiAgICAgICAgICogYWRkX21lbW9yeSgpIHdpbGwgYnVpbGQgcGFnZSB0YWJsZXMgZm9yIHRoZSBuZXcgbWVtb3J5IHNvXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMjk4LSAgICAgICAgICogdGhlIHAybSBtdXN0IGNvbnRhaW4gaW52YWxpZCBlbnRyaWVzIHNvIHRoZSBjb3JyZWN0XG4tLVxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMxOC1cdC8qXG5kcml2ZXJzL3hlbi9iYWxsb29uLmM6MzE5Olx0ICogYWRkX21lbW9yeV9yZXNvdXJjZSgpIHdpbGwgY2FsbCBvbmxpbmVfcGFnZXMoKSB3aGljaCBpbiBpdHMgdHVyblxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyMC1cdCAqIHdpbGwgY2FsbCB4ZW5fb25saW5lX3BhZ2UoKSBjYWxsYmFjayBjYXVzaW5nIGRlYWRsb2NrIGlmIHdlIGRvbiYjMzk7dFxuLS1cbmRyaXZlcnMveGVuL2JhbGxvb24uYy0zMjQtXHRtdXRleF91bmxvY2soXHUwMDI2YmFsbG9vbl9tdXRleCk7XG5kcml2ZXJzL3hlbi9iYWxsb29uLmM6MzI1Olx0LyogYWRkX21lbW9yeV9yZXNvdXJjZSgpIHJlcXVpcmVzIHRoZSBkZXZpY2VfaG90cGx1ZyBsb2NrICovXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMzI2LVx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuZHJpdmVycy94ZW4vYmFsbG9vbi5jOjMyNzpcdHJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlc291cmNlLCBNSFBfTUVSR0VfUkVTT1VSQ0UpO1xuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyOC1cdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMj1zdHJ1Y3QgcGFnZSAqcGZuX3RvX29ubGluZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zMy1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDozNDovKiBGbGFncyBmb3IgYWRkX21lbW9yeSgpIGFuZCBmcmllbmRzIHRvIHNwZWNpZnkgbWVtb3J5IGhvdHBsdWcgZGV0YWlscy4gKi9cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zNS10eXBlZGVmIGludCBfX2JpdHdpc2UgbWhwX3Q7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTQwLSAqIEFsbG93IG1lcmdpbmcgb2YgdGhlIGFkZGVkIFN5c3RlbSBSQU0gcmVzb3VyY2Ugd2l0aCBhZGphY2VudCxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDo0MTogKiBtZXJnZWFibGUgcmVzb3VyY2VzLiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBhZGRfbWVtb3J5X3Jlc291cmNlKClcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC00Mi0gKiB3aXRoIHRoaXMgZmxhZyBzZXQsIHRoZSByZXNvdXJjZSBwb2ludGVyIG11c3Qgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgaXRcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MTIzPWV4dGVybiBpbnQgdHJ5X29ubGluZV9ub2RlKGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTEyNC1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoxMjU6ZXh0ZXJuIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0xMjYtXHRcdFx0ICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTMwMT1pbnQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwMjpleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwMzpleHRlcm4gaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDozMDQ6ZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA1LVx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwNjppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA3LVx0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwOC1cdFx0XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzA5OmV4dGVybiBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMxMC1cdFx0XHRcdCAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTMyMj1zdGF0aWMgaW50IGNoZWNrX3Bmbl9zcGFuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMzI4LVx0ICogb25saW5lLCBzbyB0aGlzIGNoZWNrIHNob3VsZCBvbmx5IGZpcmUgZm9yIGRpcmVjdFxubW0vbWVtb3J5X2hvdHBsdWcuYzozMjk6XHQgKiBhcmNoX3thZGQscmVtb3ZlfV9tZW1vcnkoKSB1c2VycyBvdXRzaWRlIG9mIGFkZF9tZW1vcnlfcmVzb3VyY2UoKS5cbm1tL21lbW9yeV9ob3RwbHVnLmMtMzMwLVx0ICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDcwLVx0XHQvKiBjYWxsIGFyY2gmIzM5O3MgbWVtb3J5IGhvdGFkZCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDcxOlx0XHRyZXQgPSBhcmNoX2FkZF9tZW1vcnkobmlkLCBjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIFx1MDAyNnBhcmFtcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzItXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE1MDc9c3RhdGljIGJvb2wgbm9kZV9pc19tZW1vcnlsZXNzKGludCBuaWQpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTI5LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTMwOnN0YXRpYyBpbnQgX19hZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1MzEtXHRcdFx0XHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU5MC1cdH0gZWxzZSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1OTE6XHRcdHJldCA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHN0YXJ0LCBzaXplLCBcdTAwMjZwYXJhbXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTkyLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYzOC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTYzOTppbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjQwLXtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0MTpcdHJldHVybiBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi1cdFx0XHRcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0NC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0NTovKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0NjppbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Ny17XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjU0LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjU1Olx0cmV0ID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1Ni1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjYwLVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjYxOmludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY2Mi17XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjY1LVx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjY2Olx0cmMgPSBfX2FkZF9tZW1vcnkobmlkLCBzdGFydCwgc2l6ZSwgbWhwX2ZsYWdzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY2Ny1cdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTY3MT1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDQtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MDU6aW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA2LVx0XHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI3LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzI4Olx0cmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI5LVx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTczNj1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXCYjMzQ7a21lbVwmIzM0Oyk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzUyLSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzUzOmludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3NTQtXHRcdFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzU1LXtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTc1NjpcdHJldHVybiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQobmlkLCBzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc1Ny1cdFx0XHRtaHBfZmxhZ3MsXG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yMDMtXHQgKiBvdmVyIHRoZSBkZXZpY2UgbWVtb3J5IGlzIHVuLWFjY2Vzc2libGUgdGh1cyB3ZSBkbyBub3Qgd2FudCB0b1xubW0vbWVtcmVtYXAuYzoyMDQ6XHQgKiBjcmVhdGUgYSBsaW5lYXIgbWFwcGluZyBmb3IgdGhlIG1lbW9yeSBsaWtlIGFyY2hfYWRkX21lbW9yeSgpXG5tbS9tZW1yZW1hcC5jLTIwNS1cdCAqIHdvdWxkIGRvLlxuLS1cbm1tL21lbXJlbWFwLmMtMjA4LVx0ICogdGhlIENQVSwgd2UgZG8gd2FudCB0aGUgbGluZWFyIG1hcHBpbmcgYW5kIHRodXMgdXNlXG5tbS9tZW1yZW1hcC5jOjIwOTpcdCAqIGFyY2hfYWRkX21lbW9yeSgpLlxubW0vbWVtcmVtYXAuYy0yMTAtXHQgKi9cbi0tXG5tbS9tZW1yZW1hcC5jLTIyMC1cbm1tL21lbXJlbWFwLmM6MjIxOlx0XHRlcnJvciA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZV9sZW4ocmFuZ2UpLFxubW0vbWVtcmVtYXAuYy0yMjItXHRcdFx0XHRcdHBhcmFtcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUHJvYmUgTWVjaGFuaXNtKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIG1lbW9yeSBwcm9iaW5nLiBJIHNlZSB0aGF0IGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGhhcyBhIGZ1bmN0aW9uIGNhbGxlZCBgcHJvYmVfc3RvcmVgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgaGFuZGxlciBmb3Igd3JpdGVzIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9wcm9iZWAuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGZ1bmN0aW9uIGBwcm9iZV9zdG9yZWAgcmVjZWl2ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBhbmQgdGhlbiBjYWxscyBgX19hZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLCAuLi4pYC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEEgcmVkIGZsYWchIE15IGV4cGVydCBpbnN0aW5jdHMgYXJlIGtpY2tpbmcgaW4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gSXMgdGhpcyBgZHJpdmVycy9iYXNlL21lbW9yeS5jOnByb2JlX3N0b3JlYCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlPyBJIG5lZWQgdG8ga25vdyBpZiBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBjYW4gdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLiBJdCB3b3VsZCBiZSBhIHNlcmlvdXMgc2VjdXJpdHkgY29uY2VybiBpZiBzby4gVGltZSB0byBkaXZlIGJhY2sgaW50byBgZHJpdmVycy9iYXNlL21lbW9yeS5jYCBhbmQgY29uZmlybSBleGFjdGx5IGhvdyB0aGlzIHByb2JlIG1lY2hhbmlzbSBpcyBleHBvc2VkLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0LypcbiA1NjY6XHQgKiBTb21lIGFyY2hpdGVjdHVyZXMgd2lsbCBoYXZlIGN1c3RvbSBkcml2ZXJzIHRvIGRvIHRoaXMsIGFuZFxuIDU2NzpcdCAqIHdpbGwgbm90IG5lZWQgdG8gZG8gaXQgZnJvbSB1c2Vyc3BhY2UuICBUaGUgZmFrZSBob3QtYWRkIGNvZGVcbiA1Njg6XHQgKiBhcyB3ZWxsIGFzIHBwYzY0IHdpbGwgZG8gYWxsIG9mIHRoZWlyIGRpc2NvdmVyeSBpbiB1c2Vyc3BhY2VcbiA1Njk6XHQgKiBhbmQgd2lsbCByZXF1aXJlIHRoaXMgaW50ZXJmYWNlLlxuIDU3MDpcdCAqL1xuIDU3MTpcdCNpZmRlZiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkVcbiA1NzI6XHRzdGF0aWMgc3NpemVfdCBwcm9iZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIDU3MzpcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDU3NDpcdHtcbiA1NzU6XHRcdHU2NCBwaHlzX2FkZHI7XG4gNTc2Olx0XHRpbnQgbmlkLCByZXQ7XG4gNTc3Olx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzX3Blcl9ibG9jayA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xuIDU3ODpcdFxuIDU3OTpcdFx0cmV0ID0ga3N0cnRvdWxsKGJ1ZiwgMCwgXHUwMDI2cGh5c19hZGRyKTtcbiA1ODA6XHRcdGlmIChyZXQpXG4gNTgxOlx0XHRcdHJldHVybiByZXQ7XG4gNTgyOlx0XG4gNTgzOlx0XHRpZiAocGh5c19hZGRyIFx1MDAyNiAoKHBhZ2VzX3Blcl9ibG9jayBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxKSlcbiA1ODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTg1Olx0XG4gNTg2Olx0XHRyZXQgPSBsb2NrX2RldmljZV9ob3RwbHVnX3N5c2ZzKCk7XG4gNTg3Olx0XHRpZiAocmV0KVxuIDU4ODpcdFx0XHRyZXR1cm4gcmV0O1xuIDU4OTpcdFxuIDU5MDpcdFx0bmlkID0gbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQocGh5c19hZGRyKTtcbiA1OTE6XHRcdHJldCA9IF9fYWRkX21lbW9yeShuaWQsIHBoeXNfYWRkcixcbiA1OTI6XHRcdFx0XHQgICBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgKiBzZWN0aW9uc19wZXJfYmxvY2ssXG4gNTkzOlx0XHRcdFx0ICAgTUhQX05PTkUpO1xuIDU5NDpcdFxuIDU5NTpcdFx0aWYgKHJldClcbiA1OTY6XHRcdFx0Z290byBvdXQ7XG4gNTk3Olx0XG4gNTk4Olx0XHRyZXQgPSBjb3VudDtcbiA1OTk6XHRvdXQ6XG4gNjAwOlx0XHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiA2MDE6XHRcdHJldHVybiByZXQ7XG4gNjAyOlx0fVxuIDYwMzpcdFxuIDYwNDpcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhwcm9iZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1ibG9jay5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBtZW1ibG9jay5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG1hY3JvLCBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYC4gVGhpcyBsb29rcyBsaWtlIGEgdmFyaWF0aW9uIG9mIHRoZSBleGlzdGluZyBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWAgbWFjcm8sIHdpdGggYSBrZXkgZGlmZmVyZW5jZTogaXQgYWxsb3dzIHNwZWNpZnlpbmcgYSBzdGFydGluZyBpbmRleCwgYHN0YXJ0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwcm9iYWJseSBpbnRyb2R1Y2VzIG1vcmUgdGFyZ2V0ZWQgaXRlcmF0aW9uLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIG9yIHdoZW4gd2UgKmtub3cqIGEgc3RhcnRpbmcgcG9pbnQgdGhhdCB3ZSBjYW4gb3B0aW1pemUgZnJvbS4KCk5vdywgbGV0IG1lIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9ucyB1c2luZyB0aGlzIG5ldyBtYWNybywgc3BlY2lmaWNhbGx5IGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuIExvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoaXMgbmV3IG1hY3JvIGlzIGJlaW5nIHVzZWQgaW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVgIG1hY3JvLiBUaGUga2V5IGlzIGluIHRoZSBwYXJhbWV0ZXJzLiBUaGUgJiMzNDtmcm9tJiMzNDsgaW5kZXggYXBwZWFycyB0byBiZSBjb21pbmcgZnJvbSBhIG5ldyBmdW5jdGlvbiBjYWxsZWQgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgYmluYXJ5IHNlYXJjaCBpbXBsZW1lbnRhdGlvbi4KClNvLCB0aGUgY29kZSBub3cgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBhIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHN1aXRhYmxlIHN0YXJ0aW5nIGluZGV4IGZvciBhZGRpbmcgYSBtZW1vcnkgcmFuZ2UuIEkgY2FuIHNlZSB0aGF0IGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCBjYWxjdWxhdGVzIGFuIGluZGV4IHRoYXQgaXMgdGhlIGZpcnN0IHJlZ2lvbiB3aGVyZSB0aGUgcG90ZW50aWFsIG92ZXJsYXAgYmFzZSBhZGRyZXNzIHN0YXJ0cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbiEgSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCAqYWxsKiBleGlzdGluZyBtZW1ibG9jayByZWdpb25zLCB0aGUgY29kZSBub3cgdXNlcyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgdG8gbmFycm93IHRoZSBzZWFyY2gsIGVmZmVjdGl2ZWx5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBtZW1ibG9jayBsaXN0cy4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIGFkZGluZyBvciBpc29sYXRpbmcgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBkdXJpbmcgZWFybHkgYm9vdCBzdGFnZXMgb3IgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy4KCk9rYXksIGxldCBtZSBjb25maXJtIG15IGh5cG90aGVzaXMgYnkgcmVhZGluZyBmdXJ0aGVyIGludG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmU6IGhvdyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgaXMgdXNlZCwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgbnVhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdCAqIEBzaXplOiBzaXplIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMxOlx0ICogQG5pZDogbmlkIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMyOlx0ICogQGZsYWdzOiBmbGFncyBvZiB0aGUgbmV3IHJlZ2lvblxuIDYzMzpcdCAqXG4gNjM0Olx0ICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkgaW50byBAdHlwZS4gIFRoZSBuZXcgcmVnaW9uXG4gNjM1Olx0ICogaXMgYWxsb3dlZCB0byBvdmVybGFwIHdpdGggZXhpc3Rpbmcgb25lcyAtIG92ZXJsYXBzIGRvbiYjMzk7dCBhZmZlY3QgYWxyZWFkeVxuIDYzNjpcdCAqIGV4aXN0aW5nIHJlZ2lvbnMuICBAdHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIG1pbmltYWwgKGFsbCBuZWlnaGJvdXJpbmdcbiA2Mzc6XHQgKiBjb21wYXRpYmxlIHJlZ2lvbnMgYXJlIG1lcmdlZCkgYWZ0ZXIgdGhlIGFkZGl0aW9uLlxuIDYzODpcdCAqXG4gNjM5Olx0ICogUmV0dXJuOlxuIDY0MDpcdCAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXG4gNjQxOlx0ICovXG4gNjQyOlx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIDY0MzpcdFx0XHRcdFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiA2NDQ6XHRcdFx0XHRcdGludCBuaWQsIGVudW0gbWVtYmxvY2tfZmxhZ3MgZmxhZ3MpXG4gNjQ1Olx0e1xuIDY0NjpcdFx0Ym9vbCBpbnNlcnQgPSBmYWxzZTtcbiA2NDc6XHRcdHBoeXNfYWRkcl90IG9iYXNlID0gYmFzZTtcbiA2NDg6XHRcdHBoeXNfYWRkcl90IGVuZCA9IGJhc2UgJiM0MzsgbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4gNjQ5Olx0XHRpbnQgaWR4LCBucl9uZXcsIHN0YXJ0X3JnbiA9IC0xLCBlbmRfcmduO1xuIDY1MDpcdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduO1xuIDY1MTpcdFxuIDY1MjpcdFx0aWYgKCFzaXplKVxuIDY1MzpcdFx0XHRyZXR1cm4gMDtcbiA2NTQ6XHRcbiA2NTU6XHRcdC8qIHNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgYXJyYXkgKi9cbiA2NTY6XHRcdGlmICh0eXBlLVx1MDAzZXJlZ2lvbnNbMF0uc2l6ZSA9PSAwKSB7XG4gNjU3Olx0XHRcdFdBUk5fT04odHlwZS1cdTAwM2VjbnQgIT0gMCB8fCB0eXBlLVx1MDAzZXRvdGFsX3NpemUpO1xuIDY1ODpcdFx0XHR0eXBlLVx1MDAzZXJlZ2lvbnNbMF0uYmFzZSA9IGJhc2U7XG4gNjU5Olx0XHRcdHR5cGUtXHUwMDNlcmVnaW9uc1swXS5zaXplID0gc2l6ZTtcbiA2NjA6XHRcdFx0dHlwZS1cdTAwM2VyZWdpb25zWzBdLmZsYWdzID0gZmxhZ3M7XG4gNjYxOlx0XHRcdG1lbWJsb2NrX3NldF9yZWdpb25fbm9kZShcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbMF0sIG5pZCk7XG4gNjYyOlx0XHRcdHR5cGUtXHUwMDNldG90YWxfc2l6ZSA9IHNpemU7XG4gNjYzOlx0XHRcdHR5cGUtXHUwMDNlY250ID0gMTtcbiA2NjQ6XHRcdFx0cmV0dXJuIDA7XG4gNjY1Olx0XHR9XG4gNjY2Olx0XG4gNjY3Olx0XHQvKlxuIDY2ODpcdFx0ICogVGhlIHdvcnN0IGNhc2UgaXMgd2hlbiBuZXcgcmFuZ2Ugb3ZlcmxhcHMgYWxsIGV4aXN0aW5nIHJlZ2lvbnMsXG4gNjY5Olx0XHQgKiB0aGVuIHdlJiMzOTtsbCBuZWVkIHR5cGUtXHUwMDNlY250ICYjNDM7IDEgZW1wdHkgcmVnaW9ucyBpbiBAdHlwZS4gU28gaWZcbiA2NzA6XHRcdCAqIHR5cGUtXHUwMDNlY250ICogMiAmIzQzOyAxIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0eXBlLVx1MDAzZW1heCwgd2Uga25vd1xuIDY3MTpcdFx0ICogdGhhdCB0aGVyZSBpcyBlbm91Z2ggZW1wdHkgcmVnaW9ucyBpbiBAdHlwZSwgYW5kIHdlIGNhbiBpbnNlcnRcbiA2NzI6XHRcdCAqIHJlZ2lvbnMgZGlyZWN0bHkuXG4gNjczOlx0XHQgKi9cbiA2NzQ6XHRcdGlmICh0eXBlLVx1MDAzZWNudCAqIDIgJiM0MzsgMSBcdTAwM2M9IHR5cGUtXHUwMDNlbWF4KVxuIDY3NTpcdFx0XHRpbnNlcnQgPSB0cnVlO1xuIDY3NjpcdFxuIDY3NzpcdHJlcGVhdDpcbiA2Nzg6XHRcdC8qXG4gNjc5Olx0XHQgKiBUaGUgZm9sbG93aW5nIGlzIGV4ZWN1dGVkIHR3aWNlLiAgT25jZSB3aXRoICVmYWxzZSBAaW5zZXJ0IGFuZFxuIDY4MDpcdFx0ICogdGhlbiB3aXRoICV0cnVlLiAgVGhlIGZpcnN0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgbmVlZGVkXG4gNjgxOlx0XHQgKiB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGFyZWEuICBUaGUgc2Vjb25kIGFjdHVhbGx5IGluc2VydHMgdGhlbS5cbiA2ODI6XHRcdCAqL1xuIDY4MzpcdFx0YmFzZSA9IG9iYXNlO1xuIDY4NDpcdFx0bnJfbmV3ID0gMDtcbiA2ODU6XHRcbiA2ODY6XHRcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiA2ODc6XHRcdFx0XHRcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XG4gNjg4Olx0XHRcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVx1MDAzZWJhc2U7XG4gNjg5Olx0XHRcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSAmIzQzOyByZ24tXHUwMDNlc2l6ZTtcbiA2OTA6XHRcbiA2OTE6XHRcdFx0aWYgKHJiYXNlIFx1MDAzZT0gZW5kKVxuIDY5MjpcdFx0XHRcdGJyZWFrO1xuIDY5MzpcdFx0XHRpZiAocmVuZCBcdTAwM2M9IGJhc2UpXG4gNjk0Olx0XHRcdFx0Y29udGludWU7XG4gNjk1Olx0XHRcdC8qXG4gNjk2Olx0XHRcdCAqIEByZ24gb3ZlcmxhcHMuICBJZiBpdCBzZXBhcmF0ZXMgdGhlIGxvd2VyIHBhcnQgb2YgbmV3XG4gNjk3Olx0XHRcdCAqIGFyZWEsIGluc2VydCB0aGF0IHBvcnRpb24uXG4gNjk4Olx0XHRcdCAqL1xuIDY5OTpcdFx0XHRpZiAocmJhc2UgXHUwMDNlIGJhc2UpIHtcbiA3MDA6XHQjaWZkZWYgQ09ORklHX05VTUFcbiA3MDE6XHRcdFx0XHRXQVJOX09OKG5pZCAhPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSk7XG4gNzAyOlx0I2VuZGlmXG4gNzAzOlx0XHRcdFx0V0FSTl9PTihmbGFncyAhPSBNRU1CTE9DS19OT05FIFx1MDAyNlx1MDAyNiBmbGFncyAhPSByZ24tXHUwMDNlZmxhZ3MpO1xuIDcwNDpcdFx0XHRcdG5yX25ldyYjNDM7JiM0Mzs7XG4gNzA1Olx0XHRcdFx0aWYgKGluc2VydCkge1xuIDcwNjpcdFx0XHRcdFx0aWYgKHN0YXJ0X3JnbiA9PSAtMSlcbiA3MDc6XHRcdFx0XHRcdFx0c3RhcnRfcmduID0gaWR4O1xuIDcwODpcdFx0XHRcdFx0ZW5kX3JnbiA9IGlkeCAmIzQzOyAxO1xuIDcwOTpcdFx0XHRcdFx0bWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgmIzQzOyYjNDM7LCBiYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLiBUaGF0IGZ1bmN0aW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlIGEgY3J1Y2lhbCBjb21wb25lbnQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgZGlyZWN0aW5nIG15IGltbWVkaWF0ZSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpdHMgaW5wdXRzLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgcm9sZSBpcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIHdoYXRldmVyIHByb2JsZW0gSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgaW5zaWdodHMgSSBjYW4gZ2xlYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0ICogZmlyc3QgcmVnaW9uIGFmdGVyIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQGVuZF9yZ24uXG4gODQxOlx0ICpcbiA4NDI6XHQgKiBSZXR1cm46XG4gODQzOlx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiA4NDQ6XHQgKi9cbiA4NDU6XHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIDg0NjpcdFx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuIDg0NzpcdFx0XHRcdFx0XHRpbnQgKnN0YXJ0X3JnbiwgaW50ICplbmRfcmduKVxuIDg0ODpcdHtcbiA4NDk6XHRcdHBoeXNfYWRkcl90IGVuZCA9IGJhc2UgJiM0MzsgbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4gODUwOlx0XHRpbnQgaWR4O1xuIDg1MTpcdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduO1xuIDg1MjpcdFxuIDg1MzpcdFx0KnN0YXJ0X3JnbiA9ICplbmRfcmduID0gMDtcbiA4NTQ6XHRcbiA4NTU6XHRcdGlmICghc2l6ZSlcbiA4NTY6XHRcdFx0cmV0dXJuIDA7XG4gODU3Olx0XG4gODU4Olx0XHQvKiB3ZSYjMzk7bGwgY3JlYXRlIGF0IG1vc3QgdHdvIG1vcmUgcmVnaW9ucyAqL1xuIDg1OTpcdFx0d2hpbGUgKHR5cGUtXHUwMDNlY250ICYjNDM7IDIgXHUwMDNlIHR5cGUtXHUwMDNlbWF4KVxuIDg2MDpcdFx0XHRpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpIFx1MDAzYyAwKVxuIDg2MTpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2MjpcdFxuIDg2MzpcdFx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLFxuIDg2NDpcdFx0XHRcdFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcbiA4NjU6XHRcdFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXHUwMDNlYmFzZTtcbiA4NjY6XHRcdFx0cGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICYjNDM7IHJnbi1cdTAwM2VzaXplO1xuIDg2NzpcdFxuIDg2ODpcdFx0XHRpZiAocmJhc2UgXHUwMDNlPSBlbmQpXG4gODY5Olx0XHRcdFx0YnJlYWs7XG4gODcwOlx0XHRcdGlmIChyZW5kIFx1MDAzYz0gYmFzZSlcbiA4NzE6XHRcdFx0XHRjb250aW51ZTtcbiA4NzI6XHRcbiA4NzM6XHRcdFx0aWYgKHJiYXNlIFx1MDAzYyBiYXNlKSB7XG4gODc0Olx0XHRcdFx0LypcbiA4NzU6XHRcdFx0XHQgKiBAcmduIGludGVyc2VjdHMgZnJvbSBiZWxvdy4gIFNwbGl0IGFuZCBjb250aW51ZVxuIDg3NjpcdFx0XHRcdCAqIHRvIHByb2Nlc3MgdGhlIG5leHQgcmVnaW9uIC0gdGhlIG5ldyB0b3AgaGFsZi5cbiA4Nzc6XHRcdFx0XHQgKi9cbiA4Nzg6XHRcdFx0XHRyZ24tXHUwMDNlYmFzZSA9IGJhc2U7XG4gODc5Olx0XHRcdFx0cmduLVx1MDAzZXNpemUgLT0gYmFzZSAtIHJiYXNlO1xuIDg4MDpcdFx0XHRcdHR5cGUtXHUwMDNldG90YWxfc2l6ZSAtPSBiYXNlIC0gcmJhc2U7XG4gODgxOlx0XHRcdFx0bWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgsIHJiYXNlLCBiYXNlIC0gcmJhc2UsXG4gODgyOlx0XHRcdFx0XHRcdCAgICAgICBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSxcbiA4ODM6XHRcdFx0XHRcdFx0ICAgICAgIHJnbi1cdTAwM2VmbGFncyk7XG4gODg0Olx0XHRcdH0gZWxzZSBpZiAocmVuZCBcdTAwM2UgZW5kKSB7XG4gODg1Olx0XHRcdFx0LypcbiA4ODY6XHRcdFx0XHQgKiBAcmduIGludGVyc2VjdHMgZnJvbSBhYm92ZS4gIFNwbGl0IGFuZCByZWRvIHRoZVxuIDg4NzpcdFx0XHRcdCAqIGN1cnJlbnQgcmVnaW9uIC0gdGhlIG5ldyBib3R0b20gaGFsZi5cbiA4ODg6XHRcdFx0XHQgKi9cbiA4ODk6XHRcdFx0XHRyZ24tXHUwMDNlYmFzZSA9IGVuZDtcbiA4OTA6XHRcdFx0XHRyZ24tXHUwMDNlc2l6ZSAtPSBlbmQgLSByYmFzZTtcbiA4OTE6XHRcdFx0XHR0eXBlLVx1MDAzZXRvdGFsX3NpemUgLT0gZW5kIC0gcmJhc2U7XG4gODkyOlx0XHRcdFx0bWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbih0eXBlLCBpZHgtLSwgcmJhc2UsIGVuZCAtIHJiYXNlLFxuIDg5MzpcdFx0XHRcdFx0XHQgICAgICAgbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJnbiksXG4gODk0Olx0XHRcdFx0XHRcdCAgICAgICByZ24tXHUwMDNlZmxhZ3MpO1xuIDg5NTpcdFx0XHR9IGVsc2Uge1xuIDg5NjpcdFx0XHRcdC8qIEByZ24gaXMgZnVsbHkgY29udGFpbmVkLCByZWNvcmQgaXQgKi9cbiA4OTc6XHRcdFx0XHRpZiAoISplbmRfcmduKVxuIDg5ODpcdFx0XHRcdFx0KnN0YXJ0X3JnbiA9IGlkeDtcbiA4OTk6XHRcdFx0XHQqZW5kX3JnbiA9IGlkeCAmIzQzOyAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2U6IEFuYWx5emluZyBNb2RpZmljYXRpb25zIHRvIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCBoYXZlIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWUgY29yZSB0cmlhZ2UgcXVlc3Rpb25zLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGxhaWQgb3V0IGluIFNlY3Rpb24gMSwgMiwgYW5kIDMuIE15IHByaW1hcnkgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBkeW5hbWljYWxseSByZWFjaGFibGUgYXQgcnVudGltZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLiBTaW1wbHkgcHV0LCBjYW4gc3l6a2FsbGVyLCBvciBhbnkgZnV6emluZyBzdHJhdGVneSwgYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlPwoKTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgY2FsbCBwYXRocyBvZiBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLiAgSSBzZWUgdGhhdCB0aGV5JiMzOTtyZSBib3RoIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY2FsbGVkIGZyb20gYG1tL21lbW9yeV9ob3RwbHVnLmNgIHZpYSBgbWVtYmxvY2tfYWRkX25vZGVgIGFuZCBgbWVtYmxvY2tfcmVtb3ZlYC4gIFNwZWNpZmljYWxseSwgYF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpYCB3aGljaCB0aGVuIGNhbGxzIGBtZW1ibG9ja19hZGRfbm9kZWAgYW5kIGBtZW1ibG9ja19yZW1vdmVgIGlzIGNhbGxlZCBmcm9tIG1lbW9yeSBob3RwbHVnIHJvdXRpbmVzIGxpa2UgdmlydGlvLW1lbSwgc3lzZnMgbWVtb3J5IHByb2JlLCBEQVgvZGV2X2RheCBrbWVtLCBhbmQgbWVtb3J5IG9mZmxpbmUgb3BlcmF0aW9ucy4KCkNydWNpYWxseSwgSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXNlIHBhdGhzIGFyZSB0YWtlbi4gYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIHNlZW1zIHJlbGV2YW50LCBhcyBpdCBhZmZlY3RzIHRoZSB1c2Ugb2YgYG1lbWJsb2NrX2FkZF9ub2RlYCBpbiBgX19hZGRfbWVtb3J5X3Jlc291cmNlKClgLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQsIHdoZW4gYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIGVuYWJsZWQsIG9uIGFyY2hpdGVjdHVyZXMgbGlrZSBJTlRFTF9URFhfSE9TVCBvciBhcm02NCwgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB3aWxsIGluZGVlZCBsZWFkIHRvIHRoZSBleGVjdXRpb24gb2YgYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gIEkgY2FuIHNlZSB0aGF0IHdoZW4gbWVtb3J5IGlzIGhvdHBsdWdnZWQgdmlhIHZpcnRpb19tZW0sIHN5c2ZzLCBvciBrbWVtLCBgX19hZGRfbWVtb3J5X3Jlc291cmNlKClgIGlzIGNhbGxlZCwgYW5kLCBpZiBgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AgaXMgc2V0LCBjYWxscyBgbWVtYmxvY2tfYWRkX25vZGUoKWAgYW5kIGBtZW1ibG9ja19yZW1vdmUoKWAgd2hpY2ggaW4gdHVybiwgY2FsbCBvdXIgbW9kaWZpZWQgZnVuY3Rpb25zLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMgYmFzZWQgb24gY29uZmlnIG9wdGlvbnMuIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AsIGBDT05GSUdfSU5URUxfVERYX0hPU1RgLCBhbmQgcG90ZW50aWFsbHkgb3RoZXJzIGFyZSBhbGwgcHJpbWUgc3VzcGVjdHMgZm9yIGNyZWF0aW5nIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0LgoKVGhlIG1vZGlmaWNhdGlvbnMgdGhlbXNlbHZlcyBpbnZvbHZlIHJlcGxhY2luZyBhIGxpbmVhciBzZWFyY2ggKGBmb3JfZWFjaF9tZW1ibG9ja190eXBlYCkgd2l0aCBhIGJpbmFyeSBzZWFyY2ggKGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCkgdG8gZmluZCB0aGUgc3RhcnRpbmcgaW5kZXggd2l0aGluIHRoZSBgbWVtYmxvY2tfdHlwZWAuIFRoaXMgaXMgYSBub24tdHJpdmlhbCBhbGdvcml0aG1pYyBjaGFuZ2Ugd2l0aGluIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2U6IGEgY29yZSBzdWJzeXN0ZW0gaW4gbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9tZW1ibG9jay5jYCkgaGFzIHNlZW4gYSBjaGFuZ2UgdG8gaXRzIGZ1bmRhbWVudGFsIGxvZ2ljLgoKTGV0JiMzOTtzIG5vdyBhbmFseXplIHRoZSBjb2RlIHRoYXQgaGFzIGNoYW5nZWQuIGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVnaW9uIHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBtZW1vcnkgdGhhdCB3ZSYjMzk7cmUgaW5zZXJ0aW5nIG9yIHJlbW92aW5nIGRvZXNuJiMzOTt0IG92ZXJsYXAuIExvb2tpbmcgY2xvc2VseSBhdCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAsIEkgY2FuIHNlZSB0aGF0IHRoZSBiaW5hcnkgc2VhcmNoIHJlc3VsdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RhcnRpbmcgcG9pbnQuCgpJbiBgbWVtYmxvY2tfYWRkX3JhbmdlYCwgdGhlIGJpbmFyeSBzZWFyY2ggaXMgcGVyZm9ybWVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb21gIGxvb3AuIFRoZSBrZXkgaXMgdGhhdCBiYXNlIGRvZXNuJiMzOTt0IGNoYW5nZSBkdXJpbmcgdGhlIGxvb3AgKHNvIHRoZSBzZWFyY2ggb25seSBoYXMgdG8gaGFwcGVuIG9uY2UpLCBhbmQgdGhlIGxvb3Agb25seSBwcm9jZXNzZXMgdGhvc2UgZW50cmllcyB3aGljaCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGUgbWVtYmxvY2sgb3BlcmF0aW9uLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB2aWEgcnVudGltZSBtZW1vcnkgaG90cGx1ZyBwYXRocywgYW5kIHRoZSBhbGdvcml0aG1pYyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHfGNvbmZpZyBBUkNIX0tFRVBfTUVNQkxPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz00ODI9Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXG4tLVxubW0vS2NvbmZpZy00ODctIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXG5tbS9LY29uZmlnOjQ4ODpjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9LY29uZmlnLTQ4OS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTUwNT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUwOC0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTA5Om1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTEwLVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzYwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYElOVEVMX1REWF9IT1NUYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYGFyY2gveDg2L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiB0aGF0IFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucykgaXMgYW4geDg2LXNwZWNpZmljIHRlY2hub2xvZ3kgZnJvbSBJbnRlbC4gSSBrbm93IHRoaXMgZnJvbSB3b3JraW5nIHdpdGggc2ltaWxhciBoYXJkd2FyZSBzZWN1cml0eSBmZWF0dXJlcyBpbiB0aGUgcGFzdC4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgbmVzdGVkIHNvbWV3aGVyZSBpbiB0aGUgeDg2LXJlbGF0ZWQgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IEkgZmluZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGJlIHJlbGF0ZWQsIGFuZCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTlRFTF9URFhfSE9TVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4NDY9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWctMTg2NC1cbmFyY2gveDg2L0tjb25maWc6MTg2NTpjb25maWcgSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L0tjb25maWctMTg2Ni1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGU6CgoqKkFuYWx5emluZyB0aGUgYElOVEVMX1REWF9IT1NUYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUgYW5kIHBhcnNlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgSU5URUxfVERYX0hPU1RgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIGFuZCBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyB0aGlzLiBGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvdGhlciBLY29uZmlnIHN5bWJvbHMgdGhpcyBvbmUgcmVsaWVzIG9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0ICptdXN0KiBiZSBkZWZpbmVkIG9yIGVuYWJsZWQgKmJlZm9yZSogSSBjYW4gZXZlbiBjb25zaWRlciBjb25maWd1cmluZyBURFggaG9zdCBzdXBwb3J0LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGNvcnJlY3QuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlcmUgYXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgYW5kIHBvdGVudGlhbGx5IHNvbWUgQ1BVIGZlYXR1cmUgZmxhZ3MgdGhhdCBtdXN0IGJlIHByZXNlbnQuIEFuZCwgZ2l2ZW4gdGhhdCB0aGlzIHJlbGF0ZXMgdG8gSW50ZWwmIzM5O3MgVERYLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIHByb2Nlc3NvciBvciBwbGF0Zm9ybSBzZXJpZXMgbWlnaHQgYmUgbmVlZGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgY29kZSByZXZlYWxzLi4uSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggZGVwZW5kZW5jeSBvbiB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciB3aGVuIGVuYWJsaW5nIHRoaXMgc3VwcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODY1Olx0Y29uZmlnIElOVEVMX1REWF9IT1NUXG4xODY2Olx0XHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuMTg2NzpcdFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMXG4xODY4Olx0XHRkZXBlbmRzIG9uIFg4Nl82NFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBLVk1fSU5URUxcbjE4NzA6XHRcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xuMTg3MTpcdFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcbjE4NzM6XHRcdGRlcGVuZHMgb24gWDg2X01DRVxuMTg3NDpcdFx0aGVscFxuMTg3NTpcdFx0ICBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBwcm90ZWN0cyBndWVzdCBWTXMgZnJvbSBtYWxpY2lvdXNcbjE4NzY6XHRcdCAgaG9zdCBhbmQgY2VydGFpbiBwaHlzaWNhbCBhdHRhY2tzLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBuZWNlc3NhcnkgVERYXG4xODc3Olx0XHQgIHN1cHBvcnQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHJ1biBjb25maWRlbnRpYWwgVk1zLlxuMTg3ODpcdFxuMTg3OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg4MDpcdFxuMTg4MTpcdGNvbmZpZyBFRklcbjE4ODI6XHRcdGJvb2wgXCYjMzQ7RUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XCYjMzQ7XG4xODgzOlx0XHRkZXBlbmRzIG9uIEFDUElcbjE4ODQ6XHRcdHNlbGVjdCBVQ1MyX1NUUklOR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUyNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEFSQ0hfS0VFUF9NRU1CTE9DSyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gd2UgbmVlZCB0byBzZWUgaG93IGBBUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIGJlaW5nIHNlbGVjdGVkIG9yIGVuYWJsZWQgYmV5b25kIHdoYXQgd2UmIzM5O3ZlIGFscmVhZHkgbG9va2VkIGF0LiBNeSBpbml0aWFsIGdyZXAgd2FzIGhlbHBmdWwsIGJ1dCB3ZSBoYXZlIHRvIGJlIHRob3JvdWdoLiBJIHNlZSB0aGF0IGBJTlRFTF9URFhfSE9TVGAgaW4gYGFyY2gveDg2L0tjb25maWdgIHNlbGVjdHMgaXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSYjMzk7cmUgYWxzbyBzZWVpbmcgaXQgdGllZCB0byB0aGluZ3MgbGlrZSBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgVklSVElPX01FTWAuIFRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgYXNwZWN0cyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBsaWtlbHkgdXNlLWNhc2UuCgpOb3csIGBWSVJUSU9fTUVNYCB3YXJyYW50cyBjbG9zZXIgYXR0ZW50aW9uLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHZpcnRpbyBkZXZpY2VzLCB0aGVyZSBjb3VsZCBiZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQgbWUgZGVsdmUgaW50byB0aGUgYGRyaXZlcnMvdmlydGlvL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhY3RpbmcgYXMgYSBzb3VyY2Ugb2YgZW5hYmxlbWVudCBvciBhIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IHNpZGUtZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRJT19NRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xMTI9Y29uZmlnIFZJUlRJT19CQUxMT09OXG4tLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xMjItXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjEyMzpjb25maWcgVklSVElPX01FTVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbWVtIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqVmlydGlvIEtjb25maWcgSW5zcGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdmlydGlvL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMTIzLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21ldGhpbmcgc3BlY2lmaWMgSSYjMzk7bSBsb29raW5nIGZvciB0aGVyZSwgZWl0aGVyIHJlbGF0ZWQgdG8gYSBmZWF0dXJlIGZsYWcsIGEgZGVwZW5kZW5jeSwgb3IgYSBjb25kaXRpb25hbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIHZpcnRpbyBkZXZpY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggb3Igc29tZXRoaW5nIG1vcmUgZ2xvYmFsIHdpdGhpbiB0aGUgdmlydGlvIGZyYW1ld29yay4gSSBzdXNwZWN0IHRoZSBsaW5lIG51bWJlciBpcyBpbXBvcnRhbnQuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XG4gMTIxOlx0XHQgSWYgdW5zdXJlLCBzYXkgTS5cbiAxMjI6XHRcbiAxMjM6XHRjb25maWcgVklSVElPX01FTVxuIDEyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG1lbSBkcml2ZXJcJiMzNDtcbiAxMjU6XHRcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcbiAxMjY6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4gMTI4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbiAxMjk6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4gMTMwOlx0XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gMTMxOlx0XHRoZWxwXG4gMTMyOlx0XHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxuIDEzMzpcdFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXG4gMTM0Olx0XG4gMTM1Olx0XHQgVGhpcyBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHg4Ni02NCwgYXJtNjQsIHJpc2N2IGFuZCBzMzkwLlxuIDEzNjpcdFx0IEFsdGhvdWdoIGl0IHNob3VsZCBjb21waWxlIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBpbXBsZW1lbnRcbiAxMzc6XHRcdCBtZW1vcnkgaG90KHVuKXBsdWcsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhbmQvb3IgY29tbW9uXG4gMTM4Olx0XHQgY29kZSBjaGFuZ2VzIG1heSBiZSByZXF1aXJlZCBmb3IgdmlydGlvLW1lbSwga2R1bXAgYW5kIGtleGVjIHRvXG4gMTM5Olx0XHQgd29yayBhcyBleHBlY3RlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0ODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkludmVzdGlnYXRpbmcgYERFVl9EQVhfS01FTWAqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIERBWCBhbmQgS01FTS4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGRlcGVuZGVuY2llcyBmb3IgYSBmZWF0dXJlIGxpa2UgYERFVl9EQVhfS01FTWAuIFRpbWUgdG8gbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdGRlcGVuZHMgb24gREVWX0RBWCBcdTAwMjZcdTAwMjYgRlNfREFYXG4gIDcxOlx0XHRkZWZhdWx0IERFVl9EQVhcbiAgNzI6XHRcbiAgNzM6XHRjb25maWcgREVWX0RBWF9LTUVNXG4gIDc0Olx0XHR0cmlzdGF0ZSBcJiMzNDtLTUVNIERBWDogbWFwIGRheC1kZXZpY2VzIGFzIFN5c3RlbS1SQU1cJiMzNDtcbiAgNzU6XHRcdGRlZmF1bHQgREVWX0RBWFxuICA3NjpcdFx0ZGVwZW5kcyBvbiBERVZfREFYXG4gIDc3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xuICA3ODpcdFx0aGVscFxuICA3OTpcdFx0ICBTdXBwb3J0IGFjY2VzcyB0byBwZXJzaXN0ZW50LCBvciBvdGhlciBwZXJmb3JtYW5jZVxuICA4MDpcdFx0ICBkaWZmZXJlbnRpYXRlZCBtZW1vcnkgYXMgaWYgaXQgd2VyZSBTeXN0ZW0gUkFNLiBUaGlzIGFsbG93c1xuICA4MTpcdFx0ICBlYXNpZXIgdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGJ5IHVubW9kaWZpZWQgYXBwbGljYXRpb25zLCBvclxuICA4MjpcdFx0ICBhZGRzIGNvcmUga2VybmVsIG1lbW9yeSBzZXJ2aWNlcyB0byBoZXRlcm9nZW5lb3VzIG1lbW9yeSB0eXBlc1xuICA4MzpcdFx0ICAoSE1FTSkgbWFya2VkIFwmIzM0O3Jlc2VydmVkXCYjMzQ7IGJ5IHBsYXRmb3JtIGZpcm13YXJlLlxuICA4NDpcdFxuICA4NTpcdFx0ICBUbyB1c2UgdGhpcyBmZWF0dXJlLCBhIERBWCBkZXZpY2UgbXVzdCBiZSB1bmJvdW5kIGZyb20gdGhlXG4gIDg2Olx0XHQgIGRldmljZV9kYXggZHJpdmVyIGFuZCBib3VuZCB0byB0aGlzIGttZW0gZHJpdmVyIG9uIGVhY2ggYm9vdC5cbiAgODc6XHRcbiAgODg6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuICA4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTk1OQoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiA5MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIGFuZCBDb25maWd1cmF0aW9uIERldGVybWluYXRpb24gZm9yIE1lbWJsb2NrIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZXNlIEZvY3VzU3ltYm9scy4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBwYXRjaCBhbmQgaWRlbnRpZnlpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWRkZWQgb3IgY2hhbmdlZCBpbiBgbW0vbWVtYmxvY2suY2AuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgKGEgbmV3IHN0YXRpYyBoZWxwZXIpLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLCBhbHNvIHN0YXRpYyBoZWxwZXJzLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBndWlkZWxpbmVzIHJldmVhbHMgdGhhdCB3aGlsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSB0cmlja3ksIHN0YXRpYyBmdW5jdGlvbnMgKndpdGhpbiAuYyBmaWxlcyogZG8gZ2V0IGNvbXBpbGVkIGludG8gc3ltYm9scyBpbiBgdm1saW51eGAsIHVubGVzcyBjb21wbGV0ZWx5IGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZC4gQnV0IG5vbi1zdGF0aWMgY2FsbGVycyBhbmQgZW50cnlwb2ludHMgYXJlIGFsc28gdmFsaWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgdXNlZnVsIGFzIEZvY3VzU3ltYm9scywgc28gSSYjMzk7bGwgYmUgc3VyZSB0byBpbmNsdWRlIHRob3NlLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBtZW1ibG9ja19hZGRfcmFuZ2VgIGlzIGNhbGxlZCBieSBgbWVtYmxvY2tfYWRkYCwgYG1lbWJsb2NrX2FkZF9ub2RlYCwgYF9fbWVtYmxvY2tfcmVzZXJ2ZWAsIGFuZCBgbWVtYmxvY2tfcGh5c21lbV9hZGRgLiBBbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIGlzIGNhbGxlZCBieSBgbWVtYmxvY2tfcmVtb3ZlX3JhbmdlYCAod2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBieSBgbWVtYmxvY2tfcmVtb3ZlYCBhbmQgYG1lbWJsb2NrX3BoeXNfZnJlZWApLCBgbWVtYmxvY2tfc2V0Y2xyX2ZsYWdgLCBgbWVtYmxvY2tfc2V0X25vZGVgLCBhbmQgYG1lbWJsb2NrX2NhcF9tZW1vcnlfcmFuZ2VgLiBPa2F5LCBiYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBhbmQga2VlcGluZyB0aGUgZ3VpZGFuY2UgZnJvbSBTZWN0aW9uIDQgaW4gbWluZCwgdGhlc2Ugc3ltYm9scyBsb29rIHByb21pc2luZzoKCiogICBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAKKiAgIGBtZW1ibG9ja19hZGRfcmFuZ2VgCiogICBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAKKiAgIGBtZW1ibG9ja19hZGRfbm9kZWAKKiAgIGBtZW1ibG9ja19yZW1vdmVfcmFuZ2VgCiogICBgbWVtYmxvY2tfcmVtb3ZlYAoqICAgYG1lbWJsb2NrX3BoeXNfZnJlZWAKCkFscmlnaHQsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGlmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHViaXF1aXRvdXMgaG90LXBhdGhzIHRoYXQgY291bGQgZGlsdXRlIHRoZSBmdXp6aW5nLiBObywgbWVtYmxvY2sgb3BlcmF0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byBib290IGFuZCBtZW1vcnkgaG90cGx1Zy9ob3RyZW1vdmUuIFRoZXkgYXJlIG5vdCBjYWxsZWQgb24gZXZlcnkgcGFnZSBmYXVsdCwgbWFsbG9jL2ZyZWUsIG9yIHJlYWQvd3JpdGUgc3lzY2FsbC4gU28sIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKTm93LCBmb3IgdGhlIHJlcXVpcmVkIGNvbmZpZ3MsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZzogYElOVEVMX1REWF9IT1NUYCAod2hpY2ggc2VsZWN0cyBgQVJDSF9LRUVQX01FTUJMT0NLYCBvbiB4ODZfNjQpLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgVklSVElPX01FTWAuCgpPa2F5LCBsZXQmIzM5O3MgcXVpY2tseSBnbyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDoKCjEuICAqKkNvcmUgdHJpYWdlIHBoaWxvc29waHk6KiogTWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vbWVtYmxvY2suY2ApLCByZXBsYWNlcyBsaW5lYXIgc2VhcmNoLCBleGVjdXRhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBob3RwbHVnL3JlbW92ZSB3aGVuIG1lbWJsb2NrIGlzIHJldGFpbmVkLCBzbyB3b3J0aCBmdXp6aW5nLiBDaGVjayEKMi4gICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBsaXN0IGFib3ZlLiBDaGVjayEKMy4gICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQgbGlzdCBhYm92ZS4gQ2hlY2shCgpBbmQgZmluYWxseSwgYSBzYW5pdHkgY2hlY2s6IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gR290IGl0LiBTbywgdGhhdCYjMzk7cyBldmVyeXRoaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtYmxvY2tfYnNlYXJjaF9zdGFydCYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19yZW1vdmVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3BoeXNfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1ibG9jay5jKSwgaW50cm9kdWNpbmcgYmluYXJ5IHNlYXJjaCAobWVtYmxvY2tfYnNlYXJjaF9zdGFydCkgdG8gZmluZCBjYW5kaWRhdGUgcmVnaW9ucyBpbiBtZW1ibG9ja19hZGRfcmFuZ2UgYW5kIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UuIFRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWdpb24gc3BsaXR0aW5nL21lcmdpbmcgYWxnb3JpdGhtcyByZWFjaGFibGUgYXQgcnVudGltZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGhvdHJlbW92ZSB3aGVuIG1lbWJsb2NrIG1ldGFkYXRhIGlzIHJldGFpbmVkIChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCByZWdpb24gbWFuaXB1bGF0aW9uIGxvZ2ljIGFuZCBib3VuZGFyaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O1ZJUlRJT19NRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1ibG9ja19ic2VhcmNoX3N0YXJ0JiMzNDssCiAgICAmIzM0O21lbWJsb2NrX2FkZF9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19pc29sYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX2FkZF9ub2RlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX3JlbW92ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19yZW1vdmUmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfcGh5c19mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbWJsb2NrLmMpLCBpbnRyb2R1Y2luZyBiaW5hcnkgc2VhcmNoIChtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KSB0byBmaW5kIGNhbmRpZGF0ZSByZWdpb25zIGluIG1lbWJsb2NrX2FkZF9yYW5nZSBhbmQgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZ2lvbiBzcGxpdHRpbmcvbWVyZ2luZyBhbGdvcml0aG1zIHJlYWNoYWJsZSBhdCBydW50aW1lIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHdoZW4gbWVtYmxvY2sgbWV0YWRhdGEgaXMgcmV0YWluZWQgKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHJlZ2lvbiBtYW5pcHVsYXRpb24gbG9naWMgYW5kIGJvdW5kYXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgcmVnaW9uIGxvb2t1cCBpbiBlYXJseSBib290IG1lbWJsb2NrIG1hbmFnZW1lbnQgKG1tL21lbWJsb2NrLmMpIGJ5IGludHJvZHVjaW5nIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoKSBhbmQgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKCkuIFRoZSBjaGFuZ2VzIG9wZXJhdGUgZXhjbHVzaXZlbHkgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMgYW5kIGludGVybmFsIGluZGljZXMuIFBvdGVudGlhbCBidWdzIGluIHRoaXMgbG9naWMgKHN1Y2ggYXMgaW5kZXggY2FsY3VsYXRpb24gZXJyb3JzIG9yIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGFzc2VydGlvbi9ib3VuZHMgY2hlY2tpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZmllbGQgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY2ZjBlODI1YmZjODM3MmQ1NWRkOGIwYmY4YjE1MDFjMDkwZmQ0NDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggOWNlODYzNDlhMjlmYS4uODg5NDA0NzRiMDIwMyAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1ibG9jay5jCkBAIC0xNjAsNiAmIzQzOzE2MCwxMSBAQCBzdGF0aWMgX19yZWZkYXRhIHN0cnVjdCBtZW1ibG9ja190eXBlICptZW1ibG9ja19tZW1vcnkgPSAmYW1wO21lbWJsb2NrLm1lbW9yeTsKIAkgICAgIGkgJmx0OyBtZW1ibG9ja190eXBlLSZndDtjbnQ7CQkJCQlcCiAJICAgICBpJiM0MzsmIzQzOywgcmduID0gJmFtcDttZW1ibG9ja190eXBlLSZndDtyZWdpb25zW2ldKQogCiYjNDM7I2RlZmluZSBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaSwgbWVtYmxvY2tfdHlwZSwgcmduLCBzdGFydCkJXAomIzQzOwlmb3IgKGkgPSAoc3RhcnQpLCByZ24gPSAmYW1wO21lbWJsb2NrX3R5cGUtJmd0O3JlZ2lvbnNbaV07CQlcCiYjNDM7CSAgICAgaSAmbHQ7IG1lbWJsb2NrX3R5cGUtJmd0O2NudDsJCQkJCVwKJiM0MzsJICAgICBpJiM0MzsmIzQzOywgcmduID0gJmFtcDttZW1ibG9ja190eXBlLSZndDtyZWdpb25zW2ldKQomIzQzOwogI2RlZmluZSBtZW1ibG9ja19kYmcoZm10LCAuLi4pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKG1lbWJsb2NrX2RlYnVnKQkJCQkJXApAQCAtNTkxLDYgJiM0Mzs1OTYsMzMgQEAgc3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2luc2VydF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJdHlwZS0mZ3Q7dG90YWxfc2l6ZSAmIzQzOz0gc2l6ZTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCAmZ3Q7IGJhc2UKJiM0MzsgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBzZWFyY2gKJiM0MzsgKiBAYmFzZTogYmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjYW5kaWRhdGUgcmFuZ2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgQGJhc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYnNlYXJjaF9zdGFydChzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKJiM0MzsJCQkJCQkgIHBoeXNfYWRkcl90IGJhc2UpCiYjNDM7ewomIzQzOwlpbnQgbWlkLCBsb3cgPSAwOwomIzQzOwlpbnQgaGlnaCA9IHR5cGUtJmd0O2NudDsKJiM0MzsKJiM0MzsJaWYgKHR5cGUtJmd0O2NudCAmYW1wOyZhbXA7IGJhc2UgJmd0Oz0gdHlwZS0mZ3Q7cmVnaW9uc1t0eXBlLSZndDtjbnQgLSAxXS5iYXNlICYjNDM7CiYjNDM7CQkJCSB0eXBlLSZndDtyZWdpb25zW3R5cGUtJmd0O2NudCAtIDFdLnNpemUpCiYjNDM7CQlyZXR1cm4gdHlwZS0mZ3Q7Y250OwomIzQzOwomIzQzOwl3aGlsZSAobG93ICZsdDsgaGlnaCkgewomIzQzOwkJbWlkID0gKGxvdyAmIzQzOyBoaWdoKSAvIDI7CiYjNDM7CQlpZiAodHlwZS0mZ3Q7cmVnaW9uc1ttaWRdLmJhc2UgJiM0MzsgdHlwZS0mZ3Q7cmVnaW9uc1ttaWRdLnNpemUgJmx0Oz0gYmFzZSkKJiM0MzsJCQlsb3cgPSBtaWQgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQloaWdoID0gbWlkOwomIzQzOwl9CiYjNDM7CXJldHVybiBsb3c7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBtZW1ibG9ja19hZGRfcmFuZ2UgLSBhZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbgogICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gYWRkIG5ldyByZWdpb24gaW50bwpAQCAtNjUxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJYmFzZSA9IG9iYXNlOwogCW5yX25ldyA9IDA7CiAKLQlmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7CiYjNDM7CWZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbiwKJiM0MzsJCQkJICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHsKIAkJcGh5c19hZGRyX3QgcmJhc2UgPSByZ24tJmd0O2Jhc2U7CiAJCXBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSAmIzQzOyByZ24tJmd0O3NpemU7CiAKQEAgLTgyNyw3ICYjNDM7ODYwLDggQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKIAkJaWYgKG1lbWJsb2NrX2RvdWJsZV9hcnJheSh0eXBlLCBiYXNlLCBzaXplKSAmbHQ7IDApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvcl9lYWNoX21lbWJsb2NrX3R5cGUoaWR4LCB0eXBlLCByZ24pIHsKJiM0MzsJZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLAomIzQzOwkJCQkgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkgewogCQlwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi0mZ3Q7YmFzZTsKIAkJcGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICYjNDM7IHJnbi0mZ3Q7c2l6ZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiB0aGUgTWVtYmxvY2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIEtNU0FOIG5lZWRzIHRvIGJlIGJyb3VnaHQgdG8gYmVhciBoZXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpdHNlbGYuIEFscmlnaHQsIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9tZW1ibG9jay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBwaWVjZXM6IGEgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbWAgbWFjcm8sIGEgaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAsIGFuZCBpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgbGluZWFyIHNjYW5zIHdpdGggYmluYXJ5IHNlYXJjaGVzLCBzZWFyY2hpbmcgZm9yIHRoZSBmaXJzdCBvdmVybGFwcGluZyByZWdpb24uCgpUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCBhIGJldHRlciBncmFzcCBvZiB3aGF0IGBtZW1ibG9ja2AgYWN0dWFsbHkgKmRvZXMqLiBJIGtub3cgaXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIGVhcmx5IGJvb3QgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBsZXQmIzM5O3MgcmVmcmVzaC4gSSYjMzk7bGwgcmVhZCB0aGUgY29kZSBhcm91bmQgbGluZSA1OTEgaW4gYG1tL21lbWJsb2NrLmNgLiBDb250ZXh0IGlzIGtleSBoZXJlOyBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uIGFyZSB1c2VkIGluIHRoZSBicm9hZGVyIHBpY3R1cmUuIFRoZW4gSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGFyZSB2dWxuZXJhYmxlIHRvIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0ICovXG4gNTgxOlx0c3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2luc2VydF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gNTgyOlx0XHRcdFx0XHRcdFx0ICAgaW50IGlkeCwgcGh5c19hZGRyX3QgYmFzZSxcbiA1ODM6XHRcdFx0XHRcdFx0XHQgICBwaHlzX2FkZHJfdCBzaXplLFxuIDU4NDpcdFx0XHRcdFx0XHRcdCAgIGludCBuaWQsXG4gNTg1Olx0XHRcdFx0XHRcdFx0ICAgZW51bSBtZW1ibG9ja19mbGFncyBmbGFncylcbiA1ODY6XHR7XG4gNTg3Olx0XHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24gPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaWR4XTtcbiA1ODg6XHRcbiA1ODk6XHRcdEJVR19PTih0eXBlLVx1MDAzZWNudCBcdTAwM2U9IHR5cGUtXHUwMDNlbWF4KTtcbiA1OTA6XHRcdG1lbW1vdmUocmduICYjNDM7IDEsIHJnbiwgKHR5cGUtXHUwMDNlY250IC0gaWR4KSAqIHNpemVvZigqcmduKSk7XG4gNTkxOlx0XHRyZ24tXHUwMDNlYmFzZSA9IGJhc2U7XG4gNTkyOlx0XHRyZ24tXHUwMDNlc2l6ZSA9IHNpemU7XG4gNTkzOlx0XHRyZ24tXHUwMDNlZmxhZ3MgPSBmbGFncztcbiA1OTQ6XHRcdG1lbWJsb2NrX3NldF9yZWdpb25fbm9kZShyZ24sIG5pZCk7XG4gNTk1Olx0XHR0eXBlLVx1MDAzZWNudCYjNDM7JiM0Mzs7XG4gNTk2Olx0XHR0eXBlLVx1MDAzZXRvdGFsX3NpemUgJiM0Mzs9IHNpemU7XG4gNTk3Olx0fVxuIDU5ODpcdFxuIDU5OTpcdC8qKlxuIDYwMDpcdCAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCBcdTAwM2UgYmFzZVxuIDYwMTpcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIHNlYXJjaFxuIDYwMjpcdCAqIEBiYXNlOiBiYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNhbmRpZGF0ZSByYW5nZVxuIDYwMzpcdCAqXG4gNjA0Olx0ICogUmV0dXJucyB0aGUgZmlyc3QgcmVnaW9uIGluZGV4IHRoYXQgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCBAYmFzZS5cbiA2MDU6XHQgKi9cbiA2MDY6XHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIDYwNzpcdFx0XHRcdFx0XHRcdCAgcGh5c19hZGRyX3QgYmFzZSlcbiA2MDg6XHR7XG4gNjA5Olx0XHRpbnQgbWlkLCBsb3cgPSAwO1xuIDYxMDpcdFx0aW50IGhpZ2ggPSB0eXBlLVx1MDAzZWNudDtcbiA2MTE6XHRcbiA2MTI6XHRcdGlmICh0eXBlLVx1MDAzZWNudCBcdTAwMjZcdTAwMjYgYmFzZSBcdTAwM2U9IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLmJhc2UgJiM0MztcbiA2MTM6XHRcdFx0XHRcdCB0eXBlLVx1MDAzZXJlZ2lvbnNbdHlwZS1cdTAwM2VjbnQgLSAxXS5zaXplKVxuIDYxNDpcdFx0XHRyZXR1cm4gdHlwZS1cdTAwM2VjbnQ7XG4gNjE1Olx0XG4gNjE2Olx0XHR3aGlsZSAobG93IFx1MDAzYyBoaWdoKSB7XG4gNjE3Olx0XHRcdG1pZCA9IChsb3cgJiM0MzsgaGlnaCkgLyAyO1xuIDYxODpcdFx0XHRpZiAodHlwZS1cdTAwM2VyZWdpb25zW21pZF0uYmFzZSAmIzQzOyB0eXBlLVx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFx1MDAzYz0gYmFzZSlcbiA2MTk6XHRcdFx0XHRsb3cgPSBtaWQgJiM0MzsgMTtcbiA2MjA6XHRcdFx0ZWxzZVxuIDYyMTpcdFx0XHRcdGhpZ2ggPSBtaWQ7XG4gNjIyOlx0XHR9XG4gNjIzOlx0XHRyZXR1cm4gbG93O1xuIDYyNDpcdH1cbiA2MjU6XHRcbiA2MjY6XHQvKipcbiA2Mjc6XHQgKiBtZW1ibG9ja19hZGRfcmFuZ2UgLSBhZGQgbmV3IG1lbWJsb2NrIHJlZ2lvblxuIDYyODpcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGFkZCBuZXcgcmVnaW9uIGludG9cbiA2Mjk6XHQgKiBAYmFzZTogYmFzZSBhZGRyZXNzIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMwOlx0ICogQHNpemU6IHNpemUgb2YgdGhlIG5ldyByZWdpb25cbiA2MzE6XHQgKiBAbmlkOiBuaWQgb2YgdGhlIG5ldyByZWdpb25cbiA2MzI6XHQgKiBAZmxhZ3M6IGZsYWdzIG9mIHRoZSBuZXcgcmVnaW9uXG4gNjMzOlx0ICpcbiA2MzQ6XHQgKiBBZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbiBbQGJhc2UsIEBiYXNlICYjNDM7IEBzaXplKSBpbnRvIEB0eXBlLiAgVGhlIG5ldyByZWdpb25cbiA2MzU6XHQgKiBpcyBhbGxvd2VkIHRvIG92ZXJsYXAgd2l0aCBleGlzdGluZyBvbmVzIC0gb3ZlcmxhcHMgZG9uJiMzOTt0IGFmZmVjdCBhbHJlYWR5XG4gNjM2Olx0ICogZXhpc3RpbmcgcmVnaW9ucy4gIEB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbWluaW1hbCAoYWxsIG5laWdoYm91cmluZ1xuIDYzNzpcdCAqIGNvbXBhdGlibGUgcmVnaW9ucyBhcmUgbWVyZ2VkKSBhZnRlciB0aGUgYWRkaXRpb24uXG4gNjM4Olx0ICpcbiA2Mzk6XHQgKiBSZXR1cm46XG4gNjQwOlx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiA2NDE6XHQgKi9cbiA2NDI6XHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gNjQzOlx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuIDY0NDpcdFx0XHRcdFx0aW50IG5pZCwgZW51bSBtZW1ibG9ja19mbGFncyBmbGFncylcbiA2NDU6XHR7XG4gNjQ2Olx0XHRib29sIGluc2VydCA9IGZhbHNlO1xuIDY0NzpcdFx0cGh5c19hZGRyX3Qgb2Jhc2UgPSBiYXNlO1xuIDY0ODpcdFx0cGh5c19hZGRyX3QgZW5kID0gYmFzZSAmIzQzOyBtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCBcdTAwMjZzaXplKTtcbiA2NDk6XHRcdGludCBpZHgsIG5yX25ldywgc3RhcnRfcmduID0gLTEsIGVuZF9yZ247XG4gNjUwOlx0XHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ247XG4gNjUxOlx0XG4gNjUyOlx0XHRpZiAoIXNpemUpXG4gNjUzOlx0XHRcdHJldHVybiAwO1xuIDY1NDpcdFxuIDY1NTpcdFx0Lyogc3BlY2lhbCBjYXNlIGZvciBlbXB0eSBhcnJheSAqL1xuIDY1NjpcdFx0aWYgKHR5cGUtXHUwMDNlcmVnaW9uc1swXS5zaXplID09IDApIHtcbiA2NTc6XHRcdFx0V0FSTl9PTih0eXBlLVx1MDAzZWNudCAhPSAwIHx8IHR5cGUtXHUwMDNldG90YWxfc2l6ZSk7XG4gNjU4Olx0XHRcdHR5cGUtXHUwMDNlcmVnaW9uc1swXS5iYXNlID0gYmFzZTtcbiA2NTk6XHRcdFx0dHlwZS1cdTAwM2VyZWdpb25zWzBdLnNpemUgPSBzaXplO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCBpbiBgbW0vbWVtYmxvY2suY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIHdpdGhpbiBgbW0vbWVtYmxvY2suY2AuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBpcyBiZWluZyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIG1lbWJsb2NrIHN0cnVjdHVyZSwgcGVyaGFwcyB0byBoYW5kbGUgbWVtb3J5IGhvdHBsdWcsIG9yIG1heWJlIGZvciBzb21ldGhpbmcgbGlrZSBpc29sYXRpbmcgbWVtb3J5IHJhbmdlcyBmb3IgYSBzcGVjaWZpYyBOVU1BIG5vZGUgb3IgSU9NTVUgYXNzaWdubWVudC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgd2l0aCB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBpdC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1lbWJsb2NrIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgSSBzaG91bGQgbG9vayBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGl0IGlzIGhhbmRsaW5nIGFueSBwb3RlbnRpYWwgbWVtb3J5IGZyYWdtZW50YXRpb24gaXNzdWVzLCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFx0XHQgICAgICAgKG5yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAvIFNaXzFNLCBtZW1fc2l6ZV9tYik7XG4gODIxOlx0XHRcdHJldHVybiBmYWxzZTtcbiA4MjI6XHRcdH1cbiA4MjM6XHRcbiA4MjQ6XHRcdHJldHVybiB0cnVlO1xuIDgyNTpcdH1cbiA4MjY6XHRcbiA4Mjc6XHRcbiA4Mjg6XHQvKipcbiA4Mjk6XHQgKiBtZW1ibG9ja19pc29sYXRlX3JhbmdlIC0gaXNvbGF0ZSBnaXZlbiByYW5nZSBpbnRvIGRpc2pvaW50IG1lbWJsb2Nrc1xuIDgzMDpcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGlzb2xhdGUgcmFuZ2UgZm9yXG4gODMxOlx0ICogQGJhc2U6IGJhc2Ugb2YgcmFuZ2UgdG8gaXNvbGF0ZVxuIDgzMjpcdCAqIEBzaXplOiBzaXplIG9mIHJhbmdlIHRvIGlzb2xhdGVcbiA4MzM6XHQgKiBAc3RhcnRfcmduOiBvdXQgcGFyYW1ldGVyIGZvciB0aGUgc3RhcnQgb2YgaXNvbGF0ZWQgcmVnaW9uXG4gODM0Olx0ICogQGVuZF9yZ246IG91dCBwYXJhbWV0ZXIgZm9yIHRoZSBlbmQgb2YgaXNvbGF0ZWQgcmVnaW9uXG4gODM1Olx0ICpcbiA4MzY6XHQgKiBXYWxrIEB0eXBlIGFuZCBlbnN1cmUgdGhhdCByZWdpb25zIGRvbiYjMzk7dCBjcm9zcyB0aGUgYm91bmRhcmllcyBkZWZpbmVkIGJ5XG4gODM3Olx0ICogW0BiYXNlLCBAYmFzZSAmIzQzOyBAc2l6ZSkuICBDcm9zc2luZyByZWdpb25zIGFyZSBzcGxpdCBhdCB0aGUgYm91bmRhcmllcyxcbiA4Mzg6XHQgKiB3aGljaCBtYXkgY3JlYXRlIGF0IG1vc3QgdHdvIG1vcmUgcmVnaW9ucy4gIFRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiA4Mzk6XHQgKiByZWdpb24gaW5zaWRlIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQHN0YXJ0X3JnbiBhbmQgdGhlIGluZGV4IG9mIHRoZVxuIDg0MDpcdCAqIGZpcnN0IHJlZ2lvbiBhZnRlciB0aGUgcmFuZ2UgaXMgcmV0dXJuZWQgaW4gKkBlbmRfcmduLlxuIDg0MTpcdCAqXG4gODQyOlx0ICogUmV0dXJuOlxuIDg0MzpcdCAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXG4gODQ0Olx0ICovXG4gODQ1Olx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiA4NDY6XHRcdFx0XHRcdFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiA4NDc6XHRcdFx0XHRcdFx0aW50ICpzdGFydF9yZ24sIGludCAqZW5kX3JnbilcbiA4NDg6XHR7XG4gODQ5Olx0XHRwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICYjNDM7IG1lbWJsb2NrX2NhcF9zaXplKGJhc2UsIFx1MDAyNnNpemUpO1xuIDg1MDpcdFx0aW50IGlkeDtcbiA4NTE6XHRcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbjtcbiA4NTI6XHRcbiA4NTM6XHRcdCpzdGFydF9yZ24gPSAqZW5kX3JnbiA9IDA7XG4gODU0Olx0XG4gODU1Olx0XHRpZiAoIXNpemUpXG4gODU2Olx0XHRcdHJldHVybiAwO1xuIDg1NzpcdFxuIDg1ODpcdFx0Lyogd2UmIzM5O2xsIGNyZWF0ZSBhdCBtb3N0IHR3byBtb3JlIHJlZ2lvbnMgKi9cbiA4NTk6XHRcdHdoaWxlICh0eXBlLVx1MDAzZWNudCAmIzQzOyAyIFx1MDAzZSB0eXBlLVx1MDAzZW1heClcbiA4NjA6XHRcdFx0aWYgKG1lbWJsb2NrX2RvdWJsZV9hcnJheSh0eXBlLCBiYXNlLCBzaXplKSBcdTAwM2MgMClcbiA4NjE6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4NjI6XHRcbiA4NjM6XHRcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbiA4NjQ6XHRcdFx0XHRcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XG4gODY1Olx0XHRcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVx1MDAzZWJhc2U7XG4gODY2Olx0XHRcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSAmIzQzOyByZ24tXHUwMDNlc2l6ZTtcbiA4Njc6XHRcbiA4Njg6XHRcdFx0aWYgKHJiYXNlIFx1MDAzZT0gZW5kKVxuIDg2OTpcdFx0XHRcdGJyZWFrO1xuIDg3MDpcdFx0XHRpZiAocmVuZCBcdTAwM2M9IGJhc2UpXG4gODcxOlx0XHRcdFx0Y29udGludWU7XG4gODcyOlx0XG4gODczOlx0XHRcdGlmIChyYmFzZSBcdTAwM2MgYmFzZSkge1xuIDg3NDpcdFx0XHRcdC8qXG4gODc1Olx0XHRcdFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYmVsb3cuICBTcGxpdCBhbmQgY29udGludWVcbiA4NzY6XHRcdFx0XHQgKiB0byBwcm9jZXNzIHRoZSBuZXh0IHJlZ2lvbiAtIHRoZSBuZXcgdG9wIGhhbGYuXG4gODc3Olx0XHRcdFx0ICovXG4gODc4Olx0XHRcdFx0cmduLVx1MDAzZWJhc2UgPSBiYXNlO1xuIDg3OTpcdFx0XHRcdHJnbi1cdTAwM2VzaXplIC09IGJhc2UgLSByYmFzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0MQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA2MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1ibG9jayBPcHRpbWl6YXRpb24gZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAsIGFuIG9wdGltaXphdGlvbiBmb3IgZmluZGluZyB0aGUgc3RhcnRpbmcgaW5kZXggaW4gdGhlIGBtZW1ibG9ja2AgZGF0YSBzdHJ1Y3R1cmUgZHVyaW5nIG1lbW9yeSByYW5nZSBhZGRpdGlvbiBhbmQgaXNvbGF0aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBhcmUgd2UgY3JlYXRpbmcgYW55IHJpc2tzIGhlcmU/CgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgaWYgdGhpcyBwYXRjaCBhbGxvY2F0ZXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvcGllcyBpdCB0byB1c2VyIHNwYWNlLCBvciBldmFsdWF0ZXMgaXQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0IGxvb2tzIGxpa2UgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgIHdvcmtzIHNvbGVseSB3aXRoIGB0eXBlLSZndDtjbnRgIGFuZCB0aGUgYGJhc2VgIGFuZCBgc2l6ZWAgZmllbGRzIG9mIGB0eXBlLSZndDtyZWdpb25zYC4gQ3J1Y2lhbGx5LCB0aG9zZSByZWdpb25zIGZyb20gMCB1cCB0byBgdHlwZS0mZ3Q7Y250IC0gMWAgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgbWVtYmxvY2sgcmVnaW9ucywgdmFsaWQgYW5kIHJlYWR5IHRvIGdvLiBFdmVuIGlmIGB0eXBlLSZndDtjbnRgIGlzIHplcm8sIHRoZSB3aGlsZSBsb29wIHdpbGwgcXVpY2tseSB0ZXJtaW5hdGUuIEFuZCwgZm9yIHRoZSBsb29wIHVzaW5nIHRoZSBzdGFydCBpbmRleCwgaWYgYHN0YXJ0YCBpcyBlcXVhbCB0byBgdHlwZS0mZ3Q7Y250YCBpdCBkb2VzIG5vdCBydW4sIGFuZCBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbnRlZ2Vycy9wb2ludGVycy4KCkRvZXMgdGhpcyBoYXZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBOby4gVGhpcyBjb2RlIGlzIGVhcmx5LWJvb3QsIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgYG1lbWJsb2NrYCBzdWJzeXN0ZW0uIE5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgaXMgZXhwb3NlZCB0byB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIElmIHdlICpkaWQqIGhhdmUgYW4gaW5kZXhpbmcgYnVnLCBvciBgc3RhcnRgIHdhcyBzb21laG93IG91dCBvZiBib3VuZHMsIHRoYXQgd291bGQgdHJpZ2dlciBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgd2hpY2ggS0FTQU4gd291bGQgaW1tZWRpYXRlbHkgY2F0Y2guIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBubyBwYWRkaW5nIGxlYWtzLCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLgoKU28sIEkgdGhpbmsgd2UmIzM5O3JlIHNhZmUuIEtNU0FOIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgbmVlZGVkIGhlcmUuIExldCYjMzk7cyBkb3VibGUtY2hlY2ssIHRob3VnaCwgYmFzZWQgb24gbXkgbWVudGFsIGNoZWNrbGlzdDoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBOb3QgaW4gdGhpcyBwYXRjaC4KClJpZ2h0LiBUaW1lIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTiB0byBzb2xpZGlmeSBteSByZWFzb25pbmcuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUgYmVjYXVzZSB0aGVzZSBjaGFuZ2VzIG1vZGlmeSBhcnJheSBpbmRleGluZyBhbmQgbG9vcCBpbml0aWFsaXphdGlvbiBvdmVyIGB0eXBlLSZndDtyZWdpb25zYC4gQW55IGluZGV4aW5nIGVycm9ycyBvciBib3VuZHMgbWlzbWF0Y2hlcyB3aWxsIGJlIGNhdWdodCBhcyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzLiBBcyBmb3IgS01TQU4sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc2VuZCBpdCB0byB1c2VyLXNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBUaGUgYG1lbWJsb2NrYCBzdWJzeXN0ZW0gbWFuYWdlcyBpbml0aWFsaXplZCBwaHlzaWNhbCBtZW1vcnkgcmFuZ2VzIGZyb20gZWFybHkgYm9vdCwgd2l0aCByZWdpb24gc3RydWN0dXJlcyBmdWxseSBpbml0aWFsaXplZC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHJlZ2lvbiBsb29rdXAgaW4gZWFybHkgYm9vdCBtZW1ibG9jayBtYW5hZ2VtZW50IChtbS9tZW1ibG9jay5jKSBieSBpbnRyb2R1Y2luZyBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KCkgYW5kIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbSgpLiBUaGUgY2hhbmdlcyBvcGVyYXRlIGV4Y2x1c2l2ZWx5IG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBtZW1ibG9jayByZWdpb25zIGFuZCBpbnRlcm5hbCBpbmRpY2VzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGxvZ2ljIChzdWNoIGFzIGluZGV4IGNhbGN1bGF0aW9uIGVycm9ycyBvciBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBhc3NlcnRpb24vYm91bmRzIGNoZWNraW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgcGFkZGluZy91bmluaXRpYWxpemVkIGZpZWxkIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgcmVnaW9uIGxvb2t1cCBpbiBlYXJseSBib290IG1lbWJsb2NrIG1hbmFnZW1lbnQgKG1tL21lbWJsb2NrLmMpIGJ5IGludHJvZHVjaW5nIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoKSBhbmQgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKCkuIFRoZSBjaGFuZ2VzIG9wZXJhdGUgZXhjbHVzaXZlbHkgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMgYW5kIGludGVybmFsIGluZGljZXMuIFBvdGVudGlhbCBidWdzIGluIHRoaXMgbG9naWMgKHN1Y2ggYXMgaW5kZXggY2FsY3VsYXRpb24gZXJyb3JzIG9yIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGFzc2VydGlvbi9ib3VuZHMgY2hlY2tpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZmllbGQgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MTMuNDE4MzQ4ODkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjQ3MDU1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiVklSVElPX01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWJsb2NrX2JzZWFyY2hfc3RhcnRcIixcbiAgICBcIm1lbWJsb2NrX2FkZF9yYW5nZVwiLFxuICAgIFwibWVtYmxvY2tfaXNvbGF0ZV9yYW5nZVwiLFxuICAgIFwibWVtYmxvY2tfYWRkX25vZGVcIixcbiAgICBcIm1lbWJsb2NrX3JlbW92ZV9yYW5nZVwiLFxuICAgIFwibWVtYmxvY2tfcmVtb3ZlXCIsXG4gICAgXCJtZW1ibG9ja19waHlzX2ZyZWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyByZWdpb24gbG9va3VwIGluIGVhcmx5IGJvb3QgbWVtYmxvY2sgbWFuYWdlbWVudCAobW0vbWVtYmxvY2suYykgYnkgaW50cm9kdWNpbmcgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCgpIGFuZCBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oKS4gVGhlIGNoYW5nZXMgb3BlcmF0ZSBleGNsdXNpdmVseSBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgbWVtYmxvY2sgcmVnaW9ucyBhbmQgaW50ZXJuYWwgaW5kaWNlcy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBsb2dpYyAoc3VjaCBhcyBpbmRleCBjYWxjdWxhdGlvbiBlcnJvcnMgb3IgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYXNzZXJ0aW9uL2JvdW5kcyBjaGVja2luZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIHBhZGRpbmcvdW5pbml0aWFsaXplZCBmaWVsZCBpbml0aWFsaXphdGlvbiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbWJsb2NrLmMpLCBpbnRyb2R1Y2luZyBiaW5hcnkgc2VhcmNoIChtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KSB0byBmaW5kIGNhbmRpZGF0ZSByZWdpb25zIGluIG1lbWJsb2NrX2FkZF9yYW5nZSBhbmQgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZ2lvbiBzcGxpdHRpbmcvbWVyZ2luZyBhbGdvcml0aG1zIHJlYWNoYWJsZSBhdCBydW50aW1lIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHdoZW4gbWVtYmxvY2sgbWV0YWRhdGEgaXMgcmV0YWluZWQgKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHJlZ2lvbiBtYW5pcHVsYXRpb24gbG9naWMgYW5kIGJvdW5kYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjEzLjQxODM1NjM1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1ODA1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjZmMGU4MjViZmM4MzcyZDU1ZGQ4YjBiZjhiMTUwMWMwOTBmZDQ0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXFxuaW5kZXggOWNlODYzNDlhMjlmYS4uODg5NDA0NzRiMDIwMyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1ibG9jay5jXFxuKysrIGIvbW0vbWVtYmxvY2suY1xcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9IFxcdTAwMjZtZW1ibG9jay5tZW1vcnk7XFxuIFxcdCAgICAgaSBcXHUwMDNjIG1lbWJsb2NrX3R5cGUtXFx1MDAzZWNudDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgaSsrLCByZ24gPSBcXHUwMDI2bWVtYmxvY2tfdHlwZS1cXHUwMDNlcmVnaW9uc1tpXSlcXG4gXFxuKyNkZWZpbmUgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGksIG1lbWJsb2NrX3R5cGUsIHJnbiwgc3RhcnQpXFx0XFxcXFxcbitcXHRmb3IgKGkgPSAoc3RhcnQpLCByZ24gPSBcXHUwMDI2bWVtYmxvY2tfdHlwZS1cXHUwMDNlcmVnaW9uc1tpXTtcXHRcXHRcXFxcXFxuK1xcdCAgICAgaSBcXHUwMDNjIG1lbWJsb2NrX3R5cGUtXFx1MDAzZWNudDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAgICAgaSsrLCByZ24gPSBcXHUwMDI2bWVtYmxvY2tfdHlwZS1cXHUwMDNlcmVnaW9uc1tpXSlcXG4rXFxuICNkZWZpbmUgbWVtYmxvY2tfZGJnKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0aWYgKG1lbWJsb2NrX2RlYnVnKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNTkxLDYgKzU5NiwzMyBAQCBzdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gXFx0dHlwZS1cXHUwMDNldG90YWxfc2l6ZSArPSBzaXplO1xcbiB9XFxuIFxcbisvKipcXG4rICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kIFxcdTAwM2UgYmFzZVxcbisgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBzZWFyY2hcXG4rICogQGJhc2U6IGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2FuZGlkYXRlIHJhbmdlXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgQGJhc2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHBoeXNfYWRkcl90IGJhc2UpXFxuK3tcXG4rXFx0aW50IG1pZCwgbG93ID0gMDtcXG4rXFx0aW50IGhpZ2ggPSB0eXBlLVxcdTAwM2VjbnQ7XFxuK1xcbitcXHRpZiAodHlwZS1cXHUwMDNlY250IFxcdTAwMjZcXHUwMDI2IGJhc2UgXFx1MDAzZT0gdHlwZS1cXHUwMDNlcmVnaW9uc1t0eXBlLVxcdTAwM2VjbnQgLSAxXS5iYXNlICtcXG4rXFx0XFx0XFx0XFx0IHR5cGUtXFx1MDAzZXJlZ2lvbnNbdHlwZS1cXHUwMDNlY250IC0gMV0uc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIHR5cGUtXFx1MDAzZWNudDtcXG4rXFxuK1xcdHdoaWxlIChsb3cgXFx1MDAzYyBoaWdoKSB7XFxuK1xcdFxcdG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7XFxuK1xcdFxcdGlmICh0eXBlLVxcdTAwM2VyZWdpb25zW21pZF0uYmFzZSArIHR5cGUtXFx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFxcdTAwM2M9IGJhc2UpXFxuK1xcdFxcdFxcdGxvdyA9IG1pZCArIDE7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aGlnaCA9IG1pZDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gbG93O1xcbit9XFxuK1xcbiAvKipcXG4gICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cXG4gICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gYWRkIG5ldyByZWdpb24gaW50b1xcbkBAIC02NTEsNyArNjgzLDggQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXHRiYXNlID0gb2Jhc2U7XFxuIFxcdG5yX25ldyA9IDA7XFxuIFxcbi1cXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XFxuK1xcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4rXFx0XFx0XFx0XFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcXG4gXFx0XFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXFx1MDAzZWJhc2U7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gXFxuQEAgLTgyNyw3ICs4NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc29sYXRlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXHRcXHRpZiAobWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUsIGJhc2UsIHNpemUpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XFxuK1xcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4rXFx0XFx0XFx0XFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcXG4gXFx0XFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXFx1MDAzZWJhc2U7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjEzLjk0NTEyMjk0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTI0NzI0ODQxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJWSVJUSU9fTUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtYmxvY2tfYnNlYXJjaF9zdGFydFwiLFxuICAgIFwibWVtYmxvY2tfYWRkX3JhbmdlXCIsXG4gICAgXCJtZW1ibG9ja19pc29sYXRlX3JhbmdlXCIsXG4gICAgXCJtZW1ibG9ja19hZGRfbm9kZVwiLFxuICAgIFwibWVtYmxvY2tfcmVtb3ZlX3JhbmdlXCIsXG4gICAgXCJtZW1ibG9ja19yZW1vdmVcIixcbiAgICBcIm1lbWJsb2NrX3BoeXNfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbWJsb2NrLmMpLCBpbnRyb2R1Y2luZyBiaW5hcnkgc2VhcmNoIChtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KSB0byBmaW5kIGNhbmRpZGF0ZSByZWdpb25zIGluIG1lbWJsb2NrX2FkZF9yYW5nZSBhbmQgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZ2lvbiBzcGxpdHRpbmcvbWVyZ2luZyBhbGdvcml0aG1zIHJlYWNoYWJsZSBhdCBydW50aW1lIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHdoZW4gbWVtYmxvY2sgbWV0YWRhdGEgaXMgcmV0YWluZWQgKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHJlZ2lvbiBtYW5pcHVsYXRpb24gbG9naWMgYW5kIGJvdW5kYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjZmMGU4MjViZmM4MzcyZDU1ZGQ4YjBiZjhiMTUwMWMwOTBmZDQ0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDA6NTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggOWNlODYzNDlhMjlmYS4uODg5NDA0NzRiMDIwMyAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbisrKyBiL21tL21lbWJsb2NrLmNcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0YXRpYyBfX3JlZmRhdGEgc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbWJsb2NrX21lbW9yeSA9IFx1MDAyNm1lbWJsb2NrLm1lbW9yeTtcbiBcdCAgICAgaSBcdTAwM2MgbWVtYmxvY2tfdHlwZS1cdTAwM2VjbnQ7XHRcdFx0XHRcdFxcXG4gXHQgICAgIGkrKywgcmduID0gXHUwMDI2bWVtYmxvY2tfdHlwZS1cdTAwM2VyZWdpb25zW2ldKVxuIFxuKyNkZWZpbmUgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGksIG1lbWJsb2NrX3R5cGUsIHJnbiwgc3RhcnQpXHRcXFxuK1x0Zm9yIChpID0gKHN0YXJ0KSwgcmduID0gXHUwMDI2bWVtYmxvY2tfdHlwZS1cdTAwM2VyZWdpb25zW2ldO1x0XHRcXFxuK1x0ICAgICBpIFx1MDAzYyBtZW1ibG9ja190eXBlLVx1MDAzZWNudDtcdFx0XHRcdFx0XFxcbitcdCAgICAgaSsrLCByZ24gPSBcdTAwMjZtZW1ibG9ja190eXBlLVx1MDAzZXJlZ2lvbnNbaV0pXG4rXG4gI2RlZmluZSBtZW1ibG9ja19kYmcoZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbiBcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0aWYgKG1lbWJsb2NrX2RlYnVnKVx0XHRcdFx0XHRcXFxuQEAgLTU5MSw2ICs1OTYsMzMgQEAgc3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2luc2VydF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHR0eXBlLVx1MDAzZXRvdGFsX3NpemUgKz0gc2l6ZTtcbiB9XG4gXG4rLyoqXG4rICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kIFx1MDAzZSBiYXNlXG4rICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gc2VhcmNoXG4rICogQGJhc2U6IGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2FuZGlkYXRlIHJhbmdlXG4rICpcbisgKiBSZXR1cm5zIHRoZSBmaXJzdCByZWdpb24gaW5kZXggdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBvdmVybGFwIEBiYXNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4rXHRcdFx0XHRcdFx0ICBwaHlzX2FkZHJfdCBiYXNlKVxuK3tcbitcdGludCBtaWQsIGxvdyA9IDA7XG4rXHRpbnQgaGlnaCA9IHR5cGUtXHUwMDNlY250O1xuK1xuK1x0aWYgKHR5cGUtXHUwMDNlY250IFx1MDAyNlx1MDAyNiBiYXNlIFx1MDAzZT0gdHlwZS1cdTAwM2VyZWdpb25zW3R5cGUtXHUwMDNlY250IC0gMV0uYmFzZSArXG4rXHRcdFx0XHQgdHlwZS1cdTAwM2VyZWdpb25zW3R5cGUtXHUwMDNlY250IC0gMV0uc2l6ZSlcbitcdFx0cmV0dXJuIHR5cGUtXHUwMDNlY250O1xuK1xuK1x0d2hpbGUgKGxvdyBcdTAwM2MgaGlnaCkge1xuK1x0XHRtaWQgPSAobG93ICsgaGlnaCkgLyAyO1xuK1x0XHRpZiAodHlwZS1cdTAwM2VyZWdpb25zW21pZF0uYmFzZSArIHR5cGUtXHUwMDNlcmVnaW9uc1ttaWRdLnNpemUgXHUwMDNjPSBiYXNlKVxuK1x0XHRcdGxvdyA9IG1pZCArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHRoaWdoID0gbWlkO1xuK1x0fVxuK1x0cmV0dXJuIGxvdztcbit9XG4rXG4gLyoqXG4gICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cbiAgKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXG5AQCAtNjUxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcdGJhc2UgPSBvYmFzZTtcbiBcdG5yX25ldyA9IDA7XG4gXG4tXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XG4rXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaWR4LCB0eXBlLCByZ24sXG4rXHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgKyByZ24tXHUwMDNlc2l6ZTtcbiBcbkBAIC04MjcsNyArODYwLDggQEAgc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcdFx0aWYgKG1lbWJsb2NrX2RvdWJsZV9hcnJheSh0eXBlLCBiYXNlLCBzaXplKSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvcl9lYWNoX21lbWJsb2NrX3R5cGUoaWR4LCB0eXBlLCByZ24pIHtcbitcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcbitcdFx0XHRcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XG4gXHRcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVx1MDAzZWJhc2U7XG4gXHRcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cdTAwM2VzaXplO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MTMuOTQ1MTI1MDQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4NTEwMTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiB3b3J0aCBvdXIgdGltZSBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdyB0byBiZXN0IGFwcHJvYWNoIGl0LiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBnb2luZyB0byBiZSBuZWNlc3Nhcnk/IEFuZCB3aGF0IGFyZSBvdXIga2V5IGZvY3VzIHN5bWJvbHM/XG5cbkZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmaWxlLCBgbW0vbWVtYmxvY2suY2AuIEhtbSwgSSBzZWUgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkOiBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYCwgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgLCBgbWVtYmxvY2tfYWRkX3JhbmdlYCwgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gVGhhdCBgX19pbml0X21lbWJsb2NrYCBwcmVmaXguLi4gd2FpdCBhIG1pbnV0ZSEgQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbmx5IHVzZWQgZHVyaW5nIGVhcmx5IGJvb3QsIHRoZSBpbml0IHBoYXNlLCBvciBpcyB0aGVyZSBhIHBvc3NpYmlsaXR5IHRoYXQgYG1lbWJsb2NrYCBjb2RlIGlzIGFjY2Vzc2libGUgYXQgcnVudGltZSwgcGVyaGFwcyBmb3Igc29tZXRoaW5nIGxpa2UgbWVtb3J5IGhvdHBsdWc/XG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG1lbWJsb2NrX2FkZF9yYW5nZWAsIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCwgb3Igb3RoZXIgYG1lbWJsb2NrXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGxhdGVyLCBpbiB0aGUgbWFpbiBydW50aW1lIG9mIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byBjaGVjayBgbW0vbWVtYmxvY2suY2AgYW5kIHRyYWNlIHRob3NlIGNhbGxzLiBUaW1lIHRvIGJyZWFrIG91dCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgYW5kIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MjEuMjMwMjI5MzE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTYyODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2FkZF9yYW5nZXxtZW1ibG9ja19pc29sYXRlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1ibG9jay5jPTYwNj1zdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbi0tXFxubW0vbWVtYmxvY2suYy02MjYtLyoqXFxubW0vbWVtYmxvY2suYzo2Mjc6ICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cXG5tbS9tZW1ibG9jay5jLTYyOC0gKiBAdHlwZTogbWVtYmxvY2sgdHlwZSB0byBhZGQgbmV3IHJlZ2lvbiBpbnRvXFxuLS1cXG5tbS9tZW1ibG9jay5jLTY0MS0gKi9cXG5tbS9tZW1ibG9jay5jOjY0MjpzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxubW0vbWVtYmxvY2suYy02NDMtXFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtNzU2LSAqIEFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uIFtAYmFzZSwgQGJhc2UgKyBAc2l6ZSkgdG8gdGhlIFxcXCJtZW1vcnlcXFwiXFxubW0vbWVtYmxvY2suYzo3NTc6ICogdHlwZS4gU2VlIG1lbWJsb2NrX2FkZF9yYW5nZSgpIGRlc2NyaXB0aW9uIGZvciBtb2RlIGRldGFpbHNcXG5tbS9tZW1ibG9jay5jLTc1OC0gKlxcbi0tXFxubW0vbWVtYmxvY2suYz03NjI9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfbm9kZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbi0tXFxubW0vbWVtYmxvY2suYy03NjktXFxubW0vbWVtYmxvY2suYzo3NzA6XFx0cmV0dXJuIG1lbWJsb2NrX2FkZF9yYW5nZShcXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCBuaWQsIGZsYWdzKTtcXG5tbS9tZW1ibG9jay5jLTc3MS19XFxuLS1cXG5tbS9tZW1ibG9jay5jLTc3OC0gKiBBZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbiBbQGJhc2UsIEBiYXNlICsgQHNpemUpIHRvIHRoZSBcXFwibWVtb3J5XFxcIlxcbm1tL21lbWJsb2NrLmM6Nzc5OiAqIHR5cGUuIFNlZSBtZW1ibG9ja19hZGRfcmFuZ2UoKSBkZXNjcmlwdGlvbiBmb3IgbW9kZSBkZXRhaWxzXFxubW0vbWVtYmxvY2suYy03ODAtICpcXG4tLVxcbm1tL21lbWJsb2NrLmM9Nzg0PWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTc5MC1cXG5tbS9tZW1ibG9jay5jOjc5MTpcXHRyZXR1cm4gbWVtYmxvY2tfYWRkX3JhbmdlKFxcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIE1BWF9OVU1OT0RFUywgMCk7XFxubW0vbWVtYmxvY2suYy03OTItfVxcbi0tXFxubW0vbWVtYmxvY2suYz04MDU9Ym9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcylcXG4tLVxcbm1tL21lbWJsb2NrLmMtODI4LS8qKlxcbm1tL21lbWJsb2NrLmM6ODI5OiAqIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UgLSBpc29sYXRlIGdpdmVuIHJhbmdlIGludG8gZGlzam9pbnQgbWVtYmxvY2tzXFxubW0vbWVtYmxvY2suYy04MzAtICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gaXNvbGF0ZSByYW5nZSBmb3JcXG4tLVxcbm1tL21lbWJsb2NrLmMtODQ0LSAqL1xcbm1tL21lbWJsb2NrLmM6ODQ1OnN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxubW0vbWVtYmxvY2suYy04NDYtXFx0XFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmM9OTA2PXN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTExLVxcbm1tL21lbWJsb2NrLmM6OTEyOlxcdHJldCA9IG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UodHlwZSwgYmFzZSwgc2l6ZSwgXFx1MDAyNnN0YXJ0X3JnbiwgXFx1MDAyNmVuZF9yZ24pO1xcbm1tL21lbWJsb2NrLmMtOTEzLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwNDE9aW50IF9faW5pdF9tZW1ibG9jayBfX21lbWJsb2NrX3Jlc2VydmUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTA0OC1cXG5tbS9tZW1ibG9jay5jOjEwNDk6XFx0cmV0dXJuIG1lbWJsb2NrX2FkZF9yYW5nZShcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUsIG5pZCwgZmxhZ3MpO1xcbm1tL21lbWJsb2NrLmMtMTA1MC19XFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwNTM9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzbWVtX2FkZChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbi0tXFxubW0vbWVtYmxvY2suYy0xMDU5LVxcbm1tL21lbWJsb2NrLmM6MTA2MDpcXHRyZXR1cm4gbWVtYmxvY2tfYWRkX3JhbmdlKFxcdTAwMjZwaHlzbWVtLCBiYXNlLCBzaXplLCBNQVhfTlVNTk9ERVMsIDApO1xcbm1tL21lbWJsb2NrLmMtMTA2MS19XFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwNzY9c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0Y2xyX2ZsYWcoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxuLS1cXG5tbS9tZW1ibG9jay5jLTEwODAtXFxubW0vbWVtYmxvY2suYzoxMDgxOlxcdHJldCA9IG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2UodHlwZSwgYmFzZSwgc2l6ZSwgXFx1MDAyNnN0YXJ0X3JnbiwgXFx1MDAyNmVuZF9yZ24pO1xcbm1tL21lbWJsb2NrLmMtMTA4Mi1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtYmxvY2suYz0xNTIzPWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2V0X25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTUyOS1cXG5tbS9tZW1ibG9jay5jOjE1MzA6XFx0cmV0ID0gbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZSh0eXBlLCBiYXNlLCBzaXplLCBcXHUwMDI2c3RhcnRfcmduLCBcXHUwMDI2ZW5kX3Jnbik7XFxubW0vbWVtYmxvY2suYy0xNTMxLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTIwNTM9dm9pZCBfX2luaXQgbWVtYmxvY2tfY2FwX21lbW9yeV9yYW5nZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yMDY1LVxcbm1tL21lbWJsb2NrLmM6MjA2NjpcXHRyZXQgPSBtZW1ibG9ja19pc29sYXRlX3JhbmdlKFxcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsXFxubW0vbWVtYmxvY2suYy0yMDY3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGFydF9yZ24sIFxcdTAwMjZlbmRfcmduKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MjEuMzIzNzk3MDA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MTE3MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYF9faW5pdF9tZW1ibG9ja2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgX19pbml0X21lbWJsb2NrYC4gTXkgZmlyc3Qgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBkZXRlcm1pbmUgd2hlcmUgYW5kIGhvdyBpdCdzIGRlZmluZWQuIEdpdmVuIHRoYXQgSSdtIGxpa2VseSBkZWFsaW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIEknbGwgYXNzdW1lIGl0J3MgcGFydCBvZiB0aGUga2VybmVsIG9yIGEgcmVsYXRlZCBsaWJyYXJ5LiBTbywgSSBuZWVkIHRvIGZpbmQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgc2luY2UgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGRlZmluZWQsIEknbGwgcmVhY2ggZm9yIGBncmVwYC4gQSBzaW1wbGUgYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBfX2luaXRfbWVtYmxvY2tgIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgc2NhbiB0aGUgcmVzdWx0cyB0byBzZWUgdGhlIGZpbGUgYW5kIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIHF1aWNrbHkgdGVsbCBtZSB3aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MzoyMy4zODQ5Njk3MzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjU5MzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIF9faW5pdF9tZW1ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE2LSNpZm5kZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDoxMTc6I2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTExOC0jZGVmaW5lIF9faW5pdGRhdGFfbWVtYmxvY2sgX19tZW1pbml0ZGF0YVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaD0xMTk9dm9pZCBtZW1ibG9ja19kaXNjYXJkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMjAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTIxOiNkZWZpbmUgX19pbml0X21lbWJsb2NrXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTEyMi0jZGVmaW5lIF9faW5pdGRhdGFfbWVtYmxvY2tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MjUuOTE3NTc0MzM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczODQzNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBfX21lbWluaXRgIOKAkyB0aGF0J3MgZWl0aGVyIHRoZSBzYW1lIGFzIGBfX2luaXRgLCBvciBpdCdzIHJldGFpbmVkIGlmIG1lbW9yeSBob3RwbHVnIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJlbGF0aW9uc2hpcCBjb3JyZWN0bHkuIE5vdywgYSBrZXkgcXVlc3Rpb24gY29tZXMgdG8gbWluZDogaG93IGNydWNpYWwgaXMgdGhlIG1lbWJsb2NrIG1lY2hhbmlzbSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gU3BlY2lmaWNhbGx5LCBpcyBgbWVtYmxvY2tgIHN0aWxsIHJlbGV2YW50IGR1cmluZyBydW50aW1lIHdoZW4gbWVtb3J5IGhvdHBsdWcgaXMgaW52b2x2ZWQ/IE9yIGlzIGl0cyByb2xlIGxpbWl0ZWQgdG8gdGhlIGJvb3QgcHJvY2Vzcz8gSXMgaXQgZGlzY2FyZGVkIGxhdGVyLCBvciBkb2VzIGl0IHNlcnZlIHNvbWUgcHVycG9zZSB0aHJvdWdob3V0IHRoZSBzeXN0ZW0ncyBsaWZlPyBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIG15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgZGV0YWlsZWQgYXVkaXQgb2YgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoZSBgbWVtYmxvY2tfYWRkYCwgYG1lbWJsb2NrX2FkZF9yYW5nZWAsIGFuZCBvdGhlciBgbWVtYmxvY2tgIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgZXhhY3RseSBob3cgYG1lbWJsb2NrYCBpcyB1dGlsaXplZCwgd2hpY2ggaW4gdHVybiB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gYm90aCB0aGUgaW5pdGlhbCBib290IHNlcXVlbmNlIGFuZCBhbnkgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHRha2luZyBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjI4LjY1NjAxNDc0NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM2NTg1OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2FkZFxcXFwofG1lbWJsb2NrX2FkZF9ub2RlXFxcXCh8bWVtYmxvY2tfcmVzZXJ2ZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdD0xMzQ9WW91IGNhbiBzcGVjaWZ5IGVpdGhlciBSQU0gbWVtb3J5IG9yIHBlcmlwaGVyYWwgZGV2aWNlcycgbWVtb3J5LiBIb3dldmVyLCB3aGVuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdDoxMzU6c3BlY2lmeWluZyBSQU0sIGJlIHN1cmUgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IGJ5IGlzc3VpbmcgbWVtYmxvY2tfcmVzZXJ2ZSgpXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xMzYtdmVyeSBlYXJseSBpbiB0aGUgYXJjaGl0ZWN0dXJlIGNvZGUsIGUuZy46Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xMzktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdDoxNDA6XFx0bWVtYmxvY2tfcmVzZXJ2ZShyYW1vb3BzX2RhdGEubWVtX2FkZHJlc3MsIHJhbW9vcHNfZGF0YS5tZW1fc2l6ZSk7XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9yYW1vb3BzLnJzdC0xNDEtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2lyb25nYXRlLmM9MjAyPWFsYmFjb3JlX2luaXRfYXJjaCh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jLTI0MS0jZW5kaWZcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2lyb25nYXRlLmM6MjQyOlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUocGNpX21lbSwgbWVtdG9wIC0gcGNpX21lbSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9pcm9uZ2F0ZS5jLTI0My1cXHRcXHRwcmludGsoXFxcImlyb25nYXRlX2luaXRfYXJjaDogdGVtcG9yYXJpbHkgcmVzZXJ2aW5nIFxcXCJcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9Mjg2PXNldHVwX21lbW9yeSh2b2lkICprZXJuZWxfZW5kKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zMDctXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozMDg6XFx0XFx0bWVtYmxvY2tfYWRkKFBGTl9QSFlTKGNsdXN0ZXItXFx1MDAzZXN0YXJ0X3BmbiksXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zMDktXFx0XFx0XFx0ICAgICBjbHVzdGVyLVxcdTAwM2VudW1wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzE0LVxcdFxcdGlmIChjbHVzdGVyLVxcdTAwM2V1c2FnZSBcXHUwMDI2IDMpXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozMTU6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShQRk5fUEhZUyhjbHVzdGVyLVxcdTAwM2VzdGFydF9wZm4pLFxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzE2LVxcdFxcdFxcdFxcdCAgICAgICAgIGNsdXN0ZXItXFx1MDAzZW51bXBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zNDYtXFx0a2VybmVsX3NpemUgPSB2aXJ0X3RvX3BoeXMoa2VybmVsX2VuZCkgLSBLRVJORUxfU1RBUlRfUEhZUztcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM0NzpcXHRtZW1ibG9ja19yZXNlcnZlKEtFUk5FTF9TVEFSVF9QSFlTLCBrZXJuZWxfc2l6ZSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zNDgtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM2Mi1cXHRcXHR9IGVsc2Uge1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6MzYzOlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUodmlydF90b19waHlzKCh2b2lkICopaW5pdHJkX3N0YXJ0KSxcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM2NC1cXHRcXHRcXHRcXHRcXHRJTklUUkRfU0laRSk7XFxuLS1cXG5hcmNoL2FyYy9tbS9pbml0LmM9NTE9dm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKVxcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTYwLVxcdFxcdGluX3VzZSA9IDE7XFxuYXJjaC9hcmMvbW0vaW5pdC5jOjYxOlxcdFxcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDAsIE1FTUJMT0NLX05PTkUpO1xcbmFyY2gvYXJjL21tL2luaXQuYy02Mi1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTY2LVxcdFxcdGluX3VzZSA9IDE7XFxuYXJjaC9hcmMvbW0vaW5pdC5jOjY3OlxcdFxcdG1lbWJsb2NrX2FkZF9ub2RlKGJhc2UsIHNpemUsIDEsIE1FTUJMT0NLX05PTkUpO1xcbmFyY2gvYXJjL21tL2luaXQuYzo2ODpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xcbmFyY2gvYXJjL21tL2luaXQuYy02OS0jZW5kaWZcXG4tLVxcbmFyY2gvYXJjL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gvYXJjL21tL2luaXQuYy0xMjMtXFxuYXJjaC9hcmMvbW0vaW5pdC5jOjEyNDpcXHRtZW1ibG9ja19yZXNlcnZlKENPTkZJR19MSU5VWF9MSU5LX0JBU0UsXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEyNS1cXHRcXHRcXHQgX19wYShfZW5kKSAtIENPTkZJR19MSU5VWF9MSU5LX0JBU0UpO1xcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEyOC1cXHRpZiAocGh5c19pbml0cmRfc2l6ZSkge1xcbmFyY2gvYXJjL21tL2luaXQuYzoxMjk6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7XFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzMC1cXHRcXHRpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHBoeXNfaW5pdHJkX3N0YXJ0KTtcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jPTc2MD1pbnQgX19pbml0IGFybV9hZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy04MTYtXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM6ODE3OlxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtODE4LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9MTA5Nj12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYy0xMTA3LVxcdFxcdGlmIChtZGVzYylcXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzoxMTA4OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoX19hdGFnc19wb2ludGVyLFxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTExMDktXFx0XFx0XFx0XFx0XFx0IGZkdF90b3RhbHNpemUoYXRhZ3NfdmFkZHIpKTtcXG4tLVxcbmFyY2gvYXJtL21hY2gtaGlzaS9wbGF0bWNwbS5jPTI2NT1zdGF0aWMgaW50IF9faW5pdCBoaXAwNF9zbXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg3LVxcbmFyY2gvYXJtL21hY2gtaGlzaS9wbGF0bWNwbS5jOjI4ODpcXHRyZXQgPSBtZW1ibG9ja19yZXNlcnZlKGhpcDA0X2Jvb3RfbWV0aG9kWzBdLCBoaXAwNF9ib290X21ldGhvZFsxXSk7XFxuYXJjaC9hcm0vbWFjaC1oaXNpL3BsYXRtY3BtLmMtMjg5LVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9NjY9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc2Nhbl9tZW0odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy05MS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6OTI6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBNVkVCVV9ERFJfVFJBSU5JTkdfQVJFQV9TWik7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTkzLVxcdH1cXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy05Ny1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6OTg6c3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZClcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtOTkte1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEwMi0jZWxzZVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMDM6c3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZCkge31cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTA0LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYz0xMTM0PXN0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9maXh1cChzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqY21kbGluZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMtMTEzNi1cXHRzaGFycHNsX3NhdmVfcGFyYW0oKTtcXG5hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jOjExMzc6XFx0bWVtYmxvY2tfYWRkKDB4YTAwMDAwMDAsIFNaXzY0TSk7XFxuYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYy0xMTM4LX1cXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2ludGVncmF0b3IuYz05MT12b2lkIF9faW5pdCBpbnRlZ3JhdG9yX3Jlc2VydmUodm9pZClcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbnRlZ3JhdG9yLmMtOTIte1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2ludGVncmF0b3IuYzo5MzpcXHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbnRlZ3JhdG9yLmMtOTQtfVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTUyPXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX21lbW9yeV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtNTQtXFx0aWYgKCFfX3BhKFBBR0VfT0ZGU0VUKSlcXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6NTU6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKFBBR0VfT0ZGU0VUKSwgMHg4MDAwMCk7XFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTU2LX1cXG4tLVxcbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtMTgyLVxcdC8qIFJlZ2lzdGVyIHRoZSBrZXJuZWwgdGV4dCwga2VybmVsIGRhdGEgYW5kIGluaXRyZCB3aXRoIG1lbWJsb2NrLiAqL1xcbmFyY2gvYXJtL21tL2luaXQuYzoxODM6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKEtFUk5FTF9TVEFSVCksIEtFUk5FTF9FTkQgLSBLRVJORUxfU1RBUlQpO1xcbmFyY2gvYXJtL21tL2luaXQuYy0xODQtXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtMTg2LVxcbmFyY2gvYXJtL21tL2luaXQuYzoxODc6XFx0YXJtX21tX21lbWJsb2NrX3Jlc2VydmUoKTtcXG5hcmNoL2FybS9tbS9pbml0LmMtMTg4LVxcbi0tXFxuYXJjaC9hcm0vbW0vbW0uaD04OT12b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZCk7XFxuYXJjaC9hcm0vbW0vbW0uaDo5MDp2b2lkIGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpO1xcbmFyY2gvYXJtL21tL21tLmgtOTEtI2lmZGVmIENPTkZJR19DTUFfQVJFQVNcXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jPTEyNzM9c3RhdGljIF9faW5pdCB2b2lkIHByZXBhcmVfcGFnZV90YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vbW11LmMtMTMzNC0gKi9cXG5hcmNoL2FybS9tbS9tbXUuYzoxMzM1OnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXFxuYXJjaC9hcm0vbW0vbW11LmMtMTMzNi17XFxuLS1cXG5hcmNoL2FybS9tbS9tbXUuYy0xMzQwLVxcdCAqL1xcbmFyY2gvYXJtL21tL21tdS5jOjEzNDE6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKHN3YXBwZXJfcGdfZGlyKSwgU1dBUFBFUl9QR19ESVJfU0laRSk7XFxuYXJjaC9hcm0vbW0vbW11LmMtMTM0Mi1cXG4tLVxcbmFyY2gvYXJtL21tL21tdS5jLTEzNDctXFx0ICovXFxuYXJjaC9hcm0vbW0vbW11LmM6MTM0ODpcXHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTtcXG5hcmNoL2FybS9tbS9tbXUuYy0xMzQ5LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm0vbW0vbm9tbXUuYz02Mz11bnNpZ25lZCBsb25nIHNldHVwX3ZlY3RvcnNfYmFzZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vbm9tbXUuYy04MS1cXG5hcmNoL2FybS9tbS9ub21tdS5jOjgyOnZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpXFxuYXJjaC9hcm0vbW0vbm9tbXUuYy04My17XFxuLS1cXG5hcmNoL2FybS9tbS9ub21tdS5jLTkwLVxcdCAqL1xcbmFyY2gvYXJtL21tL25vbW11LmM6OTE6XFx0bWVtYmxvY2tfcmVzZXJ2ZSh2ZWN0b3JzX2Jhc2UsIDIgKiBQQUdFX1NJWkUpO1xcbmFyY2gvYXJtL21tL25vbW11LmMtOTItI2Vsc2UgLyogaWZuZGVmIENPTkZJR19DUFVfVjdNICovXFxuLS1cXG5hcmNoL2FybS9tbS9ub21tdS5jLTEwMS1cXHQgKi9cXG5hcmNoL2FybS9tbS9ub21tdS5jOjEwMjpcXHRtZW1ibG9ja19yZXNlcnZlKDAsIDEpO1xcbmFyY2gvYXJtL21tL25vbW11LmMtMTAzLX1cXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYz0yMzU9dm9pZCBjcmFzaF9wb3N0X3Jlc3VtZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTI0Ny0gKiBOb3RlIHRoYXQgYWxsIHRoZSBwYWdlcyBpbiBjcmFzaCBkdW1wIGtlcm5lbCBtZW1vcnkgaGF2ZSBiZWVuIGluaXRpYWxseVxcbmFyY2gvYXJtNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYzoyNDg6ICogbWFya2VkIGFzIFJlc2VydmVkIGFzIG1lbW9yeSB3YXMgYWxsb2NhdGVkIHZpYSBtZW1ibG9ja19yZXNlcnZlKCkuXFxuYXJjaC9hcm02NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTI0OS0gKlxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYz0xNzA9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21hY2hpbmVfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jLTE3Ni1cXHRpZiAoZHRfdmlydClcXG5hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jOjE3NzpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKGR0X3BoeXMsIHNpemUpO1xcbmFyY2gvYXJtNjQva2VybmVsL3NldHVwLmMtMTc4LVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmM9MTk2PXZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI1Ni1cXHRcXHRtZW1ibG9ja19tZW1fbGltaXRfcmVtb3ZlX21hcChtZW1vcnlfbGltaXQpO1xcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjI1NzpcXHRcXHRtZW1ibG9ja19hZGQoX19wYV9zeW1ib2woX3RleHQpLCAocmVzb3VyY2Vfc2l6ZV90KShfZW5kIC0gX3RleHQpKTtcXG5hcmNoL2FybTY0L21tL2luaXQuYy0yNTgtXFx0fVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMjgyLVxcdFxcdH0gZWxzZSB7XFxuYXJjaC9hcm02NC9tbS9pbml0LmM6MjgzOlxcdFxcdFxcdG1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTtcXG5hcmNoL2FybTY0L21tL2luaXQuYy0yODQtXFx0XFx0XFx0bWVtYmxvY2tfY2xlYXJfbm9tYXAoYmFzZSwgc2l6ZSk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmM6Mjg1OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMjg2LVxcdFxcdH1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5Mi1cXHQgKi9cXG5hcmNoL2FybTY0L21tL2luaXQuYzoyOTM6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChfdGV4dCksIF9lbmQgLSBfdGV4dCk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMjk0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOSVRSRCkgXFx1MDAyNlxcdTAwMjYgcGh5c19pbml0cmRfc2l6ZSkge1xcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTE2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbml0cmQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYy0zNy1cXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6Mzg6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhKGluaXRyZF9zdGFydCksIHNpemUpO1xcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYy0zOS1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjctXFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jOjY4OlxcdG1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RhcnQpLCBfZW5kIC0gX3N0YXJ0KTtcXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNjktXFxuLS1cXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jPTEwND12b2lkIF9faW5pdCBzZXR1cF9hcmNoX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC9oZXhhZ29uL21tL2luaXQuYy0xMjMtXFxuYXJjaC9oZXhhZ29uL21tL2luaXQuYzoxMjQ6XFx0bWVtYmxvY2tfYWRkKFBIWVNfT0ZGU0VULFxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTI1LVxcdFxcdCAgICAgKGJvb3RtZW1fbGFzdHBnIC0gQVJDSF9QRk5fT0ZGU0VUKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4tLVxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTI3LVxcdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgKi9cXG5hcmNoL2hleGFnb24vbW0vaW5pdC5jOjEyODpcXHRtZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULFxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTI5LVxcdFxcdFxcdCAoYm9vdG1lbV9zdGFydHBnIC0gQVJDSF9QRk5fT0ZGU0VUKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4tLVxcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTM1LVxcdG1pbl9sb3dfcGZuID0gQVJDSF9QRk5fT0ZGU0VUO1xcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmM6MTM2OlxcdG1lbWJsb2NrX3Jlc2VydmUoUEZOX1BIWVMobWF4X2xvd19wZm4pLCBETUFfUkVTRVJWRURfQllURVMpO1xcbmFyY2gvaGV4YWdvbi9tbS9pbml0LmMtMTM3LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2FjcGkuYz0zNzg9dm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX21lbV9hcmVhKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyLCBzaXplX3Qgc2l6ZSlcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvYWNwaS5jLTM3OS17XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2FjcGkuYzozODA6XFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvYWNwaS5jLTM4MS19XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmM9ODI9c3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJpbWFyeV9kaXNwbGF5KHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmMtOTctXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jOjk4OlxcdG1lbWJsb2NrX3Jlc2VydmUoX19zY3JlZW5faW5mb19sZmJfYmFzZShcXHUwMDI2c3lzZmJfcHJpbWFyeV9kaXNwbGF5LnNjcmVlbiksXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jLTk5LVxcdFxcdFxcdCBzeXNmYl9wcmltYXJ5X2Rpc3BsYXkuc2NyZWVuLmxmYl9zaXplKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lZmkuYz0xMDI9dm9pZCBfX2luaXQgZWZpX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lZmkuYy0xNTgtXFx0XFx0ICovXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VmaS5jOjE1OTpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKChwaHlzX2FkZHJfdClib290X21lbW1hcCwgc2l6ZW9mKCp0YmwpICsgZGF0YS5zaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZWZpLmMtMTYwLVxcdFxcdHNldF9iaXQoRUZJX1BSRVNFUlZFX0JTX1JFR0lPTlMsIFxcdTAwMjZlZmkuZmxhZ3MpO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jPTEzPXZvaWQgX19pbml0IG1lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy0zMS1cXHRcXHRjYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOlxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYzozMjpcXHRcXHRcXHRtZW1ibG9ja19hZGQobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTMzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jLTM2LVxcdFxcdGNhc2UgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlk6XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21lbS5jOjM3OlxcdFxcdFxcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtMzgtXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNDMtXFx0XFx0Y2FzZSBFRklfTUVNT1JZX01BUFBFRF9JT19QT1JUX1NQQUNFOlxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYzo0NDpcXHRcXHRcXHRtZW1ibG9ja19yZXNlcnZlKG1lbV9zdGFydCwgbWVtX3NpemUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy00NS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy01My1cXHQvKiBSZXNlcnZlIHRoZSBmaXJzdCAyTUIgKi9cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6NTQ6XFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgMHgyMDAwMDApO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy01NS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmMtNTYtXFx0LyogUmVzZXJ2ZSB0aGUga2VybmVsIHRleHQvZGF0YS9ic3MgKi9cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbWVtLmM6NTc6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcXHUwMDI2X3RleHQpLFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tZW0uYy01OC1cXHRcXHRcXHQgX19wYV9zeW1ib2woXFx1MDAyNl9lbmQpIC0gX19wYV9zeW1ib2woXFx1MDAyNl90ZXh0KSk7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz0xOTE9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yMjEtXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzoyMjI6XFx0XFx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yMjMtXFx0ZWxzZVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjIyNDpcXHRcXHRtZW1ibG9ja19hZGRfbm9kZShzdGFydCwgc2l6ZSwgcGFfdG9fbmlkKHN0YXJ0KSwgTUVNQkxPQ0tfTk9ORSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjI1LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9MjMwPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX3Jlc2VydmVfdm1jb3JlKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNTctXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MjU4OlxcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1OS1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfa2VybmVsX3NlY3Rpb25zX21lbSh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzg2LVxcdFxcdHByX2luZm8oXFxcIktlcm5lbCBzZWN0aW9ucyBhcmUgbm90IGluIHRoZSBtZW1vcnkgbWFwc1xcXFxuXFxcIik7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6Mzg3OlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzg4LVxcdH1cXG4tLVxcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYz0yMDY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9tbS5jLTMzMC1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTklUUkQpIFxcdTAwMjZcXHUwMDI2IG02OGtfcmFtZGlzay5zaXplKVxcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYzozMzE6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShtNjhrX3JhbWRpc2suYWRkciwgbTY4a19yYW1kaXNrLnNpemUpO1xcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYy0zMzItXFxuLS1cXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmM9ODI9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jLTE0Mi1cXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmM6MTQzOlxcdG1lbWJsb2NrX2FkZChfcmFtYmFzZSwgbWVtb3J5X2VuZCAtIF9yYW1iYXNlKTtcXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmM6MTQ0OlxcdG1lbWJsb2NrX3Jlc2VydmUoX3JhbWJhc2UsIG1lbW9yeV9zdGFydCAtIF9yYW1iYXNlKTtcXG5hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMtMTQ1LVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jLTE1OS1cXHRcXHRcXHQoaW5pdHJkX2VuZCBcXHUwMDNjIG1lbW9yeV9lbmQpKVxcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYzoxNjA6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpO1xcbmFyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYy0xNjEtI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKSAqL1xcbi0tXFxuYXJjaC9tNjhrL21tL21jZm1tdS5jPTE0OD12b2lkIF9faW5pdCBjZl9ib290bWVtX2FsbG9jKHZvaWQpXFxuLS1cXG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTU1LVxcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYzoxNTY6XFx0bWVtYmxvY2tfYWRkX25vZGUobTY4a19tZW1vcnlbMF0uYWRkciwgbTY4a19tZW1vcnlbMF0uc2l6ZSwgMCxcXG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTU3LVxcdFxcdFxcdCAgTUVNQkxPQ0tfTk9ORSk7XFxuLS1cXG5hcmNoL202OGsvbW0vbWNmbW11LmMtMTY4LVxcdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgKi9cXG5hcmNoL202OGsvbW0vbWNmbW11LmM6MTY5OlxcdG1lbWJsb2NrX3Jlc2VydmUoX3JhbWJhc2UsIG1lbXN0YXJ0IC0gX3JhbWJhc2UpO1xcbmFyY2gvbTY4ay9tbS9tY2ZtbXUuYy0xNzAtXFxuLS1cXG5hcmNoL202OGsvbW0vbW90b3JvbGEuYz00MzA9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ1MS1cXHRtYXhfYWRkciA9IG1pbl9hZGRyICsgbTY4a19tZW1vcnlbMF0uc2l6ZSAtIDE7XFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmM6NDUyOlxcdG1lbWJsb2NrX2FkZF9ub2RlKG02OGtfbWVtb3J5WzBdLmFkZHIsIG02OGtfbWVtb3J5WzBdLnNpemUsIDAsXFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDUzLVxcdFxcdFxcdCAgTUVNQkxPQ0tfTk9ORSk7XFxuLS1cXG5hcmNoL202OGsvbW0vbW90b3JvbGEuYy00NjMtXFx0XFx0fVxcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jOjQ2NDpcXHRcXHRtZW1ibG9ja19hZGRfbm9kZShtNjhrX21lbW9yeVtpXS5hZGRyLCBtNjhrX21lbW9yeVtpXS5zaXplLCBpLFxcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jLTQ2NS1cXHRcXHRcXHRcXHQgIE1FTUJMT0NLX05PTkUpO1xcbi0tXFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDgyLVxcdC8qIFJlc2VydmUga2VybmVsIHRleHQvZGF0YS9ic3MgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGluIGhlYWQuUyAqL1xcbmFyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jOjQ4MzpcXHRtZW1ibG9ja19yZXNlcnZlKG02OGtfbWVtb3J5WzBdLmFkZHIsIGF2YWlsbWVtIC0gbTY4a19tZW1vcnlbMF0uYWRkcik7XFxuYXJjaC9tNjhrL21tL21vdG9yb2xhLmMtNDg0LVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYz0xNjU9YXNtbGlua2FnZSB2b2lkIF9faW5pdCBtbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYy0xOTgtXFx0a3NpemUgPSBQQUdFX0FMSUdOKCgodTMyKV9lbmQgLSAodTMyKUNPTkZJR19LRVJORUxfU1RBUlQpKTtcXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjE5OTpcXHRtZW1ibG9ja19yZXNlcnZlKGtzdGFydCwga3NpemUpO1xcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjAwLVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYy0yMDUtXFx0XFx0c2l6ZSA9IGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQ7XFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYzoyMDY6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3ZpcnRfdG9fcGh5cyhpbml0cmRfc3RhcnQpLCBzaXplKTtcXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIwNy1cXHR9XFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jPTgzPXZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYy05Ny1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jOjk4OlxcdG1lbWJsb2NrX2FkZCgwLCBtZW1zaXplKTtcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jLTk5LX1cXG4tLVxcbmFyY2gvbWlwcy9hdGgyNS9hcjIzMTUuYz0yNTU9dm9pZCBfX2luaXQgYXIyMzE1X3BsYXRfbWVtX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvYXRoMjUvYXIyMzE1LmMtMjY5LVxcdG1lbXNpemUgXFx1MDAzY1xcdTAwM2M9IDM7XFxuYXJjaC9taXBzL2F0aDI1L2FyMjMxNS5jOjI3MDpcXHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XFxuYXJjaC9taXBzL2F0aDI1L2FyMjMxNS5jLTI3MS1cXHRpb3VubWFwKHNkcmFtX2Jhc2UpO1xcbi0tXFxuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jPTM1MT12b2lkIF9faW5pdCBhcjUzMTJfcGxhdF9tZW1fc2V0dXAodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9hdGgyNS9hcjUzMTIuYy0zNjUtXFx0bWVtc2l6ZSBcXHUwMDNjXFx1MDAzYz0gMjA7XFxuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jOjM2NjpcXHRtZW1ibG9ja19hZGQoMCwgbWVtc2l6ZSk7XFxuYXJjaC9taXBzL2F0aDI1L2FyNTMxMi5jLTM2Ny1cXHRpb3VubWFwKHNkcmFtX2Jhc2UpO1xcbi0tXFxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jPTU4PXN0YXRpYyBfX2luaXQgdm9pZCBwcm9tX2luaXRfbWVtKHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMtMTAyLVxcdFxcdG1lbSAtPSAweDEwMDA7XFxuYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jOjEwMzpcXHRtZW1ibG9ja19hZGQoMCwgbWVtKTtcXG5hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMtMTA0LX1cXG4tLVxcbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmM9MTU1PXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpXFxuYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYy0xNTYte1xcbmFyY2gvbWlwcy9iY202M3h4L3NldHVwLmM6MTU3OlxcdG1lbWJsb2NrX2FkZCgwLCBiY202M3h4X2dldF9tZW1vcnlfc2l6ZSgpKTtcXG5hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jLTE1OC1cXG4tLVxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM9OTI4PXN0YXRpYyBfX2luaXQgdm9pZCBtZW1vcnlfZXhjbHVkZV9wYWdlKHU2NCBhZGRyLCB1NjQgKm1lbSwgdTY0ICpzaXplKVxcbi0tXFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05MzEtXFx0XFx0dTY0IGluYyA9IGFkZHIgLSAqbWVtO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6OTMyOlxcdFxcdG1lbWJsb2NrX2FkZCgqbWVtLCBpbmMpO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTMzLVxcdFxcdCptZW0gKz0gaW5jO1xcbi0tXFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYz05Njc9dm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTkxLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmM6OTkyOlxcdG1lbWJsb2NrX2FkZChyZXNlcnZlX2xvd19tZW0sIG1heF9tZW1vcnkpO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtOTkzLVxcdHRvdGFsICs9IG1heF9tZW1vcnk7XFxuLS1cXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTk5Ni1cXHRpZiAoY3Jhc2hrX3NpemUgXFx1MDAzZSAwKSB7XFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzo5OTc6XFx0XFx0bWVtYmxvY2tfYWRkKGNyYXNoa19iYXNlLCBjcmFzaGtfc2l6ZSk7XFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYy05OTgtXFx0XFx0Y3Jhc2hrX2VuZCA9IGNyYXNoa19iYXNlICsgY3Jhc2hrX3NpemU7XFxuLS1cXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwMzctXFx0XFx0XFx0XFx0LyogcmVnaW9uIGlzIGZ1bGx5IGluICovXFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzoxMDM4OlxcdFxcdFxcdFxcdG1lbWJsb2NrX2FkZChtZW1vcnksIGNyYXNoa19iYXNlIC0gbWVtb3J5KTtcXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwMzktXFx0XFx0XFx0XFx0dG90YWwgKz0gY3Jhc2hrX2Jhc2UgLSBtZW1vcnk7XFxuYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYzoxMDQwOlxcdFxcdFxcdFxcdG1lbWJsb2NrX2FkZChjcmFzaGtfZW5kLCBlbmQgLSBjcmFzaGtfZW5kKTtcXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jLTEwNDEtXFx0XFx0XFx0XFx0dG90YWwgKz0gZW5kIC0gY3Jhc2hrX2VuZDtcXG4tLVxcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA2Ny0jZW5kaWZcXG5hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jOjEwNjg6XFx0XFx0XFx0bWVtYmxvY2tfYWRkKG1lbW9yeSwgbWVtX2FsbG9jX3NpemUpO1xcbmFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMtMTA2OS1cXHRcXHRcXHR0b3RhbCArPSBtZW1fYWxsb2Nfc2l6ZTtcXG4tLVxcbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYz05Nz12b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYy0xMTItXFxuYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jOjExMzpcXHRtZW1ibG9ja19hZGQoMCwgbWVtc3opO1xcbmFyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYy0xMTQtXFxuLS1cXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmM9MzA9c3RhdGljIF9faW5pdCB2b2lkIHBtYXhfc2V0dXBfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTUxLVxcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYzo1MjpcXHRtZW1ibG9ja19hZGQoMCwgKHVuc2lnbmVkIGxvbmcpbWVtb3J5X3BhZ2UgLSBDS1NFRzEgLSBDSFVOS19TSVpFKTtcXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtNTMtfVxcbi0tXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jPTU5PXN0YXRpYyBfX2luaXQgdm9pZCByZXhfc2V0dXBfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTc2LVxcdFxcdGVsc2Uge1xcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYzo3NzpcXHRcXHRcXHRtZW1ibG9ja19hZGQobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jLTc4LVxcdFxcdFxcdG1lbV9zdGFydCArPSBtZW1fc2l6ZSArICg4ICogYm0tXFx1MDAzZXBhZ2VzaXplKTtcXG4tLVxcbmFyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYy04Mi1cXHRpZiAobWVtX3NpemUpXFxuYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jOjgzOlxcdFxcdG1lbWJsb2NrX2FkZChtZW1fc3RhcnQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMtODQtfVxcbi0tXFxuYXJjaC9taXBzL2RlYy9zZXR1cC5jPTEzNz12b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2RlYy9zZXR1cC5jLTE1MC1cXHQvKiBTdGF5IGF3YXkgZnJvbSB0aGUgZmlybXdhcmUgd29ya2luZyBtZW1vcnkgYXJlYSBmb3Igbm93LiAqL1xcbmFyY2gvbWlwcy9kZWMvc2V0dXAuYzoxNTE6XFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgX19wYV9zeW1ib2woXFx1MDAyNl90ZXh0KSAtIFBIWVNfT0ZGU0VUKTtcXG5hcmNoL21pcHMvZGVjL3NldHVwLmMtMTUyLX1cXG4tLVxcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmM9MTIzPXZvaWQgX193ZWFrIF9faW5pdCBwcm9tX21lbWluaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmMtMTUzLVxcbmFyY2gvbWlwcy9mdy9hcmMvbWVtb3J5LmM6MTU0OlxcdFxcdG1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTtcXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1NS1cXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1Ni1cXHRcXHRpZiAodHlwZSA9PSBtZW1fcmVzZXJ2ZWQpXFxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYzoxNTc6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTtcXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1OC1cXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE1OS1cXHRcXHRpZiAodHlwZSA9PSBtZW1fcHJvbV91c2VkKSB7XFxuYXJjaC9taXBzL2Z3L2FyYy9tZW1vcnkuYzoxNjA6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTtcXG5hcmNoL21pcHMvZncvYXJjL21lbW9yeS5jLTE2MS1cXHRcXHRcXHRpZiAobnJfcHJvbV9tZW0gXFx1MDAzZT0gNSkge1xcbi0tXFxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmM9MTAwPXN0YXRpYyB2b2lkIF9faW5pdCBzbmlfbWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9mdy9zbmkvc25pcHJvbS5jLTEzMC1cXHRcXHRcXHRtZW1jb25mW2ldLnNpemUsIG1lbWNvbmZbaV0uYmFzZSk7XFxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmM6MTMxOlxcdFxcdG1lbWJsb2NrX2FkZChtZW1jb25mW2ldLmJhc2UsIG1lbWNvbmZbaV0uc2l6ZSk7XFxuYXJjaC9taXBzL2Z3L3NuaS9zbmlwcm9tLmMtMTMyLVxcdH1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz05OD12b2lkIF9faW5pdCBkZXRlY3RfbWVtb3J5X3JlZ2lvbihwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3Qgc3pfbWluLCBwaHlzX2FkZHJfdCBzel9tYXgpXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMTEzLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoxMTQ6XFx0bWVtYmxvY2tfYWRkKHN0YXJ0LCBzaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMTE1LX1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0yMTU9c3RhdGljIHZvaWQgX19pbml0IGZpbmFsaXplX2luaXRyZCh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTIyOS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MjMwOlxcdG1lbWJsb2NrX3Jlc2VydmUoX19wYShpbml0cmRfc3RhcnQpLCBzaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMjMxLVxcdGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yODQtXFx0LyogUmVzZXJ2ZSBtZW1vcnkgb2NjdXBpZWQgYnkga2VybmVsLiAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoyODU6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcXHUwMDI2X3RleHQpLFxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy0yODYtXFx0XFx0XFx0X19wYV9zeW1ib2woXFx1MDAyNl9lbmQpIC0gX19wYV9zeW1ib2woXFx1MDAyNl90ZXh0KSk7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMjk2LVxcdGlmIChyYW1zdGFydCBcXHUwMDNlIFBIWVNfT0ZGU0VUKVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzoyOTc6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgcmFtc3RhcnQgLSBQSFlTX09GRlNFVCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTI5OC1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0zNDY9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMzcwLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MzcxOlxcdFxcdG1lbWJsb2NrX2FkZF9ub2RlKHN0YXJ0LCBzaXplLCBwYV90b19uaWQoc3RhcnQpLCBNRU1CTE9DS19OT05FKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMzcyLVxcdGVsc2VcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6MzczOlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTM3NC1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz0zNzk9c3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtbWFwKGNoYXIgKnApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtMzk4LVxcdFxcdHN0YXJ0X2F0ID0gbWVtcGFyc2UocCsxLCBcXHUwMDI2cCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjM5OTpcXHRcXHRtZW1ibG9ja19hZGQoc3RhcnRfYXQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDAwLVxcdH0gZWxzZSBpZiAoKnAgPT0gJyMnKSB7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDA0LVxcdFxcdHN0YXJ0X2F0ID0gbWVtcGFyc2UocCsxLCBcXHUwMDI2cCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQwNTpcXHRcXHRtZW1ibG9ja19hZGQoc3RhcnRfYXQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NDA2OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnRfYXQsIG1lbV9zaXplKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDA3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NDIwPXN0YXRpYyB2b2lkIF9faW5pdCBtaXBzX3Jlc2VydmVfdm1jb3JlKHZvaWQpXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDQyLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0NDM6XFx0bWVtYmxvY2tfcmVzZXJ2ZShlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQ0NC0jZW5kaWZcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz01MDg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2tlcm5lbF9zZWN0aW9uc19tZW0odm9pZClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy01MTQtXFx0XFx0cHJfaW5mbyhcXFwiS2VybmVsIHNlY3Rpb25zIGFyZSBub3QgaW4gdGhlIG1lbW9yeSBtYXBzXFxcXG5cXFwiKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NTE1OlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTUxNi1cXHR9XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NjMzPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjc2LVxcdC8qIFJlc2VydmUgZm9yIGhpYmVybmF0aW9uLiAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo2Nzc6XFx0bWVtYmxvY2tfcmVzZXJ2ZShfX3BhX3N5bWJvbChcXHUwMDI2X19ub3NhdmVfYmVnaW4pLFxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy02NzgtXFx0XFx0X19wYV9zeW1ib2woXFx1MDAyNl9fbm9zYXZlX2VuZCkgLSBfX3BhX3N5bWJvbChcXHUwMDI2X19ub3NhdmVfYmVnaW4pKTtcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYz0yMDEwPXZvaWQgcmVzZXJ2ZV9leGNlcHRpb25fc3BhY2UocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jLTIwMTctXFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKVxcbmFyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYzoyMDE4OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoYWRkciwgc2l6ZSk7XFxuYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jLTIwMTktfVxcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYz0xOD12b2lkIF9faW5pdCBwcm9tX2luaXRfbWVtb3J5KHZvaWQpXFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYy0xOS17XFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzoyMDpcXHRtZW1ibG9ja19hZGQoMHgwLCAobWVtc2l6ZSBcXHUwMDNjXFx1MDAzYyAyMCkpO1xcbmFyY2gvbWlwcy9sb29uZ3NvbjJlZi9jb21tb24vbWVtLmMtMjEtXFxuLS1cXG5hcmNoL21pcHMvbG9vbmdzb24yZWYvY29tbW9uL21lbS5jLTQwLVxcdGlmIChoaWdobWVtc2l6ZSBcXHUwMDNlIDApXFxuYXJjaC9taXBzL2xvb25nc29uMmVmL2NvbW1vbi9tZW0uYzo0MTpcXHRcXHRtZW1ibG9ja19hZGQoTE9PTkdTT05fSElHSE1FTV9TVEFSVCwgaGlnaG1lbXNpemUgXFx1MDAzY1xcdTAwM2MgMjApO1xcbmFyY2gvbWlwcy9sb29uZ3NvbjJlZi9jb21tb24vbWVtLmMtNDItI2VuZGlmIC8qICFDT05GSUdfNjRCSVQgKi9cXG4tLVxcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYz01MD12b2lkIF9faW5pdCBzem1lbSh1bnNpZ25lZCBpbnQgbm9kZSlcXG4tLVxcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy04MS1cXHRcXHRcXHRcXHQodTMyKW5vZGVfaWQsIG1lbV90eXBlLCBcXHUwMDI2bWVtX3N0YXJ0LCBcXHUwMDI2bWVtX3NpemUpO1xcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYzo4MjpcXHRcXHRcXHRtZW1ibG9ja19hZGRfbm9kZShtZW1fc3RhcnQsIG1lbV9zaXplLCBub2RlLFxcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L2luaXQuYy04My1cXHRcXHRcXHRcXHRcXHQgIE1FTUJMT0NLX05PTkUpO1xcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTkxLVxcdFxcdFxcdFxcdCh1MzIpbm9kZV9pZCwgbWVtX3R5cGUsIFxcdTAwMjZtZW1fc3RhcnQsIFxcdTAwMjZtZW1fc2l6ZSk7XFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjkyOlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7XFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTkzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jLTEwNC1cXHRpZiAobG9vbmdzb25fc3lzY29uZi52Z2FiaW9zX2FkZHIpXFxuYXJjaC9taXBzL2xvb25nc29uNjQvaW5pdC5jOjEwNTpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKHZpcnRfdG9fcGh5cygodm9pZCAqKWxvb25nc29uX3N5c2NvbmYudmdhYmlvc19hZGRyKSxcXG5hcmNoL21pcHMvbG9vbmdzb242NC9pbml0LmMtMTA2LVxcdFxcdFxcdFxcdFNaXzI1NkspO1xcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jPTgyPXN0YXRpYyB2b2lkIF9faW5pdCBub2RlX21lbV9pbml0KHVuc2lnbmVkIGludCBub2RlKVxcbi0tXFxuYXJjaC9taXBzL2xvb25nc29uNjQvbnVtYS5jLTExMC1cXHRcXHQvKiBSZXNlcnZlIHRoZSBrZXJuZWwgdGV4dC9kYXRhL2JzcyAqL1xcbmFyY2gvbWlwcy9sb29uZ3NvbjY0L251bWEuYzoxMTE6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShrZXJuZWxfc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjMxLjI5MjYwODAwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjE3MjEyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgYmxvY2sgc2l0dWF0aW9uIG9uIHg4Ni9hbWQ2NDpcblxuKipJbnZlc3RpZ2F0aW5nIG1lbWJsb2NrIG9uIHg4Ni9hbWQ2NCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgbWVtYmxvY2tgIGlzIHV0aWxpemVkIG9uIHg4Ni9hbWQ2NC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCBhIGdyZXAgd2l0aGluIHRoZSBgYXJjaC94ODYvYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBmb2N1c2luZyBvbiB0aGUgY29yZSBhcmNoaXRlY3R1cmFsIGltcGxlbWVudGF0aW9uLiBJJ2xsIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBgbWVtYmxvY2tfYWRkYCBhbmQgYG1lbWJsb2NrX3Jlc2VydmVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIGFzIGBtZW1ibG9ja19hZGRgIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgYWRkaW5nIGF2YWlsYWJsZSBtZW1vcnkgcmFuZ2VzIHRvIHRoZSBtZW1ibG9jayBsaXN0LCB3aGlsZSBgbWVtYmxvY2tfcmVzZXJ2ZWAgaXMgd2hhdCBpcyB1c2VkIHRvIHJlc2VydmUgcmFuZ2VzIGFuZCBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSB1c2luZyB0aGVtLiBCeSBzZWFyY2hpbmcgZm9yIHRoZXNlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hbmFnZWQsIHdoaWNoIGRyaXZlcnMgYXJlIHVzaW5nIGl0LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEJJT1Mgb3IgZmlybXdhcmUsIGFuZCBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIGJvb3QgcHJvY2VzcyBtZW1vcnkgbWFwIG9uIHg4Ni4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhlIHN5c3RlbSdzIG1lbW9yeSBpcyBpbml0aWFsbHkgc2V0IHVwIGFuZCBob3cgaXQgZXZvbHZlcyBhcyB0aGUga2VybmVsIGJvb3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY1MywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjMzLjkxNDMzMjI2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTk3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2FkZHxtZW1ibG9ja19yZXNlcnZlfG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2V8bWVtYmxvY2tfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY2hlY2suYz05Mj12b2lkIF9faW5pdCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jaGVjay5jLTEyMy1cXG5hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYzoxMjQ6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xcbmFyY2gveDg2L2tlcm5lbC9jaGVjay5jLTEyNS1cXHRcXHRzY2FuX2FyZWFzW251bV9zY2FuX2FyZWFzXS5hZGRyID0gc3RhcnQ7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM0MS1cXHRcXHRpZiAoZW50cnktXFx1MDAzZXR5cGUgPT0gRTgyMF9UWVBFX1NPRlRfUkVTRVJWRUQpXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQyOlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoZW50cnktXFx1MDAzZWFkZHIsIGVudHJ5LVxcdTAwM2VzaXplKTtcXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDMtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNDYtXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzQ3OlxcdFxcdG1lbWJsb2NrX2FkZChlbnRyeS1cXHUwMDNlYWRkciwgZW50cnktXFx1MDAzZXNpemUpO1xcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM0OC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNzMtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXFxuYXJjaC94ODYva2VybmVsL2U4MjAuYzoxMzc0OlxcdFxcdG1lbWJsb2NrX3JlbW92ZShQRk5fUEhZUyhtYXhfcGZuKSwgLTEpO1xcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM3NS1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmM9NTY9dm9pZCBfX2luaXQgcmVzZXJ2ZV9iaW9zX3JlZ2lvbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmMtOTYtXFx0LyogUmVzZXJ2ZSBhbGwgbWVtb3J5IGJldHdlZW4gYmlvc19zdGFydCBhbmQgdGhlIDFNQiBtYXJrOiAqL1xcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmM6OTc6XFx0bWVtYmxvY2tfcmVzZXJ2ZShiaW9zX3N0YXJ0LCAweDEwMDAwMCAtIGJpb3Nfc3RhcnQpO1xcbmFyY2gveDg2L2tlcm5lbC9lYmRhLmMtOTgtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYz01NTI9c3RhdGljIHZvaWQgX19pbml0IHNtcF9yZXNlcnZlX21lbW9yeShzdHJ1Y3QgbXBmX2ludGVsICptcGYpXFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01NTMte1xcbmFyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmM6NTU0OlxcdG1lbWJsb2NrX3Jlc2VydmUobXBmLVxcdTAwM2VwaHlzcHRyLCBnZXRfbXBjX3NpemUobXBmLVxcdTAwM2VwaHlzcHRyKSk7XFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01NTUtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYz01NTc9c3RhdGljIGludCBfX2luaXQgc21wX3NjYW5fY29uZmlnKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jLTU4Mi1cXG5hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jOjU4MzpcXHRcXHRcXHRtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemVvZigqbXBmKSk7XFxuYXJjaC94ODYva2VybmVsL21wcGFyc2UuYy01ODQtXFx0XFx0XFx0aWYgKG1wZi1cXHUwMDNlcGh5c3B0cilcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jPTI4Mz1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9icmsodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTI4NS1cXHRpZiAoX2Jya19lbmQgXFx1MDAzZSBfYnJrX3N0YXJ0KVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjI4NjpcXHRcXHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oX19wYV9zeW1ib2woX2Jya19zdGFydCksXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtMjg3LVxcdFxcdFxcdFxcdCAgICAgIF9icmtfZW5kIC0gX2Jya19zdGFydCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz0zNDk9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfaW5pdHJkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy0zNTktXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6MzYwOlxcdG1lbWJsb2NrX3Jlc2VydmVfa2VybihyYW1kaXNrX2ltYWdlLCByYW1kaXNrX2VuZCAtIHJhbWRpc2tfaW1hZ2UpO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTM2MS19XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz00MDE9c3RhdGljIHZvaWQgX19pbml0IGFkZF9lYXJseV9pbWFfYnVmZmVyKHU2NCBwaHlzX2FkZHIpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy00MTItXFx0aWYgKGRhdGEtXFx1MDAzZXNpemUpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0MTM6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKGRhdGEtXFx1MDAzZWFkZHIsIGRhdGEtXFx1MDAzZXNpemUpO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQxNC1cXHRcXHRpbWFfa2V4ZWNfYnVmZmVyX3BoeXMgPSBkYXRhLVxcdTAwM2VhZGRyO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NTY5PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZV9zZXR1cF9kYXRhKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy01ODYtXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6NTg3OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmVfa2VybihwYV9kYXRhLCBzaXplb2YoKmRhdGEpICsgZGF0YS1cXHUwMDNlbGVuKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy01ODgtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy02MDAtXFx0XFx0XFx0aWYgKGluZGlyZWN0LVxcdTAwM2V0eXBlICE9IFNFVFVQX0lORElSRUNUKVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjYwMTpcXHRcXHRcXHRcXHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oaW5kaXJlY3QtXFx1MDAzZWFkZHIsIGluZGlyZWN0LVxcdTAwM2VsZW4pO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTYwMi1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz03MTk9c3RhdGljIHZvaWQgX19pbml0IHRyaW1fc25iX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNzQ2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9wYWdlcyk7IGkrKykge1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjc0NzpcXHRcXHRpZiAobWVtYmxvY2tfcmVzZXJ2ZShiYWRfcGFnZXNbaV0sIFBBR0VfU0laRSkpXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNzQ4LVxcdFxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkcgXFxcImZhaWxlZCB0byByZXNlcnZlIDB4JTA4bHhcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz03OTc9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtb3J5KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy04MDItXFx0ICogX19lbmRfb2Zfa2VybmVsX3Jlc2VydmUgc3ltYm9sIG11c3QgYmUgZXhwbGljaXRseSByZXNlcnZlZCB3aXRoIGFcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo4MDM6XFx0ICogc2VwYXJhdGUgbWVtYmxvY2tfcmVzZXJ2ZSgpIG9yIHRoZXkgd2lsbCBiZSBkaXNjYXJkZWQuXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtODA0LVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjgwNTpcXHRtZW1ibG9ja19yZXNlcnZlX2tlcm4oX19wYV9zeW1ib2woX3RleHQpLFxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgwNi1cXHRcXHRcXHQgICAgICAodW5zaWduZWQgbG9uZylfX2VuZF9vZl9rZXJuZWxfcmVzZXJ2ZSAtICh1bnNpZ25lZCBsb25nKV90ZXh0KTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgxOC1cXHQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo4MTk6XFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl82NEspO1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTgyMC1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TPTEzMD1TRUNUSU9OU1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMtMzc1LVxcdCAqIGF1dG9tYXRpY2FsbHkgcmVzZXJ2ZWQgaW4gc2V0dXBfYXJjaCgpLiBBbnl0aGluZyBhZnRlciBoZXJlIG11c3QgYmVcXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUzozNzY6XFx0ICogZXhwbGljaXRseSByZXNlcnZlZCB1c2luZyBtZW1ibG9ja19yZXNlcnZlKCkgb3IgaXQgd2lsbCBiZSBkaXNjYXJkZWRcXG5hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUy0zNzctXFx0ICogYW5kIHRyZWF0ZWQgYXMgYXZhaWxhYmxlIG1lbW9yeS5cXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYz0xOTI9aW50IF9faW5pdCBlZmlfbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uodm9pZClcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYy0yMjYtXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jOjIyNzpcXHRtZW1ibG9ja19yZXNlcnZlKHBtYXAsIGVmaS5tZW1tYXAubnJfbWFwICogZWZpLm1lbW1hcC5kZXNjX3NpemUpO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYy0yMjgtXFx0c2V0X2JpdChFRklfUFJFU0VSVkVfQlNfUkVHSU9OUywgXFx1MDAyNmVmaS5mbGFncyk7XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmM9MzI0PXZvaWQgX19pbml0IGVmaV9yZXNlcnZlX2Jvb3Rfc2VydmljZXModm9pZClcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNDItXFx0XFx0LypcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmM6MzQzOlxcdFxcdCAqIEJlY2F1c2UgdGhlIGZvbGxvd2luZyBtZW1ibG9ja19yZXNlcnZlKCkgaXMgcGFpcmVkXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jLTM0NC1cXHRcXHQgKiB3aXRoIGZyZWVfcmVzZXJ2ZWRfYXJlYSgpIGZvciB0aGlzIHJlZ2lvbiBpblxcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL3F1aXJrcy5jLTM1Ni1cXHRcXHRpZiAoIWFscmVhZHlfcmVzZXJ2ZWQpIHtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvcXVpcmtzLmM6MzU3OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIHNpemUpO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9xdWlya3MuYy0zNTgtXFxuLS1cXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmM9NDc9dm9pZCBfX2luaXQgcmVzZXJ2ZV9yZWFsX21vZGUodm9pZClcXG4tLVxcbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy02Ni1cXHQgKi9cXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmM6Njc6XFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl8xTSk7XFxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jLTY4LVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTYxPXN0YXRpYyB2b2lkIF9faW5pdCBfX3NucF9maXh1cF9lODIwX3RhYmxlcyh1NjQgcGEpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xODctXFx0XFx0aWYgKCFtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQocGEsIFBNRF9TSVpFKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxODg6XFx0XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShwYSwgUE1EX1NJWkUpO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE4OS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmM9NDE1PXZvaWQgX19pbml0IHhlbl9hZGRfZXh0cmFfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5fcGZucylcXG4tLVxcbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00MzktXFxuYXJjaC94ODYveGVuL2VubGlnaHRlbi5jOjQ0MDpcXHRtZW1ibG9ja19yZXNlcnZlKFBGTl9QSFlTKHN0YXJ0X3BmbiksIFBGTl9QSFlTKG5fcGZucykpO1xcbmFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYy00NDEtfVxcbi0tXFxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYz01MD1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9zaGFyZWRfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYy02OS1cXG5hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jOjcwOlxcdG1lbWJsb2NrX3Jlc2VydmUocGEsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYy03MS1cXHRIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gZWFybHlfbWVtcmVtYXAocGEsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM9MTc2OD12b2lkIF9faW5pdCB4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIG1heF9wZm4pXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMTg5MS1cXHR4ZW5fcHRfc2l6ZSA9IChwdF9lbmQgLSBwdF9iYXNlKSAqIFBBR0VfU0laRTtcXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MTg5MjpcXHRtZW1ibG9ja19yZXNlcnZlKHhlbl9wdF9iYXNlLCB4ZW5fcHRfc2l6ZSk7XFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTE4OTMtXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM9MjA3Nj12b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV9zcGVjaWFsX3BhZ2VzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtMjA3OS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MDpcXHRtZW1ibG9ja19yZXNlcnZlKF9fcGEoeGVuX3N0YXJ0X2luZm8pLCBQQUdFX1NJWkUpO1xcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDgxLVxcdGlmICh4ZW5fc3RhcnRfaW5mby1cXHUwMDNlc3RvcmVfbWZuKSB7XFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTIwODItXFx0XFx0cGFkZHIgPSBQRk5fUEhZUyhtZm5fdG9fcGZuKHhlbl9zdGFydF9pbmZvLVxcdTAwM2VzdG9yZV9tZm4pKTtcXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6MjA4MzpcXHRcXHRtZW1ibG9ja19yZXNlcnZlKHBhZGRyLCBQQUdFX1NJWkUpO1xcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg0LVxcdH1cXG4tLVxcbmFyY2gveDg2L3hlbi9tbXVfcHYuYy0yMDg2LVxcdFxcdHBhZGRyID0gUEZOX1BIWVMobWZuX3RvX3Bmbih4ZW5fc3RhcnRfaW5mby1cXHUwMDNlY29uc29sZS5kb21VLm1mbikpO1xcbmFyY2gveDg2L3hlbi9tbXVfcHYuYzoyMDg3OlxcdFxcdG1lbWJsb2NrX3Jlc2VydmUocGFkZHIsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTIwODgtXFx0fVxcbi0tXFxuYXJjaC94ODYveGVuL3NldHVwLmM9ODM9c3RhdGljIHZvaWQgX19pbml0IHhlbl9kZWxfZXh0cmFfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxuYXJjaC94ODYveGVuL3NldHVwLmMtMTA5LVxcdFxcdFxcdHhlbl9leHRyYV9tZW1baV0ubl9wZm5zID0gc3RhcnRfcGZuIC0gc3RhcnRfcjtcXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYzoxMTA6XFx0XFx0XFx0LyogQ2FsbGluZyBtZW1ibG9ja19yZXNlcnZlKCkgYWdhaW4gaXMgb2theS4gKi9cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy0xMTEtXFx0XFx0XFx0eGVuX2FkZF9leHRyYV9tZW0oc3RhcnRfcGZuICsgbl9wZm5zLCBzdGFydF9yICsgc2l6ZV9yIC1cXG4tLVxcbmFyY2gveDg2L3hlbi9zZXR1cC5jPTYwMT1waHlzX2FkZHJfdCBfX2luaXQgeGVuX2ZpbmRfZnJlZV9hcmVhKHBoeXNfYWRkcl90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy02MTgtXFx0XFx0aWYgKGFkZHIgXFx1MDAzZT0gc3RhcnQgKyBzaXplKSB7XFxuYXJjaC94ODYveGVuL3NldHVwLmM6NjE5OlxcdFxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIHNpemUpO1xcbmFyY2gveDg2L3hlbi9zZXR1cC5jLTYyMC1cXHRcXHRcXHRyZXR1cm4gc3RhcnQ7XFxuLS1cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYz03NzA9c3RhdGljIHZvaWQgX19pbml0IHhlbl9yZXNlcnZlX3hlbl9tZm5saXN0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni94ZW4vc2V0dXAuYy03ODItXFxuYXJjaC94ODYveGVuL3NldHVwLmM6NzgzOlxcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIHNpemUpO1xcbmFyY2gveDg2L3hlbi9zZXR1cC5jLTc4NC1cXHRpZiAoIXhlbl9pc19lODIwX3Jlc2VydmVkKHN0YXJ0LCBzaXplKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MzQuMDI0OTM3NDQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzYyMDQxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIFVzYWdlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AuIE15IGZpcnN0IHRob3VnaHQgaXMsIHdoaWNoIGFyY2hpdGVjdHVyZXMgYXJlIGV2ZW4gYm90aGVyaW5nIHRvIGRlZmluZSBgQVJDSF9LRUVQX01FTUJMT0NLYD8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIFRvIGZpZ3VyZSB0aGlzIG91dCwgdGhlIG9idmlvdXMgbW92ZSBpcyB0byB1c2UgYGdyZXBgLiBJJ2xsIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYEFSQ0hfS0VFUF9NRU1CTE9DS2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIHRoZSBhcmNoaXRlY3R1cmVzIEkgbmVlZCB0byBsb29rIGF0IG1vcmUgY2xvc2VseS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB3aHkgdGhvc2UgcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIG5lZWQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgd2hhdCBpdCBzaWduaWZpZXMgaW4gdGhlaXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MzozNi4wNjExNDY2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMjY4Nzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0tFRVBfTUVNQkxPQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0yPWNvbmZpZyBBUk1cXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMzUtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL2FybS9LY29uZmlnOjM2OlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL2FybS9LY29uZmlnLTM3LVxcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctNjMtXFx0c2VsZWN0IEFSQ0hfSEFWRV9UUkFDRV9NTUlPX0FDQ0VTU1xcbmFyY2gvYXJtNjQvS2NvbmZpZzo2NDpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9hcm02NC9LY29uZmlnLTY1LVxcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTgtXFx0c2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaWYgIVBSRUVNUFRJT05cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjU5OlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTYwLVxcdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9Mj1jb25maWcgTUlQU1xcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMjEtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL21pcHMvS2NvbmZpZzoyMjpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9taXBzL0tjb25maWctMjMtXFx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjMtXFx0c2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTY0OlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjUtXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFx0aWYgUFBDX1JBRElYX01NVVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTYwLVxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbmFyY2gvcmlzY3YvS2NvbmZpZzo2MTpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLIGlmIEFDUEkgfHwgS0VYRUNcXG5hcmNoL3Jpc2N2L0tjb25maWctNjItXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFx0aWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE4NjU9Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzAtXFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuYXJjaC94ODYvS2NvbmZpZzoxODcxOlxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzItXFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTEwNzM9c3RhdGljIGludCBlZmlfbWVtX3Jlc2VydmVfaW9tZW0ocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMDk1LVxcdCAqL1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jOjEwOTY6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykgXFx1MDAyNlxcdTAwMjYgIXJldClcXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYy0xMDk3LVxcdFxcdG1lbWJsb2NrX3Jlc2VydmUoYWRkciwgc2l6ZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTExNS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MTE2OiNpZm5kZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTctI2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU2MD1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy01ODYtXFxua2VybmVsL2tleGVjX2ZpbGUuYzo1ODc6I2lmZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU4OC1zdGF0aWMgaW50IGtleGVjX3dhbGtfbWVtYmxvY2soc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NzE2PWludCBrZXhlY19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZilcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzM4LVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NzM5OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0MC1cXHRcXHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbi0tXFxubW0vS2NvbmZpZz00ODI9Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXFxuLS1cXG5tbS9LY29uZmlnLTQ4Ny0jIEFsc28sIG1lbWJsb2NrcyBhcmUgdXBkYXRlZCB3aXRoIG1lbW9yeSBob3QodW4pcGx1Zy5cXG5tbS9LY29uZmlnOjQ4ODpjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vS2NvbmZpZy00ODktXFx0Ym9vbFxcbi0tXFxubW0vbWVtYmxvY2suYy0xMDAtICpcXG5tbS9tZW1ibG9jay5jOjEwMTogKiBVbmxlc3MgYW4gYXJjaGl0ZWN0dXJlIGVuYWJsZXMgJUNPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0ssIHRoZVxcbm1tL21lbWJsb2NrLmMtMTAyLSAqIG1lbWJsb2NrIGRhdGEgc3RydWN0dXJlcyAoZXhjZXB0IFxcXCJwaHlzbWVtXFxcIikgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlXFxuLS1cXG5tbS9tZW1ibG9jay5jPTM2OT1zdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyByKVxcbi0tXFxubW0vbWVtYmxvY2suYy0zODUtXFxubW0vbWVtYmxvY2suYzozODY6I2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vbWVtYmxvY2suYy0zODctLyoqXFxuLS1cXG5tbS9tZW1ibG9jay5jPTk2Nj11bnNpZ25lZCBsb25nIGZyZWVfcmVzZXJ2ZWRfYXJlYSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgcG9pc29uLCBjb25zdCBjaGFyICpzKVxcbi0tXFxubW0vbWVtYmxvY2suYy05ODQtXFxubW0vbWVtYmxvY2suYzo5ODU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpIHtcXG5tbS9tZW1ibG9jay5jLTk4Ni1cXHRcXHRpZiAoc3RhcnRfcGEgXFx1MDAzYyBlbmRfcGEpXFxuLS1cXG5tbS9tZW1ibG9jay5jPTEwMjI9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzX2ZyZWUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTAzMS1cXG5tbS9tZW1ibG9jay5jOjEwMzI6XFx0aWYgKCFzbGFiX2lzX2F2YWlsYWJsZSgpIHx8IElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtYmxvY2suYy0xMDMzLVxcdFxcdHJldCA9IG1lbWJsb2NrX3JlbW92ZV9yYW5nZShcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0yOTExPV9fc2V0dXAoXFxcInJlc2VydmVfbWVtPVxcXCIsIHJlc2VydmVfbWVtKTtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjkxMy0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vbWVtYmxvY2suYzoyOTE0OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vbWVtYmxvY2suYy0yOTE1LXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4tLVxcbm1tL21lbWJsb2NrLmM9Mjk3NT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHN0cnVjdCBkZW50cnkgKnJvb3QpIHsgfVxcbm1tL21lbWJsb2NrLmMtMjk3Ni1cXG5tbS9tZW1ibG9jay5jOjI5Nzc6I2VuZGlmIC8qIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0sgKi9cXG5tbS9tZW1ibG9jay5jLTI5NzgtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI5OTk9c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTMwMDItXFxubW0vbWVtYmxvY2suYzozMDAzOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSBcXHUwMDI2XFx1MDAyNiAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxcbm1tL21lbWJsb2NrLmMtMzAwNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUzMD1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTYwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTU2MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU2Mi1cXHRcXHRpZiAocmVzLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjMxLWVycm9yX21lbWJsb2NrX3JlbW92ZTpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjMzLVxcdFxcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIyOTM9c3RhdGljIGludCB0cnlfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzMzLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzUtXFx0XFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6MzguNDYzODQyODk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTAzMzYwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgdGhlIG1lbW9yeSBob3RwbHVnIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoYXQgYG1lbWJsb2NrX2FkZF9ub2RlYCBhbmQgYG1lbWJsb2NrX3JlbW92ZWAgYXJlIGtleSBmdW5jdGlvbnMgYmVpbmcgdXRpbGl6ZWQsIGFuZCB0aGVpciBvcGVyYXRpb24gc2VlbXMgY29udGluZ2VudCBvbiBgSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNvbmRpdGlvbmFsLCBhcyBpdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSBzeXN0ZW0gbWFpbnRhaW5zIGEgcGVyc2lzdGVudCBgbWVtYmxvY2tgIHJlcHJlc2VudGF0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBoYXZlIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBlbXBsb3llZCBpbiBob3RwbHVnIHNjZW5hcmlvcy4gTXkgZm9jdXMgd2lsbCBiZSBhcm91bmQgbGluZSAxNTYwIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AsIGFzIHRoYXQncyB3aGVyZSBJIGFzc3VtZSB0aGUgbW9zdCBwZXJ0aW5lbnQgbG9naWMgd2lsbCByZXNpZGUgaW4gdGVybXMgb2YgYWRkaW5nIGFuZCByZW1vdmluZyBtZW1vcnkgYmxvY2tzIGR1cmluZyBob3RwbHVnIG9wZXJhdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NDAuNTU0MTgyMDIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODUyNDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTE0MTg9c3RhdGljIHZvaWQgcmVtb3ZlX21lbW9yeV9ibG9ja3NfYW5kX2FsdG1hcHModTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0MTkte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQyMDpcXHR1bnNpZ25lZCBsb25nIG1lbWJsb2NrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyMS1cXHR1NjQgY3VyX3N0YXJ0O1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDI3LVxcdGZvciAoY3VyX3N0YXJ0ID0gc3RhcnQ7IGN1cl9zdGFydCBcXHUwMDNjIHN0YXJ0ICsgc2l6ZTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0Mjg6XFx0ICAgICBjdXJfc3RhcnQgKz0gbWVtYmxvY2tfc2l6ZSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQyOS1cXHRcXHRzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IE5VTEw7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0MzktXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDQwOlxcdFxcdHJlbW92ZV9tZW1vcnlfYmxvY2tfZGV2aWNlcyhjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0MTpcXHRcXHRhcmNoX3JlbW92ZV9tZW1vcnkoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBhbHRtYXAsIE5VTEwpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ0Mi1cXHRcXHRhbHRtYXBfZnJlZShhbHRtYXApO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NDgte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ0OTpcXHR1bnNpZ25lZCBsb25nIG1lbWJsb2NrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ1MC1cXHR1NjQgY3VyX3N0YXJ0O1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDUzLVxcdGZvciAoY3VyX3N0YXJ0ID0gc3RhcnQ7IGN1cl9zdGFydCBcXHUwMDNjIHN0YXJ0ICsgc2l6ZTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NTQ6XFx0ICAgICBjdXJfc3RhcnQgKz0gbWVtYmxvY2tfc2l6ZSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ1NS1cXHRcXHRzdHJ1Y3QgbWhwX3BhcmFtcyBwYXJhbXMgPSB7IC5wZ3Byb3QgPVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDU4LVxcdFxcdFxcdC5iYXNlX3BmbiA9IFBIWVNfUEZOKGN1cl9zdGFydCksXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDU5OlxcdFxcdFxcdC5lbmRfcGZuID0gUEhZU19QRk4oY3VyX3N0YXJ0ICsgbWVtYmxvY2tfc2l6ZSAtIDEpLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ2MC1cXHRcXHR9O1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDcwLVxcdFxcdC8qIGNhbGwgYXJjaCdzIG1lbW9yeSBob3RhZGQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0NzE6XFx0XFx0cmV0ID0gYXJjaF9hZGRfbWVtb3J5KG5pZCwgY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBcXHUwMDI2cGFyYW1zKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ3Ny1cXHRcXHQvKiBjcmVhdGUgbWVtb3J5IGJsb2NrIGRldmljZXMgYWZ0ZXIgbWVtb3J5IHdhcyBhZGRlZCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ3ODpcXHRcXHRyZXQgPSBjcmVhdGVfbWVtb3J5X2Jsb2NrX2RldmljZXMoY3VyX3N0YXJ0LCBtZW1ibG9ja19zaXplLCBuaWQsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW1zLmFsdG1hcCwgZ3JvdXApO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ4MC1cXHRcXHRpZiAocmV0KSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDgxOlxcdFxcdFxcdGFyY2hfcmVtb3ZlX21lbW9yeShjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIHBhcmFtcy5hbHRtYXAsIE5VTEwpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ4Mi1cXHRcXHRcXHRhbHRtYXBfZnJlZShwYXJhbXMuYWx0bWFwKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ5My1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0OTQ6c3RhdGljIGludCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0OTUte1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTA3PXN0YXRpYyBib29sIG5vZGVfaXNfbWVtb3J5bGVzcyhpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTIwLVxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUyMTpcXHRyZXR1cm4gIWZvcl9lYWNoX21lbW9yeV9ibG9jayhcXHUwMDI2bmlkLCBjaGVja19ub19tZW1ibG9ja19mb3Jfbm9kZV9jYik7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTIyLX1cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUzMD1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTMzLVxcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTM0OlxcdGVudW0gbWVtYmxvY2tfZmxhZ3MgbWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19OT05FO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzNS1cXHRzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCA9IE5VTEw7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NjItXFx0XFx0aWYgKHJlcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRClcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjM6XFx0XFx0XFx0bWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19EUklWRVJfTUFOQUdFRDtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NjQ6XFx0XFx0cmV0ID0gbWVtYmxvY2tfYWRkX25vZGUoc3RhcnQsIHNpemUsIG5pZCwgbWVtYmxvY2tfZmxhZ3MpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU2NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTcwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTU3MTpcXHRcXHRnb3RvIGVycm9yX21lbWJsb2NrX3JlbW92ZTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NzItXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTc2LVxcdFxcdFxcdG5vZGVfc2V0X29mZmxpbmUobmlkKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1Nzc6XFx0XFx0XFx0Z290byBlcnJvcl9tZW1ibG9ja19yZW1vdmU7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTc4LVxcdFxcdH1cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYzMC1cXHR9XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMxOmVycm9yX21lbWJsb2NrX3JlbW92ZTpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzItXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjMzOlxcdFxcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjM0LWVycm9yX21lbV9ob3RwbHVnX2VuZDpcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTk4NT1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjIwMi1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIyMDM6c3RhdGljIGludCBjaGVja19tZW1ibG9ja19vZmZsaW5lZF9jYihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIyMDQte1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMjkzPXN0YXRpYyBpbnQgdHJ5X3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMwNy1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIzMDg6XFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFxcdTAwMjZuaWQsIGNoZWNrX21lbWJsb2NrX29mZmxpbmVkX2NiKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMDktXFx0aWYgKHJjKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNTpcXHRcXHRtZW1ibG9ja19yZW1vdmUoc3RhcnQsIHNpemUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMzNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NDAuNjIyNzExMzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4NzM0NjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBNZW1vcnkgQmxvY2sgUmV0ZW50aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIGVuYWJsZWQsIHNwZWNpZmljYWxseSBvbiBhbWQ2NC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHBlcmhhcHMgYENPTkZJR19JTlRFTF9URFhfSE9TVGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgd2FzIHJlc3BvbnNpYmxlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJIGNhbid0IGp1c3QganVtcCB0byBhIGNvbmNsdXNpb24uXG5cblJpZ2h0LCBzbywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBzZWxlY3Qgb3IgcmVsYXRlIHRvIGtlZXBpbmcgdGhlIG1lbW9yeSBibG9jayBhcm91bmQ/IEkgbmVlZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3LiBJIGhhZCBhbHJlYWR5IHVzZWQgYGdyZXBgIGVhcmxpZXIgZm9yIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIGFjcm9zcyB0aGUgS2NvbmZpZyBmaWxlcywgYnV0IGxldCdzIHJlY2FwIHRoZSBmaW5kaW5ncyB0byBiZSBjZXJ0YWluLlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDogYEFSQ0hfS0VFUF9NRU1CTE9DS2AgaXMgc2VsZWN0ZWQgYnkgQVJNLCBBUk02NCwgTE9PTkdBUkNILCBNSVBTLCBQUEMsIGFuZCBSSVNDViwgYnV0IFJJU0NWIGhhcyBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBBQ1BJYCBvciBgS0VYRUNgLiBPbiB4ODYsIGBJTlRFTF9URFhfSE9TVGAgc2VsZWN0cyBpdC4gQWxyaWdodC5cblxuQnV0IHdoYXQgYWJvdXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucz8gTGlrZSBpZiBgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hgIGlzIGVuYWJsZWQ/IEkgaGF2ZSB0byBnbyB0aHJvdWdoIGFsbCBvZiB0aGUgcG9zc2liaWxpdGllcy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJ20gbWlzc2luZz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBtbS9LY29uZmlnYCBhcm91bmQgbGluZSA0ODIgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhpcyB0eXBlIG9mIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjQzLjYxMDA1OTU2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFx0Ym9vbFxcbiA0NzY6XFx0XFxuIDQ3NzpcXHRjb25maWcgSEFWRV9HVVBfRkFTVFxcbiA0Nzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNDc5OlxcdFxcdGJvb2xcXG4gNDgwOlxcdFxcbiA0ODE6XFx0IyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3ZlclxcbiA0ODI6XFx0Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXFxuIDQ4MzpcXHRcXHRib29sXFxuIDQ4NDpcXHRcXG4gNDg1OlxcdCMgRG9uJ3QgZGlzY2FyZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZWQgdG8gdHJhY2sgXFxcIm1lbW9yeVxcXCIgYW5kIFxcXCJyZXNlcnZlZFxcXCIgbWVtYmxvY2tzXFxuIDQ4NjpcXHQjIGFmdGVyIGVhcmx5IGJvb3QsIHNvIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHRlc3QgZm9yIHZhbGlkaXR5IG9mIG1lbW9yeS5cXG4gNDg3OlxcdCMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxcbiA0ODg6XFx0Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbiA0ODk6XFx0XFx0Ym9vbFxcbiA0OTA6XFx0XFxuIDQ5MTpcXHQjIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0LlxcbiA0OTI6XFx0Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXFxuIDQ5MzpcXHRcXHRib29sXFxuIDQ5NDpcXHRcXG4gNDk1OlxcdGNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXFxuIDQ5NjpcXHRcXHRib29sXFxuIDQ5NzpcXHRcXG4gNDk4OlxcdCMgSU9SRVNPVVJDRV9TWVNURU1fUkFNIHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCByZXNvdXJjZSB0cmVlIHRoYXQgYXJlIG1hcmtlZFxcbiA0OTk6XFx0IyBJT1JFU09VUkNFX0VYQ0xVU0lWRSBjYW5ub3QgYmUgbWFwcGVkIHRvIHVzZXIgc3BhY2UsIGZvciBleGFtcGxlLCB2aWFcXG4gNTAwOlxcdCMgL2Rldi9tZW0uXFxuIDUwMTpcXHRjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gNTAyOlxcdFxcdGRlZl9ib29sIHlcXG4gNTAzOlxcdFxcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXFxuIDUwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NDMuNjEwMTYxNDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTQ3MDM2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgSG90cGx1ZyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIENhbiBzeXprYWxsZXIgb3IgYW55dGhpbmcgcnVubmluZyBpbiB1c2Vyc3BhY2UgYWN0dWFsbHkgdHJpZ2dlciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIG9yIG90aGVyIHJlbGF0ZWQga2VybmVsIHBhdGhzIGF0IHJ1bnRpbWU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBBbmQsIGNhbiBzeXprYWxsZXIgZXZlbiBiZSB1c2VkIHRvIGZ1enogdGhlIGJvb3QgY29kZT8gTm8sIEknbSBwcmV0dHkgc3VyZSBpdCdzIGRlc2lnbmVkIHRvIGZvY3VzIG9uIGxpdmUga2VybmVsIHN0YXRlcywgaGl0dGluZyBpdCB0aHJvdWdoIHN5c2NhbGxzIGFuZCBwZXJoYXBzIHZpcnR1YWwgZGV2aWNlcyBvciBzeXNmcy4gU28sIGJhY2sgdG8gdGhlIGluaXRpYWwgcXVlc3Rpb246IGlzIHRoZXJlIGEgd2F5IGZvciB1c2Vyc3BhY2UgdG8gbWFuaXB1bGF0ZSBtZW1vcnkgaG90cGx1ZywgYWRkaW5nIG9yIHJlbW92aW5nIG1lbW9yeSB0aHJvdWdoIHN5c2ZzLCBkYXgsIG9yIGFueXRoaW5nIGVsc2U/XG5cblJpZ2h0LCBsZXQncyBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTG9va2luZyBhdCBgbW0vbWVtb3J5X2hvdHBsdWcuY2AsIEkgc2VlIGBfX2FkZF9tZW1vcnlfcmVzb3VyY2VgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbi4gQWhhISBJIHNlZSBpdCdzIGNhbGxlZCBieTogYGFkZF9tZW1vcnlgLCBgYWRkX21lbW9yeV9yZXNvdXJjZWAsIGFuZCBgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIE5vdyB0aGUgaW52ZXN0aWdhdGlvbiBiZWdpbnMuLi4gd2hlcmUgYXJlICp0aG9zZSogZnVuY3Rpb25zIGNhbGxlZCBmcm9tPyBUaGF0J3MgdGhlIHRyYWlsIEkgbmVlZCB0byBmb2xsb3cuIFRpbWUgdG8gc3RhcnQgdHJhY2luZyB0aG9zZSBjYWxscyBhbmQgc2VlIGlmIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0IGNhbiBiZSBpZGVudGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjIwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjQ2LjQwNDg2NzM2N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODIxNjUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfbWVtb3J5XFxcXCh8YWRkX21lbW9yeV9yZXNvdXJjZVxcXFwofGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdD0xNzM9bWVtb3J5IGZhc3RlciB0aGFuIGV4cGVjdGVkOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTc2LSAgbWVtX2hvdHBsdWdfbG9ja1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjE3NzotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSB3aWxsIGZpcnN0IHRha2UgdGhlIG1lbV9ob3RwbHVnX2xvY2ssIGZvbGxvd2VkIGJ5XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3QtMTc4LSAgdGhlIGRldmljZV9sb2NrKCkgKHdoaWxlIGNyZWF0aW5nIHRoZSBkZXZpY2VzLCBkdXJpbmcgYnVzX2FkZF9kZXZpY2UoKSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktaG90cGx1Zy5yc3Q9ODc9Tk9USUZZX1NUT1DlgZzmraLlr7npgJrnn6XpmJ/liJfnmoTov5vkuIDmraXlpITnkIbjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1ob3RwbHVnLnJzdC0xMDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0OjEwNjotIGFkZF9tZW1vcnlfcmVzb3VyY2UoKeWwhummluWFiOS9v+eUqG1lbV9ob3RwbHVnX2xvY2vvvIznhLblkI7mmK9kZXZpY2VfbG9jaygp77yI5Zyo5YibXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWhvdHBsdWcucnN0LTEwNy0gIOW7uuiuvuWkh+aXtu+8jOWcqGJ1c19hZGRfZGV2aWNlKCnmnJ/pl7TvvInjgIJcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmg9MjA9c3RhdGljIGNvbnN0IHN0cnVjdCB0YWd0YWJsZSBfX3RhZ3RhYmxlXyMjZm4gX190YWcgPSB7IHRhZywgZm4gfVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgtMjEtXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaDoyMjpleHRlcm4gaW50IGFybV9hZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgtMjMtZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgZWFybHlfcHJpbnQoY29uc3QgY2hhciAqc3RyLCAuLi4pO1xcbi0tXFxuYXJjaC9hcm0va2VybmVsL2F0YWdzX3BhcnNlLmM9NjU9c3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX21lbTMyKGNvbnN0IHN0cnVjdCB0YWcgKnRhZylcXG5hcmNoL2FybS9rZXJuZWwvYXRhZ3NfcGFyc2UuYy02Ni17XFxuYXJjaC9hcm0va2VybmVsL2F0YWdzX3BhcnNlLmM6Njc6XFx0cmV0dXJuIGFybV9hZGRfbWVtb3J5KHRhZy1cXHUwMDNldS5tZW0uc3RhcnQsIHRhZy1cXHUwMDNldS5tZW0uc2l6ZSk7XFxuYXJjaC9hcm0va2VybmVsL2F0YWdzX3BhcnNlLmMtNjgtfVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmM9NzQ2PXZvaWQgX19pbml0IGR1bXBfbWFjaGluZV90YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtNzU5LVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jOjc2MDppbnQgX19pbml0IGFybV9hZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuYXJjaC9hcm0va2VybmVsL3NldHVwLmMtNzYxLXtcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jPTgyNj1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9tZW0oY2hhciAqcClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg0OC1cXG5hcmNoL2FybS9rZXJuZWwvc2V0dXAuYzo4NDk6XFx0YXJtX2FkZF9tZW1vcnkoc3RhcnQsIHNpemUpO1xcbmFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jLTg1MC1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MTk3NT1zdHJ1Y3QgcmFuZ2UgYXJjaF9nZXRfbWFwcGFibGVfcmFuZ2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjAwNi1cXG5hcmNoL2FybTY0L21tL21tdS5jOjIwMDc6aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjAwOC1cXHRcXHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYz02ND12b2lkIF9faW5pdCBmaXhyYW5nZV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ2RfdCAqcGdkX2Jhc2UpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTA2LSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM6MTA3OmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMTA4LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYz0xMjk9aW50IF9fcmVmIGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0xNDQtXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jOjE0NTppbnQgX19yZWYgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTE0Ni1cXHRcXHRcXHQgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYz01NjQ9c3RhdGljIGludCBkbHBhcl9hZGRfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU4Ni1cXHQvKiBBZGQgdGhlIG1lbW9yeSAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jOjU4NzpcXHRyYyA9IF9fYWRkX21lbW9yeShuaWQsIGxtYi1cXHUwMDNlYmFzZV9hZGRyLCBibG9ja19zeiwgTUhQX01FTU1BUF9PTl9NRU1PUlkpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU4OC1cXHRpZiAocmMpIHtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jPTE3MTI9c3RydWN0IHJhbmdlIGFyY2hfZ2V0X21hcHBhYmxlX3JhbmdlKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNzIwLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE3MjE6aW50IF9fcmVmIGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE3MjIte1xcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYz0yNzE9ZGV2aWNlX2luaXRjYWxsKHMzOTBfY21hX21lbV9pbml0KTtcXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmMtMjc0LVxcbmFyY2gvczM5MC9tbS9pbml0LmM6Mjc1OmludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI3Ni1cXHRcXHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjM9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05OTAtXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjk5MTppbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk5Mi1cXHRcXHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYz0xNjg9c3RhdGljIGludCBhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlKHN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2UpXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjEyLVxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmM6MjEzOlxcdFxcdHJlc3VsdCA9IF9fYWRkX21lbW9yeShtZ2lkLCBpbmZvLVxcdTAwM2VzdGFydF9hZGRyLCBpbmZvLVxcdTAwM2VsZW5ndGgsXFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxNC1cXHRcXHRcXHRcXHQgICAgICBtaHBfZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxNi1cXHRcXHQvKlxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYzoyMTc6XFx0XFx0ICogSWYgdGhlIG1lbW9yeSBibG9jayBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBrZXJuZWwsIGFkZF9tZW1vcnkoKVxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYzoyMTg6XFx0XFx0ICogcmV0dXJucyAtRUVYSVNULiBJZiBhZGRfbWVtb3J5KCkgcmV0dXJucyB0aGUgb3RoZXIgZXJyb3IsIGl0XFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jLTIxOS1cXHRcXHQgKiBtZWFucyB0aGF0IHRoaXMgbWVtb3J5IGJsb2NrIGlzIG5vdCB1c2VkIGJ5IHRoZSBrZXJuZWwuXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMtMjMyLVxcdFxcdC8qXFxuZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jOjIzMzpcXHRcXHQgKiBBZGQgbnVtX2VuYWJsZSBldmVuIGlmIGFkZF9tZW1vcnkoKSByZXR1cm5zIC1FRVhJU1QsIHNvIHRoZVxcbmRyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYy0yMzQtXFx0XFx0ICogZGV2aWNlIGlzIGJvdW5kIHRvIHRoaXMgZHJpdmVyLlxcbi0tXFxuZHJpdmVycy9hY3BpL3NjYW4uYz0yODIwPXZvaWQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTI4NjAtXFx0LypcXG5kcml2ZXJzL2FjcGkvc2Nhbi5jOjI4NjE6XFx0ICogQWx0aG91Z2ggd2UgY2FsbCBfX2FkZF9tZW1vcnkoKSB0aGF0IGlzIGRvY3VtZW50ZWQgdG8gcmVxdWlyZSB0aGVcXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTI4NjItXFx0ICogZGV2aWNlX2hvdHBsdWdfbG9jaywgaXQgaXMgbm90IG5lY2Vzc2FyeSBoZXJlIGJlY2F1c2UgdGhpcyBpcyBhblxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU3Mj1zdGF0aWMgc3NpemVfdCBwcm9iZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTU5MC1cXHRuaWQgPSBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZChwaHlzX2FkZHIpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1OTE6XFx0cmV0ID0gX19hZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OTItXFx0XFx0XFx0ICAgTUlOX01FTU9SWV9CTE9DS19TSVpFICogc2VjdGlvbnNfcGVyX2Jsb2NrLFxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZz03Mz1jb25maWcgREVWX0RBWF9LTUVNXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTc2LVxcdGRlcGVuZHMgb24gREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWc6Nzc6XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyAjIGZvciBhZGRfbWVtb3J5KCkgYW5kIGZyaWVuZHNcXG5kcml2ZXJzL2RheC9LY29uZmlnLTc4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY6LyogTWVtb3J5IHJlc291cmNlIG5hbWUgdXNlZCBmb3IgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCgpLiAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNy1zdGF0aWMgY29uc3QgY2hhciAqa21lbV9uYW1lO1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTg3PXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xMjYtXFx0XFx0ICovXFxuZHJpdmVycy9kYXgva21lbS5jOjEyNzpcXHRcXHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVxcdTAwM2VtZ2lkLCByYW5nZS5zdGFydCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMTI4LVxcdFxcdFxcdFxcdHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0xNjM9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTctXFx0XFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcXG5kcml2ZXJzL2RheC9rbWVtLmM6MTk4OlxcdFxcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xOTktXFx0XFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjAwOlxcdFxcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBsYXRlci5cXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAxLVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0xODU9c3RhdGljIHZvaWQgcWNvbV90em1lbV9jbGVhbnVwX2FyZWEoc3RydWN0IHFjb21fdHptZW1fYXJlYSAqYXJlYSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMTk0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6MTk1OnN0YXRpYyBpbnQgcWNvbV90em1lbV9wb29sX2FkZF9tZW1vcnkoc3RydWN0IHFjb21fdHptZW1fcG9vbCAqcG9vbCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTE5Ni1cXHRcXHRcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0yNDU9cWNvbV90em1lbV9wb29sX25ldyhjb25zdCBzdHJ1Y3QgcWNvbV90em1lbV9wb29sX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0yODItXFx0aWYgKGNvbmZpZy1cXHUwMDNlaW5pdGlhbF9zaXplKSB7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzoyODM6XFx0XFx0cmV0ID0gcWNvbV90em1lbV9wb29sX2FkZF9tZW1vcnkocG9vbCwgY29uZmlnLVxcdTAwM2Vpbml0aWFsX3NpemUsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0yODQtXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0zNzU9c3RhdGljIGJvb2wgcWNvbV90em1lbV90cnlfZ3Jvd19wb29sKHN0cnVjdCBxY29tX3R6bWVtX3Bvb2wgKnBvb2wsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5Mi1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjM5MzpcXHRyZXR1cm4gIXFjb21fdHptZW1fcG9vbF9hZGRfbWVtb3J5KHBvb2wsIHJlcXVlc3RlZCwgZ2ZwKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTM5NC19XFxuLS1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYz03MDg9c3RhdGljIHZvaWQgaHZfbWVtX2hvdF9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtNzMwLVxcdFxcdG5pZCA9IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKFBGTl9QSFlTKHN0YXJ0X3BmbikpO1xcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jOjczMTpcXHRcXHRyZXQgPSBhZGRfbWVtb3J5KG5pZCwgUEZOX1BIWVMoKHN0YXJ0X3BmbikpLFxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTczMi1cXHRcXHRcXHRcXHQgSEFfQllURVNfSU5fQ0hVTkssIE1IUF9NRVJHRV9SRVNPVVJDRSk7XFxuLS1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYz0xNjkyPXN0YXRpYyBpbnQgaG90X2FkZF9lbmFibGVkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0xNjk4LVxcdCAqIERNX01FTV9IT1RfQUREX1JFUVVFU1QgZG9lc24ndCBoYXZlIHRoZSBOVU1BIG5vZGUgaW5mb3JtYXRpb24gZm9yXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MTY5OTpcXHQgKiBhZGRfbWVtb3J5KCkuXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMTcwMC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTE5MzA9c3RhdGljIGludCBiYWxsb29uX3Byb2JlKHN0cnVjdCBodl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTE5NDEtXFx0ICogSG90LWFkZCBtdXN0IG9wZXJhdGUgaW4gY2h1bmtzIHRoYXQgYXJlIG9mIHNpemUgZXF1YWwgdG8gdGhlXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MTk0MjpcXHQgKiBtZW1vcnkgYmxvY2sgc2l6ZSBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBjb3JlIGFkZF9tZW1vcnkoKVxcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTE5NDMtXFx0ICogaW50ZXJmYWNlIHJlcXVpcmVzLiBUaGUgSHlwZXItViBpbnRlcmZhY2UgcmVxdWlyZXMgdGhhdCB0aGUgbWVtb3J5XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jPTE4OT1zdGF0aWMgc3NpemVfdCBzY2xwX2NvbmZpZ19tZW1fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfbWVtLmMtMjIyLVxcdFxcdCAqIFNldCBlbnRpcmUgbWVtb3J5IGJsb2NrIENNTUEgc3RhdGUgdG8gbm9kYXQuIExhdGVyLCB3aGVuXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYzoyMjM6XFx0XFx0ICogcGFnZSB0YWJsZXMgcGFnZXMgYXJlIGFsbG9jYXRlZCB2aWEgX19hZGRfbWVtb3J5KCksIHRob3NlXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYy0yMjQtXFx0XFx0ICogcmVnaW9ucyBhcmUgbWFya2VkIF9fYXJjaF9zZXRfcGFnZV9kYXQoKS5cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfbWVtLmMtMjI2LVxcdFxcdF9fYXJjaF9zZXRfcGFnZV9ub2RhdCgodm9pZCAqKV9fdmEoYWRkciksIGJsb2NrX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9tZW0uYzoyMjc6XFx0XFx0cmMgPSBfX2FkZF9tZW1vcnkoMCwgYWRkciwgYmxvY2tfc2l6ZSxcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX21lbS5jLTIyOC1cXHRcXHRcXHRcXHQgIHNjbHBfbWVtLVxcdTAwM2VtZW1tYXBfb25fbWVtb3J5ID9cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz02Nz1lbnVtIHZpcnRpb19tZW1fc2JtX21iX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02OS1cXHRWSVJUSU9fTUVNX1NCTV9NQl9VTlVTRUQgPSAwLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo3MDpcXHQvKiAoUGFydGlhbGx5KSBwbHVnZ2VkLCBub3QgYWRkZWQgdG8gTGludXguIEVycm9yIG9uIGFkZF9tZW1vcnkoKS4gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNzEtXFx0VklSVElPX01FTV9TQk1fTUJfUExVR0dFRCxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz05MD1lbnVtIHZpcnRpb19tZW1fYmJtX2JiX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05Mi1cXHRWSVJUSU9fTUVNX0JCTV9CQl9VTlVTRUQgPSAwLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo5MzpcXHQvKiBQbHVnZ2VkLCBub3QgYWRkZWQgdG8gTGludXguIEVycm9yIG9uIGFkZF9tZW1vcnkoKS4gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtOTQtXFx0VklSVElPX01FTV9CQk1fQkJfUExVR0dFRCxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMDI9c3RydWN0IHZpcnRpb19tZW0ge1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE0Mi1cXHQgKiBDb3B5IG9mIFxcXCJTeXN0ZW0gUkFNICh2aXJ0aW9fbWVtKVxcXCIgdG8gYmUgdXNlZCBmb3JcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTQzOlxcdCAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoKS5cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTQ0LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTU4OD1zdGF0aWMgaW50IHZpcnRpb19tZW1fc2JtX3NiX3N0YXRlc19wcmVwYXJlX25leHRfbWIoc3RydWN0IHZpcnRpb19tZW0gKnZtKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTYxOS0gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6NjIwOnN0YXRpYyBib29sIHZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeShzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVpbnQ2NF90IHNpemUpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTYyMS17XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjM1LSAqL1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo2MzY6c3RhdGljIGludCB2aXJ0aW9fbWVtX2FkZF9tZW1vcnkoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1aW50NjRfdCBhZGRyLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02MzctXFx0XFx0XFx0XFx0IHVpbnQ2NF90IHNpemUpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjU1LVxcdGF0b21pYzY0X2FkZChzaXplLCBcXHUwMDI2dm0tXFx1MDAzZW9mZmxpbmVfc2l6ZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY1NjpcXHRyYyA9IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQodm0tXFx1MDAzZW1naWQsIGFkZHIsIHNpemUsIHZtLVxcdTAwM2VyZXNvdXJjZV9uYW1lLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02NTctXFx0XFx0XFx0XFx0ICAgICAgIE1IUF9NRVJHRV9SRVNPVVJDRSB8IE1IUF9OSURfSVNfTUdJRCk7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjY5LS8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY3MDogKiBTZWUgdmlydGlvX21lbV9hZGRfbWVtb3J5KCk6IFRyeSBhZGRpbmcgYSBzaW5nbGUgTGludXggbWVtb3J5IGJsb2NrLlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02NzEtICovXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTY3Mj1zdGF0aWMgaW50IHZpcnRpb19tZW1fc2JtX2FkZF9tYihzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVuc2lnbmVkIGxvbmcgbWJfaWQpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjc2LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzo2Nzc6XFx0cmV0dXJuIHZpcnRpb19tZW1fYWRkX21lbW9yeSh2bSwgYWRkciwgc2l6ZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY3OC19XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjgwLS8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY4MTogKiBTZWUgdmlydGlvX21lbV9hZGRfbWVtb3J5KCk6IFRyeSBhZGRpbmcgYSBiaWcgYmxvY2suXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTY4Mi0gKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9NjgzPXN0YXRpYyBpbnQgdmlydGlvX21lbV9iYm1fYWRkX2JiKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdW5zaWduZWQgbG9uZyBiYl9pZClcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy02ODctXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjY4ODpcXHRyZXR1cm4gdmlydGlvX21lbV9hZGRfbWVtb3J5KHZtLCBhZGRyLCBzaXplKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtNjg5LX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz05NzQ9c3RhdGljIHZvaWQgdmlydGlvX21lbV9iYm1fbm90aWZ5X2NhbmNlbF9vZmZsaW5lKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05ODUtLypcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6OTg2OiAqIFRoaXMgY2FsbGJhY2sgd2lsbCBlaXRoZXIgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBhZGRfbWVtb3J5KCkgb3JcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtOTg3LSAqIGFzeW5jaHJvbm91c2x5IChlLmcuLCB0cmlnZ2VyZWQgdmlhIHVzZXIgc3BhY2UpLiBXZSBoYXZlIHRvIGJlIGNhcmVmdWxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6OTg4OiAqIHdpdGggbG9ja2luZyB3aGVuIGNhbGxpbmcgYWRkX21lbW9yeSgpLlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy05ODktICovXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTk5MD1zdGF0aWMgaW50IHZpcnRpb19tZW1fbWVtb3J5X25vdGlmaWVyX2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTA4Ny1cXHRcXHRpZiAoIWF0b21pY19yZWFkKFxcdTAwMjZ2bS1cXHUwMDNld3FfYWN0aXZlKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMDg4OlxcdFxcdCAgICB2aXJ0aW9fbWVtX2NvdWxkX2FkZF9tZW1vcnkodm0sIHZtLVxcdTAwM2VvZmZsaW5lX3RocmVzaG9sZCAvIDIpKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMDg5LVxcdFxcdFxcdHZpcnRpb19tZW1fcmV0cnkodm0pO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTE3NjA9c3RhdGljIGludCB2aXJ0aW9fbWVtX3NibV9wbHVnX3JlcXVlc3Qoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1aW50NjRfdCBkaWZmKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE3OTMtXFx0dmlydGlvX21lbV9zYm1fZm9yX2VhY2hfbWIodm0sIG1iX2lkLCBWSVJUSU9fTUVNX1NCTV9NQl9VTlVTRUQpIHtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTc5NDpcXHRcXHRpZiAoIXZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE3OTUtXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTgwNC1cXHR3aGlsZSAobmJfc2IpIHtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTgwNTpcXHRcXHRpZiAoIXZpcnRpb19tZW1fY291bGRfYWRkX21lbW9yeSh2bSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE4MDYtXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTg3OD1zdGF0aWMgaW50IHZpcnRpb19tZW1fYmJtX3BsdWdfcmVxdWVzdChzdHJ1Y3QgdmlydGlvX21lbSAqdm0sIHVpbnQ2NF90IGRpZmYpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTg4OC1cXHR2aXJ0aW9fbWVtX2JibV9mb3JfZWFjaF9iYih2bSwgYmJfaWQsIFZJUlRJT19NRU1fQkJNX0JCX1VOVVNFRCkge1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxODg5OlxcdFxcdGlmICghdmlydGlvX21lbV9jb3VsZF9hZGRfbWVtb3J5KHZtLCB2bS1cXHUwMDNlYmJtLmJiX3NpemUpKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xODkwLVxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE5MDEtXFx0d2hpbGUgKG5iX2JiKSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjE5MDI6XFx0XFx0aWYgKCF2aXJ0aW9fbWVtX2NvdWxkX2FkZF9tZW1vcnkodm0sIHZtLVxcdTAwM2ViYm0uYmJfc2l6ZSkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTE5MDMtXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9Mjg3OT1zdGF0aWMgaW50IHZpcnRpb19tZW1fY3JlYXRlX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0yOTAxLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyOTAyOlxcdC8qIFRoZSBtZW1vcnkgaXMgbm90IGFjdHVhbGx5IGJ1c3kgLSBtYWtlIGFkZF9tZW1vcnkoKSB3b3JrLiAqL1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0yOTAzLVxcdHZtLVxcdTAwM2VwYXJlbnRfcmVzb3VyY2UtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JT1JFU09VUkNFX0JVU1k7XFxuLS1cXG5kcml2ZXJzL3hlbi9iYWxsb29uLmM9MjY0PXN0YXRpYyBlbnVtIGJwX3N0YXRlIHJlc2VydmVfYWRkaXRpb25hbF9tZW1vcnkodm9pZClcXG4tLVxcbmRyaXZlcnMveGVuL2JhbGxvb24uYy0yOTYtICAgICAgICAvKlxcbmRyaXZlcnMveGVuL2JhbGxvb24uYzoyOTc6ICAgICAgICAgKiBhZGRfbWVtb3J5KCkgd2lsbCBidWlsZCBwYWdlIHRhYmxlcyBmb3IgdGhlIG5ldyBtZW1vcnkgc29cXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMjk4LSAgICAgICAgICogdGhlIHAybSBtdXN0IGNvbnRhaW4gaW52YWxpZCBlbnRyaWVzIHNvIHRoZSBjb3JyZWN0XFxuLS1cXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMzE4LVxcdC8qXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jOjMxOTpcXHQgKiBhZGRfbWVtb3J5X3Jlc291cmNlKCkgd2lsbCBjYWxsIG9ubGluZV9wYWdlcygpIHdoaWNoIGluIGl0cyB0dXJuXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyMC1cXHQgKiB3aWxsIGNhbGwgeGVuX29ubGluZV9wYWdlKCkgY2FsbGJhY2sgY2F1c2luZyBkZWFkbG9jayBpZiB3ZSBkb24ndFxcbi0tXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyNC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmJhbGxvb25fbXV0ZXgpO1xcbmRyaXZlcnMveGVuL2JhbGxvb24uYzozMjU6XFx0LyogYWRkX21lbW9yeV9yZXNvdXJjZSgpIHJlcXVpcmVzIHRoZSBkZXZpY2VfaG90cGx1ZyBsb2NrICovXFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jLTMyNi1cXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XFxuZHJpdmVycy94ZW4vYmFsbG9vbi5jOjMyNzpcXHRyYyA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXNvdXJjZSwgTUhQX01FUkdFX1JFU09VUkNFKTtcXG5kcml2ZXJzL3hlbi9iYWxsb29uLmMtMzI4LVxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTMyPXN0cnVjdCBwYWdlICpwZm5fdG9fb25saW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4pO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zMy1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzQ6LyogRmxhZ3MgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kcyB0byBzcGVjaWZ5IG1lbW9yeSBob3RwbHVnIGRldGFpbHMuICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTM1LXR5cGVkZWYgaW50IF9fYml0d2lzZSBtaHBfdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC00MC0gKiBBbGxvdyBtZXJnaW5nIG9mIHRoZSBhZGRlZCBTeXN0ZW0gUkFNIHJlc291cmNlIHdpdGggYWRqYWNlbnQsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjQxOiAqIG1lcmdlYWJsZSByZXNvdXJjZXMuIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGFkZF9tZW1vcnlfcmVzb3VyY2UoKVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC00Mi0gKiB3aXRoIHRoaXMgZmxhZyBzZXQsIHRoZSByZXNvdXJjZSBwb2ludGVyIG11c3Qgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgaXRcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0xMjM9ZXh0ZXJuIGludCB0cnlfb25saW5lX25vZGUoaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTEyNC1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MTI1OmV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTEyNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMDE9aW50IF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzAyOmV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwMzpleHRlcm4gaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzA0OmV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0zMDUtXFx0XFx0XFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwNjppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwNy1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwOC1cXHRcXHRcXHRcXHRlbnVtIG1tb3Agb25saW5lX3R5cGUpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDozMDk6ZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMxMC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTMyMj1zdGF0aWMgaW50IGNoZWNrX3Bmbl9zcGFuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0zMjgtXFx0ICogb25saW5lLCBzbyB0aGlzIGNoZWNrIHNob3VsZCBvbmx5IGZpcmUgZm9yIGRpcmVjdFxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MzI5OlxcdCAqIGFyY2hfe2FkZCxyZW1vdmV9X21lbW9yeSgpIHVzZXJzIG91dHNpZGUgb2YgYWRkX21lbW9yeV9yZXNvdXJjZSgpLlxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMzMwLVxcdCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ2PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0NzAtXFx0XFx0LyogY2FsbCBhcmNoJ3MgbWVtb3J5IGhvdGFkZCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTQ3MTpcXHRcXHRyZXQgPSBhcmNoX2FkZF9tZW1vcnkobmlkLCBjdXJfc3RhcnQsIG1lbWJsb2NrX3NpemUsIFxcdTAwMjZwYXJhbXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTQ3Mi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTA3PXN0YXRpYyBib29sIG5vZGVfaXNfbWVtb3J5bGVzcyhpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTI5LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUzMDpzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzMS1cXHRcXHRcXHRcXHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTkwLVxcdH0gZWxzZSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTkxOlxcdFxcdHJldCA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHN0YXJ0LCBzaXplLCBcXHUwMDI2cGFyYW1zKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1OTItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MzgtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjM5OmludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjQwLXtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDE6XFx0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi1cXHRcXHRcXHRcXHQgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0NC1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDU6LyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjQ2OmludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Ny17XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NTQtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjU1OlxcdHJldCA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjU2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjYwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY2MTppbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjYyLXtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY2NS1cXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjY2OlxcdHJjID0gX19hZGRfbWVtb3J5KG5pZCwgc3RhcnQsIHNpemUsIG1ocF9mbGFncyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjY3LVxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNjcxPUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA0LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcwNTppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA2LVxcdFxcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyNy1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3Mjg6XFx0cmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyOS1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzM2PUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcXFwia21lbVxcXCIpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzUyLSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTc1MzppbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc1NC1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzU1LXtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3NTY6XFx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc1Ny1cXHRcXHRcXHRtaHBfZmxhZ3MsXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjAzLVxcdCAqIG92ZXIgdGhlIGRldmljZSBtZW1vcnkgaXMgdW4tYWNjZXNzaWJsZSB0aHVzIHdlIGRvIG5vdCB3YW50IHRvXFxubW0vbWVtcmVtYXAuYzoyMDQ6XFx0ICogY3JlYXRlIGEgbGluZWFyIG1hcHBpbmcgZm9yIHRoZSBtZW1vcnkgbGlrZSBhcmNoX2FkZF9tZW1vcnkoKVxcbm1tL21lbXJlbWFwLmMtMjA1LVxcdCAqIHdvdWxkIGRvLlxcbi0tXFxubW0vbWVtcmVtYXAuYy0yMDgtXFx0ICogdGhlIENQVSwgd2UgZG8gd2FudCB0aGUgbGluZWFyIG1hcHBpbmcgYW5kIHRodXMgdXNlXFxubW0vbWVtcmVtYXAuYzoyMDk6XFx0ICogYXJjaF9hZGRfbWVtb3J5KCkuXFxubW0vbWVtcmVtYXAuYy0yMTAtXFx0ICovXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTIyMC1cXG5tbS9tZW1yZW1hcC5jOjIyMTpcXHRcXHRlcnJvciA9IGFyY2hfYWRkX21lbW9yeShuaWQsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2VfbGVuKHJhbmdlKSxcXG5tbS9tZW1yZW1hcC5jLTIyMi1cXHRcXHRcXHRcXHRcXHRwYXJhbXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1Mzo0OS4wMTMwODk5OTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4NDM2MzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBQcm9iZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIG1lbW9yeSBwcm9iaW5nLiBJIHNlZSB0aGF0IGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGhhcyBhIGZ1bmN0aW9uIGNhbGxlZCBgcHJvYmVfc3RvcmVgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgaGFuZGxlciBmb3Igd3JpdGVzIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9wcm9iZWAuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGZ1bmN0aW9uIGBwcm9iZV9zdG9yZWAgcmVjZWl2ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBhbmQgdGhlbiBjYWxscyBgX19hZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLCAuLi4pYC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gQSByZWQgZmxhZyEgTXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUga2lja2luZyBpbi4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBJcyB0aGlzIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmM6cHJvYmVfc3RvcmVgIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2U/IEkgbmVlZCB0byBrbm93IGlmIGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIGNhbiB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24uIEl0IHdvdWxkIGJlIGEgc2VyaW91cyBzZWN1cml0eSBjb25jZXJuIGlmIHNvLiBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGFuZCBjb25maXJtIGV4YWN0bHkgaG93IHRoaXMgcHJvYmUgbWVjaGFuaXNtIGlzIGV4cG9zZWQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaXRzIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1Mzo1MS4yOTc0NTYxMjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjU6XFx0LypcXG4gNTY2OlxcdCAqIFNvbWUgYXJjaGl0ZWN0dXJlcyB3aWxsIGhhdmUgY3VzdG9tIGRyaXZlcnMgdG8gZG8gdGhpcywgYW5kXFxuIDU2NzpcXHQgKiB3aWxsIG5vdCBuZWVkIHRvIGRvIGl0IGZyb20gdXNlcnNwYWNlLiAgVGhlIGZha2UgaG90LWFkZCBjb2RlXFxuIDU2ODpcXHQgKiBhcyB3ZWxsIGFzIHBwYzY0IHdpbGwgZG8gYWxsIG9mIHRoZWlyIGRpc2NvdmVyeSBpbiB1c2Vyc3BhY2VcXG4gNTY5OlxcdCAqIGFuZCB3aWxsIHJlcXVpcmUgdGhpcyBpbnRlcmZhY2UuXFxuIDU3MDpcXHQgKi9cXG4gNTcxOlxcdCNpZmRlZiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkVcXG4gNTcyOlxcdHN0YXRpYyBzc2l6ZV90IHByb2JlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIDU3MzpcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNTc0OlxcdHtcXG4gNTc1OlxcdFxcdHU2NCBwaHlzX2FkZHI7XFxuIDU3NjpcXHRcXHRpbnQgbmlkLCByZXQ7XFxuIDU3NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3Blcl9ibG9jayA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRyZXQgPSBrc3RydG91bGwoYnVmLCAwLCBcXHUwMDI2cGh5c19hZGRyKTtcXG4gNTgwOlxcdFxcdGlmIChyZXQpXFxuIDU4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRpZiAocGh5c19hZGRyIFxcdTAwMjYgKChwYWdlc19wZXJfYmxvY2sgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgLSAxKSlcXG4gNTg0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRyZXQgPSBsb2NrX2RldmljZV9ob3RwbHVnX3N5c2ZzKCk7XFxuIDU4NzpcXHRcXHRpZiAocmV0KVxcbiA1ODg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0bmlkID0gbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQocGh5c19hZGRyKTtcXG4gNTkxOlxcdFxcdHJldCA9IF9fYWRkX21lbW9yeShuaWQsIHBoeXNfYWRkcixcXG4gNTkyOlxcdFxcdFxcdFxcdCAgIE1JTl9NRU1PUllfQkxPQ0tfU0laRSAqIHNlY3Rpb25zX3Blcl9ibG9jayxcXG4gNTkzOlxcdFxcdFxcdFxcdCAgIE1IUF9OT05FKTtcXG4gNTk0OlxcdFxcbiA1OTU6XFx0XFx0aWYgKHJldClcXG4gNTk2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1OTc6XFx0XFxuIDU5ODpcXHRcXHRyZXQgPSBjb3VudDtcXG4gNTk5OlxcdG91dDpcXG4gNjAwOlxcdFxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiA2MDE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKHByb2JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NTEuMjk3Njk1ODAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NDc0ODM3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbWVtYmxvY2suY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYG1lbWJsb2NrLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBjaGFuZ2VkIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG1hY3JvLCBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tYC4gVGhpcyBsb29rcyBsaWtlIGEgdmFyaWF0aW9uIG9mIHRoZSBleGlzdGluZyBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWAgbWFjcm8sIHdpdGggYSBrZXkgZGlmZmVyZW5jZTogaXQgYWxsb3dzIHNwZWNpZnlpbmcgYSBzdGFydGluZyBpbmRleCwgYHN0YXJ0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwcm9iYWJseSBpbnRyb2R1Y2VzIG1vcmUgdGFyZ2V0ZWQgaXRlcmF0aW9uLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIG9yIHdoZW4gd2UgKmtub3cqIGEgc3RhcnRpbmcgcG9pbnQgdGhhdCB3ZSBjYW4gb3B0aW1pemUgZnJvbS5cblxuTm93LCBsZXQgbWUgem9vbSBpbiBvbiB0aGUgZnVuY3Rpb25zIHVzaW5nIHRoaXMgbmV3IG1hY3JvLCBzcGVjaWZpY2FsbHkgYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gTG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGNoYW5nZXMsIEkgc2VlIHRoYXQgdGhpcyBuZXcgbWFjcm8gaXMgYmVpbmcgdXNlZCBpbiB0aGVzZSB0d28gZnVuY3Rpb25zIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWAgbWFjcm8uIFRoZSBrZXkgaXMgaW4gdGhlIHBhcmFtZXRlcnMuIFRoZSBcImZyb21cIiBpbmRleCBhcHBlYXJzIHRvIGJlIGNvbWluZyBmcm9tIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAuIEl0IGxvb2tzIGxpa2UgaXQncyBhIGJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24uXG5cblNvLCB0aGUgY29kZSBub3cgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBhIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHN1aXRhYmxlIHN0YXJ0aW5nIGluZGV4IGZvciBhZGRpbmcgYSBtZW1vcnkgcmFuZ2UuIEkgY2FuIHNlZSB0aGF0IGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCBjYWxjdWxhdGVzIGFuIGluZGV4IHRoYXQgaXMgdGhlIGZpcnN0IHJlZ2lvbiB3aGVyZSB0aGUgcG90ZW50aWFsIG92ZXJsYXAgYmFzZSBhZGRyZXNzIHN0YXJ0cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbiEgSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCAqYWxsKiBleGlzdGluZyBtZW1ibG9jayByZWdpb25zLCB0aGUgY29kZSBub3cgdXNlcyBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAgdG8gbmFycm93IHRoZSBzZWFyY2gsIGVmZmVjdGl2ZWx5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBtZW1ibG9jayBsaXN0cy4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIGFkZGluZyBvciBpc29sYXRpbmcgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBkdXJpbmcgZWFybHkgYm9vdCBzdGFnZXMgb3IgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy5cblxuT2theSwgbGV0IG1lIGNvbmZpcm0gbXkgaHlwb3RoZXNpcyBieSByZWFkaW5nIGZ1cnRoZXIgaW50byB0aGUgc291cmNlLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZTogaG93IGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCBpcyB1c2VkLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIG51YW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NTcuMDQ1MTgzNDMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzMDpcXHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbmV3IHJlZ2lvblxcbiA2MzE6XFx0ICogQG5pZDogbmlkIG9mIHRoZSBuZXcgcmVnaW9uXFxuIDYzMjpcXHQgKiBAZmxhZ3M6IGZsYWdzIG9mIHRoZSBuZXcgcmVnaW9uXFxuIDYzMzpcXHQgKlxcbiA2MzQ6XFx0ICogQWRkIG5ldyBtZW1ibG9jayByZWdpb24gW0BiYXNlLCBAYmFzZSArIEBzaXplKSBpbnRvIEB0eXBlLiAgVGhlIG5ldyByZWdpb25cXG4gNjM1OlxcdCAqIGlzIGFsbG93ZWQgdG8gb3ZlcmxhcCB3aXRoIGV4aXN0aW5nIG9uZXMgLSBvdmVybGFwcyBkb24ndCBhZmZlY3QgYWxyZWFkeVxcbiA2MzY6XFx0ICogZXhpc3RpbmcgcmVnaW9ucy4gIEB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbWluaW1hbCAoYWxsIG5laWdoYm91cmluZ1xcbiA2Mzc6XFx0ICogY29tcGF0aWJsZSByZWdpb25zIGFyZSBtZXJnZWQpIGFmdGVyIHRoZSBhZGRpdGlvbi5cXG4gNjM4OlxcdCAqXFxuIDYzOTpcXHQgKiBSZXR1cm46XFxuIDY0MDpcXHQgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiA2NDE6XFx0ICovXFxuIDY0MjpcXHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxuIDY0MzpcXHRcXHRcXHRcXHRcXHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxcbiA2NDQ6XFx0XFx0XFx0XFx0XFx0aW50IG5pZCwgZW51bSBtZW1ibG9ja19mbGFncyBmbGFncylcXG4gNjQ1OlxcdHtcXG4gNjQ2OlxcdFxcdGJvb2wgaW5zZXJ0ID0gZmFsc2U7XFxuIDY0NzpcXHRcXHRwaHlzX2FkZHJfdCBvYmFzZSA9IGJhc2U7XFxuIDY0ODpcXHRcXHRwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICsgbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXFx1MDAyNnNpemUpO1xcbiA2NDk6XFx0XFx0aW50IGlkeCwgbnJfbmV3LCBzdGFydF9yZ24gPSAtMSwgZW5kX3JnbjtcXG4gNjUwOlxcdFxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbjtcXG4gNjUxOlxcdFxcbiA2NTI6XFx0XFx0aWYgKCFzaXplKVxcbiA2NTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdC8qIHNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgYXJyYXkgKi9cXG4gNjU2OlxcdFxcdGlmICh0eXBlLVxcdTAwM2VyZWdpb25zWzBdLnNpemUgPT0gMCkge1xcbiA2NTc6XFx0XFx0XFx0V0FSTl9PTih0eXBlLVxcdTAwM2VjbnQgIT0gMCB8fCB0eXBlLVxcdTAwM2V0b3RhbF9zaXplKTtcXG4gNjU4OlxcdFxcdFxcdHR5cGUtXFx1MDAzZXJlZ2lvbnNbMF0uYmFzZSA9IGJhc2U7XFxuIDY1OTpcXHRcXHRcXHR0eXBlLVxcdTAwM2VyZWdpb25zWzBdLnNpemUgPSBzaXplO1xcbiA2NjA6XFx0XFx0XFx0dHlwZS1cXHUwMDNlcmVnaW9uc1swXS5mbGFncyA9IGZsYWdzO1xcbiA2NjE6XFx0XFx0XFx0bWVtYmxvY2tfc2V0X3JlZ2lvbl9ub2RlKFxcdTAwMjZ0eXBlLVxcdTAwM2VyZWdpb25zWzBdLCBuaWQpO1xcbiA2NjI6XFx0XFx0XFx0dHlwZS1cXHUwMDNldG90YWxfc2l6ZSA9IHNpemU7XFxuIDY2MzpcXHRcXHRcXHR0eXBlLVxcdTAwM2VjbnQgPSAxO1xcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2NTpcXHRcXHR9XFxuIDY2NjpcXHRcXG4gNjY3OlxcdFxcdC8qXFxuIDY2ODpcXHRcXHQgKiBUaGUgd29yc3QgY2FzZSBpcyB3aGVuIG5ldyByYW5nZSBvdmVybGFwcyBhbGwgZXhpc3RpbmcgcmVnaW9ucyxcXG4gNjY5OlxcdFxcdCAqIHRoZW4gd2UnbGwgbmVlZCB0eXBlLVxcdTAwM2VjbnQgKyAxIGVtcHR5IHJlZ2lvbnMgaW4gQHR5cGUuIFNvIGlmXFxuIDY3MDpcXHRcXHQgKiB0eXBlLVxcdTAwM2VjbnQgKiAyICsgMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdHlwZS1cXHUwMDNlbWF4LCB3ZSBrbm93XFxuIDY3MTpcXHRcXHQgKiB0aGF0IHRoZXJlIGlzIGVub3VnaCBlbXB0eSByZWdpb25zIGluIEB0eXBlLCBhbmQgd2UgY2FuIGluc2VydFxcbiA2NzI6XFx0XFx0ICogcmVnaW9ucyBkaXJlY3RseS5cXG4gNjczOlxcdFxcdCAqL1xcbiA2NzQ6XFx0XFx0aWYgKHR5cGUtXFx1MDAzZWNudCAqIDIgKyAxIFxcdTAwM2M9IHR5cGUtXFx1MDAzZW1heClcXG4gNjc1OlxcdFxcdFxcdGluc2VydCA9IHRydWU7XFxuIDY3NjpcXHRcXG4gNjc3OlxcdHJlcGVhdDpcXG4gNjc4OlxcdFxcdC8qXFxuIDY3OTpcXHRcXHQgKiBUaGUgZm9sbG93aW5nIGlzIGV4ZWN1dGVkIHR3aWNlLiAgT25jZSB3aXRoICVmYWxzZSBAaW5zZXJ0IGFuZFxcbiA2ODA6XFx0XFx0ICogdGhlbiB3aXRoICV0cnVlLiAgVGhlIGZpcnN0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgbmVlZGVkXFxuIDY4MTpcXHRcXHQgKiB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGFyZWEuICBUaGUgc2Vjb25kIGFjdHVhbGx5IGluc2VydHMgdGhlbS5cXG4gNjgyOlxcdFxcdCAqL1xcbiA2ODM6XFx0XFx0YmFzZSA9IG9iYXNlO1xcbiA2ODQ6XFx0XFx0bnJfbmV3ID0gMDtcXG4gNjg1OlxcdFxcbiA2ODY6XFx0XFx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLFxcbiA2ODc6XFx0XFx0XFx0XFx0XFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcXG4gNjg4OlxcdFxcdFxcdHBoeXNfYWRkcl90IHJiYXNlID0gcmduLVxcdTAwM2ViYXNlO1xcbiA2ODk6XFx0XFx0XFx0cGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICsgcmduLVxcdTAwM2VzaXplO1xcbiA2OTA6XFx0XFxuIDY5MTpcXHRcXHRcXHRpZiAocmJhc2UgXFx1MDAzZT0gZW5kKVxcbiA2OTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY5MzpcXHRcXHRcXHRpZiAocmVuZCBcXHUwMDNjPSBiYXNlKVxcbiA2OTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDY5NTpcXHRcXHRcXHQvKlxcbiA2OTY6XFx0XFx0XFx0ICogQHJnbiBvdmVybGFwcy4gIElmIGl0IHNlcGFyYXRlcyB0aGUgbG93ZXIgcGFydCBvZiBuZXdcXG4gNjk3OlxcdFxcdFxcdCAqIGFyZWEsIGluc2VydCB0aGF0IHBvcnRpb24uXFxuIDY5ODpcXHRcXHRcXHQgKi9cXG4gNjk5OlxcdFxcdFxcdGlmIChyYmFzZSBcXHUwMDNlIGJhc2UpIHtcXG4gNzAwOlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbiA3MDE6XFx0XFx0XFx0XFx0V0FSTl9PTihuaWQgIT0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJnbikpO1xcbiA3MDI6XFx0I2VuZGlmXFxuIDcwMzpcXHRcXHRcXHRcXHRXQVJOX09OKGZsYWdzICE9IE1FTUJMT0NLX05PTkUgXFx1MDAyNlxcdTAwMjYgZmxhZ3MgIT0gcmduLVxcdTAwM2VmbGFncyk7XFxuIDcwNDpcXHRcXHRcXHRcXHRucl9uZXcrKztcXG4gNzA1OlxcdFxcdFxcdFxcdGlmIChpbnNlcnQpIHtcXG4gNzA2OlxcdFxcdFxcdFxcdFxcdGlmIChzdGFydF9yZ24gPT0gLTEpXFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHRzdGFydF9yZ24gPSBpZHg7XFxuIDcwODpcXHRcXHRcXHRcXHRcXHRlbmRfcmduID0gaWR4ICsgMTtcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdG1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4KyssIGJhc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjU3LjA0NTM5Mzk0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU3OTYwNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYC4gVGhhdCBmdW5jdGlvbiBoYXMgdGhlIHBvdGVudGlhbCB0byBiZSBhIGNydWNpYWwgY29tcG9uZW50IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgYW5kIGl0J3Mgd2hlcmUgSSBzaG91bGQgYmUgZGlyZWN0aW5nIG15IGltbWVkaWF0ZSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpdHMgaW5wdXRzLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgcm9sZSBpcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIHdoYXRldmVyIHByb2JsZW0gSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBJIGNhbiBnbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUzOjU5LjEwMzM1NjY3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtYmxvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0ICogZmlyc3QgcmVnaW9uIGFmdGVyIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQGVuZF9yZ24uXFxuIDg0MTpcXHQgKlxcbiA4NDI6XFx0ICogUmV0dXJuOlxcbiA4NDM6XFx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cXG4gODQ0OlxcdCAqL1xcbiA4NDU6XFx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gODQ2OlxcdFxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuIDg0NzpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgKnN0YXJ0X3JnbiwgaW50ICplbmRfcmduKVxcbiA4NDg6XFx0e1xcbiA4NDk6XFx0XFx0cGh5c19hZGRyX3QgZW5kID0gYmFzZSArIG1lbWJsb2NrX2NhcF9zaXplKGJhc2UsIFxcdTAwMjZzaXplKTtcXG4gODUwOlxcdFxcdGludCBpZHg7XFxuIDg1MTpcXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ247XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdCpzdGFydF9yZ24gPSAqZW5kX3JnbiA9IDA7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdGlmICghc2l6ZSlcXG4gODU2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHQvKiB3ZSdsbCBjcmVhdGUgYXQgbW9zdCB0d28gbW9yZSByZWdpb25zICovXFxuIDg1OTpcXHRcXHR3aGlsZSAodHlwZS1cXHUwMDNlY250ICsgMiBcXHUwMDNlIHR5cGUtXFx1MDAzZW1heClcXG4gODYwOlxcdFxcdFxcdGlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgYmFzZSwgc2l6ZSkgXFx1MDAzYyAwKVxcbiA4NjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4gODY0OlxcdFxcdFxcdFxcdFxcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XFxuIDg2NTpcXHRcXHRcXHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cXHUwMDNlYmFzZTtcXG4gODY2OlxcdFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gODY3OlxcdFxcbiA4Njg6XFx0XFx0XFx0aWYgKHJiYXNlIFxcdTAwM2U9IGVuZClcXG4gODY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NzA6XFx0XFx0XFx0aWYgKHJlbmQgXFx1MDAzYz0gYmFzZSlcXG4gODcxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRcXHRpZiAocmJhc2UgXFx1MDAzYyBiYXNlKSB7XFxuIDg3NDpcXHRcXHRcXHRcXHQvKlxcbiA4NzU6XFx0XFx0XFx0XFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYmVsb3cuICBTcGxpdCBhbmQgY29udGludWVcXG4gODc2OlxcdFxcdFxcdFxcdCAqIHRvIHByb2Nlc3MgdGhlIG5leHQgcmVnaW9uIC0gdGhlIG5ldyB0b3AgaGFsZi5cXG4gODc3OlxcdFxcdFxcdFxcdCAqL1xcbiA4Nzg6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gYmFzZTtcXG4gODc5OlxcdFxcdFxcdFxcdHJnbi1cXHUwMDNlc2l6ZSAtPSBiYXNlIC0gcmJhc2U7XFxuIDg4MDpcXHRcXHRcXHRcXHR0eXBlLVxcdTAwM2V0b3RhbF9zaXplIC09IGJhc2UgLSByYmFzZTtcXG4gODgxOlxcdFxcdFxcdFxcdG1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4LCByYmFzZSwgYmFzZSAtIHJiYXNlLFxcbiA4ODI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShyZ24pLFxcbiA4ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJnbi1cXHUwMDNlZmxhZ3MpO1xcbiA4ODQ6XFx0XFx0XFx0fSBlbHNlIGlmIChyZW5kIFxcdTAwM2UgZW5kKSB7XFxuIDg4NTpcXHRcXHRcXHRcXHQvKlxcbiA4ODY6XFx0XFx0XFx0XFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYWJvdmUuICBTcGxpdCBhbmQgcmVkbyB0aGVcXG4gODg3OlxcdFxcdFxcdFxcdCAqIGN1cnJlbnQgcmVnaW9uIC0gdGhlIG5ldyBib3R0b20gaGFsZi5cXG4gODg4OlxcdFxcdFxcdFxcdCAqL1xcbiA4ODk6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gZW5kO1xcbiA4OTA6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2VzaXplIC09IGVuZCAtIHJiYXNlO1xcbiA4OTE6XFx0XFx0XFx0XFx0dHlwZS1cXHUwMDNldG90YWxfc2l6ZSAtPSBlbmQgLSByYmFzZTtcXG4gODkyOlxcdFxcdFxcdFxcdG1lbWJsb2NrX2luc2VydF9yZWdpb24odHlwZSwgaWR4LS0sIHJiYXNlLCBlbmQgLSByYmFzZSxcXG4gODkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmduKSxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZ24tXFx1MDAzZWZsYWdzKTtcXG4gODk1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg5NjpcXHRcXHRcXHRcXHQvKiBAcmduIGlzIGZ1bGx5IGNvbnRhaW5lZCwgcmVjb3JkIGl0ICovXFxuIDg5NzpcXHRcXHRcXHRcXHRpZiAoISplbmRfcmduKVxcbiA4OTg6XFx0XFx0XFx0XFx0XFx0KnN0YXJ0X3JnbiA9IGlkeDtcXG4gODk5OlxcdFxcdFxcdFxcdCplbmRfcmduID0gaWR4ICsgMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTM6NTkuMTAzNTA0MzMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyOTYzOTc3MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVHJpYWdlOiBBbmFseXppbmcgTW9kaWZpY2F0aW9ucyB0byBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIGhhdmUgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBjb3JlIHRyaWFnZSBxdWVzdGlvbnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeSBsYWlkIG91dCBpbiBTZWN0aW9uIDEsIDIsIGFuZCAzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZHluYW1pY2FsbHkgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gU2ltcGx5IHB1dCwgY2FuIHN5emthbGxlciwgb3IgYW55IGZ1enppbmcgc3RyYXRlZ3ksIGFjdHVhbGx5ICpoaXQqIHRoaXMgY29kZT9cblxuTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgY2FsbCBwYXRocyBvZiBgbWVtYmxvY2tfYWRkX3JhbmdlYCBhbmQgYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgLiAgSSBzZWUgdGhhdCB0aGV5J3JlIGJvdGggZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsZWQgZnJvbSBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgdmlhIGBtZW1ibG9ja19hZGRfbm9kZWAgYW5kIGBtZW1ibG9ja19yZW1vdmVgLiAgU3BlY2lmaWNhbGx5LCBgX19hZGRfbWVtb3J5X3Jlc291cmNlKClgIHdoaWNoIHRoZW4gY2FsbHMgYG1lbWJsb2NrX2FkZF9ub2RlYCBhbmQgYG1lbWJsb2NrX3JlbW92ZWAgaXMgY2FsbGVkIGZyb20gbWVtb3J5IGhvdHBsdWcgcm91dGluZXMgbGlrZSB2aXJ0aW8tbWVtLCBzeXNmcyBtZW1vcnkgcHJvYmUsIERBWC9kZXZfZGF4IGttZW0sIGFuZCBtZW1vcnkgb2ZmbGluZSBvcGVyYXRpb25zLlxuXG5DcnVjaWFsbHksIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZGl0aW9ucyB0aGVzZSBwYXRocyBhcmUgdGFrZW4uIGBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLYCBzZWVtcyByZWxldmFudCwgYXMgaXQgYWZmZWN0cyB0aGUgdXNlIG9mIGBtZW1ibG9ja19hZGRfbm9kZWAgaW4gYF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpYC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0LCB3aGVuIGBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBlbmFibGVkLCBvbiBhcmNoaXRlY3R1cmVzIGxpa2UgSU5URUxfVERYX0hPU1Qgb3IgYXJtNjQsIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2lsbCBpbmRlZWQgbGVhZCB0byB0aGUgZXhlY3V0aW9uIG9mIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuICBJIGNhbiBzZWUgdGhhdCB3aGVuIG1lbW9yeSBpcyBob3RwbHVnZ2VkIHZpYSB2aXJ0aW9fbWVtLCBzeXNmcywgb3Iga21lbSwgYF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpYCBpcyBjYWxsZWQsIGFuZCwgaWYgYENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tgIGlzIHNldCwgY2FsbHMgYG1lbWJsb2NrX2FkZF9ub2RlKClgIGFuZCBgbWVtYmxvY2tfcmVtb3ZlKClgIHdoaWNoIGluIHR1cm4sIGNhbGwgb3VyIG1vZGlmaWVkIGZ1bmN0aW9ucy5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBiYXNlZCBvbiBjb25maWcgb3B0aW9ucy4gYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLYCwgYENPTkZJR19JTlRFTF9URFhfSE9TVGAsIGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgYXJlIGFsbCBwcmltZSBzdXNwZWN0cyBmb3IgY3JlYXRpbmcgYSB2aWFibGUgZnV6emluZyB0YXJnZXQuXG5cblRoZSBtb2RpZmljYXRpb25zIHRoZW1zZWx2ZXMgaW52b2x2ZSByZXBsYWNpbmcgYSBsaW5lYXIgc2VhcmNoIChgZm9yX2VhY2hfbWVtYmxvY2tfdHlwZWApIHdpdGggYSBiaW5hcnkgc2VhcmNoIChgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGApIHRvIGZpbmQgdGhlIHN0YXJ0aW5nIGluZGV4IHdpdGhpbiB0aGUgYG1lbWJsb2NrX3R5cGVgLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwgYWxnb3JpdGhtaWMgY2hhbmdlIHdpdGhpbiBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBhIGNvcmUgc3Vic3lzdGVtIGluIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vbWVtYmxvY2suY2ApIGhhcyBzZWVuIGEgY2hhbmdlIHRvIGl0cyBmdW5kYW1lbnRhbCBsb2dpYy5cblxuTGV0J3Mgbm93IGFuYWx5emUgdGhlIGNvZGUgdGhhdCBoYXMgY2hhbmdlZC4gYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWdpb24gd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIG1lbW9yeSB0aGF0IHdlJ3JlIGluc2VydGluZyBvciByZW1vdmluZyBkb2Vzbid0IG92ZXJsYXAuIExvb2tpbmcgY2xvc2VseSBhdCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAsIEkgY2FuIHNlZSB0aGF0IHRoZSBiaW5hcnkgc2VhcmNoIHJlc3VsdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbkluIGBtZW1ibG9ja19hZGRfcmFuZ2VgLCB0aGUgYmluYXJ5IHNlYXJjaCBpcyBwZXJmb3JtZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbWAgbG9vcC4gVGhlIGtleSBpcyB0aGF0IGJhc2UgZG9lc24ndCBjaGFuZ2UgZHVyaW5nIHRoZSBsb29wIChzbyB0aGUgc2VhcmNoIG9ubHkgaGFzIHRvIGhhcHBlbiBvbmNlKSwgYW5kIHRoZSBsb29wIG9ubHkgcHJvY2Vzc2VzIHRob3NlIGVudHJpZXMgd2hpY2ggY291bGQgYmUgYWZmZWN0ZWQgYnkgdGhlIG1lbWJsb2NrIG9wZXJhdGlvbi5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB2aWEgcnVudGltZSBtZW1vcnkgaG90cGx1ZyBwYXRocywgYW5kIHRoZSBhbGdvcml0aG1pYyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3NDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MTIuMDY3NDg0NzM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3MDY3OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RQTFVHfGNvbmZpZyBBUkNIX0tFRVBfTUVNQkxPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NDgyPWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxcbi0tXFxubW0vS2NvbmZpZy00ODctIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXFxubW0vS2NvbmZpZzo0ODg6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL0tjb25maWctNDg5LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9NTA1PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MDgtIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbm1tL0tjb25maWc6NTA5Om1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUxMC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MTIuMTY4MjAwODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5MzUyMDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYElOVEVMX1REWF9IT1NUYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyBgYXJjaC94ODYvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gdGhhdCBURFggKFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMpIGlzIGFuIHg4Ni1zcGVjaWZpYyB0ZWNobm9sb2d5IGZyb20gSW50ZWwuIEkga25vdyB0aGlzIGZyb20gd29ya2luZyB3aXRoIHNpbWlsYXIgaGFyZHdhcmUgc2VjdXJpdHkgZmVhdHVyZXMgaW4gdGhlIHBhc3QuIEl0J3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgbmVzdGVkIHNvbWV3aGVyZSBpbiB0aGUgeDg2LXJlbGF0ZWQgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IEkgZmluZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGJlIHJlbGF0ZWQsIGFuZCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MTQuMDYxNzI1Mzg3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTY4MDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTg0Nj1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjQtXFxuYXJjaC94ODYvS2NvbmZpZzoxODY1OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L0tjb25maWctMTg2Ni1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjE0LjE0NzQxMzk0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDA5NjI3NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIGBJTlRFTF9URFhfSE9TVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSBhbmQgcGFyc2UgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBJTlRFTF9URFhfSE9TVGAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgYW5kIHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMuIEZpcnN0LCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoaXMgb25lIHJlbGllcyBvbi4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0ICptdXN0KiBiZSBkZWZpbmVkIG9yIGVuYWJsZWQgKmJlZm9yZSogSSBjYW4gZXZlbiBjb25zaWRlciBjb25maWd1cmluZyBURFggaG9zdCBzdXBwb3J0LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGNvcnJlY3QuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSBhcmUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBDUFUgZmVhdHVyZSBmbGFncyB0aGF0IG11c3QgYmUgcHJlc2VudC4gQW5kLCBnaXZlbiB0aGF0IHRoaXMgcmVsYXRlcyB0byBJbnRlbCdzIFREWCwgSSdtIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIHByb2Nlc3NvciBvciBwbGF0Zm9ybSBzZXJpZXMgbWlnaHQgYmUgbmVlZGVkLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMuLi5JJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGRlcGVuZGVuY3kgb24gdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgd2hlbiBlbmFibGluZyB0aGlzIHN1cHBvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MjMuMTU3MDQ0NTY5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjU6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NjpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NzpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4NzA6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MTpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzM6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3NDpcXHRcXHRoZWxwXFxuMTg3NTpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzY6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc3OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODgwOlxcdFxcbjE4ODE6XFx0Y29uZmlnIEVGSVxcbjE4ODI6XFx0XFx0Ym9vbCBcXFwiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XFxcIlxcbjE4ODM6XFx0XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuMTg4NDpcXHRcXHRzZWxlY3QgVUNTMl9TVFJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6MjMuMTU3MTk1ODQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMzA1NjAyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQVJDSF9LRUVQX01FTUJMT0NLIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyBiZWluZyBzZWxlY3RlZCBvciBlbmFibGVkIGJleW9uZCB3aGF0IHdlJ3ZlIGFscmVhZHkgbG9va2VkIGF0LiBNeSBpbml0aWFsIGdyZXAgd2FzIGhlbHBmdWwsIGJ1dCB3ZSBoYXZlIHRvIGJlIHRob3JvdWdoLiBJIHNlZSB0aGF0IGBJTlRFTF9URFhfSE9TVGAgaW4gYGFyY2gveDg2L0tjb25maWdgIHNlbGVjdHMgaXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSBhbHNvIHNlZWluZyBpdCB0aWVkIHRvIHRoaW5ncyBsaWtlIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBWSVJUSU9fTUVNYC4gVGhlIGhvdHBsdWcgYW5kIGhvdHJlbW92ZSBhc3BlY3RzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGxpa2VseSB1c2UtY2FzZS5cblxuTm93LCBgVklSVElPX01FTWAgd2FycmFudHMgY2xvc2VyIGF0dGVudGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB2aXJ0aW8gZGV2aWNlcywgdGhlcmUgY291bGQgYmUgaW50ZXJlc3RpbmcgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gTGV0IG1lIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlIGFuZCBjb25maXJtIHRoYXQgaXQncyBhY3RpbmcgYXMgYSBzb3VyY2Ugb2YgZW5hYmxlbWVudCBvciBhIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IHNpZGUtZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozNS40NjI4MDA1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTA0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRJT19NRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0aW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWc9MTEyPWNvbmZpZyBWSVJUSU9fQkFMTE9PTlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xMjItXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzoxMjM6Y29uZmlnIFZJUlRJT19NRU1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyNC1cXHR0cmlzdGF0ZSBcXFwiVmlydGlvIG1lbSBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjM1LjUwOTkxNjkxOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjUwMDIzMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlZpcnRpbyBLY29uZmlnIEluc3BlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdmlydGlvL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMTIzLiBUaGVyZSdzIHByb2JhYmx5IHNvbWV0aGluZyBzcGVjaWZpYyBJJ20gbG9va2luZyBmb3IgdGhlcmUsIGVpdGhlciByZWxhdGVkIHRvIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgY29uZGl0aW9uYWwuIExldCdzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIHZpcnRpbyBkZXZpY2UgSSdtIHdvcmtpbmcgd2l0aCBvciBzb21ldGhpbmcgbW9yZSBnbG9iYWwgd2l0aGluIHRoZSB2aXJ0aW8gZnJhbWV3b3JrLiBJIHN1c3BlY3QgdGhlIGxpbmUgbnVtYmVyIGlzIGltcG9ydGFudC4gVGltZSB0byBnZXQgbXkgZXllcyBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozNy4xNTk5NDM2ODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0aW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFxuIDEyMTpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIFZJUlRJT19NRU1cXG4gMTI0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gbWVtIGRyaXZlclxcXCJcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcXG4gMTI2OlxcdFxcdGRlcGVuZHMgb24gVklSVElPXFxuIDEyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuIDEyODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4gMTI5OlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuIDEzMDpcXHRcXHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxuIDEzMTpcXHRcXHRoZWxwXFxuIDEzMjpcXHRcXHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxcbiAxMzM6XFx0XFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdCBUaGlzIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgeDg2LTY0LCBhcm02NCwgcmlzY3YgYW5kIHMzOTAuXFxuIDEzNjpcXHRcXHQgQWx0aG91Z2ggaXQgc2hvdWxkIGNvbXBpbGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGF0IGltcGxlbWVudFxcbiAxMzc6XFx0XFx0IG1lbW9yeSBob3QodW4pcGx1ZywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFuZC9vciBjb21tb25cXG4gMTM4OlxcdFxcdCBjb2RlIGNoYW5nZXMgbWF5IGJlIHJlcXVpcmVkIGZvciB2aXJ0aW8tbWVtLCBrZHVtcCBhbmQga2V4ZWMgdG9cXG4gMTM5OlxcdFxcdCB3b3JrIGFzIGV4cGVjdGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozNy4xNjAwMzQxNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNjk5NjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipJbnZlc3RpZ2F0aW5nIGBERVZfREFYX0tNRU1gKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIERBWCBhbmQgS01FTS4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBkZXBlbmRlbmNpZXMgZm9yIGEgZmVhdHVyZSBsaWtlIGBERVZfREFYX0tNRU1gLiBUaW1lIHRvIG5hdmlnYXRlIHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1NDozOS40NzcwMzQ0NTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kYXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHRkZXBlbmRzIG9uIERFVl9EQVggXFx1MDAyNlxcdTAwMjYgRlNfREFYXFxuICA3MTpcXHRcXHRkZWZhdWx0IERFVl9EQVhcXG4gIDcyOlxcdFxcbiAgNzM6XFx0Y29uZmlnIERFVl9EQVhfS01FTVxcbiAgNzQ6XFx0XFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG4gIDc1OlxcdFxcdGRlZmF1bHQgREVWX0RBWFxcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBERVZfREFYXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBTdXBwb3J0IGFjY2VzcyB0byBwZXJzaXN0ZW50LCBvciBvdGhlciBwZXJmb3JtYW5jZVxcbiAgODA6XFx0XFx0ICBkaWZmZXJlbnRpYXRlZCBtZW1vcnkgYXMgaWYgaXQgd2VyZSBTeXN0ZW0gUkFNLiBUaGlzIGFsbG93c1xcbiAgODE6XFx0XFx0ICBlYXNpZXIgdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGJ5IHVubW9kaWZpZWQgYXBwbGljYXRpb25zLCBvclxcbiAgODI6XFx0XFx0ICBhZGRzIGNvcmUga2VybmVsIG1lbW9yeSBzZXJ2aWNlcyB0byBoZXRlcm9nZW5lb3VzIG1lbW9yeSB0eXBlc1xcbiAgODM6XFx0XFx0ICAoSE1FTSkgbWFya2VkIFxcXCJyZXNlcnZlZFxcXCIgYnkgcGxhdGZvcm0gZmlybXdhcmUuXFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdCAgVG8gdXNlIHRoaXMgZmVhdHVyZSwgYSBEQVggZGV2aWNlIG11c3QgYmUgdW5ib3VuZCBmcm9tIHRoZVxcbiAgODY6XFx0XFx0ICBkZXZpY2VfZGF4IGRyaXZlciBhbmQgYm91bmQgdG8gdGhpcyBrbWVtIGRyaXZlciBvbiBlYWNoIGJvb3QuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbiAgODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjM5LjQ3NzEyMTUxNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODY3ODkxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXRlcm1pbmF0aW9uIGZvciBNZW1ibG9jayBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgRm9jdXNTeW1ib2xzLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgcGF0Y2ggYW5kIGlkZW50aWZ5aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFkZGVkIG9yIGNoYW5nZWQgaW4gYG1tL21lbWJsb2NrLmNgLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgIChhIG5ldyBzdGF0aWMgaGVscGVyKSwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYG1lbWJsb2NrX2FkZF9yYW5nZWAgYW5kIGBtZW1ibG9ja19pc29sYXRlX3JhbmdlYCwgYWxzbyBzdGF0aWMgaGVscGVycy5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBndWlkZWxpbmVzIHJldmVhbHMgdGhhdCB3aGlsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSB0cmlja3ksIHN0YXRpYyBmdW5jdGlvbnMgKndpdGhpbiAuYyBmaWxlcyogZG8gZ2V0IGNvbXBpbGVkIGludG8gc3ltYm9scyBpbiBgdm1saW51eGAsIHVubGVzcyBjb21wbGV0ZWx5IGlubGluZWQuIFRoYXQncyBnb29kLiBCdXQgbm9uLXN0YXRpYyBjYWxsZXJzIGFuZCBlbnRyeXBvaW50cyBhcmUgYWxzbyB2YWxpZCBhbmQgcG90ZW50aWFsbHkgbW9yZSB1c2VmdWwgYXMgRm9jdXNTeW1ib2xzLCBzbyBJJ2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS5cblxuTGV0J3MgdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG1lbWJsb2NrX2FkZF9yYW5nZWAgaXMgY2FsbGVkIGJ5IGBtZW1ibG9ja19hZGRgLCBgbWVtYmxvY2tfYWRkX25vZGVgLCBgX19tZW1ibG9ja19yZXNlcnZlYCwgYW5kIGBtZW1ibG9ja19waHlzbWVtX2FkZGAuIEFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAgaXMgY2FsbGVkIGJ5IGBtZW1ibG9ja19yZW1vdmVfcmFuZ2VgICh3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBtZW1ibG9ja19yZW1vdmVgIGFuZCBgbWVtYmxvY2tfcGh5c19mcmVlYCksIGBtZW1ibG9ja19zZXRjbHJfZmxhZ2AsIGBtZW1ibG9ja19zZXRfbm9kZWAsIGFuZCBgbWVtYmxvY2tfY2FwX21lbW9yeV9yYW5nZWAuIE9rYXksIGJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24sIGFuZCBrZWVwaW5nIHRoZSBndWlkYW5jZSBmcm9tIFNlY3Rpb24gNCBpbiBtaW5kLCB0aGVzZSBzeW1ib2xzIGxvb2sgcHJvbWlzaW5nOlxuXG4qICAgYG1lbWJsb2NrX2JzZWFyY2hfc3RhcnRgXG4qICAgYG1lbWJsb2NrX2FkZF9yYW5nZWBcbiogICBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWBcbiogICBgbWVtYmxvY2tfYWRkX25vZGVgXG4qICAgYG1lbWJsb2NrX3JlbW92ZV9yYW5nZWBcbiogICBgbWVtYmxvY2tfcmVtb3ZlYFxuKiAgIGBtZW1ibG9ja19waHlzX2ZyZWVgXG5cbkFscmlnaHQsIGxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdWJpcXVpdG91cyBob3QtcGF0aHMgdGhhdCBjb3VsZCBkaWx1dGUgdGhlIGZ1enppbmcuIE5vLCBtZW1ibG9jayBvcGVyYXRpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIHRvIGJvb3QgYW5kIG1lbW9yeSBob3RwbHVnL2hvdHJlbW92ZS4gVGhleSBhcmUgbm90IGNhbGxlZCBvbiBldmVyeSBwYWdlIGZhdWx0LCBtYWxsb2MvZnJlZSwgb3IgcmVhZC93cml0ZSBzeXNjYWxsLiBTbywgd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBmb3IgdGhlIHJlcXVpcmVkIGNvbmZpZ3MsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nOiBgSU5URUxfVERYX0hPU1RgICh3aGljaCBzZWxlY3RzIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9uIHg4Nl82NCksIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBWSVJUSU9fTUVNYC5cblxuT2theSwgbGV0J3MgcXVpY2tseSBnbyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gICoqQ29yZSB0cmlhZ2UgcGhpbG9zb3BoeToqKiBNZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1ibG9jay5jYCksIHJlcGxhY2VzIGxpbmVhciBzZWFyY2gsIGV4ZWN1dGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGhvdHBsdWcvcmVtb3ZlIHdoZW4gbWVtYmxvY2sgaXMgcmV0YWluZWQsIHNvIHdvcnRoIGZ1enppbmcuIENoZWNrIVxuMi4gICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBsaXN0IGFib3ZlLiBDaGVjayFcbjMuICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkIGxpc3QgYWJvdmUuIENoZWNrIVxuXG5BbmQgZmluYWxseSwgYSBzYW5pdHkgY2hlY2s6IGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gR290IGl0LiBTbywgdGhhdCdzIGV2ZXJ5dGhpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTU5LCJPdXRwdXRUb2tlbnMiOjIyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjQ2LjM0NTAxNTM0NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTg5MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIlZJUlRJT19NRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1ibG9ja19ic2VhcmNoX3N0YXJ0XCIsXG4gICAgXCJtZW1ibG9ja19hZGRfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2FkZF9ub2RlXCIsXG4gICAgXCJtZW1ibG9ja19yZW1vdmVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX3JlbW92ZVwiLFxuICAgIFwibWVtYmxvY2tfcGh5c19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vbWVtYmxvY2suYyksIGludHJvZHVjaW5nIGJpbmFyeSBzZWFyY2ggKG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQpIHRvIGZpbmQgY2FuZGlkYXRlIHJlZ2lvbnMgaW4gbWVtYmxvY2tfYWRkX3JhbmdlIGFuZCBtZW1ibG9ja19pc29sYXRlX3JhbmdlLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVnaW9uIHNwbGl0dGluZy9tZXJnaW5nIGFsZ29yaXRobXMgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgd2hlbiBtZW1ibG9jayBtZXRhZGF0YSBpcyByZXRhaW5lZCAoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgcmVnaW9uIG1hbmlwdWxhdGlvbiBsb2dpYyBhbmQgYm91bmRhcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIlZJUlRJT19NRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1ibG9ja19ic2VhcmNoX3N0YXJ0XCIsXG4gICAgXCJtZW1ibG9ja19hZGRfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX2FkZF9ub2RlXCIsXG4gICAgXCJtZW1ibG9ja19yZW1vdmVfcmFuZ2VcIixcbiAgICBcIm1lbWJsb2NrX3JlbW92ZVwiLFxuICAgIFwibWVtYmxvY2tfcGh5c19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vbWVtYmxvY2suYyksIGludHJvZHVjaW5nIGJpbmFyeSBzZWFyY2ggKG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQpIHRvIGZpbmQgY2FuZGlkYXRlIHJlZ2lvbnMgaW4gbWVtYmxvY2tfYWRkX3JhbmdlIGFuZCBtZW1ibG9ja19pc29sYXRlX3JhbmdlLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVnaW9uIHNwbGl0dGluZy9tZXJnaW5nIGFsZ29yaXRobXMgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgd2hlbiBtZW1ibG9jayBtZXRhZGF0YSBpcyByZXRhaW5lZCAoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgcmVnaW9uIG1hbmlwdWxhdGlvbiBsb2dpYyBhbmQgYm91bmRhcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6NDYuNDE3NjExODExWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI0Nzc4MjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjQ2LjQxODEwODc5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTMyNDcyODA3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyByZWdpb24gbG9va3VwIGluIGVhcmx5IGJvb3QgbWVtYmxvY2sgbWFuYWdlbWVudCAobW0vbWVtYmxvY2suYykgYnkgaW50cm9kdWNpbmcgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCgpIGFuZCBmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oKS4gVGhlIGNoYW5nZXMgb3BlcmF0ZSBleGNsdXNpdmVseSBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgbWVtYmxvY2sgcmVnaW9ucyBhbmQgaW50ZXJuYWwgaW5kaWNlcy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBsb2dpYyAoc3VjaCBhcyBpbmRleCBjYWxjdWxhdGlvbiBlcnJvcnMgb3IgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYXNzZXJ0aW9uL2JvdW5kcyBjaGVja2luZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIHBhZGRpbmcvdW5pbml0aWFsaXplZCBmaWVsZCBpbml0aWFsaXphdGlvbiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2ZjBlODI1YmZjODM3MmQ1NWRkOGIwYmY4YjE1MDFjMDkwZmQ0NDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcbmluZGV4IDljZTg2MzQ5YTI5ZmEuLjg4OTQwNDc0YjAyMDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1ibG9jay5jXG4rKysgYi9tbS9tZW1ibG9jay5jXG5AQCAtMTYwLDYgKzE2MCwxMSBAQCBzdGF0aWMgX19yZWZkYXRhIHN0cnVjdCBtZW1ibG9ja190eXBlICptZW1ibG9ja19tZW1vcnkgPSBcdTAwMjZtZW1ibG9jay5tZW1vcnk7XG4gXHQgICAgIGkgXHUwMDNjIG1lbWJsb2NrX3R5cGUtXHUwMDNlY250O1x0XHRcdFx0XHRcXFxuIFx0ICAgICBpKyssIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXSlcbiBcbisjZGVmaW5lIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpLCBtZW1ibG9ja190eXBlLCByZ24sIHN0YXJ0KVx0XFxcbitcdGZvciAoaSA9IChzdGFydCksIHJnbiA9IFx1MDAyNm1lbWJsb2NrX3R5cGUtXHUwMDNlcmVnaW9uc1tpXTtcdFx0XFxcbitcdCAgICAgaSBcdTAwM2MgbWVtYmxvY2tfdHlwZS1cdTAwM2VjbnQ7XHRcdFx0XHRcdFxcXG4rXHQgICAgIGkrKywgcmduID0gXHUwMDI2bWVtYmxvY2tfdHlwZS1cdTAwM2VyZWdpb25zW2ldKVxuK1xuICNkZWZpbmUgbWVtYmxvY2tfZGJnKGZtdCwgLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdGlmIChtZW1ibG9ja19kZWJ1ZylcdFx0XHRcdFx0XFxcbkBAIC01OTEsNiArNTk2LDMzIEBAIHN0YXRpYyB2b2lkIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pbnNlcnRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0dHlwZS1cdTAwM2V0b3RhbF9zaXplICs9IHNpemU7XG4gfVxuIFxuKy8qKlxuKyAqIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQgLSBGaW5kIHRoZSBmaXJzdCByZWdpb24gaW5kZXggd2hlcmUgcmVuZCBcdTAwM2UgYmFzZVxuKyAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIHNlYXJjaFxuKyAqIEBiYXNlOiBiYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNhbmRpZGF0ZSByYW5nZVxuKyAqXG4rICogUmV0dXJucyB0aGUgZmlyc3QgcmVnaW9uIGluZGV4IHRoYXQgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCBAYmFzZS5cbisgKi9cbitzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuK1x0XHRcdFx0XHRcdCAgcGh5c19hZGRyX3QgYmFzZSlcbit7XG4rXHRpbnQgbWlkLCBsb3cgPSAwO1xuK1x0aW50IGhpZ2ggPSB0eXBlLVx1MDAzZWNudDtcbitcbitcdGlmICh0eXBlLVx1MDAzZWNudCBcdTAwMjZcdTAwMjYgYmFzZSBcdTAwM2U9IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLmJhc2UgK1xuK1x0XHRcdFx0IHR5cGUtXHUwMDNlcmVnaW9uc1t0eXBlLVx1MDAzZWNudCAtIDFdLnNpemUpXG4rXHRcdHJldHVybiB0eXBlLVx1MDAzZWNudDtcbitcbitcdHdoaWxlIChsb3cgXHUwMDNjIGhpZ2gpIHtcbitcdFx0bWlkID0gKGxvdyArIGhpZ2gpIC8gMjtcbitcdFx0aWYgKHR5cGUtXHUwMDNlcmVnaW9uc1ttaWRdLmJhc2UgKyB0eXBlLVx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFx1MDAzYz0gYmFzZSlcbitcdFx0XHRsb3cgPSBtaWQgKyAxO1xuK1x0XHRlbHNlXG4rXHRcdFx0aGlnaCA9IG1pZDtcbitcdH1cbitcdHJldHVybiBsb3c7XG4rfVxuK1xuIC8qKlxuICAqIG1lbWJsb2NrX2FkZF9yYW5nZSAtIGFkZCBuZXcgbWVtYmxvY2sgcmVnaW9uXG4gICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gYWRkIG5ldyByZWdpb24gaW50b1xuQEAgLTY1MSw3ICs2ODMsOCBAQCBzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRiYXNlID0gb2Jhc2U7XG4gXHRucl9uZXcgPSAwO1xuIFxuLVx0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZShpZHgsIHR5cGUsIHJnbikge1xuK1x0Zm9yX2VhY2hfbWVtYmxvY2tfdHlwZV9mcm9tKGlkeCwgdHlwZSwgcmduLFxuK1x0XHRcdFx0ICAgIG1lbWJsb2NrX2JzZWFyY2hfc3RhcnQodHlwZSwgYmFzZSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcmJhc2UgPSByZ24tXHUwMDNlYmFzZTtcbiBcdFx0cGh5c19hZGRyX3QgcmVuZCA9IHJiYXNlICsgcmduLVx1MDAzZXNpemU7XG4gXG5AQCAtODI3LDcgKzg2MCw4IEBAIHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRcdGlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgYmFzZSwgc2l6ZSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlKGlkeCwgdHlwZSwgcmduKSB7XG4rXHRmb3JfZWFjaF9tZW1ibG9ja190eXBlX2Zyb20oaWR4LCB0eXBlLCByZ24sXG4rXHRcdFx0XHQgICAgbWVtYmxvY2tfYnNlYXJjaF9zdGFydCh0eXBlLCBiYXNlKSkge1xuIFx0XHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cdTAwM2ViYXNlO1xuIFx0XHRwaHlzX2FkZHJfdCByZW5kID0gcmJhc2UgKyByZ24tXHUwMDNlc2l6ZTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjQ2LjQxODExMDExWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNTU3NjA5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIE1lbWJsb2NrIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gbmVlZHMgdG8gYmUgYnJvdWdodCB0byBiZWFyIGhlcmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaXRzZWxmLiBBbHJpZ2h0LCBpdCdzIHRvdWNoaW5nIGBtbS9tZW1ibG9jay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBwaWVjZXM6IGEgYGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbWAgbWFjcm8sIGEgaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBgbWVtYmxvY2tfYnNlYXJjaF9zdGFydGAsIGFuZCBpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIGBtZW1ibG9ja19hZGRfcmFuZ2VgIGFuZCBgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgc29tZSBsaW5lYXIgc2NhbnMgd2l0aCBiaW5hcnkgc2VhcmNoZXMsIHNlYXJjaGluZyBmb3IgdGhlIGZpcnN0IG92ZXJsYXBwaW5nIHJlZ2lvbi5cblxuVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hhdCBgbWVtYmxvY2tgIGFjdHVhbGx5ICpkb2VzKi4gSSBrbm93IGl0J3MgZnVuZGFtZW50YWwgZm9yIGVhcmx5IGJvb3QgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBsZXQncyByZWZyZXNoLiBJJ2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTkxIGluIGBtbS9tZW1ibG9jay5jYC4gQ29udGV4dCBpcyBrZXkgaGVyZTsgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiBhcmUgdXNlZCBpbiB0aGUgYnJvYWRlciBwaWN0dXJlLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBhcmUgdnVsbmVyYWJsZSB0byBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjUxLjQ3Mzg3NDAyOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtYmxvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODA6XFx0ICovXFxuIDU4MTpcXHRzdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gNTgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBpZHgsIHBoeXNfYWRkcl90IGJhc2UsXFxuIDU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBwaHlzX2FkZHJfdCBzaXplLFxcbiA1ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50IG5pZCxcXG4gNTg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGVudW0gbWVtYmxvY2tfZmxhZ3MgZmxhZ3MpXFxuIDU4NjpcXHR7XFxuIDU4NzpcXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24gPSBcXHUwMDI2dHlwZS1cXHUwMDNlcmVnaW9uc1tpZHhdO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHRCVUdfT04odHlwZS1cXHUwMDNlY250IFxcdTAwM2U9IHR5cGUtXFx1MDAzZW1heCk7XFxuIDU5MDpcXHRcXHRtZW1tb3ZlKHJnbiArIDEsIHJnbiwgKHR5cGUtXFx1MDAzZWNudCAtIGlkeCkgKiBzaXplb2YoKnJnbikpO1xcbiA1OTE6XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gYmFzZTtcXG4gNTkyOlxcdFxcdHJnbi1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuIDU5MzpcXHRcXHRyZ24tXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIDU5NDpcXHRcXHRtZW1ibG9ja19zZXRfcmVnaW9uX25vZGUocmduLCBuaWQpO1xcbiA1OTU6XFx0XFx0dHlwZS1cXHUwMDNlY250Kys7XFxuIDU5NjpcXHRcXHR0eXBlLVxcdTAwM2V0b3RhbF9zaXplICs9IHNpemU7XFxuIDU5NzpcXHR9XFxuIDU5ODpcXHRcXG4gNTk5OlxcdC8qKlxcbiA2MDA6XFx0ICogbWVtYmxvY2tfYnNlYXJjaF9zdGFydCAtIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiBpbmRleCB3aGVyZSByZW5kIFxcdTAwM2UgYmFzZVxcbiA2MDE6XFx0ICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gc2VhcmNoXFxuIDYwMjpcXHQgKiBAYmFzZTogYmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjYW5kaWRhdGUgcmFuZ2VcXG4gNjAzOlxcdCAqXFxuIDYwNDpcXHQgKiBSZXR1cm5zIHRoZSBmaXJzdCByZWdpb24gaW5kZXggdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBvdmVybGFwIEBiYXNlLlxcbiA2MDU6XFx0ICovXFxuIDYwNjpcXHRzdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiA2MDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwaHlzX2FkZHJfdCBiYXNlKVxcbiA2MDg6XFx0e1xcbiA2MDk6XFx0XFx0aW50IG1pZCwgbG93ID0gMDtcXG4gNjEwOlxcdFxcdGludCBoaWdoID0gdHlwZS1cXHUwMDNlY250O1xcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHRpZiAodHlwZS1cXHUwMDNlY250IFxcdTAwMjZcXHUwMDI2IGJhc2UgXFx1MDAzZT0gdHlwZS1cXHUwMDNlcmVnaW9uc1t0eXBlLVxcdTAwM2VjbnQgLSAxXS5iYXNlICtcXG4gNjEzOlxcdFxcdFxcdFxcdFxcdCB0eXBlLVxcdTAwM2VyZWdpb25zW3R5cGUtXFx1MDAzZWNudCAtIDFdLnNpemUpXFxuIDYxNDpcXHRcXHRcXHRyZXR1cm4gdHlwZS1cXHUwMDNlY250O1xcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHR3aGlsZSAobG93IFxcdTAwM2MgaGlnaCkge1xcbiA2MTc6XFx0XFx0XFx0bWlkID0gKGxvdyArIGhpZ2gpIC8gMjtcXG4gNjE4OlxcdFxcdFxcdGlmICh0eXBlLVxcdTAwM2VyZWdpb25zW21pZF0uYmFzZSArIHR5cGUtXFx1MDAzZXJlZ2lvbnNbbWlkXS5zaXplIFxcdTAwM2M9IGJhc2UpXFxuIDYxOTpcXHRcXHRcXHRcXHRsb3cgPSBtaWQgKyAxO1xcbiA2MjA6XFx0XFx0XFx0ZWxzZVxcbiA2MjE6XFx0XFx0XFx0XFx0aGlnaCA9IG1pZDtcXG4gNjIyOlxcdFxcdH1cXG4gNjIzOlxcdFxcdHJldHVybiBsb3c7XFxuIDYyNDpcXHR9XFxuIDYyNTpcXHRcXG4gNjI2OlxcdC8qKlxcbiA2Mjc6XFx0ICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb25cXG4gNjI4OlxcdCAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGFkZCBuZXcgcmVnaW9uIGludG9cXG4gNjI5OlxcdCAqIEBiYXNlOiBiYXNlIGFkZHJlc3Mgb2YgdGhlIG5ldyByZWdpb25cXG4gNjMwOlxcdCAqIEBzaXplOiBzaXplIG9mIHRoZSBuZXcgcmVnaW9uXFxuIDYzMTpcXHQgKiBAbmlkOiBuaWQgb2YgdGhlIG5ldyByZWdpb25cXG4gNjMyOlxcdCAqIEBmbGFnczogZmxhZ3Mgb2YgdGhlIG5ldyByZWdpb25cXG4gNjMzOlxcdCAqXFxuIDYzNDpcXHQgKiBBZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbiBbQGJhc2UsIEBiYXNlICsgQHNpemUpIGludG8gQHR5cGUuICBUaGUgbmV3IHJlZ2lvblxcbiA2MzU6XFx0ICogaXMgYWxsb3dlZCB0byBvdmVybGFwIHdpdGggZXhpc3Rpbmcgb25lcyAtIG92ZXJsYXBzIGRvbid0IGFmZmVjdCBhbHJlYWR5XFxuIDYzNjpcXHQgKiBleGlzdGluZyByZWdpb25zLiAgQHR5cGUgaXMgZ3VhcmFudGVlZCB0byBiZSBtaW5pbWFsIChhbGwgbmVpZ2hib3VyaW5nXFxuIDYzNzpcXHQgKiBjb21wYXRpYmxlIHJlZ2lvbnMgYXJlIG1lcmdlZCkgYWZ0ZXIgdGhlIGFkZGl0aW9uLlxcbiA2Mzg6XFx0ICpcXG4gNjM5OlxcdCAqIFJldHVybjpcXG4gNjQwOlxcdCAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXFxuIDY0MTpcXHQgKi9cXG4gNjQyOlxcdHN0YXRpYyBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZF9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gNjQzOlxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuIDY0NDpcXHRcXHRcXHRcXHRcXHRpbnQgbmlkLCBlbnVtIG1lbWJsb2NrX2ZsYWdzIGZsYWdzKVxcbiA2NDU6XFx0e1xcbiA2NDY6XFx0XFx0Ym9vbCBpbnNlcnQgPSBmYWxzZTtcXG4gNjQ3OlxcdFxcdHBoeXNfYWRkcl90IG9iYXNlID0gYmFzZTtcXG4gNjQ4OlxcdFxcdHBoeXNfYWRkcl90IGVuZCA9IGJhc2UgKyBtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCBcXHUwMDI2c2l6ZSk7XFxuIDY0OTpcXHRcXHRpbnQgaWR4LCBucl9uZXcsIHN0YXJ0X3JnbiA9IC0xLCBlbmRfcmduO1xcbiA2NTA6XFx0XFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduO1xcbiA2NTE6XFx0XFxuIDY1MjpcXHRcXHRpZiAoIXNpemUpXFxuIDY1MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0Lyogc3BlY2lhbCBjYXNlIGZvciBlbXB0eSBhcnJheSAqL1xcbiA2NTY6XFx0XFx0aWYgKHR5cGUtXFx1MDAzZXJlZ2lvbnNbMF0uc2l6ZSA9PSAwKSB7XFxuIDY1NzpcXHRcXHRcXHRXQVJOX09OKHR5cGUtXFx1MDAzZWNudCAhPSAwIHx8IHR5cGUtXFx1MDAzZXRvdGFsX3NpemUpO1xcbiA2NTg6XFx0XFx0XFx0dHlwZS1cXHUwMDNlcmVnaW9uc1swXS5iYXNlID0gYmFzZTtcXG4gNjU5OlxcdFxcdFxcdHR5cGUtXFx1MDAzZXJlZ2lvbnNbMF0uc2l6ZSA9IHNpemU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjUxLjQ3NDA2MDMzOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxMDc3MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIGluIGBtbS9tZW1ibG9jay5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1lbWJsb2NrX2lzb2xhdGVfcmFuZ2VgIHdpdGhpbiBgbW0vbWVtYmxvY2suY2AuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIHdoZXJlIGl0J3MgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgaXMgYmVpbmcgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBtZW1ibG9jayBzdHJ1Y3R1cmUsIHBlcmhhcHMgdG8gaGFuZGxlIG1lbW9yeSBob3RwbHVnLCBvciBtYXliZSBmb3Igc29tZXRoaW5nIGxpa2UgaXNvbGF0aW5nIG1lbW9yeSByYW5nZXMgZm9yIGEgc3BlY2lmaWMgTlVNQSBub2RlIG9yIElPTU1VIGFzc2lnbm1lbnQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBMZXQncyBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtZW1ibG9jayBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkgc2hvdWxkIGxvb2sgb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9jayBjb250ZW50aW9uIGlzc3VlcyB0aGF0IG1heSBhcmlzZSBpbiBhIG11bHRpLXRocmVhZGVkIG9yIGludGVycnVwdC1kcml2ZW4gZW52aXJvbm1lbnQuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBpdCBpcyBoYW5kbGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcywgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTQ6NTMuNzI1MTQwNzYxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyMDpcXHRcXHRcXHQgICAgICAgKG5yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC8gU1pfMU0sIG1lbV9zaXplX21iKTtcXG4gODIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODIyOlxcdFxcdH1cXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDgyNTpcXHR9XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcbiA4Mjg6XFx0LyoqXFxuIDgyOTpcXHQgKiBtZW1ibG9ja19pc29sYXRlX3JhbmdlIC0gaXNvbGF0ZSBnaXZlbiByYW5nZSBpbnRvIGRpc2pvaW50IG1lbWJsb2Nrc1xcbiA4MzA6XFx0ICogQHR5cGU6IG1lbWJsb2NrIHR5cGUgdG8gaXNvbGF0ZSByYW5nZSBmb3JcXG4gODMxOlxcdCAqIEBiYXNlOiBiYXNlIG9mIHJhbmdlIHRvIGlzb2xhdGVcXG4gODMyOlxcdCAqIEBzaXplOiBzaXplIG9mIHJhbmdlIHRvIGlzb2xhdGVcXG4gODMzOlxcdCAqIEBzdGFydF9yZ246IG91dCBwYXJhbWV0ZXIgZm9yIHRoZSBzdGFydCBvZiBpc29sYXRlZCByZWdpb25cXG4gODM0OlxcdCAqIEBlbmRfcmduOiBvdXQgcGFyYW1ldGVyIGZvciB0aGUgZW5kIG9mIGlzb2xhdGVkIHJlZ2lvblxcbiA4MzU6XFx0ICpcXG4gODM2OlxcdCAqIFdhbGsgQHR5cGUgYW5kIGVuc3VyZSB0aGF0IHJlZ2lvbnMgZG9uJ3QgY3Jvc3MgdGhlIGJvdW5kYXJpZXMgZGVmaW5lZCBieVxcbiA4Mzc6XFx0ICogW0BiYXNlLCBAYmFzZSArIEBzaXplKS4gIENyb3NzaW5nIHJlZ2lvbnMgYXJlIHNwbGl0IGF0IHRoZSBib3VuZGFyaWVzLFxcbiA4Mzg6XFx0ICogd2hpY2ggbWF5IGNyZWF0ZSBhdCBtb3N0IHR3byBtb3JlIHJlZ2lvbnMuICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0XFxuIDgzOTpcXHQgKiByZWdpb24gaW5zaWRlIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQHN0YXJ0X3JnbiBhbmQgdGhlIGluZGV4IG9mIHRoZVxcbiA4NDA6XFx0ICogZmlyc3QgcmVnaW9uIGFmdGVyIHRoZSByYW5nZSBpcyByZXR1cm5lZCBpbiAqQGVuZF9yZ24uXFxuIDg0MTpcXHQgKlxcbiA4NDI6XFx0ICogUmV0dXJuOlxcbiA4NDM6XFx0ICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cXG4gODQ0OlxcdCAqL1xcbiA4NDU6XFx0c3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNvbGF0ZV9yYW5nZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gODQ2OlxcdFxcdFxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuIDg0NzpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgKnN0YXJ0X3JnbiwgaW50ICplbmRfcmduKVxcbiA4NDg6XFx0e1xcbiA4NDk6XFx0XFx0cGh5c19hZGRyX3QgZW5kID0gYmFzZSArIG1lbWJsb2NrX2NhcF9zaXplKGJhc2UsIFxcdTAwMjZzaXplKTtcXG4gODUwOlxcdFxcdGludCBpZHg7XFxuIDg1MTpcXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ247XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdCpzdGFydF9yZ24gPSAqZW5kX3JnbiA9IDA7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdGlmICghc2l6ZSlcXG4gODU2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHQvKiB3ZSdsbCBjcmVhdGUgYXQgbW9zdCB0d28gbW9yZSByZWdpb25zICovXFxuIDg1OTpcXHRcXHR3aGlsZSAodHlwZS1cXHUwMDNlY250ICsgMiBcXHUwMDNlIHR5cGUtXFx1MDAzZW1heClcXG4gODYwOlxcdFxcdFxcdGlmIChtZW1ibG9ja19kb3VibGVfYXJyYXkodHlwZSwgYmFzZSwgc2l6ZSkgXFx1MDAzYyAwKVxcbiA4NjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbShpZHgsIHR5cGUsIHJnbixcXG4gODY0OlxcdFxcdFxcdFxcdFxcdCAgICBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KHR5cGUsIGJhc2UpKSB7XFxuIDg2NTpcXHRcXHRcXHRwaHlzX2FkZHJfdCByYmFzZSA9IHJnbi1cXHUwMDNlYmFzZTtcXG4gODY2OlxcdFxcdFxcdHBoeXNfYWRkcl90IHJlbmQgPSByYmFzZSArIHJnbi1cXHUwMDNlc2l6ZTtcXG4gODY3OlxcdFxcbiA4Njg6XFx0XFx0XFx0aWYgKHJiYXNlIFxcdTAwM2U9IGVuZClcXG4gODY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NzA6XFx0XFx0XFx0aWYgKHJlbmQgXFx1MDAzYz0gYmFzZSlcXG4gODcxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRcXHRpZiAocmJhc2UgXFx1MDAzYyBiYXNlKSB7XFxuIDg3NDpcXHRcXHRcXHRcXHQvKlxcbiA4NzU6XFx0XFx0XFx0XFx0ICogQHJnbiBpbnRlcnNlY3RzIGZyb20gYmVsb3cuICBTcGxpdCBhbmQgY29udGludWVcXG4gODc2OlxcdFxcdFxcdFxcdCAqIHRvIHByb2Nlc3MgdGhlIG5leHQgcmVnaW9uIC0gdGhlIG5ldyB0b3AgaGFsZi5cXG4gODc3OlxcdFxcdFxcdFxcdCAqL1xcbiA4Nzg6XFx0XFx0XFx0XFx0cmduLVxcdTAwM2ViYXNlID0gYmFzZTtcXG4gODc5OlxcdFxcdFxcdFxcdHJnbi1cXHUwMDNlc2l6ZSAtPSBiYXNlIC0gcmJhc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjUzLjcyNTM0NjQwMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTQwMDIyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtYmxvY2sgT3B0aW1pemF0aW9uIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCwgYW4gb3B0aW1pemF0aW9uIGZvciBmaW5kaW5nIHRoZSBzdGFydGluZyBpbmRleCBpbiB0aGUgYG1lbWJsb2NrYCBkYXRhIHN0cnVjdHVyZSBkdXJpbmcgbWVtb3J5IHJhbmdlIGFkZGl0aW9uIGFuZCBpc29sYXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnk7IGFyZSB3ZSBjcmVhdGluZyBhbnkgcmlza3MgaGVyZT9cblxuRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IGlmIHRoaXMgcGF0Y2ggYWxsb2NhdGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb3BpZXMgaXQgdG8gdXNlciBzcGFjZSwgb3IgZXZhbHVhdGVzIGl0IGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCBsb29rcyBsaWtlIGBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0YCB3b3JrcyBzb2xlbHkgd2l0aCBgdHlwZS1cdTAwM2VjbnRgIGFuZCB0aGUgYGJhc2VgIGFuZCBgc2l6ZWAgZmllbGRzIG9mIGB0eXBlLVx1MDAzZXJlZ2lvbnNgLiBDcnVjaWFsbHksIHRob3NlIHJlZ2lvbnMgZnJvbSAwIHVwIHRvIGB0eXBlLVx1MDAzZWNudCAtIDFgIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkIG1lbWJsb2NrIHJlZ2lvbnMsIHZhbGlkIGFuZCByZWFkeSB0byBnby4gRXZlbiBpZiBgdHlwZS1cdTAwM2VjbnRgIGlzIHplcm8sIHRoZSB3aGlsZSBsb29wIHdpbGwgcXVpY2tseSB0ZXJtaW5hdGUuIEFuZCwgZm9yIHRoZSBsb29wIHVzaW5nIHRoZSBzdGFydCBpbmRleCwgaWYgYHN0YXJ0YCBpcyBlcXVhbCB0byBgdHlwZS1cdTAwM2VjbnRgIGl0IGRvZXMgbm90IHJ1biwgYW5kIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGludGVnZXJzL3BvaW50ZXJzLlxuXG5Eb2VzIHRoaXMgaGF2ZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGRhdGEgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gTm8uIFRoaXMgY29kZSBpcyBlYXJseS1ib290LCBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGBtZW1ibG9ja2Agc3Vic3lzdGVtLiBOb3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3RoaW5nIGlzIGV4cG9zZWQgdG8gdW5pbml0aWFsaXplZCBidWZmZXJzLiBJZiB3ZSAqZGlkKiBoYXZlIGFuIGluZGV4aW5nIGJ1Zywgb3IgYHN0YXJ0YCB3YXMgc29tZWhvdyBvdXQgb2YgYm91bmRzLCB0aGF0IHdvdWxkIHRyaWdnZXIgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIHdoaWNoIEtBU0FOIHdvdWxkIGltbWVkaWF0ZWx5IGNhdGNoLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBubyBwYWRkaW5nIGxlYWtzLCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5TbywgSSB0aGluayB3ZSdyZSBzYWZlLiBLTVNBTiBkb2Vzbid0IHNlZW0gdG8gYmUgbmVlZGVkIGhlcmUuIExldCdzIGRvdWJsZS1jaGVjaywgdGhvdWdoLCBiYXNlZCBvbiBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZT8gTm90IGluIHRoaXMgcGF0Y2guXG5cblJpZ2h0LiBUaW1lIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTiB0byBzb2xpZGlmeSBteSByZWFzb25pbmcuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUgYmVjYXVzZSB0aGVzZSBjaGFuZ2VzIG1vZGlmeSBhcnJheSBpbmRleGluZyBhbmQgbG9vcCBpbml0aWFsaXphdGlvbiBvdmVyIGB0eXBlLVx1MDAzZXJlZ2lvbnNgLiBBbnkgaW5kZXhpbmcgZXJyb3JzIG9yIGJvdW5kcyBtaXNtYXRjaGVzIHdpbGwgYmUgY2F1Z2h0IGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMuIEFzIGZvciBLTVNBTiwgdGhlIHBhdGNoIGRvZXNuJ3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHNlbmQgaXQgdG8gdXNlci1zcGFjZSwgYW5kIGRvZXMgbm90IHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBicmFuY2hlcy4gVGhlIGBtZW1ibG9ja2Agc3Vic3lzdGVtIG1hbmFnZXMgaW5pdGlhbGl6ZWQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBmcm9tIGVhcmx5IGJvb3QsIHdpdGggcmVnaW9uIHN0cnVjdHVyZXMgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cbk9rYXksIEknbSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQxLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjU0OjU5LjY2NTM3MDYxMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHJlZ2lvbiBsb29rdXAgaW4gZWFybHkgYm9vdCBtZW1ibG9jayBtYW5hZ2VtZW50IChtbS9tZW1ibG9jay5jKSBieSBpbnRyb2R1Y2luZyBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KCkgYW5kIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbSgpLiBUaGUgY2hhbmdlcyBvcGVyYXRlIGV4Y2x1c2l2ZWx5IG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBtZW1ibG9jayByZWdpb25zIGFuZCBpbnRlcm5hbCBpbmRpY2VzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGxvZ2ljIChzdWNoIGFzIGluZGV4IGNhbGN1bGF0aW9uIGVycm9ycyBvciBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBhc3NlcnRpb24vYm91bmRzIGNoZWNraW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgcGFkZGluZy91bmluaXRpYWxpemVkIGZpZWxkIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHJlZ2lvbiBsb29rdXAgaW4gZWFybHkgYm9vdCBtZW1ibG9jayBtYW5hZ2VtZW50IChtbS9tZW1ibG9jay5jKSBieSBpbnRyb2R1Y2luZyBtZW1ibG9ja19ic2VhcmNoX3N0YXJ0KCkgYW5kIGZvcl9lYWNoX21lbWJsb2NrX3R5cGVfZnJvbSgpLiBUaGUgY2hhbmdlcyBvcGVyYXRlIGV4Y2x1c2l2ZWx5IG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBtZW1ibG9jayByZWdpb25zIGFuZCBpbnRlcm5hbCBpbmRpY2VzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGxvZ2ljIChzdWNoIGFzIGluZGV4IGNhbGN1bGF0aW9uIGVycm9ycyBvciBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBhc3NlcnRpb24vYm91bmRzIGNoZWNraW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgcGFkZGluZy91bmluaXRpYWxpemVkIGZpZWxkIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[1] Phase: Succeeded StartedAt: 2026-09-05 00:55:11 +0000 UTC FinishedAt: 2026-09-05 00:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 00:55:11 +0000 UTC FinishedAt: 2026-09-05 00:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2] Phase: Succeeded StartedAt: 2026-09-05 00:55:11 +0000 UTC FinishedAt: 2026-09-05 04:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 00:55:11 +0000 UTC FinishedAt: 2026-09-05 04:41:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 00:55:11 +0000 UTC FinishedAt: 2026-09-05 00:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 00:55:11 +0000 UTC FinishedAt: 2026-09-05 00:55:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowzcmrv/series-workflowzcmrv-convert-artifact-3404519452/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 00:55:21 +0000 UTC FinishedAt: 2026-09-05 01:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 00:55:21 +0000 UTC FinishedAt: 2026-09-05 01:13:03 +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:*fa061dd6-df0f-4115-a438-a8e2358467bc,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-workflowzcmrv/series-workflowzcmrv-convert-artifact-3404519452/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": "7bbc78e8-bce8-4c4d-824c-a61071474c49", "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-workflowzcmrv/series-workflowzcmrv-build-action-1234665034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 00:55:21 +0000 UTC FinishedAt: 2026-09-05 01:12:53 +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:*fa061dd6-df0f-4115-a438-a8e2358467bc,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-workflowzcmrv/series-workflowzcmrv-convert-artifact-3404519452/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": "7bbc78e8-bce8-4c4d-824c-a61071474c49", "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-workflowzcmrv/series-workflowzcmrv-build-action-1234665034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 01:13:03 +0000 UTC FinishedAt: 2026-09-05 01:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 01:13:03 +0000 UTC FinishedAt: 2026-09-05 01:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 01:13:03 +0000 UTC FinishedAt: 2026-09-05 01:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 01:13:03 +0000 UTC FinishedAt: 2026-09-05 01:13:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowzcmrv/series-workflowzcmrv-convert-artifact-107143003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 01:13:13 +0000 UTC FinishedAt: 2026-09-05 01:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 01:13:13 +0000 UTC FinishedAt: 2026-09-05 01:15:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7bbc78e8-bce8-4c4d-824c-a61071474c49,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-workflowzcmrv/series-workflowzcmrv-build-action-1234665034/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-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 01:15:14 +0000 UTC FinishedAt: 2026-09-05 01:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 01:15:14 +0000 UTC FinishedAt: 2026-09-05 01:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 01:15:14 +0000 UTC FinishedAt: 2026-09-05 01:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 01:15:14 +0000 UTC FinishedAt: 2026-09-05 01:32:50 +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:*fa061dd6-df0f-4115-a438-a8e2358467bc,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-workflowzcmrv/series-workflowzcmrv-convert-artifact-107143003/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": "19140329-83a7-452f-a02a-d25f6a77f7ab", "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-workflowzcmrv/series-workflowzcmrv-build-action-144082431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 01:15:14 +0000 UTC FinishedAt: 2026-09-05 01:31:40 +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:*fa061dd6-df0f-4115-a438-a8e2358467bc,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-workflowzcmrv/series-workflowzcmrv-convert-artifact-107143003/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": "19140329-83a7-452f-a02a-d25f6a77f7ab", "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-workflowzcmrv/series-workflowzcmrv-build-action-144082431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 01:32:50 +0000 UTC FinishedAt: 2026-09-05 01:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 01:32:50 +0000 UTC FinishedAt: 2026-09-05 01:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 01:32:50 +0000 UTC FinishedAt: 2026-09-05 01:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 01:32:50 +0000 UTC FinishedAt: 2026-09-05 01:34:42 +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:*19140329-83a7-452f-a02a-d25f6a77f7ab,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-workflowzcmrv/series-workflowzcmrv-build-action-144082431/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-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 04:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 04:41:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},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:*7bbc78e8-bce8-4c4d-824c-a61071474c49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19140329-83a7-452f-a02a-d25f6a77f7ab,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-workflowzcmrv/series-workflowzcmrv-build-action-1234665034/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-workflowzcmrv/series-workflowzcmrv-build-action-144082431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 01:35:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 01:34:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},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-workflowzcmrv/series-workflowzcmrv-convert-artifact-3095803988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 01:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 01:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 01:34:54 +0000 UTC FinishedAt: 2026-09-05 01:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 01:35:06 +0000 UTC FinishedAt: 2026-09-05 04:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzcmrv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memblock_bsearch_start","memblock_add_range","memblock_isolate_range","memblock_add_node","memblock_remove_range","memblock_remove","memblock_phys_free"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE","INTEL_TDX_HOST","VIRTIO_MEM"],"series_id":"d03d54d6-b4df-4da5-b71b-9535c79e3c91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 01:35:06 +0000 UTC FinishedAt: 2026-09-05 04:41:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7bbc78e8-bce8-4c4d-824c-a61071474c49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19140329-83a7-452f-a02a-d25f6a77f7ab,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-workflowzcmrv/series-workflowzcmrv-build-action-1234665034/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-workflowzcmrv/series-workflowzcmrv-build-action-144082431/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-workflowzcmrv/series-workflowzcmrv-convert-artifact-3095803988/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,}