{$APPTYPE CONSOLE}
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
uses SysUtils;
type
users_t = (tarasB, superhackkiller1997, other_shit);
say_ptr_t = procedure (str: PChar) of object;
anon_class_t = class(TObject)
anon_field1: users_t;
constructor Create(usr: users_t);
procedure anon_method(str: PChar);
end;
const
users: array[users_t] of PChar = ('tarasB', 'superhackkiller1997', 'other_shit');
procedure anon_class_t.anon_method(str: PChar);
begin
Writeln(ErrOutput, Format('%s: %s', [users[anon_field1], str]))
end;
constructor anon_class_t.Create(usr: users_t);
begin
inherited Create;
anon_field1 := usr;
end;
function bind(usr: users_t): say_ptr_t; export;
begin
bind := anon_class_t.Create(usr).anon_method
end;
begin
bind(tarasB)('shit');
bind(superhackkiller1997)('i''m god');
bind(other_shit)('ko-ko-ko')
end.
eyRBUFBUWVBFIENPTlNPTEV9CnskSUZERUYgRlBDfQp7JE1PREUgREVMUEhJfQp7JEVORElGfQp1c2VzIFN5c1V0aWxzOwoKdHlwZQogIHVzZXJzX3QgPSAodGFyYXNCLCBzdXBlcmhhY2traWxsZXIxOTk3LCBvdGhlcl9zaGl0KTsKICBzYXlfcHRyX3QgPSBwcm9jZWR1cmUgKHN0cjogUENoYXIpIG9mIG9iamVjdDsKICBhbm9uX2NsYXNzX3QgPSBjbGFzcyhUT2JqZWN0KQogICAgYW5vbl9maWVsZDE6IHVzZXJzX3Q7CiAgICBjb25zdHJ1Y3RvciBDcmVhdGUodXNyOiB1c2Vyc190KTsKICAgIHByb2NlZHVyZSBhbm9uX21ldGhvZChzdHI6IFBDaGFyKTsKICBlbmQ7CmNvbnN0CiAgdXNlcnM6IGFycmF5W3VzZXJzX3RdIG9mIFBDaGFyID0gKCd0YXJhc0InLCAnc3VwZXJoYWNra2lsbGVyMTk5NycsICdvdGhlcl9zaGl0Jyk7Cgpwcm9jZWR1cmUgYW5vbl9jbGFzc190LmFub25fbWV0aG9kKHN0cjogUENoYXIpOwpiZWdpbgogIFdyaXRlbG4oRXJyT3V0cHV0LCBGb3JtYXQoJyVzOiAlcycsIFt1c2Vyc1thbm9uX2ZpZWxkMV0sIHN0cl0pKQplbmQ7Cgpjb25zdHJ1Y3RvciBhbm9uX2NsYXNzX3QuQ3JlYXRlKHVzcjogdXNlcnNfdCk7CmJlZ2luCiAgaW5oZXJpdGVkIENyZWF0ZTsKICBhbm9uX2ZpZWxkMSA6PSB1c3I7CmVuZDsKCgpmdW5jdGlvbiBiaW5kKHVzcjogdXNlcnNfdCk6IHNheV9wdHJfdDsgZXhwb3J0OwpiZWdpbgogIGJpbmQgOj0gYW5vbl9jbGFzc190LkNyZWF0ZSh1c3IpLmFub25fbWV0aG9kCmVuZDsKCmJlZ2luCiAgYmluZCh0YXJhc0IpKCdzaGl0Jyk7CiAgYmluZChzdXBlcmhhY2traWxsZXIxOTk3KSgnaScnbSBnb2QnKTsKICBiaW5kKG90aGVyX3NoaXQpKCdrby1rby1rbycpCmVuZC4=