// Path: src/milk/telegram/type/Identifier.java
// public interface Identifier<T>{
// 
//     T getId();
// 
// }
// 
// Path: src/milk/telegram/type/message/Message.java
// public class Message implements Identifier<Integer>{
// 
//     private final int date;
//     private final int message_id;
// 
//     private final User from;
//     private final Chat chat;
// 
//     private final Message reply_message;
// 
//     private final User forward_from;
//     private final Chat forward_from_chat;
// 
//     private final JSONObject object;
// 
//     protected Message(JSONObject object){
//         this.object = object;
// 
//         this.date = object.getInt("date");
//         this.message_id = object.getInt("message_id");
//         this.chat = Chat.create(object.getJSONObject("chat"));
// 
//         this.from = User.create(object.optJSONObject("from"));
//         this.reply_message = Message.create(object.optJSONObject("reply_to_message"));
// 
//         this.forward_from = User.create(object.optJSONObject("forward_from"));
//         this.forward_from_chat = Chat.create(object.optJSONObject("forward_from_chat"));
//     }
// 
//     public static Message create(JSONObject object){
//         if(object == null){
//             return null;
//         }else if(object.has("result")){
//             object = object.optJSONObject("result");
//             if(object == null || object.length() < 1){
//                 return null;
//             }
//         }
// 
//         if(object.has("game")){
//             return new GameMessage(object);
//         }else if(object.has("audio")){
//             return new AudioMessage(object);
//         }else if(object.has("contact")){
//             return new ContactMessage(object);
//         }else if(object.has("document")){
//             return new DocumentMessage(object);
//         }else if(object.has("location")){
//             return new LocationMessage(object);
//         }else if(object.has("photo")){
//             return new PhotoMessage(object);
//         }else if(object.has("sticker")){
//             return new StickerMessage(object);
//         }else if(object.has("text")){
//             return new TextMessage(object);
//         }else if(object.has("venue")){
//             return new VenueMessage(object);
//         }else if(object.has("video")){
//             return new VideoMessage(object);
//         }else if(object.has("voice")){
//             return new VoiceMessage(object);
//         }
//         return new Message(object);
//     }
// 
//     public Integer getId(){
//         return this.message_id;
//     }
// 
//     public int getDate(){
//         return this.date;
//     }
// 
//     public User getFrom(){
//         return this.from;
//     }
// 
//     public Chat getChat(){
//         return this.chat;
//     }
// 
//     public boolean isReplyMessage(){
//         return this.reply_message != null;
//     }
// 
//     public boolean isForwardMessage(){
//         return this.forward_from != null || this.forward_from_chat != null;
//     }
// 
//     public Message getReplyMessage(){
//         return this.reply_message;
//     }
// 
//     public User getForwardFrom(){
//         return forward_from;
//     }
// 
//     public Chat getForwardChat(){
//         return forward_from_chat;
//     }
// 
//     public String getName(){
//         return "메시지";
//     }
// 
//     public JSONObject toJSONObject(){
//         return object;
//     }
// 
//     @Override
//     public String toString(){
//         return this.getName();
//     }
// 
// }
// 
// Path: src/milk/telegram/type/user/User.java
// public class User implements Identifier<Integer>, Usernamed{
// 
//     private int id;
// 
//     private String last;
//     private String first;
//     private String username;
// 
//     private User(JSONObject object){
//         this.id = object.getInt("id");
//         this.last = object.optString("last_name", null);
//         this.first = object.optString("first_name", null);
//         this.username = object.optString("username", null);
//     }
// 
//     public static User create(JSONObject object){
//         if(object == null){
//             return null;
//         }else if(object.has("result")){
//             object = object.optJSONObject("result");
//             if(object.length() < 1){
//                 return null;
//             }
//         }
//         return new User(object);
//     }
// 
//     public Integer getId(){
//         return this.id;
//     }
// 
//     public String getFirstName(){
//         return this.first;
//     }
// 
//     public String getLastName(){
//         return this.last;
//     }
// 
//     public String getUsername(){
//         return this.username;
//     }
// 
//     public String getFullName(){
//         return (this.getLastName() == null ? "" : this.getLastName() + " ") + this.getFirstName();
//     }
// 
// }


import milk.telegram.type.Identifier;
import milk.telegram.type.message.Message;
import milk.telegram.type.user.User;
import org.json.JSONObject;
package milk.telegram.type.callback;


public class CallbackQuery implements Identifier<String>{

    private final String id;
    private final User from;
    private final Message message;

    private final String chat_instance;

    private final String data;
    private final String inline_message_id;

// Path: src/milk/telegram/type/Identifier.java
// public interface Identifier<T>{
// 
//     T getId();
// 
// }
// 
// Path: src/milk/telegram/type/message/Message.java
// public class Message implements Identifier<Integer>{
// 
//     private final int date;
//     private final int message_id;
// 
//     private final User from;
//     private final Chat chat;
// 
//     private final Message reply_message;
// 
//     private final User forward_from;
//     private final Chat forward_from_chat;
// 
//     private final JSONObject object;
// 
//     protected Message(JSONObject object){
//         this.object = object;
// 
//         this.date = object.getInt("date");
//         this.message_id = object.getInt("message_id");
//         this.chat = Chat.create(object.getJSONObject("chat"));
// 
//         this.from = User.create(object.optJSONObject("from"));
//         this.reply_message = Message.create(object.optJSONObject("reply_to_message"));
// 
//         this.forward_from = User.create(object.optJSONObject("forward_from"));
//         this.forward_from_chat = Chat.create(object.optJSONObject("forward_from_chat"));
//     }
// 
//     public static Message create(JSONObject object){
//         if(object == null){
//             return null;
//         }else if(object.has("result")){
//             object = object.optJSONObject("result");
//             if(object == null || object.length() < 1){
//                 return null;
//             }
//         }
// 
//         if(object.has("game")){
//             return new GameMessage(object);
//         }else if(object.has("audio")){
//             return new AudioMessage(object);
//         }else if(object.has("contact")){
//             return new ContactMessage(object);
//         }else if(object.has("document")){
//             return new DocumentMessage(object);
//         }else if(object.has("location")){
//             return new LocationMessage(object);
//         }else if(object.has("photo")){
//             return new PhotoMessage(object);
//         }else if(object.has("sticker")){
//             return new StickerMessage(object);
//         }else if(object.has("text")){
//             return new TextMessage(object);
//         }else if(object.has("venue")){
//             return new VenueMessage(object);
//         }else if(object.has("video")){
//             return new VideoMessage(object);
//         }else if(object.has("voice")){
//             return new VoiceMessage(object);
//         }
//         return new Message(object);
//     }
// 
//     public Integer getId(){
//         return this.message_id;
//     }
// 
//     public int getDate(){
//         return this.date;
//     }
// 
//     public User getFrom(){
//         return this.from;
//     }
// 
//     public Chat getChat(){
//         return this.chat;
//     }
// 
//     public boolean isReplyMessage(){
//         return this.reply_message != null;
//     }
// 
//     public boolean isForwardMessage(){
//         return this.forward_from != null || this.forward_from_chat != null;
//     }
// 
//     public Message getReplyMessage(){
//         return this.reply_message;
//     }
// 
//     public User getForwardFrom(){
//         return forward_from;
//     }
// 
//     public Chat getForwardChat(){
//         return forward_from_chat;
//     }
// 
//     public String getName(){
//         return "메시지";
//     }
// 
//     public JSONObject toJSONObject(){
//         return object;
//     }
// 
//     @Override
//     public String toString(){
//         return this.getName();
//     }
// 
// }
// 
// Path: src/milk/telegram/type/user/User.java
// public class User implements Identifier<Integer>, Usernamed{
// 
//     private int id;
// 
//     private String last;
//     private String first;
//     private String username;
// 
//     private User(JSONObject object){
//         this.id = object.getInt("id");
//         this.last = object.optString("last_name", null);
//         this.first = object.optString("first_name", null);
//         this.username = object.optString("username", null);
//     }
// 
//     public static User create(JSONObject object){
//         if(object == null){
//             return null;
//         }else if(object.has("result")){
//             object = object.optJSONObject("result");
//             if(object.length() < 1){
//                 return null;
//             }
//         }
//         return new User(object);
//     }
// 
//     public Integer getId(){
//         return this.id;
//     }
// 
//     public String getFirstName(){
//         return this.first;
//     }
// 
//     public String getLastName(){
//         return this.last;
//     }
// 
//     public String getUsername(){
//         return this.username;
//     }
// 
//     public String getFullName(){
//         return (this.getLastName() == null ? "" : this.getLastName() + " ") + this.getFirstName();
//     }
// 
// }


// Path: src/milk/telegram/type/callback/CallbackQuery.java
import milk.telegram.type.Identifier;
import milk.telegram.type.message.Message;
import milk.telegram.type.user.User;
import org.json.JSONObject;

package milk.telegram.type.callback;


public class CallbackQuery implements Identifier<String>{

    private final String id;
    private final User from;
    private final Message message;

    private final String chat_instance;

    private final String data;
    private final String inline_message_id;

    private final String game_short_name;