IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgQXByaWwgMjAxMAojCiMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCiMgc2luZ2xlIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbiBpbiBHRigyXjEyOCkuICI0LWJpdCIgbWVhbnMgdGhhdCBpdAojIHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWyszMiBieXRlcyBzaGFyZWQgdGFibGVdLiBUaGVyZSBpcyBubwojIGV4cGVyaW1lbnRhbCBwZXJmb3JtYW5jZSBkYXRhIGF2YWlsYWJsZSB5ZXQuIFRoZSBvbmx5IGFwcHJveGltYXRpb24KIyB0aGF0IGNhbiBiZSBtYWRlIGF0IHRoaXMgcG9pbnQgaXMgYmFzZWQgb24gY29kZSBzaXplLiBJbm5lciBsb29wIGlzCiMgMzIgaW5zdHJ1Y3Rpb25zIGxvbmcgYW5kIG9uIHNpbmdsZS1pc3N1ZSBjb3JlIHNob3VsZCBleGVjdXRlIGluIDw0MAojIGN5Y2xlcy4gSGF2aW5nIHZlcmlmaWVkIHRoYXQgZ2NjIDMuNCBkaWRuJ3QgdW5yb2xsIGNvcnJlc3BvbmRpbmcKIyBsb29wLCB0aGlzIGFzc2VtYmxlciBsb29wIGJvZHkgd2FzIGZvdW5kIHRvIGJlIH4zeCBzbWFsbGVyIHRoYW4KIyBjb21waWxlci1nZW5lcmF0ZWQgb25lLi4uCiMKIyBKdWx5IDIwMTAKIwojIFJlc2NoZWR1bGluZyBmb3IgZHVhbC1pc3N1ZSBwaXBlbGluZSByZXN1bHRlZCBpbiA4LjUlIGltcHJvdmVtZW50IG9uCiMgQ29ydGV4IEE4IGNvcmUgYW5kIH4yNSBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlICh3aGljaCB3YXMgb2JzZXJ2ZWQKIyB0byBiZSB+MyB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGU6LSkKIwojIEZlYnJ1YXJ5IDIwMTEKIwojIFByb2ZpbGVyLWFzc2lzdGVkIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gcmVzdWx0ZWQgaW4gNyUKIyBpbXByb3ZlbWVudCBvbiBDb3J0ZXggQTggY29yZSBhbmQgfjIzLjUgY3ljbGVzIHBlciBieXRlLgojCiMgTWFyY2ggMjAxMQojCiMgQWRkIE5FT04gaW1wbGVtZW50YXRpb24gZmVhdHVyaW5nIHBvbHlub21pYWwgbXVsdGlwbGljYXRpb24sIGkuZS4gbm8KIyBsb29rdXAgdGFibGVzIGludm9sdmVkLiBPbiBDb3J0ZXggQTggaXQgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3Mgb25lCiMgYnl0ZSBpbiAxNSBjeWNsZXMgb3IgNTUlIGZhc3RlciB0aGFuIGludGVnZXItb25seSBjb2RlLgojCiMgQXByaWwgMjAxNAojCiMgU3dpdGNoIHRvIG11bHRpcGxpY2F0aW9uIGFsZ29yaXRobSBzdWdnZXN0ZWQgaW4gcGFwZXIgcmVmZXJyZWQKIyBiZWxvdyBhbmQgY29tYmluZSBpdCB3aXRoIHJlZHVjdGlvbiBhbGdvcml0aG0gZnJvbSB4ODYgbW9kdWxlLgojIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgcHJldmlvdXMgdmVyc2lvbiB2YXJpZXMgZnJvbSA2NSUgb24KIyBTbmFwZHJhZ29uIFM0IHRvIDExMCUgb24gQ29ydGV4IEE5LiBJbiBhYnNvbHV0ZSB0ZXJtcyBDb3J0ZXggQTgKIyBwcm9jZXNzZXMgb25lIGJ5dGUgaW4gOC40NSBjeWNsZXMsIEE5IC0gaW4gMTAuMiwgU25hcGRyYWdvbiBTNCAtCiMgaW4gOS4zMy4KIwojIEPibWFyYSwgRC47IEdvdXbqYSwgQy4gUC4gTC47IEzzcGV6LCBKLiAmIERhaGFiLCBSLjogRmFzdCBTb2Z0d2FyZQojIFBvbHlub21pYWwgTXVsdGlwbGljYXRpb24gb24gQVJNIFByb2Nlc3NvcnMgdXNpbmcgdGhlIE5FT04gRW5naW5lLgojIAojIGh0dHA6Ly9jb25yYWRvcGxnLmNyeXB0b2xhbmQubmV0L2ZpbGVzLzIwMTAvMTIvbW9jcnlzZW4xMy5wZGYKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBOb3RlIGFib3V0ICI1MjhCIiB2YXJpYW50LiBJbiBBUk0gY2FzZSBpdCBtYWtlcyBsZXNzZXIgc2Vuc2UgdG8KIyBpbXBsZW1lbnQgaXQgZm9yIGZvbGxvd2luZyByZWFzb25zOgojCiMgLSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3b24ndCBiZSBhbnl3aGVyZSBuZWFyIDUwJSwgYmVjYXVzZSAxMjgtCiMgICBiaXQgc2hpZnQgb3BlcmF0aW9uIGlzIG5lYXRseSBmdXNlZCB3aXRoIDEyOC1iaXQgeG9yIGhlcmUsIGFuZAojICAgIjUzOEIiIHZhcmlhbnQgd291bGQgZWxpbWluYXRlIG9ubHkgNC01IGluc3RydWN0aW9ucyBvdXQgb2YgMzIKIyAgIGluIHRoZSBpbm5lciBsb29wIChtZWFuaW5nIHRoYXQgZXN0aW1hdGVkIGltcHJvdmVtZW50IGlzIH4xNSUpOwojIC0gQVJNLWJhc2VkIHN5c3RlbXMgYXJlIG9mdGVuIGVtYmVkZGVkIG9uZXMgYW5kIGV4dHJhIG1lbW9yeQojICAgY29uc3VtcHRpb24gbWlnaHQgYmUgdW5hcHByZWNpYXRlZCAoZm9yIHNvIGxpdHRsZSBpbXByb3ZlbWVudCk7CiMKIyBCeXRlIG9yZGVyIFtpbl1kZXBlbmRlbmNlLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgQ2FsbGVyIGlzIGV4cGVjdGVkIHRvIG1haW50YWluIHNwZWNpZmljICpkd29yZCogb3JkZXIgaW4gSHRhYmxlLAojIG5hbWVseSB3aXRoICpsZWFzdCogc2lnbmlmaWNhbnQgZHdvcmQgb2YgMTI4LWJpdCB2YWx1ZSBhdCAqbG93ZXIqCiMgYWRkcmVzcy4gVGhpcyBkaWZmZXJzIGNvbXBsZXRlbHkgZnJvbSBDIGNvZGUgYW5kIGhhcyBldmVyeXRoaW5nIHRvCiMgZG8gd2l0aCBsZG0gaW5zdHJ1Y3Rpb24gYW5kIG9yZGVyIGluIHdoaWNoIGR3b3JkcyBhcmUgImNvbnN1bWVkIiBieQojIGFsZ29yaXRobS4gKkJ5dGUqIG9yZGVyIHdpdGhpbiB0aGVzZSBkd29yZHMgaW4gdHVybiBpcyB3aGF0ZXZlcgojICpuYXRpdmUqIGJ5dGUgb3JkZXIgb24gY3VycmVudCBwbGF0Zm9ybS4gU2VlIGdjbTEyOC5jIGZvciB3b3JraW5nCiMgZXhhbXBsZS4uLgoKd2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30Kb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKCiRYaT0icjAiOwkjIGFyZ3VtZW50IGJsb2NrCiRIdGJsPSJyMSI7CiRpbnA9InIyIjsKJGxlbj0icjMiOwoKJFpsbD0icjQiOwkjIHZhcmlhYmxlcwokWmxoPSJyNSI7CiRaaGw9InI2IjsKJFpoaD0icjciOwokVGxsPSJyOCI7CiRUbGg9InI5IjsKJFRobD0icjEwIjsKJFRoaD0icjExIjsKJG5sbz0icjEyIjsKIyMjIyMjIyMjIyMjIyMjIyMgcjEzIGlzIHN0YWNrIHBvaW50ZXIKJG5oaT0icjE0IjsKIyMjIyMjIyMjIyMjIyMjIyMgcjE1IGlzIHByb2dyYW0gY291bnRlcgoKJHJlbV80Yml0PSRpbnA7CSMgdXNlZCBpbiBnY21fZ211bHRfNGJpdAokY250PSRsZW47CgpzdWIgWnNtYXNoKCkgewogIG15ICRpPTEyOwogIG15IEBhcmdzPUBfOwogIGZvciAoJFpsbCwkWmxoLCRaaGwsJFpoaCkgewogICAgJGNvZGUuPTw8X19fOwojaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQoJcmV2CSRfLCRfCglzdHIJJF8sWyRYaSwjJGldCiNlbGlmIGRlZmluZWQoX19BUk1FQl9fKQoJc3RyCSRfLFskWGksIyRpXQojZWxzZQoJbW92CSRUbGgsJF8sbHNyIzgKCXN0cmIJJF8sWyRYaSwjJGkrM10KCW1vdgkkVGhsLCRfLGxzciMxNgoJc3RyYgkkVGxoLFskWGksIyRpKzJdCgltb3YJJFRoaCwkXyxsc3IjMjQKCXN0cmIJJFRobCxbJFhpLCMkaSsxXQoJc3RyYgkkVGhoLFskWGksIyRpXQojZW5kaWYKX19fCiAgICAkY29kZS49Ilx0Ii5zaGlmdChAYXJncykuIlxuIjsKICAgICRpLT00OwogIH0KfQoKJGNvZGU9PDxfX187CiNpZiBkZWZpbmVkKF9fYXJtX18pCiNpbmNsdWRlICJhcm1fYXJjaC5oIgoKLnN5bnRheCB1bmlmaWVkCgoudGV4dAouY29kZQkzMgoKLnR5cGUJcmVtXzRiaXQsJW9iamVjdAouYWxpZ24JNQpyZW1fNGJpdDoKLnNob3J0CTB4MDAwMCwweDFDMjAsMHgzODQwLDB4MjQ2MAouc2hvcnQJMHg3MDgwLDB4NkNBMCwweDQ4QzAsMHg1NEUwCi5zaG9ydAkweEUxMDAsMHhGRDIwLDB4RDk0MCwweEM1NjAKLnNob3J0CTB4OTE4MCwweDhEQTAsMHhBOUMwLDB4QjVFMAouc2l6ZQlyZW1fNGJpdCwuLXJlbV80Yml0CgoudHlwZQlyZW1fNGJpdF9nZXQsJWZ1bmN0aW9uCnJlbV80Yml0X2dldDoKCXN1YgkkcmVtXzRiaXQscGMsIzgKCXN1YgkkcmVtXzRiaXQsJHJlbV80Yml0LCMzMglAICZyZW1fNGJpdAoJYgkuTHJlbV80Yml0X2dvdAoJbm9wCi5zaXplCXJlbV80Yml0X2dldCwuLXJlbV80Yml0X2dldAoKLmdsb2JhbAlnY21fZ2hhc2hfNGJpdAouaGlkZGVuCWdjbV9naGFzaF80Yml0Ci50eXBlCWdjbV9naGFzaF80Yml0LCVmdW5jdGlvbgpnY21fZ2hhc2hfNGJpdDoKCXN1YglyMTIscGMsIzgKCWFkZAkkbGVuLCRpbnAsJGxlbgkJQCAkbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQKCXN0bWRiCXNwISx7cjMtcjExLGxyfQkJQCBzYXZlICRsZW4vZW5kIHRvbwoJc3ViCXIxMixyMTIsIzQ4CQlAICZyZW1fNGJpdAoKCWxkbWlhCXIxMix7cjQtcjExfQkJQCBjb3B5IHJlbV80Yml0IC4uLgoJc3RtZGIJc3AhLHtyNC1yMTF9CQlAIC4uLiB0byBzdGFjawoKCWxkcmIJJG5sbyxbJGlucCwjMTVdCglsZHJiCSRuaGksWyRYaSwjMTVdCi5Mb3V0ZXI6Cgllb3IJJG5sbywkbmxvLCRuaGkKCWFuZAkkbmhpLCRubG8sIzB4ZjAKCWFuZAkkbmxvLCRubG8sIzB4MGYKCW1vdgkkY250LCMxNAoKCWFkZAkkWmhoLCRIdGJsLCRubG8sbHNsIzQKCWxkbWlhCSRaaGgseyRabGwtJFpoaH0JQCBsb2FkIEh0YmxbbmxvXQoJYWRkCSRUaGgsJEh0YmwsJG5oaQoJbGRyYgkkbmxvLFskaW5wLCMxNF0KCglhbmQJJG5oaSwkWmxsLCMweGYJCUAgcmVtCglsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25oaV0KCWFkZAkkbmhpLCRuaGksJG5oaQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0CglsZHJoCSRUbGwsW3NwLCRuaGldCQlAIHJlbV80Yml0W3JlbV0KCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKCWxkcmIJJG5oaSxbJFhpLCMxNF0KCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAoJZW9yCSRabGgsJFpsaCwkWmhsLGxzbCMyOAoJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0Cgllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4Cgllb3IJJFpoaCwkVGhoLCRaaGgsbHNyIzQKCWVvcgkkbmxvLCRubG8sJG5oaQoJYW5kCSRuaGksJG5sbywjMHhmMAoJYW5kCSRubG8sJG5sbywjMHgwZgoJZW9yCSRaaGgsJFpoaCwkVGxsLGxzbCMxNgoKLkxpbm5lcjoKCWFkZAkkVGhoLCRIdGJsLCRubG8sbHNsIzQKCWFuZAkkbmxvLCRabGwsIzB4ZgkJQCByZW0KCXN1YnMJJGNudCwkY250LCMxCglhZGQJJG5sbywkbmxvLCRubG8KCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmxvXQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0Cgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4Cgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWxkcmgJJFRsbCxbc3AsJG5sb10JCUAgcmVtXzRiaXRbcmVtXQoJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0CglsZHJicGwJJG5sbyxbJGlucCwkY250XQoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CgoJYWRkCSRUaGgsJEh0YmwsJG5oaQoJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQoJZW9yCSRaaGgsJFpoaCwkVGxsLGxzbCMxNglAIF49IHJlbV80Yml0W3JlbV0KCWFkZAkkbmhpLCRuaGksJG5oaQoJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtuaGldCgllb3IJJFpsbCwkVGxsLCRabGwsbHNyIzQKCWxkcmJwbAkkVGxsLFskWGksJGNudF0KCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAoJbGRyaAkkVGxoLFtzcCwkbmhpXQoJZW9yCSRabGgsJFpsaCwkWmhsLGxzbCMyOAoJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0Cgllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4Cgllb3JwbAkkbmxvLCRubG8sJFRsbAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CglhbmRwbAkkbmhpLCRubG8sIzB4ZjAKCWFuZHBsCSRubG8sJG5sbywjMHgwZgoJZW9yCSRaaGgsJFpoaCwkVGxoLGxzbCMxNglAIF49IHJlbV80Yml0W3JlbV0KCWJwbAkuTGlubmVyCgoJbGRyCSRsZW4sW3NwLCMzMl0JCUAgcmUtbG9hZCAkbGVuL2VuZAoJYWRkCSRpbnAsJGlucCwjMTYKCW1vdgkkbmhpLCRabGwKX19fCgkmWnNtYXNoKCJjbXBcdCRpbnAsJGxlbiIsImxkcmJuZVx0JG5sbyxbJGlucCwjMTVdIik7CiRjb2RlLj08PF9fXzsKCWJuZQkuTG91dGVyCgoJYWRkCXNwLHNwLCMzNgojaWYgX19BUk1fQVJDSF9fPj01CglsZG1pYQlzcCEse3I0LXIxMSxwY30KI2Vsc2UKCWxkbWlhCXNwISx7cjQtcjExLGxyfQoJdHN0CWxyLCMxCgltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CglieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQojZW5kaWYKLnNpemUJZ2NtX2doYXNoXzRiaXQsLi1nY21fZ2hhc2hfNGJpdAoKLmdsb2JhbAlnY21fZ211bHRfNGJpdAouaGlkZGVuCWdjbV9nbXVsdF80Yml0Ci50eXBlCWdjbV9nbXVsdF80Yml0LCVmdW5jdGlvbgpnY21fZ211bHRfNGJpdDoKCXN0bWRiCXNwISx7cjQtcjExLGxyfQoJbGRyYgkkbmxvLFskWGksIzE1XQoJYglyZW1fNGJpdF9nZXQKLkxyZW1fNGJpdF9nb3Q6CglhbmQJJG5oaSwkbmxvLCMweGYwCglhbmQJJG5sbywkbmxvLCMweDBmCgltb3YJJGNudCwjMTQKCglhZGQJJFpoaCwkSHRibCwkbmxvLGxzbCM0CglsZG1pYQkkWmhoLHskWmxsLSRaaGh9CUAgbG9hZCBIdGJsW25sb10KCWxkcmIJJG5sbyxbJFhpLCMxNF0KCglhZGQJJFRoaCwkSHRibCwkbmhpCglhbmQJJG5oaSwkWmxsLCMweGYJCUAgcmVtCglsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25oaV0KCWFkZAkkbmhpLCRuaGksJG5oaQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0CglsZHJoCSRUbGwsWyRyZW1fNGJpdCwkbmhpXQlAIHJlbV80Yml0W3JlbV0KCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAoJZW9yCSRabGgsJFpsaCwkWmhsLGxzbCMyOAoJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0Cgllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4Cgllb3IJJFpoaCwkVGhoLCRaaGgsbHNyIzQKCWFuZAkkbmhpLCRubG8sIzB4ZjAKCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYKCWFuZAkkbmxvLCRubG8sIzB4MGYKCi5Mb29wOgoJYWRkCSRUaGgsJEh0YmwsJG5sbyxsc2wjNAoJYW5kCSRubG8sJFpsbCwjMHhmCQlAIHJlbQoJc3VicwkkY250LCRjbnQsIzEKCWFkZAkkbmxvLCRubG8sJG5sbwoJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtubG9dCgllb3IJJFpsbCwkVGxsLCRabGwsbHNyIzQKCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAoJZW9yCSRabGgsJFpsaCwkWmhsLGxzbCMyOAoJbGRyaAkkVGxsLFskcmVtXzRiaXQsJG5sb10JQCByZW1fNGJpdFtyZW1dCgllb3IJJFpobCwkVGhsLCRaaGwsbHNyIzQKCWxkcmJwbAkkbmxvLFskWGksJGNudF0KCWVvcgkkWmhsLCRaaGwsJFpoaCxsc2wjMjgKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoKCWFkZAkkVGhoLCRIdGJsLCRuaGkKCWFuZAkkbmhpLCRabGwsIzB4ZgkJQCByZW0KCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCglhZGQJJG5oaSwkbmhpLCRuaGkKCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmhpXQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0Cgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4Cgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWxkcmgJJFRsbCxbJHJlbV80Yml0LCRuaGldCUAgcmVtXzRiaXRbcmVtXQoJZW9yCSRabGgsJFpsaCwkWmhsLGxzbCMyOAoJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0Cgllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4Cgllb3IJJFpoaCwkVGhoLCRaaGgsbHNyIzQKCWFuZHBsCSRuaGksJG5sbywjMHhmMAoJYW5kcGwJJG5sbywkbmxvLCMweDBmCgllb3IJJFpoaCwkWmhoLCRUbGwsbHNsIzE2CUAgXj0gcmVtXzRiaXRbcmVtXQoJYnBsCS5Mb29wCl9fXwoJJlpzbWFzaCgpOwokY29kZS49PDxfX187CiNpZiBfX0FSTV9BUkNIX18+PTUKCWxkbWlhCXNwISx7cjQtcjExLHBjfQojZWxzZQoJbGRtaWEJc3AhLHtyNC1yMTEsbHJ9Cgl0c3QJbHIsIzEKCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCiNlbmRpZgouc2l6ZQlnY21fZ211bHRfNGJpdCwuLWdjbV9nbXVsdF80Yml0Cl9fXwp7Cm15ICgkWGwsJFhtLCRYaCwkSU4pPW1hcCgicSRfIiwoMC4uMykpOwpteSAoJHQwLCR0MSwkdDIsJHQzKT1tYXAoInEkXyIsKDguLjEyKSk7Cm15ICgkSGxvLCRIaGksJEhobCwkazQ4LCRrMzIsJGsxNik9bWFwKCJkJF8iLCgyNi4uMzEpKTsKCnN1YiBjbG11bDY0eDY0IHsKbXkgKCRyLCRhLCRiKT1AXzsKJGNvZGUuPTw8X19fOwoJdmV4dC44CQkkdDAjbG8sICRhLCAkYSwgIzEJQCBBMQoJdm11bGwucDgJJHQwLCAkdDAjbG8sICRiCQlAIEYgPSBBMSpCCgl2ZXh0LjgJCSRyI2xvLCAkYiwgJGIsICMxCUAgQjEKCXZtdWxsLnA4CSRyLCAkYSwgJHIjbG8JCUAgRSA9IEEqQjEKCXZleHQuOAkJJHQxI2xvLCAkYSwgJGEsICMyCUAgQTIKCXZtdWxsLnA4CSR0MSwgJHQxI2xvLCAkYgkJQCBIID0gQTIqQgoJdmV4dC44CQkkdDMjbG8sICRiLCAkYiwgIzIJQCBCMgoJdm11bGwucDgJJHQzLCAkYSwgJHQzI2xvCQlAIEcgPSBBKkIyCgl2ZXh0LjgJCSR0MiNsbywgJGEsICRhLCAjMwlAIEEzCgl2ZW9yCQkkdDAsICR0MCwgJHIJCUAgTCA9IEUgKyBGCgl2bXVsbC5wOAkkdDIsICR0MiNsbywgJGIJCUAgSiA9IEEzKkIKCXZleHQuOAkJJHIjbG8sICRiLCAkYiwgIzMJQCBCMwoJdmVvcgkJJHQxLCAkdDEsICR0MwkJQCBNID0gRyArIEgKCXZtdWxsLnA4CSRyLCAkYSwgJHIjbG8JCUAgSSA9IEEqQjMKCXZlb3IJCSR0MCNsbywgJHQwI2xvLCAkdDAjaGkJQCB0MCA9IChMKSAoUDAgKyBQMSkgPDwgOAoJdmFuZAkJJHQwI2hpLCAkdDAjaGksICRrNDgKCXZleHQuOAkJJHQzI2xvLCAkYiwgJGIsICM0CUAgQjQKCXZlb3IJCSR0MSNsbywgJHQxI2xvLCAkdDEjaGkJQCB0MSA9IChNKSAoUDIgKyBQMykgPDwgMTYKCXZhbmQJCSR0MSNoaSwgJHQxI2hpLCAkazMyCgl2bXVsbC5wOAkkdDMsICRhLCAkdDMjbG8JCUAgSyA9IEEqQjQKCXZlb3IJCSR0MiwgJHQyLCAkcgkJQCBOID0gSSArIEoKCXZlb3IJCSR0MCNsbywgJHQwI2xvLCAkdDAjaGkKCXZlb3IJCSR0MSNsbywgJHQxI2xvLCAkdDEjaGkKCXZlb3IJCSR0MiNsbywgJHQyI2xvLCAkdDIjaGkJQCB0MiA9IChOKSAoUDQgKyBQNSkgPDwgMjQKCXZhbmQJCSR0MiNoaSwgJHQyI2hpLCAkazE2Cgl2ZXh0LjgJCSR0MCwgJHQwLCAkdDAsICMxNQoJdmVvcgkJJHQzI2xvLCAkdDMjbG8sICR0MyNoaQlAIHQzID0gKEspIChQNiArIFA3KSA8PCAzMgoJdm1vdi5pNjQJJHQzI2hpLCAjMAoJdmV4dC44CQkkdDEsICR0MSwgJHQxLCAjMTQKCXZlb3IJCSR0MiNsbywgJHQyI2xvLCAkdDIjaGkKCXZtdWxsLnA4CSRyLCAkYSwgJGIJCUAgRCA9IEEqQgoJdmV4dC44CQkkdDMsICR0MywgJHQzLCAjMTIKCXZleHQuOAkJJHQyLCAkdDIsICR0MiwgIzEzCgl2ZW9yCQkkdDAsICR0MCwgJHQxCgl2ZW9yCQkkdDIsICR0MiwgJHQzCgl2ZW9yCQkkciwgJHIsICR0MAoJdmVvcgkJJHIsICRyLCAkdDIKX19fCn0KCiRjb2RlLj08PF9fXzsKI2lmIF9fQVJNX0FSQ0hfXz49NwouZnB1CW5lb24KCi5nbG9iYWwJZ2NtX2luaXRfbmVvbgouaGlkZGVuCWdjbV9pbml0X25lb24KLnR5cGUJZ2NtX2luaXRfbmVvbiwlZnVuY3Rpb24KLmFsaWduCTQKZ2NtX2luaXRfbmVvbjoKCXZsZDEuNjQJCSRJTiNoaSxbcjEsOjY0XSEJQCBsb2FkIEgKCXZtb3YuaTgJCSR0MCwjMHhlMQoJdmxkMS42NAkJJElOI2xvLFtyMSw6NjRdCgl2c2hsLmk2NAkkdDAjaGksIzU3Cgl2c2hyLnU2NAkkdDAjbG8sIzYzCQlAIHQwPTB4YzIuLi4uMDEKCXZkdXAuOAkJJHQxLCRJTiNoaVs3XQoJdnNoci51NjQJJEhsbywkSU4jbG8sIzYzCgl2c2hyLnM4CQkkdDEsIzcJCQlAIGJyb2FkY2FzdCBjYXJyeSBiaXQKCXZzaGwuaTY0CSRJTiwkSU4sIzEKCXZhbmQJCSR0MCwkdDAsJHQxCgl2b3JyCQkkSU4jaGksJEhsbwkJQCBIPDw8PTEKCXZlb3IJCSRJTiwkSU4sJHQwCQlAIHR3aXN0ZWQgSAoJdnN0bWlhCQlyMCx7JElOfQoKCWJ4CWxyCi5zaXplCWdjbV9pbml0X25lb24sLi1nY21faW5pdF9uZW9uCgouZ2xvYmFsCWdjbV9nbXVsdF9uZW9uCi5oaWRkZW4JZ2NtX2dtdWx0X25lb24KLnR5cGUJZ2NtX2dtdWx0X25lb24sJWZ1bmN0aW9uCi5hbGlnbgk0CmdjbV9nbXVsdF9uZW9uOgoJdmxkMS42NAkJJElOI2hpLFskWGksOjY0XSEJQCBsb2FkIFhpCgl2bGQxLjY0CQkkSU4jbG8sWyRYaSw6NjRdIQoJdm1vdi5pNjQJJGs0OCwjMHgwMDAwZmZmZmZmZmZmZmZmCgl2bGRtaWEJCSRIdGJsLHskSGxvLSRIaGl9CUAgbG9hZCB0d2lzdGVkIEgKCXZtb3YuaTY0CSRrMzIsIzB4MDAwMDAwMDBmZmZmZmZmZgojaWZkZWYgX19BUk1FTF9fCgl2cmV2NjQuOAkkSU4sJElOCiNlbmRpZgoJdm1vdi5pNjQJJGsxNiwjMHgwMDAwMDAwMDAwMDBmZmZmCgl2ZW9yCQkkSGhsLCRIbG8sJEhoaQkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCW1vdgkJJGxlbiwjMTYKCWIJCS5MZ211bHRfbmVvbgouc2l6ZQlnY21fZ211bHRfbmVvbiwuLWdjbV9nbXVsdF9uZW9uCgouZ2xvYmFsCWdjbV9naGFzaF9uZW9uCi5oaWRkZW4JZ2NtX2doYXNoX25lb24KLnR5cGUJZ2NtX2doYXNoX25lb24sJWZ1bmN0aW9uCi5hbGlnbgk0CmdjbV9naGFzaF9uZW9uOgoJdmxkMS42NAkJJFhsI2hpLFskWGksOjY0XSEJQCBsb2FkIFhpCgl2bGQxLjY0CQkkWGwjbG8sWyRYaSw6NjRdIQoJdm1vdi5pNjQJJGs0OCwjMHgwMDAwZmZmZmZmZmZmZmZmCgl2bGRtaWEJCSRIdGJsLHskSGxvLSRIaGl9CUAgbG9hZCB0d2lzdGVkIEgKCXZtb3YuaTY0CSRrMzIsIzB4MDAwMDAwMDBmZmZmZmZmZgojaWZkZWYgX19BUk1FTF9fCgl2cmV2NjQuOAkkWGwsJFhsCiNlbmRpZgoJdm1vdi5pNjQJJGsxNiwjMHgwMDAwMDAwMDAwMDBmZmZmCgl2ZW9yCQkkSGhsLCRIbG8sJEhoaQkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCi5Mb29wX25lb246Cgl2bGQxLjY0CQkkSU4jaGksWyRpbnBdIQkJQCBsb2FkIGlucAoJdmxkMS42NAkJJElOI2xvLFskaW5wXSEKI2lmZGVmIF9fQVJNRUxfXwoJdnJldjY0LjgJJElOLCRJTgojZW5kaWYKCXZlb3IJCSRJTiwkWGwJCQlAIGlucF49WGkKLkxnbXVsdF9uZW9uOgpfX18KCSZjbG11bDY0eDY0CSgkWGwsJEhsbywiJElOI2xvIik7CSMgSC5sb7dYaS5sbwokY29kZS49PDxfX187Cgl2ZW9yCQkkSU4jbG8sJElOI2xvLCRJTiNoaQlAIEthcmF0c3ViYSBwcmUtcHJvY2Vzc2luZwpfX18KCSZjbG11bDY0eDY0CSgkWG0sJEhobCwiJElOI2xvIik7CSMgKEgubG8rSC5oaSm3KFhpLmxvK1hpLmhpKQoJJmNsbXVsNjR4NjQJKCRYaCwkSGhpLCIkSU4jaGkiKTsJIyBILmhpt1hpLmhpCiRjb2RlLj08PF9fXzsKCXZlb3IJCSRYbSwkWG0sJFhsCQlAIEthcmF0c3ViYSBwb3N0LXByb2Nlc3NpbmcKCXZlb3IJCSRYbSwkWG0sJFhoCgl2ZW9yCQkkWGwjaGksJFhsI2hpLCRYbSNsbwoJdmVvcgkJJFhoI2xvLCRYaCNsbywkWG0jaGkJQCBYaHxYbCAtIDI1Ni1iaXQgcmVzdWx0CgoJQCBlcXVpdmFsZW50IG9mIHJlZHVjdGlvbl9hdnggZnJvbSBnaGFzaC14ODZfNjQucGwKCXZzaGwuaTY0CSR0MSwkWGwsIzU3CQlAIDFzdCBwaGFzZQoJdnNobC5pNjQJJHQyLCRYbCwjNjIKCXZlb3IJCSR0MiwkdDIsJHQxCQlACgl2c2hsLmk2NAkkdDEsJFhsLCM2MwoJdmVvcgkJJHQyLCAkdDIsICR0MQkJQAogCXZlb3IJCSRYbCNoaSwkWGwjaGksJHQyI2xvCUAKCXZlb3IJCSRYaCNsbywkWGgjbG8sJHQyI2hpCgoJdnNoci51NjQJJHQyLCRYbCwjMQkJQCAybmQgcGhhc2UKCXZlb3IJCSRYaCwkWGgsJFhsCgl2ZW9yCQkkWGwsJFhsLCR0MgkJQAoJdnNoci51NjQJJHQyLCR0MiwjNgoJdnNoci51NjQJJFhsLCRYbCwjMQkJQAoJdmVvcgkJJFhsLCRYbCwkWGgJCUAKCXZlb3IJCSRYbCwkWGwsJHQyCQlACgoJc3VicwkJJGxlbiwjMTYKCWJuZQkJLkxvb3BfbmVvbgoKI2lmZGVmIF9fQVJNRUxfXwoJdnJldjY0LjgJJFhsLCRYbAojZW5kaWYKCXN1YgkJJFhpLCMxNgkKCXZzdDEuNjQJCSRYbCNoaSxbJFhpLDo2NF0hCUAgd3JpdGUgb3V0IFhpCgl2c3QxLjY0CQkkWGwjbG8sWyRYaSw6NjRdCgoJYngJbHIKLnNpemUJZ2NtX2doYXNoX25lb24sLi1nY21fZ2hhc2hfbmVvbgojZW5kaWYKX19fCn0KJGNvZGUuPTw8X19fOwouYXNjaXogICJHSEFTSCBmb3IgQVJNdjQvTkVPTiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLmFsaWduICAyCgojZW5kaWYKX19fCgpmb3JlYWNoIChzcGxpdCgiXG4iLCRjb2RlKSkgewoJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW87CgoJcy9cYnEoWzAtOV0rKSMobG98aGkpL3NwcmludGYgImQlZCIsMiokMSsoJDIgZXEgImhpIikvZ2VvCW9yCglzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL2dvOyAgICAjIG1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIC1tYXJjaD1hcm12NAoKCXByaW50ICRfLCJcbiI7Cn0KY2xvc2UgU1RET1VUOyAjIGVuZm9yY2UgZmx1c2gK