/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package org.apache.photark.mobile;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int close=0x7f020000;
        public static final int facebook_icon=0x7f020001;
        public static final int ic_launcher=0x7f020002;
        public static final int icon=0x7f020003;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f050001;
        public static final int hello=0x7f050000;
    }
    public static final class xml {
        public static final int cordova=0x7f040000;
        public static final int plugins=0x7f040001;
    }
}
