IyEvdXNyL2Jpbi9lbnYgcGVybAoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFtSZV13cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyAiW1JlXXdyaXR0ZW4iIHdhcyBhY2hpZXZlZCBpbiB0d28gbWFqb3Igb3ZlcmhhdWxzLiBJbiAyMDA0IEJPRFlfKgojIGZ1bmN0aW9ucyB3ZXJlIHJlLWltcGxlbWVudGVkIHRvIGFkZHJlc3MgUDQgcGVyZm9ybWFuY2UgaXNzdWUgW3NlZQojIGNvbW1lbnRhcnkgYmVsb3ddLCBhbmQgaW4gMjAwNiB0aGUgcmVzdCB3YXMgcmV3cml0dGVuIGluIG9yZGVyIHRvCiMgZ2FpbiBmcmVlZG9tIHRvIGxpYmVyYXRlIGxpY2Vuc2luZyB0ZXJtcy4KCiMgSmFudWFyeSwgU2VwdGVtYmVyIDIwMDQuCiMKIyBJdCB3YXMgbm90ZWQgdGhhdCBJbnRlbCBJQS0zMiBDIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHdoaWNoCiMgcGVyZm9ybXMgfjMwJSAqZmFzdGVyKiBvbiBQNCBDUFUgdGhhbiBvcmlnaW5hbCAqaGFuZC1jb2RlZCoKIyBTSEExIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbi4gVG8gYWRkcmVzcyB0aGlzIHByb2JsZW0gKGFuZAojIHByb3ZlIHRoYXQgaHVtYW5zIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiBtYWNoaW5lczotKSwgdGhlCiMgb3JpZ2luYWwgY29kZSB3YXMgb3ZlcmhhdWxlZCwgd2hpY2ggcmVzdWx0ZWQgaW4gZm9sbG93aW5nCiMgcGVyZm9ybWFuY2UgY2hhbmdlczoKIwojCQljb21wYXJlZCB3aXRoIG9yaWdpbmFsCWNvbXBhcmVkIHdpdGggSW50ZWwgY2MKIwkJYXNzZW1ibGVyIGltcGwuCQlnZW5lcmF0ZWQgY29kZQojIFBlbnRpdW0JLTE2JQkJCSs0OCUKIyBQSUlJL0FNRAkrOCUJCQkrMTYlCiMgUDQJCSs4NSUoISkJCQkrNDUlCiMKIyBBcyB5b3UgY2FuIHNlZSBQZW50aXVtIGNhbWUgb3V0IGFzIGxvb3NlcjotKCBZZXQgSSByZWNrb25lZCB0aGF0CiMgaW1wcm92ZW1lbnQgb24gUDQgb3V0d2VpZ2h0cyB0aGUgbG9zcyBhbmQgaW5jb3Jwb3JhdGUgdGhpcwojIHJlLXR1bmVkIGNvZGUgdG8gMC45LjcgYW5kIGxhdGVyLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgoKIyBBdWd1c3QgMjAwOS4KIwojIEdlb3JnZSBTcGVsdmluIGhhcyB0aXBwZWQgdGhhdCBGXzQwXzU5KGIsYyxkKSBjYW4gYmUgcmV3cml0dGVuIGFzCiMgJyhjJmQpICsgKGImKGNeZCkpJywgd2hpY2ggYWxsb3dzIHRvIGFjY3VtdWxhdGUgcGFydGlhbCByZXN1bHRzCiMgYW5kIGxpZ2h0ZW4gInByZXNzdXJlIiBvbiBzY3JhdGNoIHJlZ2lzdGVycy4gVGhpcyByZXN1bHRlZCBpbgojID4xMiUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gY29udGVtcG9yYXJ5IEFNRCBjb3JlcyAod2l0aCBubwojIGRlZ3JhZGF0aW9uIG9uIG90aGVyIENQVXM6LSkuIEFsc28sIHRoZSBjb2RlIHdhcyByZXZpc2VkIHRvIG1heGltaXplCiMgImRpc3RhbmNlIiBiZXR3ZWVuIGluc3RydWN0aW9ucyBwcm9kdWNpbmcgaW5wdXQgdG8gJ2xlYScgaW5zdHJ1Y3Rpb24KIyBhbmQgdGhlICdsZWEnIGluc3RydWN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBJbnRlbCBBdG9tCiMgY29yZSBhbmQgcmVzdWx0ZWQgaW4gfjE1JSBpbXByb3ZlbWVudC4KCiMgT2N0b2JlciAyMDEwLgojCiMgQWRkIFNTU0UzLCBTdXBwbGVtZW50YWxbIV0gU1NFMywgaW1wbGVtZW50YXRpb24uIFRoZSBpZGVhIGJlaGluZCBpdAojIGlzIHRvIG9mZmxvYWQgbWVzc2FnZSBzY2hlZHVsZSBkZW5vdGVkIGJ5IFd0IGluIE5JU1Qgc3BlY2lmaWNhdGlvbiwKIyBvciBYdXBkYXRlIGluIE9wZW5TU0wgc291cmNlLCB0byBTSU1EIHVuaXQuIFRoZSBpZGVhIGlzIG5vdCBub3ZlbCwKIyBhbmQgaW4gU1NFMiBjb250ZXh0IHdhcyBmaXJzdCBleHBsb3JlZCBieSBEZWFuIEdhdWRldCBpbiAyMDA0LCBzZWUKIyBodHRwOi8vYXJjdGljLm9yZy9+ZGVhbi9jcnlwdG8vc2hhMS5odG1sLiBTaW5jZSB0aGVuIHNldmVyYWwgdGhpbmdzCiMgaGF2ZSBjaGFuZ2VkIHRoYXQgbWFkZSBpdCBpbnRlcmVzdGluZyBhZ2FpbjoKIwojIGEpIFhNTSB1bml0cyBiZWNhbWUgZmFzdGVyIGFuZCB3aWRlcjsKIyBiKSBpbnN0cnVjdGlvbiBzZXQgYmVjYW1lIG1vcmUgdmVyc2F0aWxlOwojIGMpIGFuIGltcG9ydGFudCBvYnNlcnZhdGlvbiB3YXMgbWFkZSBieSBNYXggTG9ja3R5a2hpbiwgd2hpY2ggbWFkZQojICAgIGl0IHBvc3NpYmxlIHRvIHJlZHVjZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0KIyAgICB0aGUgb3BlcmF0aW9uIGluIHF1ZXN0aW9uLCBmb3IgZnVydGhlciBkZXRhaWxzIHNlZQojICAgIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW1wcm92aW5nLXRoZS1wZXJmb3JtYW5jZS1vZi10aGUtc2VjdXJlLWhhc2gtYWxnb3JpdGhtLTEvLgoKIyBBcHJpbCAyMDExLgojCiMgQWRkIEFWWCBjb2RlIHBhdGgsIHByb2JhYmx5IG1vc3QgY29udHJvdmVyc2lhbC4uLiBUaGUgdGhpbmcgaXMgdGhhdAojIHN3aXRjaCB0byBBVlggYWxvbmUgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkgYXMgbGl0dGxlIGFzIDQlIGluCiMgY29tcGFyaXNvbiB0byBTU1NFMyBjb2RlIHBhdGguIEJ1dCBiZWxvdyByZXN1bHQgZG9lc24ndCBsb29rIGxpa2UKIyA0JSBpbXByb3ZlbWVudC4uLiBUcm91YmxlIGlzIHRoYXQgU2FuZHkgQnJpZGdlIGRlY29kZXMgJ3JvW3JsXScgYXMKIyBwYWlyIG9mILUtb3BzLCBhbmQgaXQncyB0aGUgYWRkaXRpb25hbCC1LW9wcywgdHdvIHBlciByb3VuZCwgdGhhdAojIG1ha2UgaXQgcnVuIHNsb3dlciB0aGFuIENvcmUyIGFuZCBXZXN0bWVyZS4gQnV0ICdzaFtybF1kJyBpcyBkZWNvZGVkCiMgYXMgc2luZ2xlILUtb3AgYnkgU2FuZHkgQnJpZGdlIGFuZCBpdCdzIHJlcGxhY2luZyAncm9bcmxdJyB3aXRoCiMgZXF1aXZhbGVudCAnc2hbcmxdZCcgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGltcHJlc3NpdmUgNS4xCiMgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4gQnV0ICdzaFtybF1kJyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdXNlZAojIHRvIGJlIGZhc3QsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSBmYXN0IGluIHVwY29taW5nIEJ1bGxkb3plcgojIFthY2NvcmRpbmcgdG8gaXRzIG9wdGltaXphdGlvbiBtYW51YWxdLiBXaGljaCBpcyB3aHkgQVZYIGNvZGUgcGF0aAojIGlzIGd1YXJkZWQgYnkgKmJvdGgqIEFWWCBhbmQgc3ludGhldGljIGJpdCBkZW5vdGluZyBJbnRlbCBDUFVzLgojIE9uZSBjYW4gYXJndWUgdGhhdCBpdCdzIHVuZmFpciB0byBBTUQsIGJ1dCB3aXRob3V0ICdzaFtybF1kJyBpdAojIG1ha2VzIG5vIHNlbnNlIHRvIGtlZXAgdGhlIEFWWCBjb2RlIHBhdGguIElmIHNvbWVib2R5IGZlZWxzIHRoYXQKIyBzdHJvbmdseSwgaXQncyBwcm9iYWJseSBtb3JlIGFwcHJvcHJpYXRlIHRvIGRpc2N1c3MgcG9zc2liaWxpdHkgb2YKIyB1c2luZyB2ZWN0b3Igcm90YXRlIFhPUCBvbiBBTUQuLi4KCiMgTWFyY2ggMjAxNC4KIwojIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBTSEEgRXh0ZW5zaW9ucy4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDdXJyZW50IHBlcmZvcm1hbmNlIGlzIHN1bW1hcml6ZWQgaW4gZm9sbG93aW5nIHRhYmxlLiBOdW1iZXJzIGFyZQojIENQVSBjbG9jayBjeWNsZXMgc3BlbnQgdG8gcHJvY2VzcyBzaW5nbGUgYnl0ZSAobGVzcyBpcyBiZXR0ZXIpLgojCiMJCXg4NgkJU1NTRTMJCUFWWAojIFBlbnRpdW0JMTUuNwkJLQojIFBJSUkJCTExLjUJCS0KIyBQNAkJMTAuNgkJLQojIEFNRCBLOAk3LjEJCS0KIyBDb3JlMgkJNy4zCQk2LjAvKzIyJQktCiMgQXRvbQkJMTIuNQkJOS4zKCopLyszNSUJLQojIFdlc3RtZXJlCTcuMwkJNS41LyszMyUJLQojIFNhbmR5IEJyaWRnZQk4LjgJCTYuMi8rNDAlCTUuMSgqKikvKzczJQojIEl2eSBCcmlkZ2UJNy4yCQk0LjgvKzUxJQk0LjcoKiopLys1MyUKIyBIYXN3ZWxsCTYuNQkJNC4zLys1MSUJNC4xKCoqKS8rNTglCiMgQnVsbGRvemVyCTExLjYJCTYuMC8rOTIlCiMgVklBIE5hbm8JMTAuNgkJNy41Lys0MSUKIwojICgqKQlMb29wIGlzIDEwNTYgaW5zdHJ1Y3Rpb25zIGxvbmcgYW5kIGV4cGVjdGVkIHJlc3VsdCBpcyB+OC4yNS4KIwlJdCByZW1haW5zIG15c3RlcnkgW3RvIG1lXSB3aHkgSUxQIGlzIGxpbWl0ZWQgdG8gMS43LgojCiMgKCoqKQlBcyBwZXIgYWJvdmUgY29tbWVudCwgdGhlIHJlc3VsdCBpcyBmb3IgQVZYICpwbHVzKiBzaFtybF1kLgoKJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CnJlcXVpcmUgIng4NmFzbS5wbCI7CgomYXNtX2luaXQoJEFSR1ZbMF0sInNoYTEtNTg2LnBsIiwkQVJHVlskI0FSR1ZdIGVxICIzODYiKTsKCiR4bW09JHltbT0wOwpmb3IgKEBBUkdWKSB7ICR4bW09MSBpZiAoLy1ET1BFTlNTTF9JQTMyX1NTRTIvKTsgfQoKJHltbT0xIGlmICgkeG1tICYmCgkJYCRFTlZ7Q0N9IC1XYSwtdiAtYyAtbyAvZGV2L251bGwgLXggYXNzZW1ibGVyIC9kZXYvbnVsbCAyPiYxYAoJCQk9fiAvR05VIGFzc2VtYmxlciB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8gJiYKCQkkMT49Mi4xOSk7CSMgZmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAoKJHltbT0xIGlmICgkeG1tICYmICEkeW1tICYmICRBUkdWWzBdIGVxICJ3aW4zMm4iICYmIAoJCWBuYXNtIC12IDI+JjFgID1+IC9OQVNNIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgoJCSQxPj0yLjAzKTsJIyBmaXJzdCB2ZXJzaW9uIHN1cHBvcnRpbmcgQVZYCgokeW1tPTEgaWYgKCR4bW0gJiYgISR5bW0gJiYgJEFSR1ZbMF0gZXEgIndpbjMyIiAmJgoJCWBtbCAyPiYxYCA9fiAvVmVyc2lvbiAoWzAtOV0rKVwuLyAmJgoJCSQxPj0xMCk7CSMgZmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAoKJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpIGlmICgkeG1tKTsKCgokQT0iZWF4IjsKJEI9ImVieCI7CiRDPSJlY3giOwokRD0iZWR4IjsKJEU9ImVkaSI7CiRUPSJlc2kiOwokdG1wMT0iZWJwIjsKCkBWPSgkQSwkQiwkQywkRCwkRSwkVCk7CgokYWx0PTA7CSMgMSBkZW5vdGVzIGFsdGVybmF0aXZlIElBTFUgaW1wbGVtZW50YXRpb24sIHdoaWNoIHBlcmZvcm1zCgkjIDglICp3b3JzZSogb24gUDQsIHNhbWUgb24gV2VzdG1lcmUgYW5kIEF0b20sIDIlIGJldHRlciBvbgoJIyBTYW5keSBCcmlkZ2UuLi4KCnN1YiBCT0RZXzAwXzE1Cgl7Cglsb2NhbCgkbiwkYSwkYiwkYywkZCwkZSwkZik9QF87CgoJJmNvbW1lbnQoIjAwXzE1ICRuIik7CgoJJm1vdigkZiwkYyk7CQkJIyBmIHRvIGhvbGQgRl8wMF8xOShiLGMsZCkKCSBpZiAoJG49PTApICB7ICZtb3YoJHRtcDEsJGEpOyB9CgkgZWxzZSAgICAgICAgeyAmbW92KCRhLCR0bXAxKTsgfQoJJnJvdGwoJHRtcDEsNSk7CQkJIyB0bXAxPVJPVEFURShhLDUpCgkgJnhvcigkZiwkZCk7CgkmYWRkKCR0bXAxLCRlKTsJCQkjIHRtcDErPWU7CgkgJm1vdigkZSwmc3d0bXAoJG4lMTYpKTsJIyBlIGJlY29tZXMgdm9sYXRpbGUgYW5kIGlzIGxvYWRlZAoJIAkJCQkjIHdpdGggeGksIGFsc28gbm90ZSB0aGF0IGUgYmVjb21lcwoJCQkJCSMgZiBpbiBuZXh0IHJvdW5kLi4uCgkmYW5kKCRmLCRiKTsKCSZyb3RyKCRiLDIpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmeG9yKCRmLCRkKTsJCQkjIGYgaG9sZHMgRl8wMF8xOShiLGMsZCkKCSZsZWEoJHRtcDEsJkRXUCgweDVhODI3OTk5LCR0bXAxLCRlKSk7CSMgdG1wMSs9S18wMF8xOSt4aQoKCWlmICgkbj09MTUpIHsgJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7IyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJCSAgICAgICZhZGQoJGYsJHRtcDEpOyB9CSMgZis9dG1wMQoJZWxzZSAgICAgICAgeyAmYWRkKCR0bXAxLCRmKTsgfQkjIGYgYmVjb21lcyBhIGluIG5leHQgcm91bmQKCSZtb3YoJHRtcDEsJGEpCQkJaWYgKCRhbHQgJiYgJG49PTE1KTsKCX0KCnN1YiBCT0RZXzE2XzE5Cgl7Cglsb2NhbCgkbiwkYSwkYiwkYywkZCwkZSwkZik9QF87CgoJJmNvbW1lbnQoIjE2XzE5ICRuIik7CgppZiAoJGFsdCkgewoJJnhvcigkYywkZCk7CgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmYW5kKCR0bXAxLCRjKTsJCQkjIHRtcDEgdG8gaG9sZCBGXzAwXzE5KGIsYyxkKSwgYiY9Y15kCgkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CgkmeG9yKCR0bXAxLCRkKTsJCQkjIHRtcDE9Rl8wMF8xOShiLGMsZCkKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAoJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCgkgJmFkZCgkZSwkdG1wMSk7CQkjIGUrPUZfMDBfMTkoYixjLGQpCgkmeG9yKCRjLCRkKTsJCQkjIHJlc3RvcmUgJGMKCSAmbW92KCR0bXAxLCRhKTsJCSMgYiBpbiBuZXh0IHJvdW5kCgkmcm90cigkYiwkbj09MTY/Mjo3KTsJCSMgYj1ST1RBVEUoYiwzMCkKCSAmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkjIHhpPWYKCSZyb3RsKCRhLDUpOwkJCSMgUk9UQVRFKGEsNSkKCSAmbGVhKCRmLCZEV1AoMHg1YTgyNzk5OSwkZiwkZSkpOyMgZis9Rl8wMF8xOShiLGMsZCkrZQoJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKCSAmYWRkKCRmLCRhKTsJCQkjIGYrPVJPVEFURShhLDUpCn0gZWxzZSB7CgkmbW92KCR0bXAxLCRjKTsJCQkjIHRtcDEgdG8gaG9sZCBGXzAwXzE5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQoJJnhvcigkdG1wMSwkZCk7CgkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CgkmYW5kKCR0bXAxLCRiKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAoJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCgkgJnhvcigkdG1wMSwkZCk7CQkjIHRtcDE9Rl8wMF8xOShiLGMsZCkKCSZhZGQoJGUsJHRtcDEpOwkJCSMgZSs9Rl8wMF8xOShiLGMsZCkKCSAmbW92KCR0bXAxLCRhKTsKCSZyb3RyKCRiLDIpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkjIHhpPWYKCSZyb3RsKCR0bXAxLDUpOwkJCSMgUk9UQVRFKGEsNSkKCSAmbGVhKCRmLCZEV1AoMHg1YTgyNzk5OSwkZiwkZSkpOyMgZis9Rl8wMF8xOShiLGMsZCkrZQoJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKCSAmYWRkKCRmLCR0bXAxKTsJCSMgZis9Uk9UQVRFKGEsNSkKfQoJfQoKc3ViIEJPRFlfMjBfMzkKCXsKCWxvY2FsKCRuLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKCWxvY2FsICRLPSgkbjw0MCk/MHg2ZWQ5ZWJhMToweGNhNjJjMWQ2OwoKCSZjb21tZW50KCIyMF8zOSAkbiIpOwoKaWYgKCRhbHQpIHsKCSZ4b3IoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMjBfMzkoYixjLGQpLCBiXj1jCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRkKTsJCQkjIHRtcDEgaG9sZHMgRl8yMF8zOShiLGMsZCkKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZhZGQoJGUsJHRtcDEpOwkJCSMgZSs9Rl8yMF8zOShiLGMsZCkKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAoJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCgkgJm1vdigkdG1wMSwkYSk7CQkjIGIgaW4gbmV4dCByb3VuZAoJJnJvdHIoJGIsNyk7CQkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZikJCWlmKCRuPDc3KTsjIHhpPWYKCSZyb3RsKCRhLDUpOwkJCSMgUk9UQVRFKGEsNSkKCSAmeG9yKCRiLCRjKQkJCWlmKCRuPT0zOSk7IyB3YXJtIHVwIGZvciBCT0RZXzQwXzU5CgkmYW5kKCR0bXAxLCRiKQkJCWlmKCRuPT0zOSk7CgkgJmxlYSgkZiwmRFdQKCRLLCRmLCRlKSk7CSMgZis9ZStLX1hYX1lZCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKQlpZigkbjw3OSk7IyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJGEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKCSZyb3RyKCRhLDUpCQkJaWYgKCRuPT03OSk7Cn0gZWxzZSB7CgkmbW92KCR0bXAxLCRiKTsJCQkjIHRtcDEgdG8gaG9sZCBGXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQoJJnhvcigkdG1wMSwkYyk7CgkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CgkmeG9yKCR0bXAxLCRkKTsJCQkjIHRtcDEgaG9sZHMgRl8yMF8zOShiLGMsZCkKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAoJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCgkgJmFkZCgkZSwkdG1wMSk7CQkjIGUrPUZfMjBfMzkoYixjLGQpCgkmcm90cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCgkgJm1vdigkdG1wMSwkYSk7Cgkmcm90bCgkdG1wMSw1KTsJCQkjIFJPVEFURShhLDUpCgkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKSBpZigkbjw3Nyk7IyB4aT1mCgkmbGVhKCRmLCZEV1AoJEssJGYsJGUpKTsJIyBmKz1lK0tfWFhfWVkKCSAmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKSBpZigkbjw3OSk7IyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJJmFkZCgkZiwkdG1wMSk7CQkJIyBmKz1ST1RBVEUoYSw1KQp9Cgl9CgpzdWIgQk9EWV80MF81OQoJewoJbG9jYWwoJG4sJGEsJGIsJGMsJGQsJGUsJGYpPUBfOwoKCSZjb21tZW50KCI0MF81OSAkbiIpOwoKaWYgKCRhbHQpIHsKCSZhZGQoJGUsJHRtcDEpOwkJCSMgZSs9YiYoY15kKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQoJJm1vdigkdG1wMSwkZCk7CgkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CgkmeG9yKCRjLCRkKTsJCQkjIHJlc3RvcmUgJGMKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAoJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCgkgJmFuZCgkdG1wMSwkYyk7Cgkmcm90cigkYiw3KTsJCQkjIGI9Uk9UQVRFKGIsMzApCgkgJmFkZCgkZSwkdG1wMSk7CQkjIGUrPWMmZAoJJm1vdigkdG1wMSwkYSk7CQkJIyBiIGluIG5leHQgcm91bmQKCSAmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkjIHhpPWYKCSZyb3RsKCRhLDUpOwkJCSMgUk9UQVRFKGEsNSkKCSAmeG9yKCRiLCRjKQkJCWlmICgkbjw1OSk7CgkmYW5kKCR0bXAxLCRiKQkJCWlmICgkbjw1OSk7IyB0bXAxIHRvIGhvbGQgRl80MF81OShiLGMsZCkKCSAmbGVhKCRmLCZEV1AoMHg4ZjFiYmNkYywkZiwkZSkpOyMgZis9S180MF81OStlKyhiJihjXmQpKQoJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKCSAmYWRkKCRmLCRhKTsJCQkjIGYrPVJPVEFURShhLDUpCn0gZWxzZSB7CgkmbW92KCR0bXAxLCRjKTsJCQkjIHRtcDEgdG8gaG9sZCBGXzQwXzU5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQoJJnhvcigkdG1wMSwkZCk7CgkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CgkmYW5kKCR0bXAxLCRiKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAoJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCgkgJmFkZCgkdG1wMSwkZSk7CQkjIGImKGNeZCkrPWUKCSZyb3RyKCRiLDIpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmbW92KCRlLCRhKTsJCQkjIGUgYmVjb21lcyB2b2xhdGlsZQoJJnJvdGwoJGUsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJmxlYSgkZiwmRFdQKDB4OGYxYmJjZGMsJGYsJHRtcDEpKTsjIGYrPUtfNDBfNTkrZSsoYiYoY15kKSkKCSAmbW92KCR0bXAxLCRjKTsKCSZhZGQoJGYsJGUpOwkJCSMgZis9Uk9UQVRFKGEsNSkKCSAmYW5kKCR0bXAxLCRkKTsKCSZtb3YoJGUsJnN3dG1wKCgkbisxKSUxNikpOwkjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkgJmFkZCgkZiwkdG1wMSk7CQkjIGYrPWMmZAp9Cgl9CgomZnVuY3Rpb25fYmVnaW4oInNoYTFfYmxvY2tfZGF0YV9vcmRlciIpOwppZiAoJHhtbSkgewogICZzdGF0aWNfbGFiZWwoInNoYWV4dF9zaG9ydGN1dCIpOwogICZzdGF0aWNfbGFiZWwoInNzc2UzX3Nob3J0Y3V0Iik7CiAgJnN0YXRpY19sYWJlbCgiYXZ4X3Nob3J0Y3V0IikJCWlmICgkeW1tKTsKICAmc3RhdGljX2xhYmVsKCJLX1hYX1hYIik7CgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwkjIG1ha2UgaXQgUElDIQogICZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0bXAxKTsKCSZwaWNtZXVwKCRULCJPUEVOU1NMX2lhMzJjYXBfUCIsJHRtcDEsJmxhYmVsKCJwaWNfcG9pbnQiKSk7CgkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7CgoJJm1vdgkoJEEsJkRXUCgwLCRUKSk7CgkmbW92CSgkRCwmRFdQKDQsJFQpKTsKCSZ0ZXN0CSgkRCwxPDw5KTsJCSMgY2hlY2sgU1NTRTMgYml0CgkmanoJKCZsYWJlbCgieDg2IikpOwoJJm1vdgkoJEMsJkRXUCg4LCRUKSk7CgkmdGVzdAkoJEEsMTw8MjQpOwkJIyBjaGVjayBGWFNSIGJpdAoJJmp6CSgmbGFiZWwoIng4NiIpKTsKCSZ0ZXN0CSgkQywxPDwyOSk7CQkjIGNoZWNrIFNIQSBiaXQKCSZqbnoJKCZsYWJlbCgic2hhZXh0X3Nob3J0Y3V0IikpOwoJaWYgKCR5bW0pIHsKCQkmYW5kCSgkRCwxPDwyOCk7CQkjIG1hc2sgQVZYIGJpdAoJCSZhbmQJKCRBLDE8PDMwKTsJCSMgbWFzayAiSW50ZWwgQ1BVIiBiaXQKCQkmb3IJKCRBLCREKTsKCQkmY21wCSgkQSwxPDwyOHwxPDwzMCk7CgkJJmplCSgmbGFiZWwoImF2eF9zaG9ydGN1dCIpKTsKCX0KCSZqbXAJKCZsYWJlbCgic3NzZTNfc2hvcnRjdXQiKSk7CiAgJnNldF9sYWJlbCgieDg2IiwxNik7Cn0KCSZtb3YoJHRtcDEsJndwYXJhbSgwKSk7CSMgU0hBX0NUWCAqYwoJJm1vdigkVCwmd3BhcmFtKDEpKTsJIyBjb25zdCB2b2lkICppbnB1dAoJJm1vdigkQSwmd3BhcmFtKDIpKTsJIyBzaXplX3QgbnVtCgkmc3RhY2tfcHVzaCgxNiszKTsJIyBhbGxvY2F0ZSBYWzE2XQoJJnNobCgkQSw2KTsKCSZhZGQoJEEsJFQpOwoJJm1vdigmd3BhcmFtKDIpLCRBKTsJIyBwb2ludGVyIGJleW9uZCB0aGUgZW5kIG9mIGlucHV0CgkmbW92KCRFLCZEV1AoMTYsJHRtcDEpKTsjIHByZS1sb2FkIEUKCSZqbXAoJmxhYmVsKCJsb29wIikpOwoKJnNldF9sYWJlbCgibG9vcCIsMTYpOwoKCSMgY29weSBpbnB1dCBjaHVuayB0byBYLCBidXQgcmV2ZXJzaW5nIGJ5dGUgb3JkZXIhCglmb3IgKCRpPTA7ICRpPDE2OyAkaSs9NCkKCQl7CgkJJm1vdigkQSwmRFdQKDQqKCRpKzApLCRUKSk7CgkJJm1vdigkQiwmRFdQKDQqKCRpKzEpLCRUKSk7CgkJJm1vdigkQywmRFdQKDQqKCRpKzIpLCRUKSk7CgkJJm1vdigkRCwmRFdQKDQqKCRpKzMpLCRUKSk7CgkJJmJzd2FwKCRBKTsKCQkmYnN3YXAoJEIpOwoJCSZic3dhcCgkQyk7CgkJJmJzd2FwKCREKTsKCQkmbW92KCZzd3RtcCgkaSswKSwkQSk7CgkJJm1vdigmc3d0bXAoJGkrMSksJEIpOwoJCSZtb3YoJnN3dG1wKCRpKzIpLCRDKTsKCQkmbW92KCZzd3RtcCgkaSszKSwkRCk7CgkJfQoJJm1vdigmd3BhcmFtKDEpLCRUKTsJIyByZWR1bmRhbnQgaW4gMXN0IHNwaW4KCgkmbW92KCRBLCZEV1AoMCwkdG1wMSkpOwkjIGxvYWQgU0hBX0NUWAoJJm1vdigkQiwmRFdQKDQsJHRtcDEpKTsKCSZtb3YoJEMsJkRXUCg4LCR0bXAxKSk7CgkmbW92KCRELCZEV1AoMTIsJHRtcDEpKTsKCSMgRSBpcyBwcmUtbG9hZGVkCgoJZm9yKCRpPTA7JGk8MTY7JGkrKykJeyAmQk9EWV8wMF8xNSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8MjA7JGkrKykJeyAmQk9EWV8xNl8xOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8NDA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8ODA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCgkoKCRWWzVdIGVxICREKSBhbmQgKCRWWzBdIGVxICRFKSkgb3IgZGllOwkjIGRvdWJsZS1jaGVjawoKCSZtb3YoJHRtcDEsJndwYXJhbSgwKSk7CSMgcmUtbG9hZCBTSEFfQ1RYKgoJJm1vdigkRCwmd3BhcmFtKDEpKTsJIyBEIGlzIGxhc3QgIlQiIGFuZCBpcyBkaXNjYXJkZWQKCgkmYWRkKCRFLCZEV1AoMCwkdG1wMSkpOwkjIEUgaXMgbGFzdCAiQSIuLi4KCSZhZGQoJFQsJkRXUCg0LCR0bXAxKSk7CgkmYWRkKCRBLCZEV1AoOCwkdG1wMSkpOwoJJmFkZCgkQiwmRFdQKDEyLCR0bXAxKSk7CgkmYWRkKCRDLCZEV1AoMTYsJHRtcDEpKTsKCgkmbW92KCZEV1AoMCwkdG1wMSksJEUpOwkjIHVwZGF0ZSBTSEFfQ1RYCgkgJmFkZCgkRCw2NCk7CQkjIGFkdmFuY2UgaW5wdXQgcG9pbnRlcgoJJm1vdigmRFdQKDQsJHRtcDEpLCRUKTsKCSAmY21wKCRELCZ3cGFyYW0oMikpOwkjIGhhdmUgd2UgcmVhY2hlZCB0aGUgZW5kIHlldD8KCSZtb3YoJkRXUCg4LCR0bXAxKSwkQSk7CgkgJm1vdigkRSwkQyk7CQkjIEMgaXMgbGFzdCAiRSIgd2hpY2ggbmVlZHMgdG8gYmUgInByZS1sb2FkZWQiCgkmbW92KCZEV1AoMTIsJHRtcDEpLCRCKTsKCSAmbW92KCRULCREKTsJCSMgaW5wdXQgcG9pbnRlcgoJJm1vdigmRFdQKDE2LCR0bXAxKSwkQyk7CgkmamIoJmxhYmVsKCJsb29wIikpOwoKCSZzdGFja19wb3AoMTYrMyk7CiZmdW5jdGlvbl9lbmQoInNoYTFfYmxvY2tfZGF0YV9vcmRlciIpOwoKaWYgKCR4bW0pIHsKewojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgSW50ZWwgU0hBIEV4dGVuc2lvbnMgaW1wbGVtZW50YXRpb24gb2YgU0hBMSB1cGRhdGUgZnVuY3Rpb24uCiMKbXkgKCRjdHgsJGlucCwkbnVtKT0oImVkaSIsImVzaSIsImVjeCIpOwpteSAoJEFCQ0QsJEUsJEVfLCRCU1dBUCk9bWFwKCJ4bW0kXyIsKDAuLjMpKTsKbXkgQE1TRz1tYXAoInhtbSRfIiwoNC4uNykpOwoKc3ViIHNoYTFybmRzNCB7CiBteSAoJGRzdCwkc3JjLCRpbW0pPUBfOwogICAgaWYgKCIkZHN0OiRzcmMiID1+IC94bW0oWzAtN10pOnhtbShbMC03XSkvKQogICAgewkmZGF0YV9ieXRlKDB4MGYsMHgzYSwweGNjLDB4YzB8KCQxPDwzKXwkMiwkaW1tKTsJfQp9CnN1YiBzaGExb3AzOCB7CiBteSAoJG9wY29kZWxldCwkZHN0LCRzcmMpPUBfOwogICAgaWYgKCIkZHN0OiRzcmMiID1+IC94bW0oWzAtN10pOnhtbShbMC03XSkvKQogICAgewkmZGF0YV9ieXRlKDB4MGYsMHgzOCwkb3Bjb2RlbGV0LDB4YzB8KCQxPDwzKXwkMik7CX0KfQpzdWIgc2hhMW5leHRlCXsgc2hhMW9wMzgoMHhjOCxAXyk7IH0Kc3ViIHNoYTFtc2cxCXsgc2hhMW9wMzgoMHhjOSxAXyk7IH0Kc3ViIHNoYTFtc2cyCXsgc2hhMW9wMzgoMHhjYSxAXyk7IH0KCiZmdW5jdGlvbl9iZWdpbigiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zaGFleHQiKTsKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsJIyBtYWtlIGl0IFBJQyEKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0bXAxKTsKCSZsZWEJKCR0bXAxLCZEV1AoJmxhYmVsKCJLX1hYX1hYIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRtcDEpKTsKJnNldF9sYWJlbCgic2hhZXh0X3Nob3J0Y3V0Iik7CgkmbW92CSgkY3R4LCZ3cGFyYW0oMCkpOwoJJm1vdgkoImVieCIsImVzcCIpOwoJJm1vdgkoJGlucCwmd3BhcmFtKDEpKTsKCSZtb3YJKCRudW0sJndwYXJhbSgyKSk7Cgkmc3ViCSgiZXNwIiwzMik7CgoJJm1vdmRxdQkoJEFCQ0QsJlFXUCgwLCRjdHgpKTsKCSZtb3ZkCSgkRSwmUVdQKDE2LCRjdHgpKTsKCSZhbmQJKCJlc3AiLC0zMik7CgkmbW92ZHFhCSgkQlNXQVAsJlFXUCgweDUwLCR0bXAxKSk7CSMgYnl0ZS1uLXdvcmQgc3dhcAoKCSZtb3ZkcXUJKEBNU0dbMF0sJlFXUCgwLCRpbnApKTsKCSZwc2h1ZmQJKCRBQkNELCRBQkNELDBiMDAwMTEwMTEpOwkjIGZsaXAgd29yZCBvcmRlcgoJJm1vdmRxdQkoQE1TR1sxXSwmUVdQKDB4MTAsJGlucCkpOwoJJnBzaHVmZAkoJEUsJEUsMGIwMDAxMTAxMSk7CQkjIGZsaXAgd29yZCBvcmRlcgoJJm1vdmRxdQkoQE1TR1syXSwmUVdQKDB4MjAsJGlucCkpOwoJJnBzaHVmYgkoQE1TR1swXSwkQlNXQVApOwoJJm1vdmRxdQkoQE1TR1szXSwmUVdQKDB4MzAsJGlucCkpOwoJJnBzaHVmYgkoQE1TR1sxXSwkQlNXQVApOwoJJnBzaHVmYgkoQE1TR1syXSwkQlNXQVApOwoJJnBzaHVmYgkoQE1TR1szXSwkQlNXQVApOwoJJmptcAkoJmxhYmVsKCJsb29wX3NoYWV4dCIpKTsKCiZzZXRfbGFiZWwoImxvb3Bfc2hhZXh0IiwxNik7CgkmZGVjCQkoJG51bSk7CgkmbGVhCQkoImVheCIsJkRXUCgweDQwLCRpbnApKTsKCSZtb3ZkcWEJCSgmUVdQKDAsImVzcCIpLCRFKTsJIyBvZmZsb2FkICRFCgkmcGFkZGQJCSgkRSxATVNHWzBdKTsKCSZjbW92bmUJCSgkaW5wLCJlYXgiKTsKCSZtb3ZkcWEJCSgmUVdQKDE2LCJlc3AiKSwkQUJDRCk7CSMgb2ZmbG9hZCAkQUJDRAoKZm9yKCRpPTA7JGk8MjAtNDskaSs9MikgewoJJnNoYTFtc2cxCShATVNHWzBdLEBNU0dbMV0pOwoJJm1vdmRxYQkJKCRFXywkQUJDRCk7Cgkmc2hhMXJuZHM0CSgkQUJDRCwkRSxpbnQoJGkvNSkpOwkjIDAtMy4uLgoJJnNoYTFuZXh0ZQkoJEVfLEBNU0dbMV0pOwoJJnB4b3IJCShATVNHWzBdLEBNU0dbMl0pOwoJJnNoYTFtc2cxCShATVNHWzFdLEBNU0dbMl0pOwoJJnNoYTFtc2cyCShATVNHWzBdLEBNU0dbM10pOwoKCSZtb3ZkcWEJCSgkRSwkQUJDRCk7Cgkmc2hhMXJuZHM0CSgkQUJDRCwkRV8saW50KCgkaSsxKS81KSk7Cgkmc2hhMW5leHRlCSgkRSxATVNHWzJdKTsKCSZweG9yCQkoQE1TR1sxXSxATVNHWzNdKTsKCSZzaGExbXNnMgkoQE1TR1sxXSxATVNHWzBdKTsKCglwdXNoKEBNU0csc2hpZnQoQE1TRykpOwlwdXNoKEBNU0csc2hpZnQoQE1TRykpOwp9CgkmbW92ZHF1CQkoQE1TR1swXSwmUVdQKDAsJGlucCkpOwoJJm1vdmRxYQkJKCRFXywkQUJDRCk7Cgkmc2hhMXJuZHM0CSgkQUJDRCwkRSwzKTsJCSMgNjQtNjcKCSZzaGExbmV4dGUJKCRFXyxATVNHWzFdKTsKCSZtb3ZkcXUJCShATVNHWzFdLCZRV1AoMHgxMCwkaW5wKSk7CgkmcHNodWZiCQkoQE1TR1swXSwkQlNXQVApOwoKCSZtb3ZkcWEJCSgkRSwkQUJDRCk7Cgkmc2hhMXJuZHM0CSgkQUJDRCwkRV8sMyk7CQkjIDY4LTcxCgkmc2hhMW5leHRlCSgkRSxATVNHWzJdKTsKCSZtb3ZkcXUJCShATVNHWzJdLCZRV1AoMHgyMCwkaW5wKSk7CgkmcHNodWZiCQkoQE1TR1sxXSwkQlNXQVApOwoKCSZtb3ZkcWEJCSgkRV8sJEFCQ0QpOwoJJnNoYTFybmRzNAkoJEFCQ0QsJEUsMyk7CQkjIDcyLTc1Cgkmc2hhMW5leHRlCSgkRV8sQE1TR1szXSk7CgkmbW92ZHF1CQkoQE1TR1szXSwmUVdQKDB4MzAsJGlucCkpOwoJJnBzaHVmYgkJKEBNU0dbMl0sJEJTV0FQKTsKCgkmbW92ZHFhCQkoJEUsJEFCQ0QpOwoJJnNoYTFybmRzNAkoJEFCQ0QsJEVfLDMpOwkJIyA3Ni03OQoJJm1vdmRxYQkJKCRFXywmUVdQKDAsImVzcCIpKTsKCSZwc2h1ZmIJCShATVNHWzNdLCRCU1dBUCk7Cgkmc2hhMW5leHRlCSgkRSwkRV8pOwoJJnBhZGRkCQkoJEFCQ0QsJlFXUCgxNiwiZXNwIikpOwoKCSZqbnoJCSgmbGFiZWwoImxvb3Bfc2hhZXh0IikpOwoKCSZwc2h1ZmQJKCRBQkNELCRBQkNELDBiMDAwMTEwMTEpOwoJJnBzaHVmZAkoJEUsJEUsMGIwMDAxMTAxMSk7CgkmbW92ZHF1CSgmUVdQKDAsJGN0eCksJEFCQ0QpCgkmbW92ZAkoJkRXUCgxNiwkY3R4KSwkRSk7CgkmbW92CSgiZXNwIiwiZWJ4Iik7CiZmdW5jdGlvbl9lbmQoIl9zaGExX2Jsb2NrX2RhdGFfb3JkZXJfc2hhZXh0Iik7Cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRoZSBTU1NFMyBpbXBsZW1lbnRhdGlvbi4KIwojICV4bW1bMC03XSBhcmUgdXNlZCBhcyByaW5nIEBYW10gYnVmZmVyIGNvbnRhaW5pbmcgcXVhZHJ1cGxlcyBvZiBsYXN0CiMgMzIgZWxlbWVudHMgb2YgdGhlIG1lc3NhZ2Ugc2NoZWR1bGUgb3IgWHVwZGF0ZSBvdXRwdXRzLiBGaXJzdCA0CiMgcXVhZHJ1cGxlcyBhcmUgc2ltcGx5IGJ5dGUtc3dhcHBlZCBpbnB1dCwgbmV4dCA0IGFyZSBjYWxjdWxhdGVkCiMgYWNjb3JkaW5nIHRvIG1ldGhvZCBvcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBEZWFuIEdhdWRldCAobW9kdWxvCiMgYmVpbmcgaW1wbGVtZW50ZWQgaW4gU1NTRTMpLiBPbmNlIDggcXVhZHJ1cGxlcyBvciAzMiBlbGVtZW50cyBhcmUKIyBjb2xsZWN0ZWQsIGl0IHN3aXRjaGVzIHRvIHJvdXRpbmUgcHJvcG9zZWQgYnkgTWF4IExvY2t0eXVraGluLgojCiMgQ2FsY3VsYXRpb25zIGluZXZpdGFibHkgcmVxdWlyZSB0ZW1wb3JhcnkgcmVxaXN0ZXJzLCBhbmQgdGhlcmUgYXJlCiMgbm8gJXhtbSByZWdpc3RlcnMgbGVmdCB0byBzcGFyZS4gRm9yIHRoaXMgcmVhc29uIHBhcnQgb2YgdGhlIHJpbmcKIyBidWZmZXIsIFhbMi4uNF0gdG8gYmUgc3BlY2lmaWMsIGlzIG9mZmxvYWRlZCB0byAzIHF1YWRyaXBsZXMgcmluZwojIGJ1ZmZlciBvbiB0aGUgc3RhY2suIEtlZXAgaW4gbWluZCB0aGF0IFhbMl0gaXMgYWxpYXMgWFstNl0sIFhbM10gLQojIFhbLTVdLCBhbmQgWFs0XSAtIFhbLTRdLi4uCiMKIyBBbm90aGVyIG5vdGFibGUgb3B0aW1pemF0aW9uIGlzIGFnZ3Jlc3NpdmUgc3RhY2sgZnJhbWUgY29tcHJlc3Npb24KIyBhaW1pbmcgdG8gbWluaW1pemUgYW1vdW50IG9mIDktYnl0ZSBpbnN0cnVjdGlvbnMuLi4KIwojIFlldCBhbm90aGVyIG5vdGFibGUgb3B0aW1pemF0aW9uIGlzICJqdW1waW5nIiAkQiB2YXJpYWJsZS4gSXQgbWVhbnMKIyB0aGF0IHRoZXJlIGlzIG5vIHJlZ2lzdGVyIHBlcm1hbmVudGx5IGFsbG9jYXRlZCBmb3IgJEIgdmFsdWUuIFRoaXMKIyBhbGxvd2VkIHRvIGVsaW1pbmF0ZSBvbmUgaW5zdHJ1Y3Rpb24gZnJvbSBib2R5XzIwXzM5Li4uCiMKbXkgJFhpPTQ7CQkJIyA0eFNJTUQgWHVwZGF0ZSByb3VuZCwgc3RhcnQgcHJlLXNlZWRlZApteSBAWD1tYXAoInhtbSRfIiwoNC4uNywwLi4zKSk7CSMgcHJlLXNlZWRlZCBmb3IgJFhpPTQKbXkgQFY9KCRBLCRCLCRDLCRELCRFKTsKbXkgJGo9MDsJCQkjIGhhc2ggcm91bmQKbXkgJHJ4PTA7Cm15IEBUPSgkVCwkdG1wMSk7Cm15ICRpbnA7CgpteSAkX3JvbD1zdWIgeyAmcm9sKEBfKSB9OwpteSAkX3Jvcj1zdWIgeyAmcm9yKEBfKSB9OwoKJmZ1bmN0aW9uX2JlZ2luKCJfc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzIik7CgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgkdG1wMSk7CgkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7CiZzZXRfbGFiZWwoInNzc2UzX3Nob3J0Y3V0Iik7CgoJJm1vdmRxYQkoQFhbM10sJlFXUCgwLCR0bXAxKSk7CQkjIEtfMDBfMTkKCSZtb3ZkcWEJKEBYWzRdLCZRV1AoMTYsJHRtcDEpKTsJCSMgS18yMF8zOQoJJm1vdmRxYQkoQFhbNV0sJlFXUCgzMiwkdG1wMSkpOwkJIyBLXzQwXzU5CgkmbW92ZHFhCShAWFs2XSwmUVdQKDQ4LCR0bXAxKSk7CQkjIEtfNjBfNzkKCSZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQsJHRtcDEpKTsJCSMgcGJzd2FwIG1hc2sKCgkmbW92CSgkRSwmd3BhcmFtKDApKTsJCSMgbG9hZCBhcmd1bWVudCBibG9jawoJJm1vdgkoJGlucD1AVFsxXSwmd3BhcmFtKDEpKTsKCSZtb3YJKCRELCZ3cGFyYW0oMikpOwoJJm1vdgkoQFRbMF0sImVzcCIpOwoKCSMgc3RhY2sgZnJhbWUgbGF5b3V0CgkjCgkjICswCVhbMF0rSwlYWzFdK0sJWFsyXStLCVhbM10rSwkjIFhNTS0+SUFMVSB4ZmVyIGFyZWEKCSMJWFs0XStLCVhbNV0rSwlYWzZdK0sJWFs3XStLCgkjCVhbOF0rSwlYWzldK0sJWFsxMF0rSwlYWzExXStLCgkjCVhbMTJdK0sJWFsxM10rSwlYWzE0XStLCVhbMTVdK0sKCSMKCSMgKzY0CVhbMF0JWFsxXQlYWzJdCVhbM10JIyBYTU0tPlhNTSBiYWNrdHJhY2UgYXJlYQoJIwlYWzRdCVhbNV0JWFs2XQlYWzddCgkjCVhbOF0JWFs5XQlYWzEwXQlYWzExXQkjIGV2ZW4gYm9ycm93ZWQgZm9yIEtfMDBfMTkKCSMKCSMgKzExMglLXzIwXzM5CUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CSMgY29uc3RhbnRzCgkjCUtfNDBfNTkJS180MF81OQlLXzQwXzU5CUtfNDBfNTkKCSMJS182MF83OQlLXzYwXzc5CUtfNjBfNzkJS182MF83OQoJIwlLXzAwXzE5CUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CgkjCXBic3dhcCBtYXNrCgkjCgkjICsxOTIJY3R4CQkJCSMgYXJndW1lbnQgYmxvY2sKCSMgKzE5NglpbnAKCSMgKzIwMAllbmQKCSMgKzIwNAllc3AKCSZzdWIJKCJlc3AiLDIwOCk7CgkmYW5kCSgiZXNwIiwtNjQpOwoKCSZtb3ZkcWEJKCZRV1AoMTEyKzAsImVzcCIpLEBYWzRdKTsJIyBjb3B5IGNvbnN0YW50cwoJJm1vdmRxYQkoJlFXUCgxMTIrMTYsImVzcCIpLEBYWzVdKTsKCSZtb3ZkcWEJKCZRV1AoMTEyKzMyLCJlc3AiKSxAWFs2XSk7Cgkmc2hsCSgkRCw2KTsJCQkJIyBsZW4qNjQKCSZtb3ZkcWEJKCZRV1AoMTEyKzQ4LCJlc3AiKSxAWFszXSk7CgkmYWRkCSgkRCwkaW5wKTsJCQkjIGVuZCBvZiBpbnB1dAoJJm1vdmRxYQkoJlFXUCgxMTIrNjQsImVzcCIpLEBYWzJdKTsKCSZhZGQJKCRpbnAsNjQpOwoJJm1vdgkoJkRXUCgxOTIrMCwiZXNwIiksJEUpOwkJIyBzYXZlIGFyZ3VtZW50IGJsb2NrCgkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKCSZtb3YJKCZEV1AoMTkyKzgsImVzcCIpLCREKTsKCSZtb3YJKCZEV1AoMTkyKzEyLCJlc3AiKSxAVFswXSk7CSMgc2F2ZSBvcmlnaW5hbCAlZXNwCgoJJm1vdgkoJEEsJkRXUCgwLCRFKSk7CQkjIGxvYWQgY29udGV4dAoJJm1vdgkoJEIsJkRXUCg0LCRFKSk7CgkmbW92CSgkQywmRFdQKDgsJEUpKTsKCSZtb3YJKCRELCZEV1AoMTIsJEUpKTsKCSZtb3YJKCRFLCZEV1AoMTYsJEUpKTsKCSZtb3YJKEBUWzBdLCRCKTsJCQkjIG1hZ2ljIHNlZWQKCgkmbW92ZHF1CShAWFstNCY3XSwmUVdQKC02NCwkaW5wKSk7CSMgbG9hZCBpbnB1dCB0byAleG1tWzAtM10KCSZtb3ZkcXUJKEBYWy0zJjddLCZRV1AoLTQ4LCRpbnApKTsKCSZtb3ZkcXUJKEBYWy0yJjddLCZRV1AoLTMyLCRpbnApKTsKCSZtb3ZkcXUJKEBYWy0xJjddLCZRV1AoLTE2LCRpbnApKTsKCSZwc2h1ZmIJKEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCgkmcHNodWZiCShAWFstMyY3XSxAWFsyXSk7CgkmcHNodWZiCShAWFstMiY3XSxAWFsyXSk7CgkmbW92ZHFhCSgmUVdQKDExMi0xNiwiZXNwIiksQFhbM10pOwkjIGJvcnJvdyBsYXN0IGJhY2t0cmFjZSBzbG90CgkmcHNodWZiCShAWFstMSY3XSxAWFsyXSk7CgkmcGFkZGQJKEBYWy00JjddLEBYWzNdKTsJCSMgYWRkIEtfMDBfMTkKCSZwYWRkZAkoQFhbLTMmN10sQFhbM10pOwoJJnBhZGRkCShAWFstMiY3XSxAWFszXSk7CgkmbW92ZHFhCSgmUVdQKDAsImVzcCIpLEBYWy00JjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSZwc3ViZAkoQFhbLTQmN10sQFhbM10pOwkJIyByZXN0b3JlIFhbXQoJJm1vdmRxYQkoJlFXUCgwKzE2LCJlc3AiKSxAWFstMyY3XSk7CgkmcHN1YmQJKEBYWy0zJjddLEBYWzNdKTsKCSZtb3ZkcWEJKCZRV1AoMCszMiwiZXNwIiksQFhbLTImN10pOwoJJm1vdgkoQFRbMV0sJEMpOwoJJnBzdWJkCShAWFstMiY3XSxAWFszXSk7CgkmeG9yCShAVFsxXSwkRCk7CgkmcHNodWZkCShAWFswXSxAWFstNCY3XSwweGVlKTsJCSMgd2FzICZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKCSZhbmQJKEBUWzBdLEBUWzFdKTsKCSZqbXAJKCZsYWJlbCgibG9vcCIpKTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTU0UgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgaXMgZmlyc3QgYnJva2VuIHRvIGdyb3VwcyBvZiBpbmRlcGVudGVudAojIGluc3RydWN0aW9ucywgaW5kZXBlbmRlbnQgaW4gcmVzcGVjdCB0byB0aGVpciBpbnB1dHMgYW5kIHNoaWZ0ZXIKIyAobm90IGFsbCBhcmNoaXRlY3R1cmVzIGhhdmUgbW9yZSB0aGFuIG9uZSkuIFRoZW4gSUFMVSBpbnN0cnVjdGlvbnMKIyBhcmUgImtuaXR0ZWQgaW4iIGJldHdlZW4gdGhlIFNTRSBncm91cHMuIERpc3RhbmNlIGlzIG1haW50YWluZWQgZm9yCiMgU1NFIGxhdGVuY3kgb2YgMiBpbiBob3BlIHRoYXQgaXQgZml0cyBiZXR0ZXIgdXBjb21pbmcgQU1EIEJ1bGxkb3plcgojIFt3aGljaCBhbGxlZ2VkbHkgYWxzbyBpbXBsZW1lbnRzIFNTU0UzXS4uLgojCiMgVGVtcG9yYXJ5IHJlZ2lzdGVycyB1c2FnZS4gWFsyXSBpcyB2b2xhdGlsZSBhdCB0aGUgZW50cnkgYW5kIGF0IHRoZQojIGVuZCBpcyByZXN0b3JlZCBmcm9tIGJhY2t0cmFjZSByaW5nIGJ1ZmZlci4gWFszXSBpcyBleHBlY3RlZCB0bwojIGNvbnRhaW4gY3VycmVudCBLX1hYX1hYIGNvbnN0YW50IGFuZCBpcyB1c2VkIHRvIGNhY2x1bGF0ZSBYWy0xXStLCiMgZnJvbSBwcmV2aW91cyByb3VuZCwgaXQgYmVjb21lcyB2b2xhdGlsZSB0aGUgbW9tZW50IHRoZSB2YWx1ZSBpcwojIHNhdmVkIHRvIHN0YWNrIGZvciB0cmFuc2ZlciB0byBJQUxVLiBYWzRdIGJlY29tZXMgdm9sYXRpbGUgd2hlbmV2ZXIKIyBYWy00XSBpcyBhY2N1bXVsYXRlZCBhbmQgb2ZmbG9hZGVkIHRvIGJhY2t0cmFjZSByaW5nIGJ1ZmZlciwgYXQgdGhlCiMgZW5kIGl0IGlzIGxvYWRlZCB3aXRoIG5leHQgS19YWF9YWCBbd2hpY2ggYmVjb21lcyBYWzNdIGluIG5leHQKIyByb3VuZF0uLi4KIwpzdWIgWHVwZGF0ZV9zc3NlM18xNl8zMSgpCQkjIHJlY2FsbCB0aGF0ICRYaSBzdGFydHMgd3RpaCA0CnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyA0MCBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHVucGNrbHFkcShAWFswXSxAWFstMyY3XSk7CSMgY29tcG9zZSAiWFstMTRdIiBpbiAiWFswXSIsIHdhcyAmcGFsaWducihAWFswXSxAWFstNCY3XSw4KTsKCSZtb3ZkcWEJKEBYWzJdLEBYWy0xJjddKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJICAmcGFkZGQJKEBYWzNdLEBYWy0xJjddKTsKCSAgJm1vdmRxYQkoJlFXUCg2NCsxNiooKCRYaS00KSUzKSwiZXNwIiksQFhbLTQmN10pOyMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHNybGRxCShAWFsyXSw0KTsJCSMgIlhbLTNdIiwgMyBkd29yZHMKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHhvcgkoQFhbMF0sQFhbLTQmN10pOwkjICJYWzBdIl49IlhbLTE2XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoKCSZweG9yCShAWFsyXSxAWFstMiY3XSk7CSMgIlhbLTNdIl4iWFstOF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnB4b3IJKEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iXj0iWFstM10iXiJYWy04XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJm1vdmRxYQkoQFhbNF0sQFhbMF0pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSZtb3ZkcWEgKEBYWzJdLEBYWzBdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZwc2xsZHEJKEBYWzRdLDEyKTsJCSMgIlhbMF0iPDw5NiwgZXh0cmFjdCBvbmUgZHdvcmQKCSZwYWRkZAkoQFhbMF0sQFhbMF0pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHNybGQJKEBYWzJdLDMxKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoJJm1vdmRxYQkoQFhbM10sQFhbNF0pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZwc3JsZAkoQFhbNF0sMzApOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkmcG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIjw8PD0xCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJm1vdmRxYQkoQFhbMl0sJlFXUCg2NCsxNiooKCRYaS02KSUzKSwiZXNwIikpIGlmICgkWGk+NSk7CSMgcmVzdG9yZSBYW10gZnJvbSBiYWNrdHJhY2UgYnVmZmVyCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZwc2xsZAkoQFhbM10sMik7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSZweG9yICAgKEBYWzBdLEBYWzRdKTsKCSAgJm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCgkWGkpLzUpLCJlc3AiKSk7CSMgS19YWF9YWAoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHhvcgkoQFhbMF0sQFhbM10pOwkJIyAiWFswXSJePSgiWFswXSI8PDk2KTw8PDIKCSAgJnBzaHVmZAkoQFhbMV0sQFhbLTMmN10sMHhlZSkJaWYgKCRYaTw3KTsJIyB3YXMgJm1vdmRxYQkoQFhbMV0sQFhbLTImN10pCgkgICZwc2h1ZmQJKEBYWzNdLEBYWy0xJjddLDB4ZWUpCWlmICgkWGk9PTcpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCgogICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCn0KCnN1YiBYdXBkYXRlX3Nzc2UzXzMyXzc5KCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIHRvIDQ0IGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSZweG9yCShAWFswXSxAWFstNCY3XSk7CSMgIlhbMF0iPSJYWy0zMl0iXiJYWy0xNl0iCgkmcHVucGNrbHFkcShAWFsyXSxAWFstMSY3XSk7CSMgY29tcG9zZSAiWFstNl0iLCB3YXMgJnBhbGlnbnIoQFhbMl0sQFhbLTImN10sOCkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgoJJnB4b3IJKEBYWzBdLEBYWy03JjddKTsJIyAiWFswXSJePSJYWy0yOF0iCgkgICZtb3ZkcWEJKCZRV1AoNjQrMTYqKCgkWGktNCklMyksImVzcCIpLEBYWy00JjddKTsJIyBzYXZlIFhbXSB0byBiYWNrdHJhY2UgYnVmZmVyCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSkJCWlmIChAaW5zbnNbMF0gPX4gL19yb2wvKTsKCSBpZiAoJFhpJTUpIHsKCSAgJm1vdmRxYQkoQFhbNF0sQFhbM10pOwkjICJwZXJwZXR1YXRlIiBLX1hYX1hYLi4uCgkgfSBlbHNlIHsJCQkjIC4uLiBvciBsb2FkIG5leHQgb25lCgkgICZtb3ZkcWEJKEBYWzRdLCZRV1AoMTEyLTE2KzE2KigkWGkvNSksImVzcCIpKTsKCSB9CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnB4b3IJKEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iXj0iWFstNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCgkmbW92ZHFhCShAWFsyXSxAWFswXSk7CgkgICZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiksQFhbM10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSkJCWlmIChAaW5zbnNbMF0gPX4gL19yb2wvKTsKCgkmcHNsbGQJKEBYWzBdLDIpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzcmxkCShAWFsyXSwzMCk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpCQlpZiAoQGluc25zWzFdID1+IC9fcm9sLyk7CgkgZXZhbChzaGlmdChAaW5zbnMpKQkJaWYgKEBpbnNuc1swXSA9fiAvX3JvbC8pOwoKCSZwb3IJKEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iPDw8PTIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJm1vdmRxYQkoQFhbMl0sJlFXUCg2NCsxNiooKCRYaS02KSUzKSwiZXNwIikpIGlmKCRYaTwxOSk7CSMgcmVzdG9yZSBYW10gZnJvbSBiYWNrdHJhY2UgYnVmZmVyCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgICZwc2h1ZmQJKEBYWzNdLEBYWy0xXSwweGVlKQlpZiAoJFhpPDE5KTsJIyB3YXMgJm1vdmRxYQkoQFhbM10sQFhbMF0pCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCgogICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCn0KCnN1YiBYdXBsYXN0X3Nzc2UzXzgwKCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIElBTFUKCgkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JCSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwoKCSZtb3YJKCRpbnA9QFRbMV0sJkRXUCgxOTIrNCwiZXNwIikpOwoJJmNtcAkoJGlucCwmRFdQKDE5Mis4LCJlc3AiKSk7CgkmamUJKCZsYWJlbCgiZG9uZSIpKTsKCgkmbW92ZHFhCShAWFszXSwmUVdQKDExMis0OCwiZXNwIikpOwkjIEtfMDBfMTkKCSZtb3ZkcWEJKEBYWzJdLCZRV1AoMTEyKzY0LCJlc3AiKSk7CSMgcGJzd2FwIG1hc2sKCSZtb3ZkcXUJKEBYWy00JjddLCZRV1AoMCwkaW5wKSk7CSMgbG9hZCBpbnB1dAoJJm1vdmRxdQkoQFhbLTMmN10sJlFXUCgxNiwkaW5wKSk7CgkmbW92ZHF1CShAWFstMiY3XSwmUVdQKDMyLCRpbnApKTsKCSZtb3ZkcXUJKEBYWy0xJjddLCZRV1AoNDgsJGlucCkpOwoJJmFkZAkoJGlucCw2NCk7CgkmcHNodWZiCShAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAoJJm1vdgkoJkRXUCgxOTIrNCwiZXNwIiksJGlucCk7CgkmbW92ZHFhCSgmUVdQKDExMi0xNiwiZXNwIiksQFhbM10pOwkjIGJvcnJvdyBsYXN0IGJhY2t0cmFjZSBzbG90CgogICRYaT0wOwp9CgpzdWIgWGxvb3Bfc3NzZTMoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZwc2h1ZmIJKEBYWygkWGktMykmN10sQFhbMl0pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcGFkZGQJKEBYWygkWGktNCkmN10sQFhbM10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmbW92ZHFhCSgmUVdQKDArMTYqJFhpLCJlc3AiKSxAWFsoJFhpLTQpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzdWJkCShAWFsoJFhpLTQpJjddLEBYWzNdKTsKCglmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQogICRYaSsrOwp9CgpzdWIgWHRhaWxfc3NzZTMoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCglmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQp9CgpzdWIgYm9keV8wMF8xOSAoKSB7CSMgKChjXmQpJmIpXmQKCSMgb24gc3RhcnQgQFRbMF09KGNeZCkmYgoJcmV0dXJuICZib2R5XzIwXzM5KCkJaWYgKCRyeD09MTkpOwkkcngrKzsKCSgKCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCgknJiRfcm9yCSgkYiwkaj83OjIpOycsCSMgJGI+Pj4yCgknJnhvcgkoQFRbMF0sJGQpOycsCgknJm1vdgkoQFRbMV0sJGEpOycsCSMgJGIgaW4gbmV4dCByb3VuZAoKCScmYWRkCSgkZSwmRFdQKDQqKCRqJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoJJyZ4b3IJKCRiLCRjKTsnLAkjICRjXiRkIGZvciBuZXh0IHJvdW5kCgoJJyYkX3JvbAkoJGEsNSk7JywKCScmYWRkCSgkZSxAVFswXSk7JywKCScmYW5kCShAVFsxXSwkYik7JywJIyAoJGImKCRjXiRkKSkgZm9yIG5leHQgcm91bmQKCgknJnhvcgkoJGIsJGMpOycsCSMgcmVzdG9yZSAkYgoJJyZhZGQJKCRlLCRhKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CgpzdWIgYm9keV8yMF8zOSAoKSB7CSMgYl5kXmMKCSMgb24gZW50cnkgQFRbMF09Yl5kCglyZXR1cm4gJmJvZHlfNDBfNTkoKQlpZiAoJHJ4PT0zOSk7CSRyeCsrOwoJKAoJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KCScmYWRkCSgkZSwmRFdQKDQqKCRqJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoJJyZ4b3IJKEBUWzBdLCRkKQlpZigkaj09MTkpOycuCgknJnhvcgkoQFRbMF0sJGMpCWlmKCRqPiAxOSk7JywJIyAoJGJeJGReJGMpCgknJm1vdgkoQFRbMV0sJGEpOycsCSMgJGIgaW4gbmV4dCByb3VuZAoKCScmJF9yb2wJKCRhLDUpOycsCgknJmFkZAkoJGUsQFRbMF0pOycsCgknJnhvcgkoQFRbMV0sJGMpCWlmICgkajwgNzkpOycsCSMgJGJeJGQgZm9yIG5leHQgcm91bmQKCgknJiRfcm9yCSgkYiw3KTsnLAkjICRiPj4+MgoJJyZhZGQJKCRlLCRhKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CgpzdWIgYm9keV80MF81OSAoKSB7CSMgKChiXmMpJihjXmQpKV5jCgkjIG9uIGVudHJ5IEBUWzBdPShiXmMpLCAoY149ZCkKCSRyeCsrOwoJKAoJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KCScmYWRkCSgkZSwmRFdQKDQqKCRqJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoJJyZhbmQJKEBUWzBdLCRjKQlpZiAoJGo+PTQwKTsnLAkjIChiXmMpJihjXmQpCgknJnhvcgkoJGMsJGQpCQlpZiAoJGo+PTQwKTsnLAkjIHJlc3RvcmUgJGMKCgknJiRfcm9yCSgkYiw3KTsnLAkjICRiPj4+MgoJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGZvciBuZXh0IHJvdW5kCgknJnhvcgkoQFRbMF0sJGMpOycsCgoJJyYkX3JvbAkoJGEsNSk7JywKCScmYWRkCSgkZSxAVFswXSk7JywKCScmeG9yCShAVFsxXSwkYykJaWYgKCRqPT01OSk7Jy4KCScmeG9yCShAVFsxXSwkYikJaWYgKCRqPCA1OSk7JywJIyBiXmMgZm9yIG5leHQgcm91bmQKCgknJnhvcgkoJGIsJGMpCQlpZiAoJGo8IDU5KTsnLAkjIGNeZCBmb3IgbmV4dCByb3VuZAoJJyZhZGQJKCRlLCRhKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CiMjIyMjIwpzdWIgYm9keXhfMDBfMTkgKCkgewkjICgoY15kKSZiKV5kCgkjIG9uIHN0YXJ0IEBUWzBdPShiJmMpXih+YiZkKSwgJGUrPVhbXStLCglyZXR1cm4gJmJvZHl4XzIwXzM5KCkJaWYgKCRyeD09MTkpOwkkcngrKzsKCSgKCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCgoJJyZyb3J4CSgkYiwkYiwyKQkJCWlmICgkaj09MCk7Jy4JIyAkYj4+PjIKCScmcm9yeAkoJGIsQFRbMV0sNykJCQlpZiAoJGohPTApOycsCSMgJGI+Pj4yCgknJmxlYQkoJGUsJkRXUCgwLCRlLEBUWzBdKSk7JywKCScmcm9yeAkoQFRbMF0sJGEsNSk7JywKCgknJmFuZG4JKEBUWzFdLCRhLCRjKTsnLAoJJyZhbmQJKCRhLCRiKScsCgknJmFkZAkoJGQsJkRXUCg0KigoJGorMSkmMTUpLCJlc3AiKSk7JywJIyBYW10rSyB4ZmVyCgoJJyZ4b3IJKEBUWzFdLCRhKScsCgknJmFkZAkoJGUsQFRbMF0pOycJLickaisrOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKCSk7Cn0KCnN1YiBib2R5eF8yMF8zOSAoKSB7CSMgYl5kXmMKCSMgb24gc3RhcnQgJGI9Yl5jXmQKCXJldHVybiAmYm9keXhfNDBfNTkoKQlpZiAoJHJ4PT0zOSk7CSRyeCsrOwoJKAoJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KCgknJmFkZAkoJGUsKCRqPT0xOT9AVFswXTokYikpJywKCScmcm9yeAkoJGIsQFRbMV0sNyk7JywJIyAkYj4+PjIKCScmcm9yeAkoQFRbMF0sJGEsNSk7JywKCgknJnhvcgkoJGEsJGIpCQkJCWlmICgkajw3OSk7JywKCScmYWRkCSgkZCwmRFdQKDQqKCgkaisxKSYxNSksImVzcCIpKQlpZiAoJGo8NzkpOycsCSMgWFtdK0sgeGZlcgoJJyZ4b3IJKCRhLCRjKQkJCQlpZiAoJGo8NzkpOycsCgknJmFkZAkoJGUsQFRbMF0pOycJLickaisrOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKCSk7Cn0KCnN1YiBib2R5eF80MF81OSAoKSB7CSMgKChiXmMpJihjXmQpKV5jCgkjIG9uIHN0YXJ0ICRiPSgoYl5jKSYoY15kKSleYwoJcmV0dXJuICZib2R5eF8yMF8zOSgpCWlmICgkcng9PTU5KTsJJHJ4Kys7CgkoCgknKCRhLCRiLCRjLCRkLCRlKT1AVjsnLgoKCScmcm9yeAkoQFRbMF0sJGEsNSknLAoJJyZsZWEJKCRlLCZEV1AoMCwkZSwkYikpJywKCScmcm9yeAkoJGIsQFRbMV0sNyknLAkjICRiPj4+MgoJJyZhZGQJKCRkLCZEV1AoNCooKCRqKzEpJjE1KSwiZXNwIikpJywJIyBYW10rSyB4ZmVyCgoJJyZtb3YJKEBUWzFdLCRjKScsCgknJnhvcgkoJGEsJGIpJywJIyBiXmMgZm9yIG5leHQgcm91bmQKCScmeG9yCShAVFsxXSwkYiknLAkjIGNeZCBmb3IgbmV4dCByb3VuZAoKCScmYW5kCSgkYSxAVFsxXSknLAoJJyZhZGQJKCRlLEBUWzBdKScsCgknJnhvcgkoJGEsJGIpJwkuJyRqKys7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JwoJKTsKfQoKJnNldF9sYWJlbCgibG9vcCIsMTYpOwoJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBsYXN0X3Nzc2UzXzgwKFwmYm9keV8yMF8zOSk7CSMgY2FuIGp1bXAgdG8gImRvbmUiCgoJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOwoKCSZYbG9vcF9zc3NlMyhcJmJvZHlfMjBfMzkpOwoJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7CgkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKCgkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CgkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsxXSkpOwkJIyAkYgoJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CgkmbW92CSgmRFdQKDAsQFRbMV0pLCRBKTsKCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOwoJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwoJJm1vdgkoJkRXUCg4LEBUWzFdKSwkQyk7CgkmbW92CSgkQiwkQyk7CgkmbW92CSgmRFdQKDEyLEBUWzFdKSwkRCk7CgkmeG9yCSgkQiwkRCk7CgkmbW92CSgmRFdQKDE2LEBUWzFdKSwkRSk7CgkmbW92CShAVFsxXSxAVFswXSk7CgkmcHNodWZkCShAWFswXSxAWFstNCY3XSwweGVlKTsJCSMgd2FzICZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKCSZhbmQJKEBUWzBdLCRCKTsKCSZtb3YJKCRCLCRUWzFdKTsKCgkmam1wCSgmbGFiZWwoImxvb3AiKSk7Cgomc2V0X2xhYmVsKCJkb25lIiwxNik7CQkkaj0kc2F2ZWRfajsgQFY9QHNhdmVkX1Y7CgoJJlh0YWlsX3Nzc2UzKFwmYm9keV8yMF8zOSk7CgkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOwoKCSZtb3YJKEBUWzFdLCZEV1AoMTkyLCJlc3AiKSk7CSMgdXBkYXRlIGNvbnRleHQKCSZhZGQJKCRBLCZEV1AoMCxAVFsxXSkpOwoJJm1vdgkoImVzcCIsJkRXUCgxOTIrMTIsImVzcCIpKTsJIyByZXN0b3JlICVlc3AKCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsxXSkpOwkJIyAkYgoJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CgkmbW92CSgmRFdQKDAsQFRbMV0pLCRBKTsKCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOwoJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwoJJm1vdgkoJkRXUCg4LEBUWzFdKSwkQyk7CgkmbW92CSgmRFdQKDEyLEBUWzFdKSwkRCk7CgkmbW92CSgmRFdQKDE2LEBUWzFdKSwkRSk7CgomZnVuY3Rpb25fZW5kKCJfc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzIik7Cgokcng9MDsJIyByZXNldAoKaWYgKCR5bW0pIHsKbXkgJFhpPTQ7CQkJIyA0eFNJTUQgWHVwZGF0ZSByb3VuZCwgc3RhcnQgcHJlLXNlZWRlZApteSBAWD1tYXAoInhtbSRfIiwoNC4uNywwLi4zKSk7CSMgcHJlLXNlZWRlZCBmb3IgJFhpPTQKbXkgQFY9KCRBLCRCLCRDLCRELCRFKTsKbXkgJGo9MDsJCQkjIGhhc2ggcm91bmQKbXkgQFQ9KCRULCR0bXAxKTsKbXkgJGlucDsKCm15ICRfcm9sPXN1YiB7ICZzaGxkKEBfWzBdLEBfKSB9OwpteSAkX3Jvcj1zdWIgeyAmc2hyZChAX1swXSxAXykgfTsKCiZmdW5jdGlvbl9iZWdpbigiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9hdngiKTsKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsJIyBtYWtlIGl0IFBJQyEKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0bXAxKTsKCSZsZWEJKCR0bXAxLCZEV1AoJmxhYmVsKCJLX1hYX1hYIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRtcDEpKTsKJnNldF9sYWJlbCgiYXZ4X3Nob3J0Y3V0Iik7Cgkmdnplcm9hbGwoKTsKCgkmdm1vdmRxYShAWFszXSwmUVdQKDAsJHRtcDEpKTsJCSMgS18wMF8xOQoJJnZtb3ZkcWEoQFhbNF0sJlFXUCgxNiwkdG1wMSkpOwkJIyBLXzIwXzM5Cgkmdm1vdmRxYShAWFs1XSwmUVdQKDMyLCR0bXAxKSk7CQkjIEtfNDBfNTkKCSZ2bW92ZHFhKEBYWzZdLCZRV1AoNDgsJHRtcDEpKTsJCSMgS182MF83OQoJJnZtb3ZkcWEoQFhbMl0sJlFXUCg2NCwkdG1wMSkpOwkJIyBwYnN3YXAgbWFzawoKCSZtb3YJKCRFLCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGFyZ3VtZW50IGJsb2NrCgkmbW92CSgkaW5wPUBUWzFdLCZ3cGFyYW0oMSkpOwoJJm1vdgkoJEQsJndwYXJhbSgyKSk7CgkmbW92CShAVFswXSwiZXNwIik7CgoJIyBzdGFjayBmcmFtZSBsYXlvdXQKCSMKCSMgKzAJWFswXStLCVhbMV0rSwlYWzJdK0sJWFszXStLCSMgWE1NLT5JQUxVIHhmZXIgYXJlYQoJIwlYWzRdK0sJWFs1XStLCVhbNl0rSwlYWzddK0sKCSMJWFs4XStLCVhbOV0rSwlYWzEwXStLCVhbMTFdK0sKCSMJWFsxMl0rSwlYWzEzXStLCVhbMTRdK0sJWFsxNV0rSwoJIwoJIyArNjQJWFswXQlYWzFdCVhbMl0JWFszXQkjIFhNTS0+WE1NIGJhY2t0cmFjZSBhcmVhCgkjCVhbNF0JWFs1XQlYWzZdCVhbN10KCSMJWFs4XQlYWzldCVhbMTBdCVhbMTFdCSMgZXZlbiBib3Jyb3dlZCBmb3IgS18wMF8xOQoJIwoJIyArMTEyCUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJIyBjb25zdGFudHMKCSMJS180MF81OQlLXzQwXzU5CUtfNDBfNTkJS180MF81OQoJIwlLXzYwXzc5CUtfNjBfNzkJS182MF83OQlLXzYwXzc5CgkjCUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CUtfMDBfMTkKCSMJcGJzd2FwIG1hc2sKCSMKCSMgKzE5MgljdHgJCQkJIyBhcmd1bWVudCBibG9jawoJIyArMTk2CWlucAoJIyArMjAwCWVuZAoJIyArMjA0CWVzcAoJJnN1YgkoImVzcCIsMjA4KTsKCSZhbmQJKCJlc3AiLC02NCk7CgoJJnZtb3ZkcWEoJlFXUCgxMTIrMCwiZXNwIiksQFhbNF0pOwkjIGNvcHkgY29uc3RhbnRzCgkmdm1vdmRxYSgmUVdQKDExMisxNiwiZXNwIiksQFhbNV0pOwoJJnZtb3ZkcWEoJlFXUCgxMTIrMzIsImVzcCIpLEBYWzZdKTsKCSZzaGwJKCRELDYpOwkJCQkjIGxlbio2NAoJJnZtb3ZkcWEoJlFXUCgxMTIrNDgsImVzcCIpLEBYWzNdKTsKCSZhZGQJKCRELCRpbnApOwkJCSMgZW5kIG9mIGlucHV0Cgkmdm1vdmRxYSgmUVdQKDExMis2NCwiZXNwIiksQFhbMl0pOwoJJmFkZAkoJGlucCw2NCk7CgkmbW92CSgmRFdQKDE5MiswLCJlc3AiKSwkRSk7CQkjIHNhdmUgYXJndW1lbnQgYmxvY2sKCSZtb3YJKCZEV1AoMTkyKzQsImVzcCIpLCRpbnApOwoJJm1vdgkoJkRXUCgxOTIrOCwiZXNwIiksJEQpOwoJJm1vdgkoJkRXUCgxOTIrMTIsImVzcCIpLEBUWzBdKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKCgkmbW92CSgkQSwmRFdQKDAsJEUpKTsJCSMgbG9hZCBjb250ZXh0CgkmbW92CSgkQiwmRFdQKDQsJEUpKTsKCSZtb3YJKCRDLCZEV1AoOCwkRSkpOwoJJm1vdgkoJEQsJkRXUCgxMiwkRSkpOwoJJm1vdgkoJEUsJkRXUCgxNiwkRSkpOwoJJm1vdgkoQFRbMF0sJEIpOwkJCSMgbWFnaWMgc2VlZAoKCSZ2bW92ZHF1KEBYWy00JjddLCZRV1AoLTY0LCRpbnApKTsJIyBsb2FkIGlucHV0IHRvICV4bW1bMC0zXQoJJnZtb3ZkcXUoQFhbLTMmN10sJlFXUCgtNDgsJGlucCkpOwoJJnZtb3ZkcXUoQFhbLTImN10sJlFXUCgtMzIsJGlucCkpOwoJJnZtb3ZkcXUoQFhbLTEmN10sJlFXUCgtMTYsJGlucCkpOwoJJnZwc2h1ZmIoQFhbLTQmN10sQFhbLTQmN10sQFhbMl0pOwkjIGJ5dGUgc3dhcAoJJnZwc2h1ZmIoQFhbLTMmN10sQFhbLTMmN10sQFhbMl0pOwoJJnZwc2h1ZmIoQFhbLTImN10sQFhbLTImN10sQFhbMl0pOwoJJnZtb3ZkcWEoJlFXUCgxMTItMTYsImVzcCIpLEBYWzNdKTsJIyBib3Jyb3cgbGFzdCBiYWNrdHJhY2Ugc2xvdAoJJnZwc2h1ZmIoQFhbLTEmN10sQFhbLTEmN10sQFhbMl0pOwoJJnZwYWRkZAkoQFhbMF0sQFhbLTQmN10sQFhbM10pOwkJIyBhZGQgS18wMF8xOQoJJnZwYWRkZAkoQFhbMV0sQFhbLTMmN10sQFhbM10pOwoJJnZwYWRkZAkoQFhbMl0sQFhbLTImN10sQFhbM10pOwoJJnZtb3ZkcWEoJlFXUCgwLCJlc3AiKSxAWFswXSk7CQkjIFhbXStLIHhmZXIgdG8gSUFMVQoJJm1vdgkoQFRbMV0sJEMpOwoJJnZtb3ZkcWEoJlFXUCgwKzE2LCJlc3AiKSxAWFsxXSk7CgkmeG9yCShAVFsxXSwkRCk7Cgkmdm1vdmRxYSgmUVdQKDArMzIsImVzcCIpLEBYWzJdKTsKCSZhbmQJKEBUWzBdLEBUWzFdKTsKCSZqbXAJKCZsYWJlbCgibG9vcCIpKTsKCnN1YiBYdXBkYXRlX2F2eF8xNl8zMSgpCQkjIHJlY2FsbCB0aGF0ICRYaSBzdGFydHMgd3RpaCA0CnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyA0MCBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmdnBhbGlnbnIoQFhbMF0sQFhbLTMmN10sQFhbLTQmN10sOCk7CSMgY29tcG9zZSAiWFstMTRdIiBpbiAiWFswXSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJICAmdnBhZGRkCShAWFszXSxAWFszXSxAWFstMSY3XSk7CgkgICZ2bW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7IyBzYXZlIFhbXSB0byBiYWNrdHJhY2UgYnVmZmVyCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwc3JsZHEoQFhbMl0sQFhbLTEmN10sNCk7CQkjICJYWy0zXSIsIDMgZHdvcmRzCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZweG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CQkjICJYWzBdIl49IlhbLTE2XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZweG9yCShAWFsyXSxAWFsyXSxAWFstMiY3XSk7CQkjICJYWy0zXSJeIlhbLThdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJnZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiksQFhbM10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iXj0iWFstM10iXiJYWy04XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHNybGQJKEBYWzJdLEBYWzBdLDMxKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHNsbGRxKEBYWzRdLEBYWzBdLDEyKTsJCSMgIlhbMF0iPDw5NiwgZXh0cmFjdCBvbmUgZHdvcmQKCSZ2cGFkZGQJKEBYWzBdLEBYWzBdLEBYWzBdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHNybGQJKEBYWzNdLEBYWzRdLDMwKTsKCSZ2cG9yCShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIjw8PD0xCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzbGxkCShAWFs0XSxAWFs0XSwyKTsKCSAgJnZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZiAoJFhpPjUpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbM10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZweG9yCShAWFswXSxAWFswXSxAWFs0XSk7CQkjICJYWzBdIl49KCJYWzBdIjw8OTYpPDw8MgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJnZtb3ZkcWEJKEBYWzRdLCZRV1AoMTEyLTE2KzE2KigoJFhpKS81KSwiZXNwIikpOwkjIEtfWFhfWFgKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucyBbaWYgYW55XQoKICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQp9CgpzdWIgWHVwZGF0ZV9hdnhfMzJfNzkoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgdG8gNDQgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkmdnBhbGlnbnIoQFhbMl0sQFhbLTEmN10sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJeIlhbLTE2XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoKCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbLTcmN10pOwkjICJYWzBdIl49IlhbLTI4XSIKCSAgJnZtb3ZkcWEJKCZRV1AoNjQrMTYqKCgkWGktNCklMyksImVzcCIpLEBYWy00JjddKTsJIyBzYXZlIFhbXSB0byBiYWNrdHJhY2UgYnVmZmVyCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGlmICgkWGklNSkgewoJICAmdm1vdmRxYQkoQFhbNF0sQFhbM10pOwkjICJwZXJwZXR1YXRlIiBLX1hYX1hYLi4uCgkgfSBlbHNlIHsJCQkjIC4uLiBvciBsb2FkIG5leHQgb25lCgkgICZ2bW92ZHFhCShAWFs0XSwmUVdQKDExMi0xNisxNiooJFhpLzUpLCJlc3AiKSk7CgkgfQoJICAmdnBhZGRkCShAWFszXSxAWFszXSxAWFstMSY3XSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iXj0iWFstNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCgkmdnBzcmxkCShAWFsyXSxAWFswXSwzMCk7CgkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzbGxkCShAWFswXSxAWFswXSwyKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cG9yCShAWFswXSxAWFswXSxAWFsyXSk7CSMgIlhbMF0iPDw8PTIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJnZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZigkWGk8MTkpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwoKICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQp9CgpzdWIgWHVwbGFzdF9hdnhfODAoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgJnZwYWRkZAkoQFhbM10sQFhbM10sQFhbLTEmN10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJICAmdm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciBJQUxVCgoJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKCgkmbW92CSgkaW5wPUBUWzFdLCZEV1AoMTkyKzQsImVzcCIpKTsKCSZjbXAJKCRpbnAsJkRXUCgxOTIrOCwiZXNwIikpOwoJJmplCSgmbGFiZWwoImRvbmUiKSk7CgoJJnZtb3ZkcWEoQFhbM10sJlFXUCgxMTIrNDgsImVzcCIpKTsJIyBLXzAwXzE5Cgkmdm1vdmRxYShAWFsyXSwmUVdQKDExMis2NCwiZXNwIikpOwkjIHBic3dhcCBtYXNrCgkmdm1vdmRxdShAWFstNCY3XSwmUVdQKDAsJGlucCkpOwkjIGxvYWQgaW5wdXQKCSZ2bW92ZHF1KEBYWy0zJjddLCZRV1AoMTYsJGlucCkpOwoJJnZtb3ZkcXUoQFhbLTImN10sJlFXUCgzMiwkaW5wKSk7Cgkmdm1vdmRxdShAWFstMSY3XSwmUVdQKDQ4LCRpbnApKTsKCSZhZGQJKCRpbnAsNjQpOwoJJnZwc2h1ZmIoQFhbLTQmN10sQFhbLTQmN10sQFhbMl0pOwkJIyBieXRlIHN3YXAKCSZtb3YJKCZEV1AoMTkyKzQsImVzcCIpLCRpbnApOwoJJnZtb3ZkcWEoJlFXUCgxMTItMTYsImVzcCIpLEBYWzNdKTsJIyBib3Jyb3cgbGFzdCBiYWNrdHJhY2Ugc2xvdAoKICAkWGk9MDsKfQoKc3ViIFhsb29wX2F2eCgpCnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmdnBzaHVmYgkoQFhbKCRYaS0zKSY3XSxAWFsoJFhpLTMpJjddLEBYWzJdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmdnBhZGRkCShAWFskWGkmN10sQFhbKCRYaS00KSY3XSxAWFszXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZ2bW92ZHFhCSgmUVdQKDArMTYqJFhpLCJlc3AiKSxAWFskWGkmN10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCglmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQogICRYaSsrOwp9CgpzdWIgWHRhaWxfYXZ4KCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KfQoKJnNldF9sYWJlbCgibG9vcCIsMTYpOwoJJlh1cGRhdGVfYXZ4XzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9hdnhfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfYXZ4XzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwbGFzdF9hdnhfODAoXCZib2R5XzIwXzM5KTsJIyBjYW4ganVtcCB0byAiZG9uZSIKCgkJCQkkc2F2ZWRfaj0kajsgQHNhdmVkX1Y9QFY7CgoJJlhsb29wX2F2eChcJmJvZHlfMjBfMzkpOwoJJlhsb29wX2F2eChcJmJvZHlfMjBfMzkpOwoJJlhsb29wX2F2eChcJmJvZHlfMjBfMzkpOwoKCSZtb3YJKEBUWzFdLCZEV1AoMTkyLCJlc3AiKSk7CSMgdXBkYXRlIGNvbnRleHQKCSZhZGQJKCRBLCZEV1AoMCxAVFsxXSkpOwoJJmFkZAkoQFRbMF0sJkRXUCg0LEBUWzFdKSk7CQkjICRiCgkmYWRkCSgkQywmRFdQKDgsQFRbMV0pKTsKCSZtb3YJKCZEV1AoMCxAVFsxXSksJEEpOwoJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOwoJJm1vdgkoJkRXUCg0LEBUWzFdKSxAVFswXSk7CgkmYWRkCSgkRSwmRFdQKDE2LEBUWzFdKSk7CgkmbW92CSgkQiwkQyk7CgkmbW92CSgmRFdQKDgsQFRbMV0pLCRDKTsKCSZ4b3IJKCRCLCREKTsKCSZtb3YJKCZEV1AoMTIsQFRbMV0pLCREKTsKCSZtb3YJKCZEV1AoMTYsQFRbMV0pLCRFKTsKCSZtb3YJKEBUWzFdLEBUWzBdKTsKCSZhbmQJKEBUWzBdLCRCKTsKCSZtb3YJKCRCLEBUWzFdKTsKCgkmam1wCSgmbGFiZWwoImxvb3AiKSk7Cgomc2V0X2xhYmVsKCJkb25lIiwxNik7CQkkaj0kc2F2ZWRfajsgQFY9QHNhdmVkX1Y7CgoJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOwoJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOwoJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOwoKCSZ2emVyb2FsbCgpOwoKCSZtb3YJKEBUWzFdLCZEV1AoMTkyLCJlc3AiKSk7CSMgdXBkYXRlIGNvbnRleHQKCSZhZGQJKCRBLCZEV1AoMCxAVFsxXSkpOwoJJm1vdgkoImVzcCIsJkRXUCgxOTIrMTIsImVzcCIpKTsJIyByZXN0b3JlICVlc3AKCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsxXSkpOwkJIyAkYgoJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CgkmbW92CSgmRFdQKDAsQFRbMV0pLCRBKTsKCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOwoJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwoJJm1vdgkoJkRXUCg4LEBUWzFdKSwkQyk7CgkmbW92CSgmRFdQKDEyLEBUWzFdKSwkRCk7CgkmbW92CSgmRFdQKDE2LEBUWzFdKSwkRSk7CiZmdW5jdGlvbl9lbmQoIl9zaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4Iik7Cn0KJnNldF9sYWJlbCgiS19YWF9YWCIsNjQpOwomZGF0YV93b3JkKDB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTkpOwkjIEtfMDBfMTkKJmRhdGFfd29yZCgweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExKTsJIyBLXzIwXzM5CiZkYXRhX3dvcmQoMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYyk7CSMgS180MF81OQomZGF0YV93b3JkKDB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYpOwkjIEtfNjBfNzkKJmRhdGFfd29yZCgweDAwMDEwMjAzLDB4MDQwNTA2MDcsMHgwODA5MGEwYiwweDBjMGQwZTBmKTsJIyBwYnN3YXAgbWFzawomZGF0YV9ieXRlKDB4ZiwweGUsMHhkLDB4YywweGIsMHhhLDB4OSwweDgsMHg3LDB4NiwweDUsMHg0LDB4MywweDIsMHgxLDB4MCk7Cn0KJmFzY2l6KCJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+Iik7CgomYXNtX2ZpbmlzaCgpOwo=