LyoKICogZnVuY3Rpb25zIGZvciB3cml0aW5nIElEMyB0YWdzIGluIExBTUUKICoKICogdGV4dCBmdW5jdGlvbnMgc3RvbGVuIGZyb20gbXAzaW5mbyBieSBSaWNhcmRvIENlcnF1ZWlyYSA8cm1jQHJjY24ubmV0PgogKiBhZGFwdGVkIGZvciBMQU1FIGJ5IENvbnJhZCBTYW5kZXJzb24gPGMuc2FuZGVyc29uQG1lLmd1LmVkdS5hdT4KICoKICogCiAqLyAKIAojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAiaWQzdGFnLmgiCklEM1RBR0RBVEEgaWQzdGFnOwogCi8qCiAqIElmICJzdHJpbmciIGlzIHNob3J0ZXIgdGhhbiAibGVuZ3RoIiwgcGFkIGl0IHdpdGggJyAnIChzcGFjZXMpCiAqLwoKc3RhdGljIHZvaWQgaWQzX3BhZChjaGFyICpzdHJpbmcsIGludCBsZW5ndGgpIHsKCWludCBsOyAgbD1zdHJsZW4oc3RyaW5nKTsKCQoJd2hpbGUobDxsZW5ndGgpIHsgc3RyaW5nW2xdID0gJyAnOyBsKys7IH0KCXN0cmluZ1tsXT0nXDAnOwoJfQoKCi8qCiAqIGluaXRpYWxpemUgdGVtcG9yYXJ5IGZpZWxkcwogKi8KCnZvaWQgaWQzX2luaXR0YWcoSUQzVEFHREFUQSAqdGFnKSB7CglzdHJjcHkoIHRhZy0+dGl0bGUsICIiKTsKCXN0cmNweSggdGFnLT5hcnRpc3QsICIiKTsKCXN0cmNweSggdGFnLT5hbGJ1bSwgIiIpOwoJc3RyY3B5KCB0YWctPnllYXIsICIiKTsgICAgCglzdHJjcHkoIHRhZy0+Y29tbWVudCwgIiIpOwoJdGFnLT5nZW5yZVswXSA9ICf/JzsJLyogdW5zZXQgZ2VucmUgKi8KCXRhZy0+dHJhY2sgPSAwOwoKCXRhZy0+dmFsaWQgPSAwOwkJLyogbm90IHJlYWR5IGZvciB3cml0aW5nKi8KCX0KCi8qCiAqIGJ1aWxkIGFuIElEMyB0YWcgZnJvbSB0ZW1wb3JhcnkgZmllbGRzCiAqLwoKdm9pZCBpZDNfYnVpbGR0YWcoSUQzVEFHREFUQSAqdGFnKSB7CglzdHJjcHkodGFnLT50YWd0ZXh0LCJUQUciKTsKCglpZDNfcGFkKCB0YWctPnRpdGxlLCAzMCk7ICAgc3RybmNhdCggdGFnLT50YWd0ZXh0LCB0YWctPnRpdGxlLDMwKTsKCWlkM19wYWQoIHRhZy0+YXJ0aXN0LCAzMCk7ICBzdHJuY2F0KCB0YWctPnRhZ3RleHQsIHRhZy0+YXJ0aXN0LDMwKTsKCWlkM19wYWQoIHRhZy0+YWxidW0sIDMwKTsgICBzdHJuY2F0KCB0YWctPnRhZ3RleHQsIHRhZy0+YWxidW0sMzApOwoJaWQzX3BhZCggdGFnLT55ZWFyLCA0KTsgICAgIHN0cm5jYXQoIHRhZy0+dGFndGV4dCwgdGFnLT55ZWFyLDQpOwoJaWQzX3BhZCggdGFnLT5jb21tZW50LCAzMCk7IHN0cm5jYXQoIHRhZy0+dGFndGV4dCwgdGFnLT5jb21tZW50LDMwKTsKCWlkM19wYWQoIHRhZy0+Z2VucmUsIDEpOyAgICBzdHJuY2F0KCB0YWctPnRhZ3RleHQsIHRhZy0+Z2VucmUsMSk7CgoJaWYoIHRhZy0+dHJhY2sgIT0gMCApIHsKCQl0YWctPnRhZ3RleHRbMTI1XSA9ICdcMCc7CgkJdGFnLT50YWd0ZXh0WzEyNl0gPSB0YWctPnRyYWNrOwoJfQoJdGFnLT52YWxpZCA9IDE7CQkvKiByZWFkeSBmb3Igd3JpdGluZyovCgl9CgovKgogKiB3cml0ZSBJRDMgdGFnIAogKi8KCmludCBpZDNfd3JpdGV0YWcoY2hhciogZmlsZW5hbWUsIElEM1RBR0RBVEEgKnRhZykgewoJRklMRSogZjsKCWlmKCAhIHRhZy0+dmFsaWQgKSByZXR1cm4gLTE7CgoJZj1mb3BlbihmaWxlbmFtZSwicmIrIik7CWlmKCFmKSByZXR1cm4gLTE7CgoJZnNlZWsoZiwwLFNFRUtfRU5EKTsgZndyaXRlKHRhZy0+dGFndGV4dCwxLDEyOCxmKTsKCWZjbG9zZShmKTsgcmV0dXJuIDA7Cgl9CgoKCgoKaW50IGdlbnJlX2xhc3Q9MTQ3OwpjaGFyICpnZW5yZV9saXN0W109ewoJIkJsdWVzIiwgIkNsYXNzaWMgUm9jayIsICJDb3VudHJ5IiwgIkRhbmNlIiwgIkRpc2NvIiwgIkZ1bmsiLAoJIkdydW5nZSIsICJIaXAtSG9wIiwgIkphenoiLCAiTWV0YWwiLCAiTmV3IEFnZSIsICJPbGRpZXMiLAoJIk90aGVyIiwgIlBvcCIsICJSJkIiLCAiUmFwIiwgIlJlZ2dhZSIsICJSb2NrIiwKCSJUZWNobm8iLCAiSW5kdXN0cmlhbCIsICJBbHRlcm5hdGl2ZSIsICJTa2EiLCAiRGVhdGggTWV0YWwiLCAiUHJhbmtzIiwKCSJTb3VuZHRyYWNrIiwgIkV1cm8tVGVjaG5vIiwgIkFtYmllbnQiLCAiVHJpcC1Ib3AiLCAiVm9jYWwiLCAiSmF6eitGdW5rIiwKCSJGdXNpb24iLCAiVHJhbmNlIiwgIkNsYXNzaWNhbCIsICJJbnN0cnVtZW50YWwiLCAiQWNpZCIsICJIb3VzZSIsCgkiR2FtZSIsICJTb3VuZCBDbGlwIiwgIkdvc3BlbCIsICJOb2lzZSIsICJBbHRlcm5Sb2NrIiwgIkJhc3MiLAoJIlNvdWwiLCAiUHVuayIsICJTcGFjZSIsICJNZWRpdGF0aXZlIiwgIkluc3RydW1lbnRhbCBQb3AiLCAiSW5zdHJ1bWVudGFsIFJvY2siLAoJIkV0aG5pYyIsICJHb3RoaWMiLCAiRGFya3dhdmUiLCAiVGVjaG5vLUluZHVzdHJpYWwiLCAiRWxlY3Ryb25pYyIsICJQb3AtRm9sayIsCgkiRXVyb2RhbmNlIiwgIkRyZWFtIiwgIlNvdXRoZXJuIFJvY2siLCAiQ29tZWR5IiwgIkN1bHQiLCAiR2FuZ3N0YSIsCgkiVG9wIDQwIiwgIkNocmlzdGlhbiBSYXAiLCAiUG9wL0Z1bmsiLCAiSnVuZ2xlIiwgIk5hdGl2ZSBBbWVyaWNhbiIsICJDYWJhcmV0IiwKCSJOZXcgV2F2ZSIsICJQc3ljaGFkZWxpYyIsICJSYXZlIiwgIlNob3d0dW5lcyIsICJUcmFpbGVyIiwgIkxvLUZpIiwKCSJUcmliYWwiLCAiQWNpZCBQdW5rIiwgIkFjaWQgSmF6eiIsICJQb2xrYSIsICJSZXRybyIsICJNdXNpY2FsIiwKCSJSb2NrICYgUm9sbCIsICJIYXJkIFJvY2siLCAiRm9sayIsICJGb2xrL1JvY2siLCAiTmF0aW9uYWwgRm9sayIsICJTd2luZyIsCgkiRmFzdC1GdXNpb24iLCAiQmVib2IiLCAiTGF0aW4iLCAiUmV2aXZhbCIsICJDZWx0aWMiLCAiQmx1ZWdyYXNzIiwgIkF2YW50Z2FyZGUiLAoJIkdvdGhpYyBSb2NrIiwgIlByb2dyZXNzaXZlIFJvY2siLCAiUHN5Y2hlZGVsaWMgUm9jayIsICJTeW1waG9uaWMgUm9jayIsICJTbG93IFJvY2siLCAiQmlnIEJhbmQiLAoJIkNob3J1cyIsICJFYXN5IExpc3RlbmluZyIsICJBY291c3RpYyIsICJIdW1vdXIiLCAiU3BlZWNoIiwgIkNoYW5zb24iLAoJIk9wZXJhIiwgIkNoYW1iZXIgTXVzaWMiLCAiU29uYXRhIiwgIlN5bXBob255IiwgIkJvb3R5IEJhc3MiLCAiUHJpbXVzIiwKCSJQb3JuIEdyb292ZSIsICJTYXRpcmUiLCAiU2xvdyBKYW0iLCAiQ2x1YiIsICJUYW5nbyIsICJTYW1iYSIsCgkiRm9sa2xvcmUiLCAiQmFsbGFkIiwgIlBvd2VyIEJhbGxhZCIsICJSaHl0aG1pYyBTb3VsIiwgIkZyZWVzdHlsZSIsICJEdWV0IiwKCSJQdW5rIFJvY2siLCAiRHJ1bSBTb2xvIiwgIkEgY2FwZWxsYSIsICJFdXJvLUhvdXNlIiwgIkRhbmNlIEhhbGwiLAoJIkdvYSIsICJEcnVtICYgQmFzcyIsICJDbHViIEhvdXNlIiwgIkhhcmRjb3JlIiwgIlRlcnJvciIsCgkiSW5kaWUiLCAiQnJpdFBvcCIsICJOZWdlclB1bmsiLCAiUG9sc2sgUHVuayIsICJCZWF0IiwKCSJDaHJpc3RpYW4gR2FuZ3N0YSIsICJIZWF2eSBNZXRhbCIsICJCbGFjayBNZXRhbCIsICJDcm9zc292ZXIiLCAiQ29udGVtcG9yYXJ5IEMiLAoJIkNocmlzdGlhbiBSb2NrIiwgIk1lcmVuZ3VlIiwgIlNhbHNhIiwgIlRocmFzaCBNZXRhbCIsICJBbmltZSIsICJKUG9wIiwKCSJTeW50aFBvcCIsCn07CgoK