[
  {
    "path": ".idea/$CACHE_FILE$",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectInspectionProfilesVisibleTreeState\">\n    <entry key=\"Project Default\">\n      <profile-state>\n        <expanded-state>\n          <State />\n        </expanded-state>\n        <selected-state>\n          <State>\n            <id>Android</id>\n          </State>\n        </selected-state>\n      </profile-state>\n    </entry>\n  </component>\n</project>"
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "content": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <codeStyleSettings language=\"XML\">\n      <indentOptions>\n        <option name=\"CONTINUATION_INDENT_SIZE\" value=\"4\" />\n      </indentOptions>\n      <arrangement>\n        <rules>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>xmlns:android</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>xmlns:.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*:id</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*:name</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>name</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>style</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>ANDROID_ATTRIBUTE_ORDER</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>.*</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n        </rules>\n      </arrangement>\n    </codeStyleSettings>\n  </code_scheme>\n</component>"
  },
  {
    "path": ".idea/dictionaries",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectDictionaryState\">\n    <dictionary name=\"denghuadong\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"testRunner\" value=\"PLATFORM\" />\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"gradleJvm\" value=\"1.8.0_251\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/jarRepositories.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RemoteRepositoriesConfiguration\">\n    <remote-repository>\n      <option name=\"id\" value=\"central\" />\n      <option name=\"name\" value=\"Maven Central repository\" />\n      <option name=\"url\" value=\"https://repo1.maven.org/maven2\" />\n    </remote-repository>\n    <remote-repository>\n      <option name=\"id\" value=\"jboss.community\" />\n      <option name=\"name\" value=\"JBoss Community repository\" />\n      <option name=\"url\" value=\"https://repository.jboss.org/nexus/content/repositories/public/\" />\n    </remote-repository>\n    <remote-repository>\n      <option name=\"id\" value=\"BintrayJCenter\" />\n      <option name=\"name\" value=\"BintrayJCenter\" />\n      <option name=\"url\" value=\"https://jcenter.bintray.com/\" />\n    </remote-repository>\n    <remote-repository>\n      <option name=\"id\" value=\"Google\" />\n      <option name=\"name\" value=\"Google\" />\n      <option name=\"url\" value=\"https://dl.google.com/dl/android/maven2/\" />\n    </remote-repository>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "README.md",
    "content": "\n# 奇门排盘\n# 风水罗盘\n\n源码链接\n\n\n## 奇门遁甲源码  https://github.com/MartingKing/AAAI\n## 八字排盘源码 https://github.com/MartingKing/DhdReactNativeCalendar/tree/main\n\n\n本人为易学爱好者，从师学习奇门遁甲，风水八字等\n\n\nAndroid端具体逻辑是将时间选择转为农历，再根据干支纪年法，五行生克，十二长生，八门九星等宫位排列规则用recyclerview进行计算排序，\n\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/1.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/2.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/3.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/4.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/5.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/6.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/7.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/8.jpg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/9.jpeg)\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/10.jpeg)\n\n奇门遁甲和八字排盘支持原生代码排盘，也支持服务端排盘，服务端为go语言编写，有需要也可以开发java版的服务端，小程，PC客户端等，有志同道合的朋友可以一起研究AI推算\n![image](https://github.com/MartingKing/xuanxueapp/blob/master/images/11.png)\n\n使用的第三方库为 https://6tail.cn/calendar/api.html#solar.ymd.html，感谢大佬的无私奉献\n\n## 如果我开源的代码对你有帮助可以请我喝杯茶\n![image](./images/pay.jpg)\n## 交流合作wx:kotm0066\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 30\n    buildToolsVersion \"30.0.1\"\n\n    defaultConfig {\n        applicationId \"com.bsyun.xuanxueapp\"\n        minSdkVersion 16\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation 'androidx.appcompat:appcompat:1.2.0'\n    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.2'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'\n    implementation 'androidx.recyclerview:recyclerview:1.0.0'\n}"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "app/src/androidTest/java/com/bsyun/xuanxueapp/ExampleInstrumentedTest.java",
    "content": "package com.bsyun.xuanxueapp;\n\nimport android.content.Context;\n\nimport androidx.test.platform.app.InstrumentationRegistry;\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport static org.junit.Assert.*;\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentedTest {\n    @Test\n    public void useAppContext() {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();\n        assertEquals(\"com.bsyun.xuanxueapp\", appContext.getPackageName());\n    }\n}"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.bsyun.xuanxueapp\">\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <activity android:name=\".MainActivity\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/com/bsyun/xuanxueapp/DateUtil.java",
    "content": "package com.bsyun.xuanxueapp;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\npublic class DateUtil {\n    //    public static final String patterm = \"yyyy-MM-dd HH:mm:ss\";\n    public static final String patterm = \"yyyy年MM月dd日 HH时mm分\";\n//    public static final String patterm = \"yyyy年MM月dd日\";;\n// 1，日期格式：String dateString = \"2017-06-20 10:30:30\" 对应的格式：String pattern = \"yyyy-MM-dd HH:mm:ss\";\n// 2，日期格式：String dateString = \"2017-06-20\" 对应的格式：String pattern = \"yyyy-MM-dd\";\n// 3，日期格式：String dateString = \"2017年06月20日 10时30分30秒 对应的格式：String pattern = \"yyyy年MM月dd日 HH时mm分ss秒\";\n// 4，日期格式：String dateString = \"2017年06月20日\" 对应的格式：String pattern = \"yyyy年MM月dd日\";\n\n    /**\n     * 获取系统时间戳\n     *\n     * @return\n     */\n    public static long getCurTimeLong() {\n        return System.currentTimeMillis();\n    }\n\n    /**\n     * 获取当前时间\n     *\n     * @param pattern\n     * @return\n     */\n    public static String getCurDate(String pattern) {\n        SimpleDateFormat sDateFormat = new SimpleDateFormat(pattern);\n        return sDateFormat.format(new Date());\n    }\n\n\n    public static String getDateToString(long data) {\n        SimpleDateFormat format = new SimpleDateFormat(patterm);\n        return format.format(data);\n    }\n\n    /**\n     * 将字符串转为时间戳\n     *\n     * @param dateString\n     * @return\n     */\n    public static long getStringToDate(String dateString) {\n        SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n        Date date = new Date();\n        try {\n            date = dateFormat.parse(dateString);\n        } catch (ParseException e) {\n            e.printStackTrace();\n        }\n        return date.getTime();\n    }\n\n\n    public static int getYearByTimeStamp(long timeStamp) {\n        String date = timeStampToDate(timeStamp);\n        String year = date.substring(0, 4);\n        return Integer.parseInt(year);\n    }\n\n    public static int getMonthByTimeStamp(long timeStamp) {\n        String date = timeStampToDate(timeStamp);\n        String month = date.substring(5, 7);\n        return Integer.parseInt(month);\n    }\n\n    public static int getDayByTimeStamp(long timeStamp) {\n        String date = timeStampToDate(timeStamp);\n        String day = date.substring(8, 10);\n        return Integer.parseInt(day);\n    }\n\n    public static int getHourByTimeStamp(long timeStamp) {\n        String date = timeStampToDate(timeStamp);\n        String hour = date.substring(11, 13);\n        return Integer.parseInt(hour);\n    }\n\n    public static int getMinuteByTimeStamp(long timeStamp) {\n        String date = timeStampToDate(timeStamp);\n        String hour = date.substring(14, 16);\n        return Integer.parseInt(hour);\n    }\n\n    public static int getSecondByTimeStamp(long timeStamp) {\n        String date = timeStampToDate(timeStamp);\n        String hour = date.substring(date.length() - 2);\n        return Integer.parseInt(hour);\n    }\n\n    public static String timeStampToDate(long timeStamp) {\n        Date date = new Date(timeStamp);\n        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n        String dateStr = simpleDateFormat.format(date);\n        return dateStr;\n    }\n\n    public static String getDataString(long timeStamp) {\n        Date date = new Date(timeStamp);\n        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(\"yyyy-MM-dd-HH:mm:ss\");\n        String dateStr = simpleDateFormat.format(date);\n        return dateStr;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/bsyun/xuanxueapp/Jieqi.java",
    "content": "package com.bsyun.xuanxueapp;\n\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class Jieqi {\n\n    /**\n     * @author lxslove\n     * @mail moodlxs@163.com\n     */\n    // ========角度变换===============\n    private static final double rad = 180 * 3600 / Math.PI; // 每弧度的角秒数\n    private static final double RAD = 180 / Math.PI; // 每弧度的角度数\n    // ================日历计算===============\n    private static final double J2000 = 2451545; // 2000年前儒略日数(2000-1-1\n    // 12:00:00格林威治平时)\n\n    // =========黄赤交角及黄赤坐标变换===========\n    private static final double hcjjB[] = {84381.448, -46.8150, -0.00059,\n            0.001813};// 黄赤交角系数表\n    private static final double preceB[] = {0, 50287.92262, 111.24406,\n            0.07699, -0.23479, -0.00178, 0.00018, 0.00001};// Date黄道上的岁差p\n\n    private double Y = 2000;\n    private double M = 1;\n    private double D = 1;\n    private double h = 12;\n    private double m = 0;\n    private double s = 0;\n\n    private static final double[] dts = {\n            // 世界时与原子时之差计算表\n            -4000, 108371.7, -13036.80, 392.000, 0.0000, -500, 17201.0,\n            -627.82, 16.170, -0.3413, -150, 12200.6, -346.41, 5.403, -0.1593,\n            150, 9113.8, -328.13, -1.647, 0.0377, 500, 5707.5, -391.41, 0.915,\n            0.3145, 900, 2203.4, -283.45, 13.034, -0.1778, 1300, 490.1, -57.35,\n            2.085, -0.0072, 1600, 120.0, -9.81, -1.532, 0.1403, 1700, 10.2,\n            -0.91, 0.510, -0.0370, 1800, 13.4, -0.72, 0.202, -0.0193, 1830,\n            7.8, -1.81, 0.416, -0.0247, 1860, 8.3, -0.13, -0.406, 0.0292, 1880,\n            -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169, -0.0135, 1920,\n            21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031, 1960,\n            33.2, 0.51, 0.231, -0.0109, 1980, 51.0, 1.29, -0.026, 0.0032, 2000,\n            64.7, -1.66, 5.224, -0.2905, 2150, 279.4, 732.95, 429.579, 0.0158,\n            6000};\n\n    // 取整数部分\n    public static double int2(double v) {\n        v = Math.floor(v);\n        if (v < 0) {\n            return v + 1;\n        }\n\n        return v;\n    }\n\n    // 对超过0-2PI的角度转为0-2PI\n    public static double rad2mrad(double v) {\n        v = v % (2 * Math.PI);\n        if (v < 0) {\n            return v + 2 * Math.PI;\n        }\n        return v;\n    }\n\n    // 计算世界时与原子时之差,传入年\n    public double deltatT(double y) {\n        int i = 0;\n        for (i = 0; i < 100; i += 5) {\n            if (y < dts[i + 5] || i == 95) {\n                break;\n            }\n        }\n        double t1 = (y - dts[i]) / (dts[i + 5] - dts[i]) * 10;\n        double t2 = t1 * t1;\n        double t3 = t2 * t1;\n        return dts[i + 1] + dts[i + 2] * t1 + dts[i + 3] * t2 + dts[i + 4] * t3;\n    }\n\n    // 传入儒略日(J2000起算),计算UTC与原子时的差(单位:日)\n    public double deltatT2(double jd) {\n        return this.deltatT(jd / 365.2425 + 2000) / 86400.0;\n    }\n\n    // 公历转儒略日,UTC=1表示原日期是UTC\n    public double toJD(boolean UTC) {\n        double y = this.Y; // 取出年月\n        double m = this.M;\n        double n = 0;\n\n        if (m <= 2) {\n            m += 12;\n            y--;\n        }\n\n        if (this.Y * 372 + this.M * 31 + this.D >= 588829) {\n            // 判断是否为格里高利历日1582*372+10*31+15\n            n = int2(y / 100);\n            n = 2 - n + int2(n / 4);// 加百年闰\n        }\n\n        n += int2(365.2500001 * (y + 4716)); // 加上年引起的偏移日数\n        n += int2(30.6 * (m + 1)) + this.D; // 加上月引起的偏移日数及日偏移数\n        n += ((this.s / 60 + this.m) / 60 + this.h) / 24 - 1524.5;\n        if (UTC) {\n            return n + this.deltatT2(n - J2000);\n        }\n        return n;\n    }\n\n    // 儒略日数转公历,UTC=1表示目标公历是UTC\n    public void setFromJD(double jd, boolean UTC) {\n        if (UTC) {\n            jd -= this.deltatT2(jd - J2000);\n        }\n        jd += 0.5;\n\n        // 取得日数的整数部份A及小数部分F\n        double A = int2(jd);\n        double F = jd - A;\n        double D;\n\n        if (A > 2299161) {\n            D = int2((A - 1867216.25) / 36524.25);\n            A += 1 + D - int2(D / 4);\n        }\n        A += 1524; // 向前移4年零2个月\n        this.Y = int2((A - 122.1) / 365.25);// 年\n        D = A - int2(365.25 * this.Y); // 去除整年日数后余下日数\n        this.M = int2(D / 30.6001); // 月数\n        this.D = D - int2(this.M * 30.6001);// 去除整月日数后余下日数\n        this.Y -= 4716;\n        this.M--;\n        if (this.M > 12) {\n            this.M -= 12;\n        }\n        if (this.M <= 2) {\n            this.Y++;\n        }\n        // 日的小数转为时分秒\n        F *= 24;\n        this.h = int2(F);\n        F -= this.h;\n        F *= 60;\n        this.m = int2(F);\n        F -= this.m;\n        F *= 60;\n        this.s = F;\n    }\n\n    // 设置时间,参数例:\"20000101 120000\"或\"20000101\"\n    public void setFromStr(String s) {\n        this.Y = Double.parseDouble(s.substring(0, 4));\n        this.M = Double.parseDouble(s.substring(4, 2));\n        this.D = Double.parseDouble(s.substring(6, 2));\n        this.h = Double.parseDouble(s.substring(9, 2));\n        this.m = Double.parseDouble(s.substring(11, 2));\n        this.s = Double.parseDouble(s.substring(13, 2)); /* 将5改为了2 */\n    }\n\n    // 日期转为串\n    public String toStr() {\n        String Y = \"     \" + (int) this.Y;\n        String M = \"0\" + (int) this.M;\n        String D = \"0\" + (int) this.D;\n\n        double h = this.h, m = this.m, s = Math.floor(this.s + .5);\n        if (s >= 60) {\n            s -= 60;\n            m++;\n        }\n        if (m >= 60) {\n            m -= 60;\n            h++;\n        }\n        String sh = \"0\" + (int) h, sm = \"0\" + (int) m, ss = \"0\" + (int) s;\n        Y = Y.substring(Y.length() - 5, Y.length());\n        M = M.substring(M.length() - 2, M.length());\n        D = D.substring(D.length() - 2, D.length());\n        sh = sh.substring(sh.length() - 2, sh.length());\n        sm = sm.substring(sm.length() - 2, sm.length());\n        ss = ss.substring(ss.length() - 2, ss.length());\n        return Y + \"-\" + M + \"-\" + D + \" \" + sh + \":\" + sm + \":\" + ss;\n    }\n\n    // 算出:jd转到当地UTC后,UTC日数的整数部分或小数部分\n    // 基于J2000力学时jd的起算点是12:00:00时,所以跳日时刻发生在12:00:00,这与日历计算发生矛盾\n    // 把jd改正为00:00:00起算,这样儒略日的跳日动作就与日期的跳日同步\n    // 改正方法为jd=jd+0.5-deltatT+shiqu/24.0\n    // 把儒略日的起点移动-0.5(即前移12小时)\n    // 式中shiqu是时区,北京的起算点是-8小时,shiqu取8\n    public double Dint_dec(double jd, int shiqu, boolean dec) {\n        double u = jd + 0.5 - this.deltatT2(jd) + shiqu / 24.0;\n        if (dec) {\n            return Math.floor(u); // 返回整数部分\n        } else {\n            return u - Math.floor(u); // 返回小数部分\n        }\n    }\n\n    // 计算两个日期的相差的天数,输入字串格式日期,如:\"20080101\"\n    double d1_d2(String d1, String d2) {\n        double Y = this.Y, M = this.M, D = this.D, h = this.h, m = this.m, s = this.s; // 备份原来的数据\n\n        this.setFromStr(d1.substring(0, 8) + \" 120000\");\n        double jd1 = this.toJD(false);\n        this.setFromStr(d2.substring(0, 8) + \" 120000\");\n        double jd2 = this.toJD(false);\n\n        this.Y = Y;\n        this.M = M;\n        this.D = D;\n        this.h = h;\n        this.m = m;\n        this.s = s; // 还原\n        if (jd1 > jd2) {\n            return Math.floor(jd1 - jd2 + .0001);\n        } else {\n            return -Math.floor(jd2 - jd1 + .0001);\n        }\n    }\n\n    // 返回黄赤交角(常规精度),短期精度很高\n    public static double hcjj1(double t) {\n        double t1 = t / 36525;\n        double t2 = t1 * t1;\n        double t3 = t2 * t1;\n        return (hcjjB[0] + hcjjB[1] * t1 + hcjjB[2] * t2 + hcjjB[3] * t3) / rad;\n    }\n\n    // 黄赤转换(黄赤坐标旋转)\n    public static void HCconv(double[] JW, double E) {\n        // 黄道赤道坐标变换,赤到黄E取负\n        double HJ = rad2mrad(JW[0]), HW = JW[1];\n        double sinE = Math.sin(E), cosE = Math.cos(E);\n        double sinW = cosE * Math.sin(HW) + sinE * Math.cos(HW) * Math.sin(HJ);\n        double J = Math.atan2(Math.sin(HJ) * cosE - Math.tan(HW) * sinE, Math\n                .cos(HJ));\n        JW[0] = rad2mrad(J);\n        JW[1] = Math.asin(sinW);\n    }\n\n    // 补岁差\n    public static void addPrece(double jd, double[] zb) {\n        int i;\n        double t = 1, v = 0, t1 = jd / 365250;\n        for (i = 1; i < 8; i++) {\n            t *= t1;\n            v += preceB[i] * t;\n        }\n        zb[0] = rad2mrad(zb[0] + (v + 2.9965 * t1) / rad);\n    }\n\n    // ===============光行差==================\n    private static final double GXC_e[] = {0.016708634, -0.000042037,\n            -0.0000001267}; // 离心率\n    private static final double GXC_p[] = {102.93735 / RAD, 1.71946 / RAD,\n            0.00046 / RAD}; // 近点\n    private static final double GXC_l[] = {280.4664567 / RAD,\n            36000.76982779 / RAD, 0.0003032028 / RAD, 1 / 49931000 / RAD,\n            -1 / 153000000 / RAD}; // 太平黄经\n    private static final double GXC_k = 20.49552 / rad; // 光行差常数\n\n    // 恒星周年光行差计算(黄道坐标中)\n    public static void addGxc(double t, double[] zb) {\n        double t1 = t / 36525;\n        double t2 = t1 * t1;\n        double t3 = t2 * t1;\n        double t4 = t3 * t1;\n        double L = GXC_l[0] + GXC_l[1] * t1 + GXC_l[2] * t2 + GXC_l[3] * t3\n                + GXC_l[4] * t4;\n        double p = GXC_p[0] + GXC_p[1] * t1 + GXC_p[2] * t2;\n        double e = GXC_e[0] + GXC_e[1] * t1 + GXC_e[2] * t2;\n        double dL = L - zb[0], dP = p - zb[0];\n        zb[0] -= GXC_k * (Math.cos(dL) - e * Math.cos(dP)) / Math.cos(zb[1]);\n        zb[1] -= GXC_k * Math.sin(zb[1]) * (Math.sin(dL) - e * Math.sin(dP));\n        zb[0] = rad2mrad(zb[0]);\n    }\n\n    // ===============章动计算==================\n    private static final double nutB[] = {// 章动表\n            2.1824391966, -33.757045954, 0.0000362262, 3.7340E-08, -2.8793E-10,\n            -171996, -1742, 92025, 89, 3.5069406862, 1256.663930738,\n            0.0000105845, 6.9813E-10, -2.2815E-10, -13187, -16, 5736, -31,\n            1.3375032491, 16799.418221925, -0.0000511866, 6.4626E-08,\n            -5.3543E-10, -2274, -2, 977, -5, 4.3648783932, -67.514091907,\n            0.0000724525, 7.4681E-08, -5.7586E-10, 2062, 2, -895, 5,\n            0.0431251803, -628.301955171, 0.0000026820, 6.5935E-10, 5.5705E-11,\n            -1426, 34, 54, -1, 2.3555557435, 8328.691425719, 0.0001545547,\n            2.5033E-07, -1.1863E-09, 712, 1, -7, 0, 3.4638155059,\n            1884.965885909, 0.0000079025, 3.8785E-11, -2.8386E-10, -517, 12,\n            224, -6, 5.4382493597, 16833.175267879, -0.0000874129, 2.7285E-08,\n            -2.4750E-10, -386, -4, 200, 0, 3.6930589926, 25128.109647645,\n            0.0001033681, 3.1496E-07, -1.7218E-09, -301, 0, 129, -1,\n            3.5500658664, 628.361975567, 0.0000132664, 1.3575E-09, -1.7245E-10,\n            217, -5, -95, 3};\n\n    public static class ZD {\n        public double Lon;\n        public double Obl;\n    }\n\n    // 计算黄经章动及交角章动\n    public static ZD nutation(double t) {\n        ZD d = new ZD();\n        d.Lon = 0;\n        d.Obl = 0;\n        t /= 36525;\n        double c, t1 = t, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1;// t5=t4*t1;\n        for (int i = 0; i < nutB.length; i += 9) {\n            c = nutB[i] + nutB[i + 1] * t1 + nutB[i + 2] * t2 + nutB[i + 3]\n                    * t3 + nutB[i + 4] * t4;\n            d.Lon += (nutB[i + 5] + nutB[i + 6] * t / 10) * Math.sin(c); // 黄经章动\n            d.Obl += (nutB[i + 7] + nutB[i + 8] * t / 10) * Math.cos(c); // 交角章动\n        }\n        d.Lon /= rad * 10000; // 黄经章动\n        d.Obl /= rad * 10000; // 交角章动\n        return d;\n    }\n\n    // 本函数计算赤经章动及赤纬章动\n    public static void nutationRaDec(double t, double[] zb) {\n        double Ra = zb[0], Dec = zb[1];\n        double E = hcjj1(t), sinE = Math.sin(E), cosE = Math.cos(E); // 计算黄赤交角\n        ZD d = nutation(t); // 计算黄经章动及交角章动\n        double cosRa = Math.cos(Ra), sinRa = Math.sin(Ra);\n        double tanDec = Math.tan(Dec);\n        zb[0] += (cosE + sinE * sinRa * tanDec) * d.Lon - cosRa * tanDec\n                * d.Obl; // 赤经章动\n        zb[1] += sinE * cosRa * d.Lon + sinRa * d.Obl; // 赤纬章动\n        zb[0] = rad2mrad(zb[0]);\n    }\n\n\n    //=================以下是月球及地球运动参数表===================\n    /***************************************\n     * 如果用记事本查看此代码,请在\"格式\"菜单中去除\"自动换行\"\n     * E10是关于地球的,格式如下:\n     *    它是一个数组,每3个数看作一条记录,每条记录的3个数记为A,B,C\n     *    rec=A*cos(B+C*t);  式中t是J2000起算的儒略千年数\n     *    每条记录的计算结果(即rec)取和即得地球的日心黄经的周期量L0\n     * E11格式如下: rec = A*cos*(B+C*t) *t,     取和后得泊松量L1\n     * E12格式如下: rec = A*cos*(B+C*t) *t*t,   取和后得泊松量L2\n     * E13格式如下: rec = A*cos*(B+C*t) *t*t*t, 取和后得泊松量L3\n     * 最后地球的地心黄经:L = L0+L1+L2+L3+...\n     * E20,E21,E22,E23...用于计算黄纬\n     * M10,M11等是关于月球的,参数的用法请阅读Mnn()函数\n     *****************************************/\n    //地球运动VSOP87参数\n    private static final double E10[] = { //黄经周期项\n            1.75347045673, 0.00000000000, 0.0000000000, 0.03341656456, 4.66925680417, 6283.0758499914, 0.00034894275, 4.62610241759, 12566.1516999828, 0.00003417571, 2.82886579606, 3.5231183490,\n            0.00003497056, 2.74411800971, 5753.3848848968, 0.00003135896, 3.62767041758, 77713.7714681205, 0.00002676218, 4.41808351397, 7860.4193924392, 0.00002342687, 6.13516237631, 3930.2096962196,\n            0.00001273166, 2.03709655772, 529.6909650946, 0.00001324292, 0.74246356352, 11506.7697697936, 0.00000901855, 2.04505443513, 26.2983197998, 0.00001199167, 1.10962944315, 1577.3435424478,\n            0.00000857223, 3.50849156957, 398.1490034082, 0.00000779786, 1.17882652114, 5223.6939198022, 0.00000990250, 5.23268129594, 5884.9268465832, 0.00000753141, 2.53339053818, 5507.5532386674,\n            0.00000505264, 4.58292563052, 18849.2275499742, 0.00000492379, 4.20506639861, 775.5226113240, 0.00000356655, 2.91954116867, 0.0673103028, 0.00000284125, 1.89869034186, 796.2980068164,\n            0.00000242810, 0.34481140906, 5486.7778431750, 0.00000317087, 5.84901952218, 11790.6290886588, 0.00000271039, 0.31488607649, 10977.0788046990, 0.00000206160, 4.80646606059, 2544.3144198834,\n            0.00000205385, 1.86947813692, 5573.1428014331, 0.00000202261, 2.45767795458, 6069.7767545534, 0.00000126184, 1.08302630210, 20.7753954924, 0.00000155516, 0.83306073807, 213.2990954380,\n            0.00000115132, 0.64544911683, 0.9803210682, 0.00000102851, 0.63599846727, 4694.0029547076, 0.00000101724, 4.26679821365, 7.1135470008, 0.00000099206, 6.20992940258, 2146.1654164752,\n            0.00000132212, 3.41118275555, 2942.4634232916, 0.00000097607, 0.68101272270, 155.4203994342, 0.00000085128, 1.29870743025, 6275.9623029906, 0.00000074651, 1.75508916159, 5088.6288397668,\n            0.00000101895, 0.97569221824, 15720.8387848784, 0.00000084711, 3.67080093025, 71430.6956181291, 0.00000073547, 4.67926565481, 801.8209311238, 0.00000073874, 3.50319443167, 3154.6870848956,\n            0.00000078756, 3.03698313141, 12036.4607348882, 0.00000079637, 1.80791330700, 17260.1546546904, 0.00000085803, 5.98322631256, 161000.6857376741, 0.00000056963, 2.78430398043, 6286.5989683404,\n            0.00000061148, 1.81839811024, 7084.8967811152, 0.00000069627, 0.83297596966, 9437.7629348870, 0.00000056116, 4.38694880779, 14143.4952424306, 0.00000062449, 3.97763880587, 8827.3902698748,\n            0.00000051145, 0.28306864501, 5856.4776591154, 0.00000055577, 3.47006009062, 6279.5527316424, 0.00000041036, 5.36817351402, 8429.2412664666, 0.00000051605, 1.33282746983, 1748.0164130670,\n            0.00000051992, 0.18914945834, 12139.5535091068, 0.00000049000, 0.48735065033, 1194.4470102246, 0.00000039200, 6.16832995016, 10447.3878396044, 0.00000035566, 1.77597314691, 6812.7668150860,\n            0.00000036770, 6.04133859347, 10213.2855462110, 0.00000036596, 2.56955238628, 1059.3819301892, 0.00000033291, 0.59309499459, 17789.8456197850, 0.00000035954, 1.70876111898, 2352.8661537718};\n    private static final double E11[] = { //黄经泊松1项\n            6283.31966747491, 0.00000000000, 0.0000000000, 0.00206058863, 2.67823455584, 6283.0758499914, 0.00004303430, 2.63512650414, 12566.1516999828, 0.00000425264, 1.59046980729, 3.5231183490,\n            0.00000108977, 2.96618001993, 1577.3435424478, 0.00000093478, 2.59212835365, 18849.2275499742, 0.00000119261, 5.79557487799, 26.2983197998, 0.00000072122, 1.13846158196, 529.6909650946,\n            0.00000067768, 1.87472304791, 398.1490034082, 0.00000067327, 4.40918235168, 5507.5532386674, 0.00000059027, 2.88797038460, 5223.6939198022, 0.00000055976, 2.17471680261, 155.4203994342,\n            0.00000045407, 0.39803079805, 796.2980068164, 0.00000036369, 0.46624739835, 775.5226113240, 0.00000028958, 2.64707383882, 7.1135470008, 0.00000019097, 1.84628332577, 5486.7778431750,\n            0.00000020844, 5.34138275149, 0.9803210682, 0.00000018508, 4.96855124577, 213.2990954380, 0.00000016233, 0.03216483047, 2544.3144198834, 0.00000017293, 2.99116864949, 6275.9623029906};\n    private static final double E12[] = { //黄经泊松2项\n            0.00052918870, 0.00000000000, 0.0000000000, 0.00008719837, 1.07209665242, 6283.0758499914, 0.00000309125, 0.86728818832, 12566.1516999828, 0.00000027339, 0.05297871691, 3.5231183490,\n            0.00000016334, 5.18826691036, 26.2983197998, 0.00000015752, 3.68457889430, 155.4203994342, 0.00000009541, 0.75742297675, 18849.2275499742, 0.00000008937, 2.05705419118, 77713.7714681205,\n            0.00000006952, 0.82673305410, 775.5226113240, 0.00000005064, 4.66284525271, 1577.3435424478};\n    private static final double E13[] = {0.00000289226, 5.84384198723, 6283.0758499914, 0.00000034955, 0.00000000000, 0.0000000000, 0.00000016819, 5.48766912348, 12566.1516999828};\n    private static final double E14[] = {0.00000114084, 3.14159265359, 0.0000000000, 0.00000007717, 4.13446589358, 6283.0758499914, 0.00000000765, 3.83803776214, 12566.1516999828};\n    private static final double E15[] = {0.00000000878, 3.14159265359, 0.0000000000};\n    private static final double E20[] = {  //黄纬周期项\n            0.00000279620, 3.19870156017, 84334.6615813083, 0.00000101643, 5.42248619256, 5507.5532386674, 0.00000080445, 3.88013204458, 5223.6939198022, 0.00000043806, 3.70444689758, 2352.8661537718,\n            0.00000031933, 4.00026369781, 1577.3435424478, 0.00000022724, 3.98473831560, 1047.7473117547, 0.00000016392, 3.56456119782, 5856.4776591154, 0.00000018141, 4.98367470263, 6283.0758499914,\n            0.00000014443, 3.70275614914, 9437.7629348870, 0.00000014304, 3.41117857525, 10213.2855462110};\n    private static final double E21[] = {0.00000009030, 3.89729061890, 5507.5532386674, 0.00000006177, 1.73038850355, 5223.6939198022};\n    private static final double E30[] = {  //距离周期项\n            1.00013988799, 0.00000000000, 0.0000000000, 0.01670699626, 3.09846350771, 6283.0758499914, 0.00013956023, 3.05524609620, 12566.1516999828, 0.00003083720, 5.19846674381, 77713.7714681205,\n            0.00001628461, 1.17387749012, 5753.3848848968, 0.00001575568, 2.84685245825, 7860.4193924392, 0.00000924799, 5.45292234084, 11506.7697697936, 0.00000542444, 4.56409149777, 3930.2096962196};\n    private static final double E31[] = {0.00103018608, 1.10748969588, 6283.0758499914, 0.00001721238, 1.06442301418, 12566.1516999828, 0.00000702215, 3.14159265359, 0.0000000000};\n    private static final double E32[] = {0.00004359385, 5.78455133738, 6283.0758499914};\n    private static final double E33[] = {0.00000144595, 4.27319435148, 6283.0758499914};\n    //月球运动参数\n    private static final double M10[] = {\n            22639.5858800, 2.3555545723, 8328.6914247251, 1.5231275E-04, 2.5041111E-07, -1.1863391E-09, 4586.4383203, 8.0413790709, 7214.0628654588, -2.1850087E-04, -1.8646419E-07, 8.7760973E-10, 2369.9139357, 10.3969336431, 15542.7542901840, -6.6188121E-05, 6.3946925E-08, -3.0872935E-10, 769.0257187, 4.7111091445, 16657.3828494503, 3.0462550E-04, 5.0082223E-07, -2.3726782E-09,\n            -666.4175399, -0.0431256817, 628.3019552485, -2.6638815E-06, 6.1639211E-10, -5.4439728E-11, -411.5957339, 3.2558104895, 16866.9323152810, -1.2804259E-04, -9.8998954E-09, 4.0433461E-11, 211.6555524, 5.6858244986, -1114.6285592663, -3.7081362E-04, -4.3687530E-07, 2.0639488E-09, 205.4359530, 8.0845047526, 6585.7609102104, -2.1583699E-04, -1.8708058E-07, 9.3204945E-10,\n            191.9561973, 12.7524882154, 23871.4457149091, 8.6124629E-05, 3.1435804E-07, -1.4950684E-09, 164.7286185, 10.4400593249, 14914.4523349355, -6.3524240E-05, 6.3330532E-08, -2.5428962E-10, -147.3213842, -2.3986802540, -7700.3894694766, -1.5497663E-04, -2.4979472E-07, 1.1318993E-09, -124.9881185, 5.1984668216, 7771.3771450920, -3.3094061E-05, 3.1973462E-08, -1.5436468E-10,\n            -109.3803637, 2.3124288905, 8956.9933799736, 1.4964887E-04, 2.5102751E-07, -1.2407788E-09, 55.1770578, 7.1411231536, -1324.1780250970, 6.1854469E-05, 7.3846820E-08, -3.4916281E-10, -45.0996092, 5.6113650618, 25195.6237400061, 2.4270161E-05, 2.4051122E-07, -1.1459056E-09, 39.5333010, -0.9002559173, -8538.2408905558, 2.8035534E-04, 2.6031101E-07, -1.2267725E-09,\n            38.4298346, 18.4383127140, 22756.8171556428, -2.8468899E-04, -1.2251727E-07, 5.6888037E-10, 36.1238141, 7.0666637168, 24986.0742741754, 4.5693825E-04, 7.5123334E-07, -3.5590172E-09, 30.7725751, 16.0827581417, 14428.1257309177, -4.3700174E-04, -3.7292838E-07, 1.7552195E-09, -28.3971008, 7.9982533891, 7842.3648207073, -2.2116475E-04, -1.8584780E-07, 8.2317000E-10,\n            -24.3582283, 10.3538079614, 16171.0562454324, -6.8852003E-05, 6.4563317E-08, -3.6316908E-10, -18.5847068, 2.8429122493, -557.3142796331, -1.8540681E-04, -2.1843765E-07, 1.0319744E-09, 17.9544674, 5.1553411398, 8399.6791003405, -3.5757942E-05, 3.2589854E-08, -2.0880440E-10, 14.5302779, 12.7956138971, 23243.1437596606, 8.8788511E-05, 3.1374165E-07, -1.4406287E-09,\n            14.3796974, 15.1080427876, 32200.1371396342, 2.3843738E-04, 5.6476915E-07, -2.6814075E-09, 14.2514576, -24.0810366320, -2.3011998397, 1.5231275E-04, 2.5041111E-07, -1.1863391E-09, 13.8990596, 20.7938672862, 31085.5085803679, -1.3237624E-04, 1.2789385E-07, -6.1745870E-10, 13.1940636, 3.3302699264, -9443.3199839914, -5.2312637E-04, -6.8728642E-07, 3.2502879E-09,\n            -9.6790568, -4.7542348263, -16029.0808942018, -3.0728938E-04, -5.0020584E-07, 2.3182384E-09, -9.3658635, 11.2971895604, 24080.9951807398, -3.4654346E-04, -1.9636409E-07, 9.1804319E-10, 8.6055318, 5.7289501804, -1742.9305145148, -3.6814974E-04, -4.3749170E-07, 2.1183885E-09, -8.4530982, 7.5540213938, 16100.0685698171, 1.1921869E-04, 2.8238458E-07, -1.3407038E-09,\n            8.0501724, 10.4831850066, 14286.1503796870, -6.0860358E-05, 6.2714140E-08, -1.9984990E-10, -7.6301553, 4.6679834628, 17285.6848046987, 3.0196162E-04, 5.0143862E-07, -2.4271179E-09, -7.4474952, -0.0862513635, 1256.6039104970, -5.3277630E-06, 1.2327842E-09, -1.0887946E-10, 7.3712011, 8.1276304344, 5957.4589549619, -2.1317311E-04, -1.8769697E-07, 9.8648918E-10,\n            7.0629900, 0.9591375719, 33.7570471374, -3.0829302E-05, -3.6967043E-08, 1.7385419E-10, -6.3831491, 9.4966777258, 7004.5133996281, 2.1416722E-04, 3.2425793E-07, -1.5355019E-09, -5.7416071, 13.6527441326, 32409.6866054649, -1.9423071E-04, 5.4047029E-08, -2.6829589E-10, 4.3740095, 18.4814383957, 22128.5152003943, -2.8202511E-04, -1.2313366E-07, 6.2332010E-10,\n            -3.9976134, 7.9669196340, 33524.3151647312, 1.7658291E-04, 4.9092233E-07, -2.3322447E-09, -3.2096876, 13.2398458924, 14985.4400105508, -2.5159493E-04, -1.5449073E-07, 7.2324505E-10, -2.9145404, 12.7093625336, 24499.7476701576, 8.3460748E-05, 3.1497443E-07, -1.5495082E-09, 2.7318890, 16.1258838235, 13799.8237756692, -4.3433786E-04, -3.7354477E-07, 1.8096592E-09,\n            -2.5679459, -2.4418059357, -7072.0875142282, -1.5764051E-04, -2.4917833E-07, 1.0774596E-09, -2.5211990, 7.9551277074, 8470.6667759558, -2.2382863E-04, -1.8523141E-07, 7.6873027E-10, 2.4888871, 5.6426988169, -486.3266040178, -3.7347750E-04, -4.3625891E-07, 2.0095091E-09, 2.1460741, 7.1842488353, -1952.4799803455, 6.4518350E-05, 7.3230428E-08, -2.9472308E-10,\n            1.9777270, 23.1494218585, 39414.2000050930, 1.9936508E-05, 3.7830496E-07, -1.8037978E-09, 1.9336825, 9.4222182890, 33314.7656989005, 6.0925100E-04, 1.0016445E-06, -4.7453563E-09, 1.8707647, 20.8369929680, 30457.2066251194, -1.2971236E-04, 1.2727746E-07, -5.6301898E-10, -1.7529659, 0.4873576771, -8886.0057043583, -3.3771956E-04, -4.6884877E-07, 2.2183135E-09,\n            -1.4371624, 7.0979974718, -695.8760698485, 5.9190587E-05, 7.4463212E-08, -4.0360254E-10, -1.3725701, 1.4552986550, -209.5494658307, 4.3266809E-04, 5.1072212E-07, -2.4131116E-09, 1.2618162, 7.5108957121, 16728.3705250656, 1.1655481E-04, 2.8300097E-07, -1.3951435E-09};\n    private static final double M11[] = {\n            1.6768000, -0.0431256817, 628.3019552485, -2.6638815E-06, 6.1639211E-10, -5.4439728E-11, 0.5164200, 11.2260974062, 6585.7609102104, -2.1583699E-04, -1.8708058E-07, 9.3204945E-10, 0.4138300, 13.5816519784, 14914.4523349355, -6.3524240E-05, 6.3330532E-08, -2.5428962E-10, 0.3711500, 5.5402729076, 7700.3894694766, 1.5497663E-04, 2.4979472E-07, -1.1318993E-09,\n            0.2756000, 2.3124288905, 8956.9933799736, 1.4964887E-04, 2.5102751E-07, -1.2407788E-09, 0.2459863, -25.6198212459, -2.3011998397, 1.5231275E-04, 2.5041111E-07, -1.1863391E-09, 0.0711800, 7.9982533891, 7842.3648207073, -2.2116475E-04, -1.8584780E-07, 8.2317000E-10, 0.0612800, 10.3538079614, 16171.0562454324, -6.8852003E-05, 6.4563317E-08, -3.6316908E-10};\n    private static final double M12[] = {0.0048700, -0.0431256817, 628.3019552485, -2.6638815E-06, 6.1639211E-10, -5.4439728E-11, 0.0022800, -27.1705318325, -2.3011998397, 1.5231275E-04, 2.5041111E-07, -1.1863391E-09, 0.0015000, 11.2260974062, 6585.7609102104, -2.1583699E-04, -1.8708058E-07, 9.3204945E-10};\n    private static final double M20[] = {\n            18461.2400600, 1.6279052448, 8433.4661576405, -6.4021295E-05, -4.9499477E-09, 2.0216731E-11, 1010.1671484, 3.9834598170, 16762.1575823656, 8.8291456E-05, 2.4546117E-07, -1.1661223E-09, 999.6936555, 0.7276493275, -104.7747329154, 2.1633405E-04, 2.5536106E-07, -1.2065558E-09, 623.6524746, 8.7690283983, 7109.2881325435, -2.1668263E-06, 6.8896872E-08, -3.2894608E-10,\n            199.4837596, 9.6692843156, 15647.5290230993, -2.8252217E-04, -1.9141414E-07, 8.9782646E-10, 166.5741153, 6.4134738261, -1219.4032921817, -1.5447958E-04, -1.8151424E-07, 8.5739300E-10, 117.2606951, 12.0248388879, 23976.2204478244, -1.3020942E-04, 5.8996977E-08, -2.8851262E-10, 61.9119504, 6.3390143893, 25090.8490070907, 2.4060421E-04, 4.9587228E-07, -2.3524614E-09,\n            33.3572027, 11.1245829706, 15437.9795572686, 1.5014592E-04, 3.1930799E-07, -1.5152852E-09, 31.7596709, 3.0832038997, 8223.9166918098, 3.6864680E-04, 5.0577218E-07, -2.3928949E-09, 29.5766003, 8.8121540801, 6480.9861772950, 4.9705523E-07, 6.8280480E-08, -2.7450635E-10, 15.5662654, 4.0579192538, -9548.0947169068, -3.0679233E-04, -4.3192536E-07, 2.0437321E-09,\n            15.1215543, 14.3803934601, 32304.9118725496, 2.2103334E-05, 3.0940809E-07, -1.4748517E-09, -12.0941511, 8.7259027166, 7737.5900877920, -4.8307078E-06, 6.9513264E-08, -3.8338581E-10, 8.8681426, 9.7124099974, 15019.2270678508, -2.7985829E-04, -1.9203053E-07, 9.5226618E-10, 8.0450400, 0.6687636586, 8399.7091105030, -3.3191993E-05, 3.2017096E-08, -1.5363746E-10,\n            7.9585542, 12.0679645696, 23347.9184925760, -1.2754553E-04, 5.8380585E-08, -2.3407289E-10, 7.4345550, 6.4565995078, -1847.7052474301, -1.5181570E-04, -1.8213063E-07, 9.1183272E-10, -6.7314363, -4.0265854988, -16133.8556271171, -9.0955337E-05, -2.4484477E-07, 1.1116826E-09, 6.5795750, 16.8104074692, 14323.3509980023, -2.2066770E-04, -1.1756732E-07, 5.4866364E-10,\n            -6.4600721, 1.5847795630, 9061.7681128890, -6.6685176E-05, -4.3335556E-09, -3.4222998E-11, -6.2964773, 4.8837157343, 25300.3984729215, -1.9206388E-04, -1.4849843E-08, 6.0650192E-11, -5.6323538, -0.7707750092, 733.0766881638, -2.1899793E-04, -2.5474467E-07, 1.1521161E-09, -5.3683961, 6.8263720663, 16204.8433027325, -9.7115356E-05, 2.7023515E-08, -1.3414795E-10,\n            -5.3112784, 3.9403341353, 17390.4595376141, 8.5627574E-05, 2.4607756E-07, -1.2205621E-09, -5.0759179, 0.6845236457, 523.5272223331, 2.1367016E-04, 2.5597745E-07, -1.2609955E-09, -4.8396143, -1.6710309265, -7805.1642023920, 6.1357413E-05, 5.5663398E-09, -7.4656459E-11, -4.8057401, 3.5705615768, -662.0890125485, 3.0927234E-05, 3.6923410E-08, -1.7458141E-10,\n            3.9840545, 8.6945689615, 33419.5404318159, 3.9291696E-04, 7.4628340E-07, -3.5388005E-09, 3.6744619, 19.1659620415, 22652.0424227274, -6.8354947E-05, 1.3284380E-07, -6.3767543E-10, 2.9984815, 20.0662179587, 31190.2833132833, -3.4871029E-04, -1.2746721E-07, 5.8909710E-10, 2.7986413, -2.5281611620, -16971.7070481963, 3.4437664E-04, 2.6526096E-07, -1.2469893E-09,\n            2.4138774, 17.7106633865, 22861.5918885581, -5.0102304E-04, -3.7787833E-07, 1.7754362E-09, 2.1863132, 5.5132179088, -9757.6441827375, 1.2587576E-04, 7.8796768E-08, -3.6937954E-10, 2.1461692, 13.4801375428, 23766.6709819937, 3.0245868E-04, 5.6971910E-07, -2.7016242E-09, 1.7659832, 11.1677086523, 14809.6776020201, 1.5280981E-04, 3.1869159E-07, -1.4608454E-09,\n            -1.6244212, 7.3137297434, 7318.8375983742, -4.3483492E-04, -4.4182525E-07, 2.0841655E-09, 1.5813036, 5.4387584720, 16552.6081165349, 5.2095955E-04, 7.5618329E-07, -3.5792340E-09, 1.5197528, 16.7359480324, 40633.6032972747, 1.7441609E-04, 5.5981921E-07, -2.6611908E-09, 1.5156341, 1.7023646816, -17876.7861416319, -4.5910508E-04, -6.8233647E-07, 3.2300712E-09,\n            1.5102092, 5.4977296450, 8399.6847301375, -3.3094061E-05, 3.1973462E-08, -1.5436468E-10, -1.3178223, 9.6261586339, 16275.8309783478, -2.8518605E-04, -1.9079775E-07, 8.4338673E-10, -1.2642739, 11.9817132061, 24604.5224030729, -1.3287330E-04, 5.9613369E-08, -3.4295235E-10, 1.1918723, 22.4217725310, 39518.9747380084, -1.9639754E-04, 1.2294390E-07, -5.9724197E-10,\n            1.1346110, 14.4235191419, 31676.6099173011, 2.4767216E-05, 3.0879170E-07, -1.4204120E-09, 1.0857810, 8.8552797618, 5852.6842220465, 3.1609367E-06, 6.7664088E-08, -2.2006663E-10, -1.0193852, 7.2392703065, 33629.0898976466, -3.9751134E-05, 2.3556127E-07, -1.1256889E-09, -0.8227141, 11.0814572888, 16066.2815125171, 1.4748204E-04, 3.1992438E-07, -1.5697249E-09,\n            0.8042238, 3.5274358950, -33.7870573000, 2.8263353E-05, 3.7539802E-08, -2.2902113E-10, 0.8025939, 6.7832463846, 16833.1452579809, -9.9779237E-05, 2.7639907E-08, -1.8858767E-10, -0.7931866, -6.3821400710, -24462.5470518423, -2.4326809E-04, -4.9525589E-07, 2.2980217E-09, -0.7910153, 6.3703481443, -591.1013369332, -1.5714346E-04, -1.8089785E-07, 8.0295327E-10,\n            -0.6674056, 9.1819266386, 24533.5347274576, 5.5197395E-05, 2.7743463E-07, -1.3204870E-09, 0.6502226, 4.1010449356, -10176.3966721553, -3.0412845E-04, -4.3254175E-07, 2.0981718E-09, -0.6388131, 6.2958887075, 25719.1509623392, 2.3794032E-04, 4.9648867E-07, -2.4069012E-09};\n    private static final double M21[] = {\n            0.0743000, 11.9537467337, 6480.9861772950, 4.9705523E-07, 6.8280480E-08, -2.7450635E-10, 0.0304300, 8.7259027166, 7737.5900877920, -4.8307078E-06, 6.9513264E-08, -3.8338581E-10, 0.0222900, 12.8540026510, 15019.2270678508, -2.7985829E-04, -1.9203053E-07, 9.5226618E-10, 0.0199900, 15.2095572232, 23347.9184925760, -1.2754553E-04, 5.8380585E-08, -2.3407289E-10,\n            0.0186900, 9.5981921614, -1847.7052474301, -1.5181570E-04, -1.8213063E-07, 9.1183272E-10, 0.0169600, 7.1681781524, 16133.8556271171, 9.0955337E-05, 2.4484477E-07, -1.1116826E-09, 0.0162300, 1.5847795630, 9061.7681128890, -6.6685176E-05, -4.3335556E-09, -3.4222998E-11, 0.0141900, -0.7707750092, 733.0766881638, -2.1899793E-04, -2.5474467E-07, 1.1521161E-09};\n    private static final double M30[] = {\n            385000.5290396, 1.5707963268, 0.0000000000, 0.0000000E+00, 0.0000000E+00, 0.0000000E+00, -20905.3551378, 3.9263508990, 8328.6914247251, 1.5231275E-04, 2.5041111E-07, -1.1863391E-09, -3699.1109330, 9.6121753977, 7214.0628654588, -2.1850087E-04, -1.8646419E-07, 8.7760973E-10, -2955.9675626, 11.9677299699, 15542.7542901840, -6.6188121E-05, 6.3946925E-08, -3.0872935E-10,\n            -569.9251264, 6.2819054713, 16657.3828494503, 3.0462550E-04, 5.0082223E-07, -2.3726782E-09, 246.1584797, 7.2566208254, -1114.6285592663, -3.7081362E-04, -4.3687530E-07, 2.0639488E-09, -204.5861179, 12.0108556517, 14914.4523349355, -6.3524240E-05, 6.3330532E-08, -2.5428962E-10, -170.7330791, 14.3232845422, 23871.4457149091, 8.6124629E-05, 3.1435804E-07, -1.4950684E-09,\n            -152.1378118, 9.6553010794, 6585.7609102104, -2.1583699E-04, -1.8708058E-07, 9.3204945E-10, -129.6202242, -0.8278839272, -7700.3894694766, -1.5497663E-04, -2.4979472E-07, 1.1318993E-09, 108.7427014, 6.7692631483, 7771.3771450920, -3.3094061E-05, 3.1973462E-08, -1.5436468E-10, 104.7552944, 3.8832252173, 8956.9933799736, 1.4964887E-04, 2.5102751E-07, -1.2407788E-09,\n            79.6605685, 0.6705404095, -8538.2408905558, 2.8035534E-04, 2.6031101E-07, -1.2267725E-09, 48.8883284, 1.5276706450, 628.3019552485, -2.6638815E-06, 6.1639211E-10, -5.4439728E-11, -34.7825237, 20.0091090408, 22756.8171556428, -2.8468899E-04, -1.2251727E-07, 5.6888037E-10, 30.8238599, 11.9246042882, 16171.0562454324, -6.8852003E-05, 6.4563317E-08, -3.6316908E-10,\n            24.2084985, 9.5690497159, 7842.3648207073, -2.2116475E-04, -1.8584780E-07, 8.2317000E-10, -23.2104305, 8.6374600436, 24986.0742741754, 4.5693825E-04, 7.5123334E-07, -3.5590172E-09, -21.6363439, 17.6535544685, 14428.1257309177, -4.3700174E-04, -3.7292838E-07, 1.7552195E-09, -16.6747239, 6.7261374666, 8399.6791003405, -3.5757942E-05, 3.2589854E-08, -2.0880440E-10,\n            14.4026890, 4.9010662531, -9443.3199839914, -5.2312637E-04, -6.8728642E-07, 3.2502879E-09, -12.8314035, 14.3664102239, 23243.1437596606, 8.8788511E-05, 3.1374165E-07, -1.4406287E-09, -11.6499478, 22.3646636130, 31085.5085803679, -1.3237624E-04, 1.2789385E-07, -6.1745870E-10, -10.4447578, 16.6788391144, 32200.1371396342, 2.3843738E-04, 5.6476915E-07, -2.6814075E-09,\n            10.3211071, 8.7119194804, -1324.1780250970, 6.1854469E-05, 7.3846820E-08, -3.4916281E-10, 10.0562033, 7.2997465071, -1742.9305145148, -3.6814974E-04, -4.3749170E-07, 2.1183885E-09, -9.8844667, 12.0539813334, 14286.1503796870, -6.0860358E-05, 6.2714140E-08, -1.9984990E-10, 8.7515625, 6.3563649081, -9652.8694498221, -9.0458282E-05, -1.7656429E-07, 8.3717626E-10,\n            -8.3791067, 4.4137085761, -557.3142796331, -1.8540681E-04, -2.1843765E-07, 1.0319744E-09, -7.0026961, -3.1834384995, -16029.0808942018, -3.0728938E-04, -5.0020584E-07, 2.3182384E-09, 6.3220032, 9.1248177206, 16100.0685698171, 1.1921869E-04, 2.8238458E-07, -1.3407038E-09, 5.7508579, 6.2387797896, 17285.6848046987, 3.0196162E-04, 5.0143862E-07, -2.4271179E-09,\n            -4.9501349, 9.6984267611, 5957.4589549619, -2.1317311E-04, -1.8769697E-07, 9.8648918E-10, -4.4211770, 3.0260949818, -209.5494658307, 4.3266809E-04, 5.1072212E-07, -2.4131116E-09, 4.1311145, 11.0674740526, 7004.5133996281, 2.1416722E-04, 3.2425793E-07, -1.5355019E-09, -3.9579827, 20.0522347225, 22128.5152003943, -2.8202511E-04, -1.2313366E-07, 6.2332010E-10,\n            3.2582371, 14.8106422192, 14985.4400105508, -2.5159493E-04, -1.5449073E-07, 7.2324505E-10, -3.1483020, 4.8266068163, 16866.9323152810, -1.2804259E-04, -9.8998954E-09, 4.0433461E-11, 2.6164092, 14.2801588604, 24499.7476701576, 8.3460748E-05, 3.1497443E-07, -1.5495082E-09, 2.3536310, 9.5259240342, 8470.6667759558, -2.2382863E-04, -1.8523141E-07, 7.6873027E-10,\n            -2.1171283, -0.8710096090, -7072.0875142282, -1.5764051E-04, -2.4917833E-07, 1.0774596E-09, -1.8970368, 17.6966801503, 13799.8237756692, -4.3433786E-04, -3.7354477E-07, 1.8096592E-09, -1.7385258, 2.0581540038, -8886.0057043583, -3.3771956E-04, -4.6884877E-07, 2.2183135E-09, -1.5713944, 22.4077892948, 30457.2066251194, -1.2971236E-04, 1.2727746E-07, -5.6301898E-10,\n            -1.4225541, 24.7202181853, 39414.2000050930, 1.9936508E-05, 3.7830496E-07, -1.8037978E-09, -1.4189284, 17.1661967915, 23314.1314352759, -9.9282182E-05, 9.5920387E-08, -4.6309403E-10, 1.1655364, 3.8400995356, 9585.2953352221, 1.4698499E-04, 2.5164390E-07, -1.2952185E-09, -1.1169371, 10.9930146158, 33314.7656989005, 6.0925100E-04, 1.0016445E-06, -4.7453563E-09,\n            1.0656723, 1.4845449633, 1256.6039104970, -5.3277630E-06, 1.2327842E-09, -1.0887946E-10, 1.0586190, 11.9220903668, 8364.7398411275, -2.1850087E-04, -1.8646419E-07, 8.7760973E-10, -0.9333176, 9.0816920389, 16728.3705250656, 1.1655481E-04, 2.8300097E-07, -1.3951435E-09, 0.8624328, 12.4550876470, 6656.7485858257, -4.0390768E-04, -4.0490184E-07, 1.9095841E-09,\n            0.8512404, 4.3705828944, 70.9876756153, -1.8807069E-04, -2.1782126E-07, 9.7753467E-10, -0.8488018, 16.7219647962, 31571.8351843857, 2.4110126E-04, 5.6415276E-07, -2.6269678E-09, -0.7956264, 3.5134526588, -9095.5551701890, 9.4948529E-05, 4.1873358E-08, -1.9479814E-10};\n    private static final double M31[] = {\n            0.5139500, 12.0108556517, 14914.4523349355, -6.3524240E-05, 6.3330532E-08, -2.5428962E-10, 0.3824500, 9.6553010794, 6585.7609102104, -2.1583699E-04, -1.8708058E-07, 9.3204945E-10, 0.3265400, 3.9694765808, 7700.3894694766, 1.5497663E-04, 2.4979472E-07, -1.1318993E-09, 0.2639600, 0.7416325637, 8956.9933799736, 1.4964887E-04, 2.5102751E-07, -1.2407788E-09,\n            0.1230200, -1.6139220085, 628.3019552485, -2.6638815E-06, 6.1639211E-10, -5.4439728E-11, 0.0775400, 8.7830116346, 16171.0562454324, -6.8852003E-05, 6.4563317E-08, -3.6316908E-10, 0.0606800, 6.4274570623, 7842.3648207073, -2.2116475E-04, -1.8584780E-07, 8.2317000E-10, 0.0497000, 12.0539813334, 14286.1503796870, -6.0860358E-05, 6.2714140E-08, -1.9984990E-10};\n    private static final double M1n[] = {3.81034392032, 8.39968473021E+03, -3.31919929753E-05, //月球平黄经系数\n            3.20170955005E-08, -1.53637455544E-10};\n\n    // ==================日位置计算===================\n    private double EnnT = 0; // 调用Enn前先设置EnnT时间变量\n\n    // 计算E10,E11,E20等,即:某一组周期项或泊松项算出,计算前先设置EnnT时间\n    public double Enn(double[] F) {\n        double v = 0;\n        for (int i = 0; i < F.length; i += 3) {\n            v += F[i] * Math.cos(F[i + 1] + EnnT * F[i + 2]);\n        }\n        return v;\n    }\n\n    // 返回地球位置,日心Date黄道分点坐标\n    public double[] earCal(double jd) {\n        EnnT = jd / 365250;\n        double llr[] = new double[3];\n        double t1 = EnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1, t5 = t4\n                * t1;\n        llr[0] = Enn(E10) + Enn(E11) * t1 + Enn(E12) * t2 + Enn(E13) * t3\n                + Enn(E14) * t4 + Enn(E15) * t5;\n        llr[1] = Enn(E20) + Enn(E21) * t1;\n        llr[2] = Enn(E30) + Enn(E31) * t1 + Enn(E32) * t2 + Enn(E33) * t3;\n        llr[0] = rad2mrad(llr[0]);\n        return llr;\n    }\n\n    // 传回jd时刻太阳的地心视黄经及黄纬\n    public double[] sunCal2(double jd) {\n        double[] sun = earCal(jd);\n        sun[0] += Math.PI;\n        sun[1] = -sun[1]; // 计算太阳真位置\n        ZD d = nutation(jd);\n        sun[0] = rad2mrad(sun[0] + d.Lon); // 补章动\n        addGxc(jd, sun); // 补周年黄经光行差\n        return sun; // 返回太阳视位置\n    }\n\n    // ==================月位置计算===================\n    private double MnnT = 0; // 调用Mnn前先设置MnnT时间变量\n\n    // 计算M10,M11,M20等,计算前先设置MnnT时间\n    public double Mnn(double[] F) {\n        double v = 0, t1 = MnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1;\n        for (int i = 0; i < F.length; i += 6) {\n            v += F[i]\n                    * Math.sin(F[i + 1] + t1 * F[i + 2] + t2 * F[i + 3] + t3\n                    * F[i + 4] + t4 * F[i + 5]);\n        }\n        return v;\n    }\n\n\n    // 返回月球位置,返回地心Date黄道坐标\n    public double[] moonCal(double jd) {\n        MnnT = jd / 36525;\n        double t1 = MnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1;\n        double[] llr = new double[3];\n        llr[0] = (Mnn(M10) + Mnn(M11) * t1 + Mnn(M12) * t2) / rad;\n        llr[1] = (Mnn(M20) + Mnn(M21) * t1) / rad;\n        llr[2] = (Mnn(M30) + Mnn(M31) * t1) * 0.999999949827;\n        llr[0] = llr[0] + M1n[0] + M1n[1] * t1 + M1n[2] * t2 + M1n[3] * t3\n                + M1n[4] * t4;\n        llr[0] = rad2mrad(llr[0]); // 地心Date黄道原点坐标(不含岁差)\n        addPrece(jd, llr); // 补岁差\n        return llr;\n    }\n\n    // 传回月球的地心视黄经及视黄纬\n    public double[] moonCal2(double jd) {\n        double[] moon = moonCal(jd);\n        ZD d = nutation(jd);\n        moon[0] = rad2mrad(moon[0] + d.Lon); // 补章动\n        return moon;\n    }\n\n    // 传回月球的地心视赤经及视赤纬\n    public double[] moonCal3(double jd) {\n        double[] moon = moonCal(jd);\n        HCconv(moon, hcjj1(jd));\n        nutationRaDec(jd, moon); // 补赤经及赤纬章动\n        // 如果黄赤转换前补了黄经章动及交章动,就不能再补赤经赤纬章动\n        return moon;\n    }\n\n    // ==================地心坐标中的日月位置计算===================\n    public double jiaoCai(int lx, double t, double jiao) {\n        // lx=1时计算t时刻日月角距与jiao的差, lx=0计算t时刻太阳黄经与jiao的差\n        double[] sun = earCal(t); // 计算太阳真位置(先算出日心坐标中地球的位置)\n        sun[0] += Math.PI;\n        sun[1] = -sun[1]; // 转为地心坐标\n        addGxc(t, sun); // 补周年光行差\n        if (lx == 0) {\n            ZD d = nutation(t);\n            sun[0] += d.Lon; // 补黄经章动\n            return rad2mrad(jiao - sun[0]);\n        }\n        double[] moon = moonCal(t); // 日月角差与章动无关\n        return rad2mrad(jiao - (moon[0] - sun[0]));\n    }\n\n    // ==================已知位置反求时间===================\n    public double jiaoCal(double t1, double jiao, int lx) {\n        // t1是J2000起算儒略日数\n        // 已知角度(jiao)求时间(t)\n        // lx=0是太阳黄经达某角度的时刻计算(用于节气计算)\n        // lx=1是日月角距达某角度的时刻计算(用于定朔望等)\n        // 传入的t1是指定角度对应真时刻t的前一些天\n        // 对于节气计算,应满足t在t1到t1+360天之间,对于Y年第n个节气(n=0是春分),t1可取值Y*365.2422+n*15.2\n        // 对于朔望计算,应满足t在t1到t1+25天之间,在此范围之外,求右边的根\n        double t2 = t1, t = 0, v;\n        if (lx == 0) {\n            t2 += 360; // 在t1到t2范围内求解(范气360天范围),结果置于t\n        } else {\n            t2 += 25;\n        }\n        jiao *= Math.PI / 180; // 待搜索目标角\n        // 利用截弦法计算\n        double v1 = jiaoCai(lx, t1, jiao); // v1,v2为t1,t2时对应的黄经\n        double v2 = jiaoCai(lx, t2, jiao);\n        if (v1 < v2) {\n            v2 -= 2 * Math.PI; // 减2pi作用是将周期性角度转为连续角度\n        }\n        double k = 1, k2; // k是截弦的斜率\n        for (int i = 0; i < 10; i++) { // 快速截弦求根,通常截弦三四次就已达所需精度\n            k2 = (v2 - v1) / (t2 - t1); // 算出斜率\n            if (Math.abs(k2) > 1e-15) {\n                k = k2; // 差商可能为零,应排除\n            }\n            t = t1 - v1 / k;\n            v = jiaoCai(lx, t, jiao);// 直线逼近法求根(直线方程的根)\n            if (v > 1) {\n                v -= 2 * Math.PI; // 一次逼近后,v1就已接近0,如果很大,则应减1周\n            }\n            if (Math.abs(v) < 1e-8) {\n                break; // 已达精度\n            }\n            t1 = t2;\n            v1 = v2;\n            t2 = t;\n            v2 = v; // 下一次截弦\n        }\n        return t;\n    }\n\n    //==================节气计算===================\n    public static final String[] jqB = { //节气表\n            \"春分\", \"清明\", \"谷雨\", \"立夏\", \"小满\", \"芒种\", \"夏至\", \"小暑\", \"大暑\", \"立秋\", \"处暑\", \"白露\",\n            \"秋分\", \"寒露\", \"霜降\", \"立冬\", \"小雪\", \"大雪\", \"冬至\", \"小寒\", \"大寒\", \"立春\", \"雨水\", \"惊蛰\"};\n\n    public String JQtest(int y) { // 节气使计算范例,y是年分,这是个测试函数\n        double jd = 384.2422 * (y - 2000), q;\n        String s1, s2;\n        String result = \"\";\n        for (int i = 0; i < 24; i++) {\n            q = jiaoCal(jd + i * 15.2, i * 15, 0);\n            q = q + J2000 + (double) 8 / 24; // 计算第i个节气(i=0是春风),结果转为北京时\n            setFromJD(q, true);\n            s1 = toStr(); // 将儒略日转成世界时\n            setFromJD(q, false);\n            s2 = toStr(); // 将儒略日转成日期格式(输出日期形式的力学时)\n            System.out.println(jqB[i] + \" : \" + s1); // 显示\n            result = result + jqB[i] + \" : \" + s2 + \"\\n\";\n        }\n        return result;\n    }\n\n    // =================定朔弦望计算========================\n    public void dingSuo(int y, double arc) { // 这是个测试函数\n\n        double jd = 365.2422 * (y - 2000), q;\n        String s1, s2;\n        System.out.println(\"月份:世界时  原子时\");\n        for (int i = 0; i < 12; i++) {\n            q = jiaoCal(jd + 29.5 * i, arc, 1) + J2000 + 8 / 24; // 计算第i个节气(i=0是春风),结果转为北京时\n            setFromJD(q, true);\n            s1 = toStr(); // 将儒略日转成世界时\n            setFromJD(q, false);\n            s2 = toStr(); // 将儒略日转成日期格式(输出日期形式的力学时)\n            System.out.println((i + 1) + \"月 : \" + s1 + \" \" + s2); // 显示\n        }\n    }\n\n    //=================农历计算========================\n    /*****\n     * 1.冬至所在的UTC日期保存在A[0],根据\"规定1\"得知在A[0]之前(含A[0])的那个UTC朔日定为年首日期\n     * 冬至之后的中气分保存在A[1],A[2],A[3]...A[13],其中A[12]又回到了冬至,共计算13次中气\n     * 2.连续计算冬至后14个朔日,即起算时间时A[0]+1 14个朔日编号为0,1...12,保存在C[0],C[1]...C[13]\n     * 这14个朔日表示编号为0月,1月,...12月0月的各月终止日期,但要注意实际终止日是新月初一,不属本月\n     * 这14个朔日同样表示编号为1月,2月...的开始日期\n     * 设某月编号为n,那么开始日期为C[n-1],结束日期为C[n],如果每月都含中气,该月所含的中气为A[n]\n     * 注:为了全总计算出13个月的大小月情况,须算出14个朔日。 3.闰年判断:含有13个月的年份是闰年 当第13月(月编号12月)终止日期大于冬至日,\n     * 即C[12]〉A[12], 那么该月是新年,本年没月12月,本年共12个月\n     * 当第13月(月编号12月)终止日期小等于冬至日,即C[12]≤A[12],那么该月是本年的有效月份,本年共13个月 4.闰年中处理闰月:\n     * 13个月中至少1个月份无中气,首个无中气的月置闰,在n=1...12月中找到闰月,即C[n]≤A[n]\n     * 从农历年首的定义知道,0月一定含有中气冬至,所以不可能是闰月。 首月有时很贪心,除冬至外还可能再吃掉本年或前年的另一个中气\n     * 定出闰月后,该月及以后的月编号减1 5.以上所述的月编号不是日常生活中说的\"正月\",\"二月\"等月名称:\n     * 如果\"建子\",0月为首月,如果\"建寅\",2月的月名\"正月\",3月是\"二月\",其余类推\n     *****/\n    private static final String yueMing[] = {\"正\", \"二\", \"三\", \"四\", \"五\", \"六\",\n            \"七\", \"八\", \"九\", \"十\", \"十一\", \"十二\"};\n\n    public Map<String, String> paiYue(int y) { // 农历排月序计算,可定出农历\n        double zq[] = new double[20];\n        double jq[] = new double[20];\n        double hs[] = new double[20];\n        Map<String, String> dateMap = new HashMap<>(24);\n        // var zq=new Array(),jq=new Array(), hs=new Array(); //中气表,节气表,日月合朔表\n\n        // 从冬至开始,连续计算14个中气时刻\n        int i;\n        double t1 = 365.2422 * (y - 2000) - 50; // 农历年首始于前一年的冬至,为了节气中气一起算,取前年大雪之前\n        for (i = 0; i < 14; i++) { // 计算节气(从冬至开始),注意:返回的是力学时\n            zq[i] = jiaoCal(t1 + i * 30.4, i * 30 - 90, 0); // 中气计算,冬至的太阳黄经是270度(或-90度)\n            jq[i] = jiaoCal(t1 + i * 30.4, i * 30 - 105, 0); // 顺便计算节气,它不是农历定朔计算所必需的\n        }\n        // 在冬至过后,连续计算14个日月合朔时刻\n        double dongZhiJia1 = zq[0] + 1 - Dint_dec(zq[0], 8, false); // 冬至过后的第一天0点的儒略日数\n        hs[0] = jiaoCal(dongZhiJia1, 0, 1); // 首月结束的日月合朔时刻\n        for (i = 1; i < 14; i++) {\n            hs[i] = jiaoCal(hs[i - 1] + 25, 0, 1);\n        }\n        // 算出中气及合朔时刻的日数(不含小数的日数计数,以便计算日期之间的差值)\n        double A[] = new double[20];\n        double B[] = new double[20];\n        double C[] = new double[20];\n        // var A=new Array(), B=new Array(), C=new Array();\n        for (i = 0; i < 14; i++) { // 取当地UTC日数的整数部分\n            A[i] = Dint_dec(zq[i], 8, true);\n            B[i] = Dint_dec(jq[i], 8, true);\n            C[i] = Dint_dec(hs[i], 8, true);\n        }\n        // 闰月及大小月分析\n        int tot = 12, nun = -1;\n        int yn[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0}; // 月编号\n        if (C[12] <= A[12]) { // 闰月分析\n            yn[12] = 12;\n            tot = 13; // 编号为12的月是本年的有效月份,本年总月数13个\n            for (i = 1; i < 13; i++) {\n                if (C[i] <= A[i]) {\n                    break;\n                }\n            }\n            for (nun = i - 1; i < 13; i++) {\n                yn[i - 1]--; // 注意yn中不含农历首月(所以取i-1),在公历中农历首月总是去年的所以不多做计算\n            }\n        }\n//        String syn[] = new String[20];\n//        for (i = 0; i < tot; i++) { // 转为建寅月名,并做大小月分析\n//            syn[i] = yueMing[(yn[i] + 10) % 12]; // 转建寅月名\n//            if (i == nun) {\n//                syn[i] += \"闰\";\n//            } else {\n//                syn[i] += \"月\"; // 标记是否闰月\n//            }\n//            if (C[i + 1] - C[i] > 29) {\n//                syn[i] += \"大\";\n//            } else {\n//                syn[i] += \"小\"; // 标记大小月\n//            }\n//        }\n\n//        String out = \"节气    手表时            中气    手表时            农历月   朔的手表时\\n\";\n        String out = \"\\n\";\n        for (i = 0; i < tot; i++) {\n            int zm = (i * 2 + 18) % 24;\n            int jm = (i * 2 + 17) % 24; // 中气名节气名\n            setFromJD(jq[i] + J2000 + (double) 8 / 24, true);\n            out += jqB[jm] + \":\" + toStr() + \"\\n \"; // 显示节气\n            dateMap.put(jqB[jm], toStr());\n            setFromJD(zq[i] + J2000 + (double) 8 / 24, true);\n            out += jqB[zm] + \":\" + toStr() + \"\\n \"; // 显示中气\n            dateMap.put(jqB[zm],toStr());\n//            setFromJD(hs[i] + J2000 + (double) 8 / 24, true);\n//            out += syn[i] + \":\" + toStr() + \"\\n\"; // 显示日月合朔\n        }\n//        Log.e(\"Jieqi\", out);\n        return dateMap;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/bsyun/xuanxueapp/Lunar.java",
    "content": "package com.bsyun.xuanxueapp;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.Calendar;\nimport java.util.Date;\n\npublic class Lunar {\n    private int year;\n    private int month;\n    private int day;\n    static int yearCyl, monCyl, dayCyl;\n    private boolean leap;\n    final static String chineseNumber[] = {\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\", \"十一\", \"十二\"};\n    static SimpleDateFormat chineseDateFormat = new SimpleDateFormat(\"yyyy年MM月dd日\");\n    final static long[] lunarInfo = new long[]\n            {0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,\n                    0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,\n                    0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,\n                    0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,\n                    0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,\n                    0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,\n                    0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,\n                    0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,\n                    0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,\n                    0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,\n                    0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,\n                    0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,\n                    0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,\n                    0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,\n                    0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0};\n\n    //====== 传回农历 y年的总天数\n    final private static int yearDays(int y) {\n        int i, sum = 348;\n        for (i = 0x8000; i > 0x8; i >>= 1) {\n            if ((lunarInfo[y - 1900] & i) != 0) {\n                sum += 1;\n            }\n        }\n        return (sum + leapDays(y));\n    }\n\n    //====== 传回农历 y年闰月的天数\n    final private static int leapDays(int y) {\n        if (leapMonth(y) != 0) {\n            if ((lunarInfo[y - 1900] & 0x10000) != 0) {\n                return 30;\n            } else {\n                return 29;\n            }\n        } else {\n            return 0;\n        }\n    }\n\n    //====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0\n    final private static int leapMonth(int y) {\n        return (int) (lunarInfo[y - 1900] & 0xf);\n    }\n\n    //====== 传回农历 y年m月的总天数\n    final private static int monthDays(int y, int m) {\n        if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) {\n            return 29;\n        } else {\n            return 30;\n        }\n    }\n\n    //====== 传回农历 y年的生肖\n    final public String animalsYear() {\n        final String[] Animals = new String[]{\"鼠\", \"牛\", \"虎\", \"兔\", \"龙\", \"蛇\", \"马\", \"羊\", \"猴\", \"鸡\", \"狗\", \"猪\"};\n        return Animals[(year - 4) % 12];\n    }\n\n    //====== 传入 月日的offset 传回干支, 0=甲子\n    final private static String cyclicalm(int num) {\n        final String[] Gan = new String[]{\"甲\", \"乙\", \"丙\", \"丁\", \"戊\", \"己\", \"庚\", \"辛\", \"壬\", \"癸\"};\n        final String[] Zhi = new String[]{\"子\", \"丑\", \"寅\", \"卯\", \"辰\", \"巳\", \"午\", \"未\", \"申\", \"酉\", \"戌\", \"亥\"};\n        return (Gan[num % 10] + Zhi[num % 12]);\n    }\n\n    //====== 传入 offset 传回干支, 0=甲子\n    final public String cyclical() {\n        int num = year - 1900 + 36;\n        return (cyclicalm(num));\n    }\n\n    public String getLunarMonthString() {\n        return null;\n    }\n\n    public Lunar(long time) {\n        Calendar calendar_now = Calendar.getInstance();\n        calendar_now.set(DateUtil.getYearByTimeStamp(time), DateUtil.getMonthByTimeStamp(time) - 1, DateUtil.getDayByTimeStamp(time));\n        int leapMonth = 0;\n        Date baseDate = null;\n        try {\n            baseDate = chineseDateFormat.parse(\"1900年1月31日\");\n        } catch (ParseException e) {\n            e.printStackTrace(); //To change body of catch statement use Options | File Templates.\n        }\n\n        //求出和1900年1月31日相差的天数\n        int offset = (int) ((calendar_now.getTime().getTime() - baseDate.getTime()) / 86400000L);\n        dayCyl = offset + 40;\n        monCyl = 14;\n\n        //用offset减去每农历年的天数\n        // 计算当天是农历第几天\n        //i最终结果是农历的年份\n        //offset是当年的第几天\n        int iYear, daysOfYear = 0;\n        for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) {\n            daysOfYear = yearDays(iYear);\n            offset -= daysOfYear;\n            monCyl += 12;\n        }\n        if (offset < 0) {\n            offset += daysOfYear;\n            iYear--;\n            monCyl -= 12;\n        }\n        //农历年份\n        year = iYear;\n\n        yearCyl = iYear - 1864;\n        leapMonth = leapMonth(iYear); //闰哪个月,1-12\n        leap = false;\n\n        //用当年的天数offset,逐个减去每月（农历）的天数，求出当天是本月的第几天\n        int iMonth, daysOfLeapMonth = 0;\n        for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) {\n            //闰月\n            if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) {\n                --iMonth;\n                leap = true;\n                daysOfLeapMonth = leapDays(year);\n            } else {\n                daysOfLeapMonth = monthDays(year, iMonth);\n            }\n\n            offset -= daysOfLeapMonth;\n            //解除闰月\n            if (leap && iMonth == (leapMonth + 1)) {\n                leap = false;\n            }\n            if (!leap) {\n                monCyl++;\n            }\n        }\n        //offset为0时，并且刚才计算的月份是闰月，要校正\n        if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {\n            if (leap) {\n                leap = false;\n            } else {\n                leap = true;\n                --iMonth;\n                --monCyl;\n            }\n        }\n        //offset小于0时，也要校正\n        if (offset < 0) {\n            offset += daysOfLeapMonth;\n            --iMonth;\n            --monCyl;\n        }\n        month = iMonth;\n        day = offset + 1;\n    }\n\n    public String getGanZhi() {\n        return \"农历\" + cyclicalm(yearCyl) + \"年 \" + cyclicalm(monCyl) + \"月 \" + cyclicalm(dayCyl) + \"日\";\n    }\n\n    public static String getChinaDayString(int day) {\n        String chineseTen[] = {\"初\", \"十\", \"廿\", \"三\"};\n        int n = day % 10 == 0 ? 9 : day % 10 - 1;\n        if (day > 30) {\n            return \"\";\n        }\n        if (day == 10) {\n            return \"初十\";\n        } else {\n            return chineseTen[day / 10] + chineseNumber[n];\n        }\n    }\n\n    @Override\n    public String toString() {\n        return (leap ? \"闰\" : \"\") + chineseNumber[month - 1] + \"月\" + getChinaDayString(day);\n    }\n\n    public static String getWeek() {\n        Calendar cal = Calendar.getInstance();\n        int i = cal.get(Calendar.DAY_OF_WEEK);\n        switch (i) {\n            case 1:\n                return \"周日\";\n            case 2:\n                return \"周一\";\n            case 3:\n                return \"周二\";\n            case 4:\n                return \"周三\";\n            case 5:\n                return \"周四\";\n            case 6:\n                return \"周五\";\n            case 7:\n                return \"周六\";\n            default:\n                return \"\";\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/bsyun/xuanxueapp/MainActivity.java",
    "content": "package com.bsyun.xuanxueapp;\n\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.util.Log;\nimport android.widget.TextView;\n\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.recyclerview.widget.GridLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class MainActivity extends AppCompatActivity {\n\n    private static final String DPG = \"dipangan\";\n    private static final String TPG = \"tianpangan\";\n    private static final String JX = \"jiuxing\";\n    private static final String BS = \"bashen\";\n    private static final String BM = \"bamen\";\n    private long time;\n    private TextView shi1, shi2, yue1, yue2, ri1, ri2, nian1, nian2, tv_time, tv_ju, tv_xunshou, tv_zhifu, tv_zhishi;\n    private RecyclerView recyclerView;\n    private PanAdapter mAdapter;\n    private List<Object> panInfo;\n    private int[] gongweishu = {4, 9, 2, 3, 5, 7, 8, 1, 6};//正常宫位数\n    private int[] gongweishu2 = {4, 9, 2, 7, 6, 1, 8, 3, 5};//使用算法排天盘干的时候对应数组的宫位数\n    private List<String> basmenData = new ArrayList<>(8);\n    private Map<Integer, String> dipanganMap;\n    private Map<Integer, String> tianpanMap = new HashMap<>(9);\n    private Map<Integer, String> jiuxingMap = new HashMap<>(9);\n    private Map<Integer, String> bashenMap = new HashMap<>(9);\n    private Map<Integer, String> bamenMap = new HashMap<>(9);\n    private String curShiGan, xunshouGan, shigan, xunshouGan1;\n    //值使门\n    private String zhishi = \"\";\n    //值符星\n    private String zhifu = \"\";\n\n    //是阴盾还是阳盾\n    private boolean isYangdun;\n    //旬首干位置\n    private int pXunshougan;\n    private List<String> dipanganData = new ArrayList<>(10);\n    private List<String> tianpanganData = new ArrayList<>(9);\n    private List<String> bamenData = new ArrayList<>(9);\n    private List<String> bashenData = new ArrayList<>(9);\n    private ArrayList<String> jiuxingData = new ArrayList<>(9);\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_paipan);\n        getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n        getSupportActionBar().setHomeButtonEnabled(true);\n        getSupportActionBar().setTitle(\"奇门排盘\");\n        initView();\n        initData();\n        sortListData();\n        setData();\n    }\n\n    private void initView() {\n        nian1 = findViewById(R.id.nian1);\n        nian2 = findViewById(R.id.nian2);\n        ri2 = findViewById(R.id.ri2);\n        ri1 = findViewById(R.id.ri1);\n        yue2 = findViewById(R.id.yue2);\n        yue1 = findViewById(R.id.yue1);\n        shi2 = findViewById(R.id.shi2);\n        shi1 = findViewById(R.id.shi1);\n        tv_time = findViewById(R.id.tv_time);\n        tv_ju = findViewById(R.id.tv_ju);\n        tv_xunshou = findViewById(R.id.tv_xunshou);\n        tv_zhifu = findViewById(R.id.tv_zhifu);\n        tv_zhishi = findViewById(R.id.tv_zhishi);\n        recyclerView = findViewById(R.id.recyclerview);\n\n        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));\n        mAdapter = new PanAdapter();\n        recyclerView.setAdapter(mAdapter);\n    }\n\n    private void initData() {\n        time = getIntent().getLongExtra(CommmonUtil.TIME, 0);\n        XuanxueUtil.initGanZhi(DateUtil.getYearByTimeStamp(time), DateUtil.getMonthByTimeStamp(time), DateUtil.getDayByTimeStamp(time));\n        String rigz = XuanxueUtil.getGanZhiRi();\n        panInfo = CommmonUtil.getPanInfo(time, rigz);\n        curShiGan = XuanxueUtil.getDizhiHour(time);\n        xunshouGan = CommmonUtil.getXunshouGan(curShiGan);\n        shigan = CommmonUtil.getSpecialShigan(curShiGan);\n        Log.e(TAG, \"时辰: \" + XuanxueUtil.getGanZhi() + \" \" + curShiGan + \"时\");\n        Log.e(TAG, \"时干: \" + shigan);\n        isYangdun = (boolean) panInfo.get(0);\n        int jushu = (int) panInfo.get(3);\n        String j = isYangdun ? \"阳盾\" : \"阴盾\";\n        tv_ju.setText(\"盾局：\" + j + jushu + \"局\");\n        dipanganMap = CommmonUtil.getYinYangTianganMap(isYangdun, jushu);\n        xunshouGan1 = xunshouGan;\n        sortMapDataToList(dipanganMap, DPG);\n        for (int i = 0; i < 9; i++) {\n            if (dipanganData.get(i).equals(xunshouGan1)) {\n                pXunshougan = i;\n            }\n        }\n    }\n\n    private void setData() {\n        nian1.setText(XuanxueUtil.getGanZhiNian().substring(0, 1));\n        nian2.setText(XuanxueUtil.getGanZhiNian().substring(1, 2));\n        yue1.setText(XuanxueUtil.getGanZhiYue().substring(0, 1));\n        yue2.setText(XuanxueUtil.getGanZhiYue().substring(1, 2));\n        ri1.setText(XuanxueUtil.getGanZhiRi().substring(0, 1));\n        ri2.setText(XuanxueUtil.getGanZhiRi().substring(1, 2));\n        shi1.setText(curShiGan.substring(0, 1));\n        shi2.setText(curShiGan.substring(1, 2));\n        tv_time.setText(\"日期：\" + DateUtil.getDateToString(time));\n        tv_xunshou.setText(\"旬首：\" + xunshouGan1);\n        List<PanEntity> mdatas = new ArrayList<>(9);\n        String pXunkong = CommmonUtil.getXunkong(curShiGan);\n        int pMaxing = CommmonUtil.getStarMa(curShiGan);\n        String kong1 = pXunkong.substring(0, 1);\n        String kong2 = TextUtils.isEmpty(pXunkong.substring(1)) ? kong1 : pXunkong.substring(1);\n\n        for (int i = 0; i < 9; i++) {\n            PanEntity entity = new PanEntity();\n            entity.setDipangan(CommmonUtil.getDefaultGan(dipanganData.get(i)));\n            entity.setTianpangan(CommmonUtil.getDefaultGan(tianpanganData.get(i)));\n            entity.setGongwei(CommmonUtil.iconGongwei[i]);\n            if (CommmonUtil.getDefaultGan(dipanganData.get(i)).equals(xunshouGan)) {\n                tv_zhishi.setText(\"值使：\" + CommmonUtil.yuanBamen[i]);\n                Log.e(TAG, \"值使: \" + i + \":\" + CommmonUtil.yuanBamen[i]);\n            }\n            if (CommmonUtil.getDefaultGan(dipanganData.get(i)).equals(xunshouGan1)) {\n                tv_zhifu.setText(\"值符：\" + CommmonUtil.yuanJiuXing[i]);\n                Log.e(TAG, \"值符: \" + i + \":\" + CommmonUtil.yuanJiuXing[i]);\n            }\n            entity.setJiuxing2(jiuxingData.get(i));\n            if (jiuxingData.get(i).equals(\"天芮\")) {\n                entity.setJiuxing1(\"天禽\");\n                entity.setTiangan1(CommmonUtil.getDefaultGan(dipanganData.get(4)));\n            }\n            entity.setBamen(bamenData.get(i));\n            entity.setBashen(bashenData.get(i));\n            if ((i == Integer.parseInt(kong1) || i == Integer.parseInt(kong2)) && i == pMaxing) {\n                entity.setMakong(R.mipmap.empty_horse);\n            }\n            if (kong1.equals(kong2)) {\n                equalCondition(pMaxing, kong1, i, entity);\n            } else {\n                equalCondition(pMaxing, kong1, i, entity);\n                if (i == Integer.parseInt(kong2) && i == pMaxing) {\n                    entity.setMakong(R.mipmap.empty_horse);\n                }\n                if (i == Integer.parseInt(kong2) && i != pMaxing) {\n                    entity.setMakong(R.mipmap.icon_empty);\n                }\n                if (i == pMaxing && i != Integer.parseInt(kong2)) {\n                    entity.setMakong(R.mipmap.icon_horse);\n                }\n            }\n            //TODO 2011-3-17-12-20 该时间下，宫位生克和九星生克有bug\n            entity.setMenke(XuanxueUtil.getBamenShengke(CommmonUtil.getMonthByRecyclerPosition(i), bamenData.get(i)));\n            entity.setXingke(XuanxueUtil.getJiuxingShengke(i, jiuxingData.get(i)));\n            entity.setChangsheng(XuanxueUtil.getZhangsheng(tianpanganData.get(i), CommmonUtil.getDZByRecyclerPosition(i)));\n            mdatas.add(i, entity);\n        }\n        mAdapter.addData(mdatas);\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/bsyun/xuanxueapp/XuanxueUtil.java",
    "content": "package com.bsyun.xuanxueapp;\n\nimport android.util.Log;\n\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.List;\n\npublic class XuanxueUtil {\n    private static final String TAG = \"XuanxueUtil\";\n    /**\n     * 对于年月日的天干地支\n     */\n    private static int year_ganZhi;\n    private static int month_ganZhi;\n    private static int day_ganZhi;\n    private static int mYear;\n    private static int mMonth;\n    private static int mDday;\n    /**\n     * 关于阴历的相关信息\n     */\n    private static int[] lunar_info = {\n            0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,\n            0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,\n            0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,\n            0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,\n            0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,\n            0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,\n            0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,\n            0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,\n            0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,\n            0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,\n            0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,\n            0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,\n            0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,\n            0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,\n            0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0};\n    /**\n     * 记录天干的信息\n     */\n    private static String[] gan_info = {\"甲\", \"乙\", \"丙\", \"丁\", \"戊\", \"己\", \"庚\", \"辛\", \"壬\", \"癸\"};\n    private static String[] zhi_info = {\"子\", \"丑\", \"寅\", \"卯\", \"辰\", \"巳\", \"午\", \"未\", \"申\", \"酉\", \"戌\", \"亥\"};\n\n    /**\n     * 单例模式\n     */\n    private static volatile XuanxueUtil instance = null;\n\n    private XuanxueUtil() {\n    }\n\n    public static XuanxueUtil getInstance() {\n        if (instance == null) {\n            synchronized (XuanxueUtil.class) {\n                if (instance == null) {\n                    instance = new XuanxueUtil();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * 获取农历某年的总天数\n     *\n     * @param year\n     * @return\n     */\n    private static int daysOfYear(int year) {\n        int sum = 348;\n        for (int i = 0x8000; i > 0x8; i >>= 1) {\n            sum += (lunar_info[year - 1900] & i) == 0 ? 0 : 1;\n        }\n        //获取闰月的天数\n        int daysOfLeapMonth;\n        if ((lunar_info[year - 1900] & 0xf) != 0) {\n            daysOfLeapMonth = (lunar_info[year - 1900] & 0x10000) == 0 ? 29 : 30;\n        } else {\n            daysOfLeapMonth = 0;\n        }\n        return sum + daysOfLeapMonth;\n    }\n\n    /**\n     * 初始化年月日对应的天干地支\n     */\n    public static void initGanZhi(int year, int month, int day) {\n        //获取现在的时间\n//        int year = DateUtil.getYearByTimeStamp(times);\n//        int month = DateUtil.getYearByTimeStamp(times);\n//        int day = DateUtil.getYearByTimeStamp(times);\n        Calendar calendar_now = Calendar.getInstance();\n        calendar_now.set(year, month - 1, day);\n        long date_now = calendar_now.getTime().getTime();\n        //获取1900-01-31的时间\n        Calendar calendar_ago = Calendar.getInstance();\n        calendar_ago.set(1900, 0, 31);\n        long date_ago = calendar_ago.getTime().getTime();\n        long offset = (date_now - date_ago) / 86400000L;\n        float remainder = (date_now - date_ago) % 86400000L;\n        //余数大于0算一天\n        if (remainder > 0) {\n            offset += 1;\n        }\n        //都是从甲子开始算起以1900-01-31为起点\n        //1899-12-21是农历1899年腊月甲子日  40：相差1900-01-31有40天\n        day_ganZhi = (int) offset + 40;\n        //1898-10-01是农历甲子月  14：相差1900-01-31有14个月\n        month_ganZhi = 14;\n        int iYear, daysOfYear = 0;\n        for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) {\n            daysOfYear = daysOfYear(iYear);\n            offset -= daysOfYear;\n            month_ganZhi += 12;\n        }\n        if (offset < 0) {\n            offset += daysOfYear;\n            iYear--;\n            month_ganZhi -= 12;\n        }\n        //农历年份\n        mYear = iYear;\n        //1864年是甲子年\n        year_ganZhi = iYear - 1864;\n        //哪个月是闰月\n        int leapMonth = leapMonth(iYear);\n        boolean isLeap = false;\n        int daysOfLeapMonth = 0, iMonth;\n        for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) {\n            //闰月\n            if (leapMonth > 0 && iMonth == (leapMonth + 1) && !isLeap) {\n                --iMonth;\n                isLeap = true;\n                daysOfLeapMonth = leapDays(mYear);\n            } else {\n                daysOfLeapMonth = monthDays(mYear, iMonth);\n            }\n            //设置非闰月\n            if (isLeap && iMonth == (leapMonth + 1)) {\n                isLeap = false;\n            }\n            offset -= daysOfLeapMonth;\n            if (!isLeap) {\n                month_ganZhi++;\n            }\n        }\n        if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {\n            if (isLeap) {\n                isLeap = false;\n            } else {\n                isLeap = true;\n                --iMonth;\n                --month_ganZhi;\n            }\n        }\n        if (offset < 0) {\n            offset += daysOfLeapMonth;\n            --iMonth;\n            --month_ganZhi;\n        }\n        mMonth = iMonth;\n        mDday = (int) (offset + 1);\n        Log.e(\"PaipanActivity\", \"闰月: \" + isLeap + \" 年份=\" + mYear + \" 总共天数=\" + daysOfYear + \" month_ganZhi:\" + month_ganZhi);\n    }\n\n    //====== 传回农历 y年闰月的天数\n    private static int leapDays(int y) {\n        if (leapMonth(y) != 0) {\n            if ((lunar_info[y - 1900] & 0x10000) != 0) {\n                return 30;\n            } else {\n                return 29;\n            }\n        } else {\n            return 0;\n        }\n    }\n\n    //====== 传回农历 y年m月的总天数\n    private static int monthDays(int y, int m) {\n        if ((lunar_info[y - 1900] & (0x10000 >> m)) == 0) {\n            return 29;\n        } else {\n            return 30;\n        }\n    }\n\n    //====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0\n    private static int leapMonth(int y) {\n        return (int) (lunar_info[y - 1900] & 0xf);\n    }\n\n    /**\n     * @param n 年份\n     * @return 是否是闰年\n     */\n    private static boolean isRunnian(int n) {\n        return (n % 4 == 0 && n % 100 != 0) || n % 400 == 0;\n    }\n\n    /**\n     * 将年月日转化为天干地支的显示方法\n     *\n     * @param index\n     * @return\n     */\n    private static String ganZhi(int index) {\n        return gan_info[index % 10] + zhi_info[index % 12];\n    }\n\n    /**\n     * 获取天干地支\n     *\n     * @return\n     */\n    public static String getGanZhi() {\n        // TODO: 2020/11/12 此处月干有误差\n        return \"农历\" + ganZhi(year_ganZhi) + \"年 \" + ganZhi(month_ganZhi) + \"月 \" + ganZhi(day_ganZhi) + \"日\";\n    }\n\n    public static String getGanZhiYue() {\n        return ganZhi(month_ganZhi);\n    }\n\n    public static String getGanZhiNian() {\n        return ganZhi(year_ganZhi);\n    }\n\n    public static String getGanZhiRi() {\n        return ganZhi(day_ganZhi);\n    }\n\n    /**\n     * 子时23～1点，丑时1～3点，寅时3～5点，卯时5～7点，辰时7～9点，巳时9～11点，午时11～13点，未时13～15点，申时15～17点，酉时17～19点，戌时19～21点，亥时21～23点。\n     */\n    public static String getShichen(long timeStamp) {\n        int hour1 = DateUtil.getHourByTimeStamp(timeStamp);\n        int mimute = DateUtil.getMinuteByTimeStamp(timeStamp);\n\n        int hour;\n        if (mimute < 10) {\n            hour = Integer.parseInt(hour1 + \"0\" + mimute);\n        } else {\n            hour = Integer.parseInt(hour1 + String.valueOf(mimute));\n        }\n        String sc = \"\";\n        if (hour > 100 && hour < 300) {\n            sc = \"丑\";\n        } else if (hour >= 300 && hour < 500) {\n            sc = \"寅\";\n        } else if (hour >= 500 && hour < 700) {\n            sc = \"卯\";\n        } else if (hour >= 700 && hour < 900) {\n            sc = \"辰\";\n        } else if (hour >= 900 && hour < 1100) {\n            sc = \"巳\";\n        } else if (hour >= 1100 && hour < 1300) {\n            sc = \"午\";\n        } else if (hour >= 1300 && hour < 1500) {\n            sc = \"未\";\n        } else if (hour >= 1500 && hour < 1700) {\n            sc = \"申\";\n        } else if (hour >= 1700 && hour < 1900) {\n            sc = \"酉\";\n        } else if (hour >= 1900 && hour < 2100) {\n            sc = \"戌\";\n        } else if (hour >= 2100 && hour < 2300) {\n            sc = \"亥\";\n        } else {\n            sc = \"丑\";\n        }\n        return sc;\n    }\n\n\n    private static List<String> datas = new ArrayList<>();\n    private static String[] rigan = {\"甲\", \"乙\", \"丙\", \"丁\", \"戊\"};\n\n    public static String getDizhiHour(long timeStamp) {\n        datas.clear();\n        int index = 0;\n        String ganzhiri = getGanZhiRi().substring(0, 1);\n        String str = \"\";\n        switch (ganzhiri) {\n            case \"甲\":\n            case \"己\":\n                str = \"甲\";\n                break;\n            case \"乙\":\n            case \"庚\":\n                str = \"乙\";\n                break;\n            case \"丙\":\n            case \"辛\":\n                str = \"丙\";\n                break;\n            case \"丁\":\n            case \"壬\":\n                str = \"丁\";\n                break;\n            case \"戊\":\n            case \"癸\":\n                str = \"戊\";\n                break;\n        }\n        String riganzhi = str + getShichen(timeStamp);\n        for (String s : rigan) {\n            for (String value : zhi_info) {\n                datas.add(s + value);\n            }\n        }\n        //每隔10个index，十天干重新来一次\n        for (int i = 0; i < datas.size(); i++) {\n            if (datas.get(i).contains(riganzhi)) {\n                index = i;\n            }\n        }\n        if (index < 10) {\n            return gan_info[index] + getShichen(timeStamp);\n        } else {\n            return gan_info[index % 10] + getShichen(timeStamp);\n        }\n    }\n\n\n    //    private String[] siji = {\"春季\", \"夏季\", \"秋季\", \"冬季\", \"季末\"};\n    private static String[] siji = {\"木\", \"火\", \"金\", \"水\", \"土\"};\n    private static String[] bamen = {\"休门\", \"生门\", \"伤门\", \"杜门\", \"景门\", \"死门\", \"惊门\", \"开门\"};\n    private static String[] bmsk = {\"休\", \"死\", \"旺\", \"旺\", \"相\", \"死\", \"囚\", \"囚\",\n            \"囚\", \"相\", \"休\", \"休\", \"旺\", \"相\", \"死\", \"死\",\n            \"相\", \"休\", \"死\", \"死\", \"囚\", \"休\", \"旺\", \"旺\",\n            \"旺\", \"囚\", \"相\", \"相\", \"死\", \"囚\", \"休\", \"休\",\n            \"死\", \"旺\", \"囚\", \"囚\", \"休\", \"旺\", \"相\", \"相\"};\n\n\n    /**\n     * @param wx  春季，夏季，秋季，冬季，季末的五行属性\n     * @param men 休门，生门。。。\n     * @return\n     */\n    public static String getBamenShengke(String wx, String men) {\n        datas.clear();\n        String str = wx + men;\n        for (String s : siji) {\n            for (String value : bamen) {\n                datas.add(s + value);\n            }\n        }\n        for (int i = 0; i < datas.size(); i++) {\n            if (str.equals(datas.get(i))) {\n                return bmsk[i];\n            }\n        }\n        return \"\";\n    }\n\n\n    private static String[] wuxing = {\"金\", \"木\", \"水\", \"火\", \"土\"};\n    private static String[] jiuxing = {\"天蓬\", \"天任\", \"天冲\", \"天辅\", \"天英\", \"天芮\", \"天柱\", \"天心\", \"天禽\"};\n    private static String[] jxsk = {\"废\", \"旺\", \"囚\", \"囚\", \"休\", \"旺\", \"相\", \"相\", \"旺\",\n            \"旺\", \"囚\", \"相\", \"相\", \"废\", \"囚\", \"休\", \"休\", \"囚\",\n            \"相\", \"休\", \"废\", \"废\", \"囚\", \"休\", \"旺\", \"旺\", \"休\",\n            \"休\", \"废\", \"旺\", \"旺\", \"相\", \"废\", \"囚\", \"囚\", \"废\",\n            \"囚\", \"相\", \"休\", \"休\", \"旺\", \"相\", \"废\", \"废\", \"相\"};\n\n    /**\n     * @param position 乾，兑，震...position\n     * @param jx       天蓬星，天心星...\n     * @return\n     */\n    public static String getJiuxingShengke(int position, String jx) {\n        datas.clear();\n        String[] gwWx = {\"木\", \"火\", \"土\", \"木\", \"土\", \"金\", \"土\", \"水\", \"金\"};\n        String wx = gwWx[position];\n        String str = wx + jx;\n        for (String s : wuxing) {\n            for (String value : jiuxing) {\n                datas.add(s + value);\n            }\n        }\n        for (int i = 0; i < datas.size(); i++) {\n            if (str.equals(datas.get(i))) {\n                return jxsk[i];\n            }\n        }\n        return \"\";\n    }\n\n    private static String[] zhangsheng = {\n            \"沐浴\", \"冠带\", \"临官\", \"帝旺\", \"衰\", \"病\", \"死\", \"墓\", \"绝\", \"胎\", \"养\", \"长生\",\n            \"病\", \"衰\", \"帝旺\", \"临官\", \"冠带\", \"沐浴\", \"长生\", \"养\", \"胎\", \"绝\", \"墓\", \"死\",\n            \"胎\", \"养\", \"长生\", \"沐浴\", \"冠带\", \"临官\", \"帝旺\", \"衰\", \"病\", \"死\", \"墓\", \"绝\",\n            \"绝\", \"墓\", \"死\", \"病\", \"衰\", \"帝旺\", \"临官\", \"冠带\", \"沐浴\", \"长生\", \"养\", \"胎\",\n            \"胎\", \"养\", \"长生\", \"沐浴\", \"冠带\", \"临官\", \"帝旺\", \"衰\", \"病\", \"死\", \"墓\", \"绝\",\n            \"绝\", \"墓\", \"死\", \"病\", \"衰\", \"帝旺\", \"临官\", \"冠带\", \"沐浴\", \"长生\", \"养\", \"胎\",\n            \"死\", \"墓\", \"绝\", \"胎\", \"养\", \"长生\", \"沐浴\", \"冠带\", \"临官\", \"帝旺\", \"衰\", \"病\",\n            \"长生\", \"养\", \"胎\", \"绝\", \"墓\", \"死\", \"病\", \"衰\", \"帝旺\", \"临官\", \"冠带\", \"沐浴\",\n            \"帝旺\", \"衰\", \"病\", \"死\", \"墓\", \"绝\", \"胎\", \"养\", \"长生\", \"沐浴\", \"冠带\", \"临官\",\n            \"临官\", \"冠带\", \"沐浴\", \"长生\", \"养\", \"胎\", \"绝\", \"墓\", \"死\", \"病\", \"衰\", \"帝旺\",};\n\n    /**\n     * @param tg 甲乙丙丁...\n     * @param dz 子丑寅卯...\n     * @return String[] zhi_info = {\"辰巳\", \"午\", \"未申\", \"卯\", \"\", \"酉\", \"丑寅\", \"子\", \"亥戌\"};\n     */\n    public static String getZhangsheng(String tg, String dz) {\n        datas.clear();\n        //如果是四个角的宫位 地支有两个，需要拆开来计算\n        for (String s : gan_info) {\n            for (String value : zhi_info) {\n                datas.add(s + value);\n            }\n        }\n        if (dz.length() == 2) {\n            String dz1 = dz.substring(0, 1);\n            String dz2 = dz.substring(1);\n            String str1 = tg + dz1;\n            String str2 = tg + dz2;\n            int index1 = 0, index2 = 0;\n            for (int i = 0; i < datas.size(); i++) {\n                if (str1.equals(datas.get(i))) {\n                    index1 = i;\n                }\n                if (str2.equals(datas.get(i))) {\n                    index2 = i;\n                }\n            }\n            return zhangsheng[index1] + \"\\n\" + zhangsheng[index2];\n        } else {\n            String str = tg + dz;\n            int index = 0;\n            for (int i = 0; i < datas.size(); i++) {\n                if (str.equals(datas.get(i))) {\n                    index = i;\n                }\n            }\n            return zhangsheng[index];\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path\n        android:fillColor=\"#3DDC84\"\n        android:pathData=\"M0,0h108v108h-108z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path android:pathData=\"M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"85.84757\"\n                android:endY=\"92.4963\"\n                android:startX=\"42.9492\"\n                android:startY=\"49.59793\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\" />\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\" />\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z\"\n        android:strokeWidth=\"1\"\n        android:strokeColor=\"#00000000\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".MainActivity\">\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/recyclerview\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        android:layout_margin=\"10dp\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#6200EE</color>\n    <color name=\"colorPrimaryDark\">#3700B3</color>\n    <color name=\"colorAccent\">#03DAC5</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">Xuanxueapp</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "app/src/test/java/com/bsyun/xuanxueapp/ExampleUnitTest.java",
    "content": "package com.bsyun.xuanxueapp;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath \"com.android.tools.build:gradle:4.0.0\"\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Thu Mar 04 11:20:31 CST 2021\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.1.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx2048m\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app\"s APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\nrootProject.name = \"Xuanxueapp\""
  }
]