Commit d9ac2ce8 authored by Liang Ding's avatar Liang Ding

🎨 #12932

parent 11e8e963
src/main/webapp/markdowns/* src/main/resources/markdowns/*
!src/main/webapp/markdowns/README.md !src/main/resources/markdowns/README.md
solo_h2_test/ solo_h2_test/
target/ target/
......
[submodule "src/main/webapp/skins"] [submodule "src/main/resources/skins"]
path = src/main/webapp/skins path = src/main/resources/skins
url = https://github.com/b3log/solo-skins url = https://github.com/b3log/solo-skins
...@@ -3,7 +3,7 @@ FROM maven:3-jdk-8-alpine as MVN_BUILD ...@@ -3,7 +3,7 @@ FROM maven:3-jdk-8-alpine as MVN_BUILD
WORKDIR /opt/solo/ WORKDIR /opt/solo/
ADD . /tmp ADD . /tmp
RUN cd /tmp && mvn package -DskipTests -Pci && mv target/solo/* /opt/solo/ \ RUN cd /tmp && mvn package -DskipTests -Pci && mv target/solo/* /opt/solo/ \
&& cp -f /tmp/src/main/resources/docker/* /opt/solo/WEB-INF/classes/ && cp -f /tmp/src/main/resources/docker/* /opt/solo/
FROM openjdk:8-alpine FROM openjdk:8-alpine
LABEL maintainer="Liang Ding<d@b3log.org>" LABEL maintainer="Liang Ding<d@b3log.org>"
...@@ -15,4 +15,4 @@ RUN apk add --no-cache ca-certificates tzdata ...@@ -15,4 +15,4 @@ RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai ENV TZ=Asia/Shanghai
EXPOSE 8080 EXPOSE 8080
ENTRYPOINT [ "java", "-cp", "WEB-INF/lib/*:WEB-INF/classes", "org.b3log.solo.Server" ] ENTRYPOINT [ "java", "-jar", "solo.jar" ]
...@@ -33,104 +33,104 @@ const rename = require('gulp-rename') ...@@ -33,104 +33,104 @@ const rename = require('gulp-rename')
const del = require('del') const del = require('del')
function sassSkinProcess () { function sassSkinProcess () {
return gulp.src('./src/main/webapp/skins/*/css/*.scss'). return gulp.src('./src/main/resources/skins/*/css/*.scss').
pipe(sass({ pipe(sass({
outputStyle: 'compressed', outputStyle: 'compressed',
includePaths: ['node_modules'] includePaths: ['node_modules']
}).on('error', sass.logError)). }).on('error', sass.logError)).
pipe(gulp.dest('./src/main/webapp/skins/')) pipe(gulp.dest('./src/main/resources/skins/'))
} }
function sassWatch () { function sassWatch () {
gulp.watch(['./src/main/webapp/skins/*/css/*.scss'], sassSkinProcess) gulp.watch(['./src/main/resources/skins/*/css/*.scss'], sassSkinProcess)
gulp.watch(['./src/main/webapp/scss/*.scss'], sassCommonProcess) gulp.watch(['./src/main/resources/scss/*.scss'], sassCommonProcess)
} }
function sassCommonProcess () { function sassCommonProcess () {
return gulp.src('./src/main/webapp/scss/*.scss'). return gulp.src('./src/main/resources/scss/*.scss').
pipe(sass({ pipe(sass({
outputStyle: 'compressed', outputStyle: 'compressed',
includePaths: ['node_modules'] includePaths: ['node_modules']
}).on('error', sass.logError)). }).on('error', sass.logError)).
pipe(gulp.dest('./src/main/webapp/scss/')) pipe(gulp.dest('./src/main/resources/scss/'))
} }
gulp.task('watch', gulp.series(sassWatch)) gulp.task('watch', gulp.series(sassWatch))
function minJS () { function minJS () {
// minify js // minify js
return gulp.src('./src/main/webapp/js/*.js'). return gulp.src('./src/main/resources/js/*.js').
pipe(rename({suffix: '.min'})). pipe(rename({suffix: '.min'})).
pipe(uglify()). pipe(uglify()).
pipe(gulp.dest('./src/main/webapp/js/')) pipe(gulp.dest('./src/main/resources/js/'))
} }
function miniAdmin () { function miniAdmin () {
// concat js // concat js
const jsJqueryUpload = [ const jsJqueryUpload = [
'./src/main/webapp/js/admin/admin.js', './src/main/resources/js/admin/admin.js',
'./src/main/webapp/js/admin/editor.js', './src/main/resources/js/admin/editor.js',
'./src/main/webapp/js/admin/tablePaginate.js', './src/main/resources/js/admin/tablePaginate.js',
'./src/main/webapp/js/admin/article.js', './src/main/resources/js/admin/article.js',
'./src/main/webapp/js/admin/comment.js', './src/main/resources/js/admin/comment.js',
'./src/main/webapp/js/admin/articleList.js', './src/main/resources/js/admin/articleList.js',
'./src/main/webapp/js/admin/draftList.js', './src/main/resources/js/admin/draftList.js',
'./src/main/webapp/js/admin/pageList.js', './src/main/resources/js/admin/pageList.js',
'./src/main/webapp/js/admin/others.js', './src/main/resources/js/admin/others.js',
'./src/main/webapp/js/admin/linkList.js', './src/main/resources/js/admin/linkList.js',
'./src/main/webapp/js/admin/preference.js', './src/main/resources/js/admin/preference.js',
'./src/main/webapp/js/admin/themeList.js', './src/main/resources/js/admin/themeList.js',
'./src/main/webapp/js/admin/pluginList.js', './src/main/resources/js/admin/pluginList.js',
'./src/main/webapp/js/admin/userList.js', './src/main/resources/js/admin/userList.js',
'./src/main/webapp/js/admin/categoryList.js', './src/main/resources/js/admin/categoryList.js',
'./src/main/webapp/js/admin/commentList.js', './src/main/resources/js/admin/commentList.js',
'./src/main/webapp/js/admin/plugin.js', './src/main/resources/js/admin/plugin.js',
'./src/main/webapp/js/admin/main.js', './src/main/resources/js/admin/main.js',
'./src/main/webapp/js/admin/about.js'] './src/main/resources/js/admin/about.js']
return gulp.src(jsJqueryUpload). return gulp.src(jsJqueryUpload).
pipe(uglify({output: {ascii_only: true}})). pipe(uglify({output: {ascii_only: true}})).
pipe(concat('admin.min.js')). pipe(concat('admin.min.js')).
pipe(gulp.dest('./src/main/webapp/js/admin')) pipe(gulp.dest('./src/main/resources/js/admin'))
} }
function miniAdminLibs () { function miniAdminLibs () {
// concat js // concat js
const jsJqueryUpload = [ const jsJqueryUpload = [
'./src/main/webapp/js/lib/jquery/jquery.min.js', './src/main/resources/js/lib/jquery/jquery.min.js',
'./src/main/webapp/js/lib/jquery/jquery.bowknot.min.js',] './src/main/resources/js/lib/jquery/jquery.bowknot.min.js',]
return gulp.src(jsJqueryUpload). return gulp.src(jsJqueryUpload).
pipe(uglify({output: {ascii_only: true}})). pipe(uglify({output: {ascii_only: true}})).
// https://github.com/b3log/solo/issues/12522 // https://github.com/b3log/solo/issues/12522
pipe(concat('admin-lib.min.js')). pipe(concat('admin-lib.min.js')).
pipe(gulp.dest('./src/main/webapp/js/lib/compress/')) pipe(gulp.dest('./src/main/resources/js/lib/compress/'))
} }
function miniPjax () { function miniPjax () {
// concat js // concat js
const jsPjax = [ const jsPjax = [
'./src/main/webapp/js/lib/jquery/jquery-3.1.0.min.js', './src/main/resources/js/lib/jquery/jquery-3.1.0.min.js',
'./src/main/webapp/js/lib/jquery/jquery.pjax.js', './src/main/resources/js/lib/jquery/jquery.pjax.js',
'./src/main/webapp/js/lib/nprogress/nprogress.js'] './src/main/resources/js/lib/nprogress/nprogress.js']
return gulp.src(jsPjax). return gulp.src(jsPjax).
pipe(uglify()). pipe(uglify()).
pipe(concat('pjax.min.js')). pipe(concat('pjax.min.js')).
pipe(gulp.dest('./src/main/webapp/js/lib/compress/')) pipe(gulp.dest('./src/main/resources/js/lib/compress/'))
} }
function minSkinJS () { function minSkinJS () {
// minify js // minify js
return gulp.src('./src/main/webapp/skins/*/js/*.js'). return gulp.src('./src/main/resources/skins/*/js/*.js').
pipe(rename({suffix: '.min'})). pipe(rename({suffix: '.min'})).
pipe(uglify()). pipe(uglify()).
pipe(gulp.dest('./src/main/webapp/skins/')) pipe(gulp.dest('./src/main/resources/skins/'))
} }
function cleanProcess () { function cleanProcess () {
return del([ return del([
'./src/main/webapp/js/*.min.js', './src/main/resources/js/*.min.js',
'./src/main/webapp/skins/*/js/*.min.js']) './src/main/resources/skins/*/js/*.min.js'])
} }
gulp.task('default', gulp.task('default',
......
...@@ -227,7 +227,7 @@ ...@@ -227,7 +227,7 @@
<testResources> <testResources>
<testResource> <testResource>
<directory>src/main/webapp</directory> <directory>src/main/resources</directory>
</testResource> </testResource>
<testResource> <testResource>
<directory>src/test/resources</directory> <directory>src/test/resources</directory>
...@@ -279,28 +279,27 @@ ...@@ -279,28 +279,27 @@
<strictCheck>true</strictCheck> <strictCheck>true</strictCheck>
<includes> <includes>
<include>**/src/*/java/**/*.java</include> <include>**/src/*/java/**/*.java</include>
<include>**/src/*/webapp/js/*.js</include> <include>**/src/*/resources/js/*.js</include>
<include>**/src/*/webapp/scss/*.scss</include> <include>**/src/*/resources/scss/*.scss</include>
<include>**/src/*/webapp/**/*.ftl</include> <include>**/src/*/resources/**/*.ftl</include>
<include>**/src/*/webapp/skins/*/js/*.js</include> <include>**/src/*/resources/skins/*/js/*.js</include>
<include>**/src/*/webapp/skins/**/*.scss</include> <include>**/src/*/resources/skins/**/*.scss</include>
<include>**/src/*/webapp/skins/**/*.properties</include> <include>**/src/*/resources/skins/**/*.properties</include>
<include>**/src/*/webapp/plugins/*/js/*.js</include> <include>**/src/*/resources/plugins/*/js/*.js</include>
<include>**/src/*/webapp/plugins/*/css/*.css</include> <include>**/src/*/resources/plugins/*/css/*.css</include>
<include>**/src/*/webapp/plugins/*/*.properties</include> <include>**/src/*/resources/plugins/*/*.properties</include>
<include>**/src/*/webapp/js/admin/*.js</include> <include>**/src/*/resources/js/admin/*.js</include>
<include>**/src/*/resources/*.properties</include> <include>**/src/*/resources/*.properties</include>
<include>**/src/*/webapp/WEB-INF/*.xml</include>
<include>**/src/test/resources/**/*</include> <include>**/src/test/resources/**/*</include>
<include>**/src/*/resources/docker/*</include> <include>**/src/*/resources/docker/*</include>
</includes> </includes>
<excludes> <excludes>
<exclude>**/src/main/java/**/package-info.java</exclude> <exclude>**/src/main/java/**/package-info.java</exclude>
<exclude>**/src/*/webapp/js/lib/*.js</exclude> <exclude>**/src/*/resources/js/lib/*.js</exclude>
<include>**/src/*/webapp/js/*.min.js</include> <include>**/src/*/resources/js/*.min.js</include>
<include>**/src/*/webapp/js/admin/*.min.js</include> <include>**/src/*/resources/js/admin/*.min.js</include>
<include>**/src/*/webapp/skins/*/js/*.min.js</include> <include>**/src/*/resources/skins/*/js/*.min.js</include>
<include>**/src/*/webapp/skins/*/css/*.css</include> <include>**/src/*/resources/skins/*/css/*.css</include>
<exclude>**/src/main/java/com/**/*.java</exclude> <exclude>**/src/main/java/com/**/*.java</exclude>
</excludes> </excludes>
......
...@@ -113,9 +113,7 @@ public final class Server extends BaseServer { ...@@ -113,9 +113,7 @@ public final class Server extends BaseServer {
final CommandLineParser commandLineParser = new DefaultParser(); final CommandLineParser commandLineParser = new DefaultParser();
CommandLine commandLine; CommandLine commandLine;
final boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows"); final String cmdSyntax = "java -jar solo.jar";
final String cmdSyntax = isWindows ? "java -cp \"WEB-INF/lib/*;WEB-INF/classes\" org.b3log.solo.Starter"
: "java -cp \"WEB-INF/lib/*:WEB-INF/classes\" org.b3log.solo.Starter";
final String header = "\nSolo 是一款小而美的博客系统,专为程序员设计。\n\n"; final String header = "\nSolo 是一款小而美的博客系统,专为程序员设计。\n\n";
final String footer = "\n提需求或报告缺陷请到项目网站: https://github.com/b3log/solo\n\n"; final String footer = "\n提需求或报告缺陷请到项目网站: https://github.com/b3log/solo\n\n";
try { try {
......
...@@ -195,9 +195,9 @@ public class IndexProcessor { ...@@ -195,9 +195,9 @@ public class IndexProcessor {
*/ */
@RequestProcessing(value = "/logout", method = HttpMethod.GET) @RequestProcessing(value = "/logout", method = HttpMethod.GET)
public void logout(final RequestContext context) { public void logout(final RequestContext context) {
final Request httpServletRequest = context.getRequest(); final Request request = context.getRequest();
Solos.logout(httpServletRequest, context.getResponse()); Solos.logout(request, context.getResponse());
Solos.addGoogleNoIndex(context); Solos.addGoogleNoIndex(context);
context.sendRedirect(Latkes.getServePath()); context.sendRedirect(Latkes.getServePath());
......
...@@ -65,7 +65,7 @@ public class SkinHandler implements Handler { ...@@ -65,7 +65,7 @@ public class SkinHandler implements Handler {
} }
/** /**
* Resolve skin (template) for the specified HTTP servlet request. * Resolve skin (template) for the specified HTTP request.
* 前台皮肤切换 https://github.com/b3log/solo/issues/12060 * 前台皮肤切换 https://github.com/b3log/solo/issues/12060
* *
* @param request the specified HTTP request * @param request the specified HTTP request
......
...@@ -39,7 +39,7 @@ import java.util.Map; ...@@ -39,7 +39,7 @@ import java.util.Map;
public final class SkinRenderer extends AbstractFreeMarkerRenderer { public final class SkinRenderer extends AbstractFreeMarkerRenderer {
/** /**
* HTTP servlet request context. * HTTP request context.
*/ */
private final RequestContext context; private final RequestContext context;
......
...@@ -32,7 +32,7 @@ import org.b3log.solo.util.Skins; ...@@ -32,7 +32,7 @@ import org.b3log.solo.util.Skins;
public final class ConsoleRenderer extends AbstractFreeMarkerRenderer { public final class ConsoleRenderer extends AbstractFreeMarkerRenderer {
/** /**
* HTTP servlet request context. * HTTP request context.
*/ */
private final RequestContext context; private final RequestContext context;
......
...@@ -71,7 +71,7 @@ public class ImportService { ...@@ -71,7 +71,7 @@ public class ImportService {
*/ */
public void importMarkdowns() { public void importMarkdowns() {
new Thread(() -> { new Thread(() -> {
final String markdownsPath = ImportService.class.getResource("markdowns").getPath(); final String markdownsPath = ImportService.class.getResource("/markdowns").getPath();
LOGGER.debug("Import directory [" + markdownsPath + "]"); LOGGER.debug("Import directory [" + markdownsPath + "]");
final JSONObject admin = userQueryService.getAdmin(); final JSONObject admin = userQueryService.getAdmin();
......
...@@ -118,8 +118,8 @@ public final class Skins { ...@@ -118,8 +118,8 @@ public final class Skins {
} }
/** /**
* Fills the specified data model with the current skin's (WebRoot/skins/${skinDirName}/lang/lang_xx_XX.properties) * Fills the specified data model with the current skin's (skins/${skinDirName}/lang/lang_xx_XX.properties)
* and core language (WebRoot/WEB-INF/classes/lang_xx_XX.properties) configurations. * and core language (classes/lang_xx_XX.properties) configurations.
* *
* @param localeString the specified locale string * @param localeString the specified locale string
* @param currentSkinDirName the specified current skin directory name * @param currentSkinDirName the specified current skin directory name
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment