// Path: app/src/main/java/fi/iki/elonen/NanoHTTPD.java
// public interface IStatus {
// 
//     String getDescription();
// 
//     int getRequestStatus();
// }
// 
// Path: app/src/main/java/fi/iki/elonen/NanoHTTPD.java
// public enum Status implements IStatus {
//     SWITCH_PROTOCOL(101, "Switching Protocols"),
// 
//     OK(200, "OK"),
//     CREATED(201, "Created"),
//     ACCEPTED(202, "Accepted"),
//     NO_CONTENT(204, "No Content"),
//     PARTIAL_CONTENT(206, "Partial Content"),
//     MULTI_STATUS(207, "Multi-Status"),
// 
//     REDIRECT(301, "Moved Permanently"),
//     /**
//      * Many user agents mishandle 302 in ways that violate the RFC1945
//      * spec (i.e., redirect a POST to a GET). 303 and 307 were added in
//      * RFC2616 to address this. You should prefer 303 and 307 unless the
//      * calling user agent does not support 303 and 307 functionality
//      */
//     @Deprecated
//     FOUND(302, "Found"),
//     REDIRECT_SEE_OTHER(303, "See Other"),
//     NOT_MODIFIED(304, "Not Modified"),
//     TEMPORARY_REDIRECT(307, "Temporary Redirect"),
// 
//     BAD_REQUEST(400, "Bad Request"),
//     UNAUTHORIZED(401, "Unauthorized"),
//     FORBIDDEN(403, "Forbidden"),
//     NOT_FOUND(404, "Not Found"),
//     METHOD_NOT_ALLOWED(405, "Method Not Allowed"),
//     NOT_ACCEPTABLE(406, "Not Acceptable"),
//     REQUEST_TIMEOUT(408, "Request Timeout"),
//     CONFLICT(409, "Conflict"),
//     GONE(410, "Gone"),
//     LENGTH_REQUIRED(411, "Length Required"),
//     PRECONDITION_FAILED(412, "Precondition Failed"),
//     PAYLOAD_TOO_LARGE(413, "Payload Too Large"),
//     UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),
//     RANGE_NOT_SATISFIABLE(416, "Requested Range Not Satisfiable"),
//     EXPECTATION_FAILED(417, "Expectation Failed"),
//     TOO_MANY_REQUESTS(429, "Too Many Requests"),
// 
//     INTERNAL_ERROR(500, "Internal Server Error"),
//     NOT_IMPLEMENTED(501, "Not Implemented"),
//     SERVICE_UNAVAILABLE(503, "Service Unavailable"),
//     UNSUPPORTED_HTTP_VERSION(505, "HTTP Version Not Supported");
// 
//     private final int requestStatus;
// 
//     private final String description;
// 
//     Status(int requestStatus, String description) {
//         this.requestStatus = requestStatus;
//         this.description = description;
//     }
// 
//     public static Status lookup(int requestStatus) {
//         for (Status status : Status.values()) {
//             if (status.getRequestStatus() == requestStatus) {
//                 return status;
//             }
//         }
//         return null;
//     }
// 
//     @Override
//     public String getDescription() {
//         return "" + this.requestStatus + " " + this.description;
//     }
// 
//     @Override
//     public int getRequestStatus() {
//         return this.requestStatus;
//     }
// 
// }


import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.security.KeyStore;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPOutputStream;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.TrustManagerFactory;
import fi.iki.elonen.NanoHTTPD.Response.IStatus;
import fi.iki.elonen.NanoHTTPD.Response.Status;
        OPTIONS,
        TRACE,
        CONNECT,
        PATCH,
        PROPFIND,
        PROPPATCH,
        MKCOL,
        MOVE,
        COPY,
        LOCK,
        UNLOCK;

        static Method lookup(String method) {
            if (method == null)
                return null;

            try {
                return valueOf(method);
            } catch (IllegalArgumentException e) {
                // TODO: Log it?
                return null;
            }
        }
    }

    /**
     * HTTP response. Return one of these from serve().
     */
    public static class Response implements Closeable {

// Path: app/src/main/java/fi/iki/elonen/NanoHTTPD.java
// public interface IStatus {
// 
//     String getDescription();
// 
//     int getRequestStatus();
// }
// 
// Path: app/src/main/java/fi/iki/elonen/NanoHTTPD.java
// public enum Status implements IStatus {
//     SWITCH_PROTOCOL(101, "Switching Protocols"),
// 
//     OK(200, "OK"),
//     CREATED(201, "Created"),
//     ACCEPTED(202, "Accepted"),
//     NO_CONTENT(204, "No Content"),
//     PARTIAL_CONTENT(206, "Partial Content"),
//     MULTI_STATUS(207, "Multi-Status"),
// 
//     REDIRECT(301, "Moved Permanently"),
//     /**
//      * Many user agents mishandle 302 in ways that violate the RFC1945
//      * spec (i.e., redirect a POST to a GET). 303 and 307 were added in
//      * RFC2616 to address this. You should prefer 303 and 307 unless the
//      * calling user agent does not support 303 and 307 functionality
//      */
//     @Deprecated
//     FOUND(302, "Found"),
//     REDIRECT_SEE_OTHER(303, "See Other"),
//     NOT_MODIFIED(304, "Not Modified"),
//     TEMPORARY_REDIRECT(307, "Temporary Redirect"),
// 
//     BAD_REQUEST(400, "Bad Request"),
//     UNAUTHORIZED(401, "Unauthorized"),
//     FORBIDDEN(403, "Forbidden"),
//     NOT_FOUND(404, "Not Found"),
//     METHOD_NOT_ALLOWED(405, "Method Not Allowed"),
//     NOT_ACCEPTABLE(406, "Not Acceptable"),
//     REQUEST_TIMEOUT(408, "Request Timeout"),
//     CONFLICT(409, "Conflict"),
//     GONE(410, "Gone"),
//     LENGTH_REQUIRED(411, "Length Required"),
//     PRECONDITION_FAILED(412, "Precondition Failed"),
//     PAYLOAD_TOO_LARGE(413, "Payload Too Large"),
//     UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),
//     RANGE_NOT_SATISFIABLE(416, "Requested Range Not Satisfiable"),
//     EXPECTATION_FAILED(417, "Expectation Failed"),
//     TOO_MANY_REQUESTS(429, "Too Many Requests"),
// 
//     INTERNAL_ERROR(500, "Internal Server Error"),
//     NOT_IMPLEMENTED(501, "Not Implemented"),
//     SERVICE_UNAVAILABLE(503, "Service Unavailable"),
//     UNSUPPORTED_HTTP_VERSION(505, "HTTP Version Not Supported");
// 
//     private final int requestStatus;
// 
//     private final String description;
// 
//     Status(int requestStatus, String description) {
//         this.requestStatus = requestStatus;
//         this.description = description;
//     }
// 
//     public static Status lookup(int requestStatus) {
//         for (Status status : Status.values()) {
//             if (status.getRequestStatus() == requestStatus) {
//                 return status;
//             }
//         }
//         return null;
//     }
// 
//     @Override
//     public String getDescription() {
//         return "" + this.requestStatus + " " + this.description;
//     }
// 
//     @Override
//     public int getRequestStatus() {
//         return this.requestStatus;
//     }
// 
// }


// Path: app/src/main/java/fi/iki/elonen/NanoHTTPD.java
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.security.KeyStore;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPOutputStream;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.TrustManagerFactory;
import fi.iki.elonen.NanoHTTPD.Response.IStatus;
import fi.iki.elonen.NanoHTTPD.Response.Status;

        OPTIONS,
        TRACE,
        CONNECT,
        PATCH,
        PROPFIND,
        PROPPATCH,
        MKCOL,
        MOVE,
        COPY,
        LOCK,
        UNLOCK;

        static Method lookup(String method) {
            if (method == null)
                return null;

            try {
                return valueOf(method);
            } catch (IllegalArgumentException e) {
                // TODO: Log it?
                return null;
            }
        }
    }

    /**
     * HTTP response. Return one of these from serve().
     */
    public static class Response implements Closeable {

        public interface IStatus {