From c3f50412649d22d67ae0730980766039f019ae70 Mon Sep 17 00:00:00 2001 From: barney <15270405776@163.com> Date: Sat, 15 Oct 2022 19:23:52 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=91=E9=A9=AC=E7=82=B9=E8=AF=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpringDataRedisDemo/.gitignore | 33 + .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 58727 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + SpringDataRedisDemo/mvnw | 316 + SpringDataRedisDemo/mvnw.cmd | 188 + SpringDataRedisDemo/pom.xml | 72 + .../java/com/redis/config/RedisConfig.java | 36 + .../src/main/java/com/redis/pojo/User.java | 13 + .../SpringDataRedisDemoApplication.java | 13 + .../src/main/resources/application.yaml | 11 + .../RedisStringTemplateTest.java | 62 + .../SpringDataRedisDemoApplicationTests.java | 20 + hm-dianping/.gitignore | 33 + hm-dianping/pom.xml | 79 + .../java/com/hmdp/HmDianPingApplication.java | 15 + .../java/com/hmdp/config/MybatisConfig.java | 17 + .../com/hmdp/config/WebExceptionAdvice.java | 17 + .../controller/BlogCommentsController.java | 20 + .../com/hmdp/controller/BlogController.java | 83 + .../com/hmdp/controller/FollowController.java | 20 + .../com/hmdp/controller/ShopController.java | 101 + .../hmdp/controller/ShopTypeController.java | 34 + .../com/hmdp/controller/UploadController.java | 63 + .../com/hmdp/controller/UserController.java | 82 + .../hmdp/controller/VoucherController.java | 57 + .../controller/VoucherOrderController.java | 25 + .../main/java/com/hmdp/dto/LoginFormDTO.java | 10 + .../src/main/java/com/hmdp/dto/Result.java | 30 + .../main/java/com/hmdp/dto/ScrollResult.java | 12 + .../src/main/java/com/hmdp/dto/UserDTO.java | 10 + .../src/main/java/com/hmdp/entity/Blog.java | 95 + .../java/com/hmdp/entity/BlogComments.java | 81 + .../src/main/java/com/hmdp/entity/Follow.java | 51 + .../java/com/hmdp/entity/SeckillVoucher.java | 61 + .../src/main/java/com/hmdp/entity/Shop.java | 109 + .../main/java/com/hmdp/entity/ShopType.java | 64 + .../src/main/java/com/hmdp/entity/User.java | 66 + .../main/java/com/hmdp/entity/UserInfo.java | 87 + .../main/java/com/hmdp/entity/Voucher.java | 105 + .../java/com/hmdp/entity/VoucherOrder.java | 81 + .../com/hmdp/mapper/BlogCommentsMapper.java | 16 + .../main/java/com/hmdp/mapper/BlogMapper.java | 16 + .../java/com/hmdp/mapper/FollowMapper.java | 16 + .../com/hmdp/mapper/SeckillVoucherMapper.java | 16 + .../main/java/com/hmdp/mapper/ShopMapper.java | 16 + .../java/com/hmdp/mapper/ShopTypeMapper.java | 16 + .../java/com/hmdp/mapper/UserInfoMapper.java | 16 + .../main/java/com/hmdp/mapper/UserMapper.java | 16 + .../java/com/hmdp/mapper/VoucherMapper.java | 20 + .../com/hmdp/mapper/VoucherOrderMapper.java | 16 + .../hmdp/service/IBlogCommentsService.java | 16 + .../java/com/hmdp/service/IBlogService.java | 16 + .../java/com/hmdp/service/IFollowService.java | 16 + .../hmdp/service/ISeckillVoucherService.java | 16 + .../java/com/hmdp/service/IShopService.java | 16 + .../com/hmdp/service/IShopTypeService.java | 16 + .../com/hmdp/service/IUserInfoService.java | 16 + .../java/com/hmdp/service/IUserService.java | 16 + .../hmdp/service/IVoucherOrderService.java | 16 + .../com/hmdp/service/IVoucherService.java | 20 + .../service/impl/BlogCommentsServiceImpl.java | 20 + .../hmdp/service/impl/BlogServiceImpl.java | 20 + .../hmdp/service/impl/FollowServiceImpl.java | 20 + .../impl/SeckillVoucherServiceImpl.java | 20 + .../hmdp/service/impl/ShopServiceImpl.java | 20 + .../service/impl/ShopTypeServiceImpl.java | 20 + .../service/impl/UserInfoServiceImpl.java | 20 + .../hmdp/service/impl/UserServiceImpl.java | 20 + .../service/impl/VoucherOrderServiceImpl.java | 20 + .../hmdp/service/impl/VoucherServiceImpl.java | 51 + .../java/com/hmdp/utils/PasswordEncoder.java | 34 + .../java/com/hmdp/utils/RedisConstants.java | 22 + .../main/java/com/hmdp/utils/RedisData.java | 11 + .../java/com/hmdp/utils/RegexPatterns.java | 24 + .../main/java/com/hmdp/utils/RegexUtils.java | 42 + .../java/com/hmdp/utils/SystemConstants.java | 8 + .../main/java/com/hmdp/utils/UserHolder.java | 19 + .../src/main/resources/application.yaml | 27 + hm-dianping/src/main/resources/db/hmdp.sql | 1284 ++ .../main/resources/mapper/VoucherMapper.xml | 13 + .../com/hmdp/HmDianPingApplicationTests.java | 9 + jedis_demo/.idea/.gitignore | 8 + jedis_demo/.idea/compiler.xml | 13 + jedis_demo/.idea/encodings.xml | 7 + jedis_demo/.idea/jarRepositories.xml | 25 + jedis_demo/.idea/misc.xml | 14 + jedis_demo/.idea/vcs.xml | 6 + jedis_demo/pom.xml | 37 + .../com/redis/JedisConnectionFactory.java | 30 + .../test/java/com/redis/test/JedisTest.java | 53 + .../com/redis/JedisConnectionFactory.class | Bin 0 -> 1121 bytes .../com/redis/test/JedisTest.class | Bin 0 -> 2087 bytes nginx-1.18.0/nginx-1.18.0/conf/fastcgi.conf | 26 + nginx-1.18.0/nginx-1.18.0/conf/fastcgi_params | 25 + nginx-1.18.0/nginx-1.18.0/conf/koi-utf | 109 + nginx-1.18.0/nginx-1.18.0/conf/koi-win | 103 + nginx-1.18.0/nginx-1.18.0/conf/mime.types | 97 + nginx-1.18.0/nginx-1.18.0/conf/nginx.conf | 51 + nginx-1.18.0/nginx-1.18.0/conf/scgi_params | 17 + nginx-1.18.0/nginx-1.18.0/conf/uwsgi_params | 17 + nginx-1.18.0/nginx-1.18.0/conf/win-utf | 126 + nginx-1.18.0/nginx-1.18.0/contrib/README | 21 + .../nginx-1.18.0/contrib/geo2nginx.pl | 58 + .../contrib/unicode2nginx/koi-utf | 131 + .../contrib/unicode2nginx/unicode-to-nginx.pl | 48 + .../contrib/unicode2nginx/win-utf | 130 + .../contrib/vim/ftdetect/nginx.vim | 4 + .../contrib/vim/ftplugin/nginx.vim | 1 + .../nginx-1.18.0/contrib/vim/indent/nginx.vim | 11 + .../nginx-1.18.0/contrib/vim/syntax/nginx.vim | 2338 +++ nginx-1.18.0/nginx-1.18.0/docs/CHANGES | 8508 +++++++++ nginx-1.18.0/nginx-1.18.0/docs/CHANGES.ru | 8656 +++++++++ nginx-1.18.0/nginx-1.18.0/docs/LICENSE | 26 + .../nginx-1.18.0/docs/OpenSSL.LICENSE | 125 + nginx-1.18.0/nginx-1.18.0/docs/PCRE.LICENCE | 93 + nginx-1.18.0/nginx-1.18.0/docs/README | 3 + nginx-1.18.0/nginx-1.18.0/docs/zlib.LICENSE | 20 + nginx-1.18.0/nginx-1.18.0/html/50x.html | 21 + nginx-1.18.0/nginx-1.18.0/html/hmdp | 1 + nginx-1.18.0/nginx-1.18.0/html/index.html | 25 + nginx-1.18.0/nginx-1.18.0/logs/access.log | 14576 ++++++++++++++++ nginx-1.18.0/nginx-1.18.0/logs/error.log | 2786 +++ nginx-1.18.0/nginx-1.18.0/logs/nginx.pid | 1 + nginx-1.18.0/nginx-1.18.0/nginx.exe | Bin 0 -> 3716608 bytes 124 files changed, 42673 insertions(+) create mode 100644 SpringDataRedisDemo/.gitignore create mode 100644 SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.jar create mode 100644 SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.properties create mode 100644 SpringDataRedisDemo/mvnw create mode 100644 SpringDataRedisDemo/mvnw.cmd create mode 100644 SpringDataRedisDemo/pom.xml create mode 100644 SpringDataRedisDemo/src/main/java/com/redis/config/RedisConfig.java create mode 100644 SpringDataRedisDemo/src/main/java/com/redis/pojo/User.java create mode 100644 SpringDataRedisDemo/src/main/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplication.java create mode 100644 SpringDataRedisDemo/src/main/resources/application.yaml create mode 100644 SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/RedisStringTemplateTest.java create mode 100644 SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplicationTests.java create mode 100644 hm-dianping/.gitignore create mode 100644 hm-dianping/pom.xml create mode 100644 hm-dianping/src/main/java/com/hmdp/HmDianPingApplication.java create mode 100644 hm-dianping/src/main/java/com/hmdp/config/MybatisConfig.java create mode 100644 hm-dianping/src/main/java/com/hmdp/config/WebExceptionAdvice.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/BlogCommentsController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/BlogController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/FollowController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/ShopController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/ShopTypeController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/UploadController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/UserController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/VoucherController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/controller/VoucherOrderController.java create mode 100644 hm-dianping/src/main/java/com/hmdp/dto/LoginFormDTO.java create mode 100644 hm-dianping/src/main/java/com/hmdp/dto/Result.java create mode 100644 hm-dianping/src/main/java/com/hmdp/dto/ScrollResult.java create mode 100644 hm-dianping/src/main/java/com/hmdp/dto/UserDTO.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/Blog.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/BlogComments.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/Follow.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/SeckillVoucher.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/Shop.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/ShopType.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/User.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/UserInfo.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/Voucher.java create mode 100644 hm-dianping/src/main/java/com/hmdp/entity/VoucherOrder.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/BlogCommentsMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/BlogMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/FollowMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/SeckillVoucherMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/ShopMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/ShopTypeMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/UserInfoMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/UserMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/VoucherMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/mapper/VoucherOrderMapper.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IBlogCommentsService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IBlogService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IFollowService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/ISeckillVoucherService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IShopService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IShopTypeService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IUserInfoService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IUserService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IVoucherOrderService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/IVoucherService.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/BlogCommentsServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/FollowServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/SeckillVoucherServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/ShopTypeServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/UserServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/PasswordEncoder.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/RedisConstants.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/RedisData.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/RegexPatterns.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/RegexUtils.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/SystemConstants.java create mode 100644 hm-dianping/src/main/java/com/hmdp/utils/UserHolder.java create mode 100644 hm-dianping/src/main/resources/application.yaml create mode 100644 hm-dianping/src/main/resources/db/hmdp.sql create mode 100644 hm-dianping/src/main/resources/mapper/VoucherMapper.xml create mode 100644 hm-dianping/src/test/java/com/hmdp/HmDianPingApplicationTests.java create mode 100644 jedis_demo/.idea/.gitignore create mode 100644 jedis_demo/.idea/compiler.xml create mode 100644 jedis_demo/.idea/encodings.xml create mode 100644 jedis_demo/.idea/jarRepositories.xml create mode 100644 jedis_demo/.idea/misc.xml create mode 100644 jedis_demo/.idea/vcs.xml create mode 100644 jedis_demo/pom.xml create mode 100644 jedis_demo/src/main/java/com/redis/JedisConnectionFactory.java create mode 100644 jedis_demo/src/test/java/com/redis/test/JedisTest.java create mode 100644 jedis_demo/target/classes/com/redis/JedisConnectionFactory.class create mode 100644 jedis_demo/target/test-classes/com/redis/test/JedisTest.class create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/fastcgi.conf create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/fastcgi_params create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/koi-utf create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/koi-win create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/mime.types create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/nginx.conf create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/scgi_params create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/uwsgi_params create mode 100644 nginx-1.18.0/nginx-1.18.0/conf/win-utf create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/README create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/geo2nginx.pl create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/koi-utf create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/unicode-to-nginx.pl create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/win-utf create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/vim/ftdetect/nginx.vim create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/vim/ftplugin/nginx.vim create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/vim/indent/nginx.vim create mode 100644 nginx-1.18.0/nginx-1.18.0/contrib/vim/syntax/nginx.vim create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/CHANGES create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/CHANGES.ru create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/LICENSE create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/OpenSSL.LICENSE create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/PCRE.LICENCE create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/README create mode 100644 nginx-1.18.0/nginx-1.18.0/docs/zlib.LICENSE create mode 100644 nginx-1.18.0/nginx-1.18.0/html/50x.html create mode 160000 nginx-1.18.0/nginx-1.18.0/html/hmdp create mode 100644 nginx-1.18.0/nginx-1.18.0/html/index.html create mode 100644 nginx-1.18.0/nginx-1.18.0/logs/access.log create mode 100644 nginx-1.18.0/nginx-1.18.0/logs/error.log create mode 100644 nginx-1.18.0/nginx-1.18.0/logs/nginx.pid create mode 100644 nginx-1.18.0/nginx-1.18.0/nginx.exe diff --git a/SpringDataRedisDemo/.gitignore b/SpringDataRedisDemo/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/SpringDataRedisDemo/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.jar b/SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1dd12f17644411d6e840bd5a10c6ecda0175f18 GIT binary patch literal 58727 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%0ANsA|A3-jj|r`KAo%oTajX3>^E` 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 YM{}PByk10KD_nuQ4E7Du?}+~TKh4V)`~Uy| literal 0 HcmV?d00001 diff --git a/SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.properties b/SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..b74bf7f --- /dev/null +++ b/SpringDataRedisDemo/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/SpringDataRedisDemo/mvnw b/SpringDataRedisDemo/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/SpringDataRedisDemo/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/SpringDataRedisDemo/mvnw.cmd b/SpringDataRedisDemo/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/SpringDataRedisDemo/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/SpringDataRedisDemo/pom.xml b/SpringDataRedisDemo/pom.xml new file mode 100644 index 0000000..17432cf --- /dev/null +++ b/SpringDataRedisDemo/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.4 + + + com.redis + SpringDataRedisDemo + 0.0.1-SNAPSHOT + SpringDataRedisDemo + SpringDataRedisDemo + + 1.8 + + + + + org.apache.commons + commons-pool2 + 2.11.1 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.fasterxml.jackson.core + jackson-databind + 2.14.0-rc1 + test + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/SpringDataRedisDemo/src/main/java/com/redis/config/RedisConfig.java b/SpringDataRedisDemo/src/main/java/com/redis/config/RedisConfig.java new file mode 100644 index 0000000..9817d24 --- /dev/null +++ b/SpringDataRedisDemo/src/main/java/com/redis/config/RedisConfig.java @@ -0,0 +1,36 @@ +package com.redis.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; + + +@Configuration +public class RedisConfig { + + // connectionFactory报错 + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){ + // 1.创建RedisTemplate对象 + RedisTemplate redisTemplate = new RedisTemplate<>(); + + // 2.设置连接工厂 + redisTemplate.setConnectionFactory(connectionFactory); + + // 3.创建序列化对象 + GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); + + // 4.设置key和hashKey采用String的序列化方式 + redisTemplate.setKeySerializer(RedisSerializer.string()); + redisTemplate.setHashKeySerializer(RedisSerializer.string()); + + // 4.设置value和hashValue采用json的序列化方式 + redisTemplate.setValueSerializer(jsonRedisSerializer); + redisTemplate.setHashValueSerializer(jsonRedisSerializer); + + return redisTemplate; + } +} diff --git a/SpringDataRedisDemo/src/main/java/com/redis/pojo/User.java b/SpringDataRedisDemo/src/main/java/com/redis/pojo/User.java new file mode 100644 index 0000000..e998da3 --- /dev/null +++ b/SpringDataRedisDemo/src/main/java/com/redis/pojo/User.java @@ -0,0 +1,13 @@ +package com.redis.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class User { + private String name; + private Integer age; +} diff --git a/SpringDataRedisDemo/src/main/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplication.java b/SpringDataRedisDemo/src/main/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplication.java new file mode 100644 index 0000000..828566f --- /dev/null +++ b/SpringDataRedisDemo/src/main/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplication.java @@ -0,0 +1,13 @@ +package com.redis.springdataredisdemo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringDataRedisDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringDataRedisDemoApplication.class, args); + } + +} diff --git a/SpringDataRedisDemo/src/main/resources/application.yaml b/SpringDataRedisDemo/src/main/resources/application.yaml new file mode 100644 index 0000000..f3c0bbb --- /dev/null +++ b/SpringDataRedisDemo/src/main/resources/application.yaml @@ -0,0 +1,11 @@ +spring: + redis: + host: 192.168.153.130 + password: admin + port: 6379 + lettuce: + pool: + max-active: 8 + max-idle: 8 + min-idle: 1 + max-wait: 100ms \ No newline at end of file diff --git a/SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/RedisStringTemplateTest.java b/SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/RedisStringTemplateTest.java new file mode 100644 index 0000000..a07ceca --- /dev/null +++ b/SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/RedisStringTemplateTest.java @@ -0,0 +1,62 @@ +package com.redis.springdataredisdemo; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.redis.pojo.User; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.redis.core.StringRedisTemplate; + +import javax.management.ObjectName; +import java.util.HashMap; +import java.util.Map; + +@SpringBootTest +public class RedisStringTemplateTest { + @Autowired + private StringRedisTemplate redisTemplate; + + private static final ObjectMapper mapper = new ObjectMapper(); + + @Test + void testString() { + redisTemplate.opsForValue().set("name","李四"); + + String name = redisTemplate.opsForValue().get("name"); + System.out.println("name = " + name); + } + + @Test + void testUser() throws JsonProcessingException { + User user = new User("张三",15); + // 手动将对象序列化 + String JsonStr = mapper.writeValueAsString(user); + // 写入数据 + redisTemplate.opsForValue().set("User:1",JsonStr); + + // 获取数据 + String JsonUser = redisTemplate.opsForValue().get("User:1"); + // 手动反序列化 + User user1 = mapper.readValue(JsonUser,User.class); + System.out.println("user1 = " + user1); + } + + @Test + void testHash() { + redisTemplate.opsForHash().put("User:2","name","admin"); + redisTemplate.opsForHash().put("User:2","age","18"); + Map map = new HashMap<>(); + map.put("name","zzz"); + map.put("age","18"); + redisTemplate.opsForHash().putAll("User:3",map); + + Map user_2 = redisTemplate.opsForHash().entries("User:2"); + System.out.println("user_2 = " + user_2); + + + Map user_3 = redisTemplate.opsForHash().entries("User:3"); + System.out.println("user_3 = " + user_3); + + } +} diff --git a/SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplicationTests.java b/SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplicationTests.java new file mode 100644 index 0000000..21e1130 --- /dev/null +++ b/SpringDataRedisDemo/src/test/java/com/redis/springdataredisdemo/SpringDataRedisDemoApplicationTests.java @@ -0,0 +1,20 @@ +package com.redis.springdataredisdemo; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.redis.core.StringRedisTemplate; + +@SpringBootTest +class SpringDataRedisDemoApplicationTests { + @Autowired + private StringRedisTemplate redisTemplate; + + @Test + void testString() { + redisTemplate.opsForValue().set("name", "张三"); + + Object name = redisTemplate.opsForValue().get("name"); + System.out.println("name = " + name); + } +} diff --git a/hm-dianping/.gitignore b/hm-dianping/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/hm-dianping/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/hm-dianping/pom.xml b/hm-dianping/pom.xml new file mode 100644 index 0000000..f5a937f --- /dev/null +++ b/hm-dianping/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.12.RELEASE + + + com.hmdp + hm-dianping + 0.0.1-SNAPSHOT + hm-dianping + Demo project for Spring Boot + + 1.8 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.apache.commons + commons-pool2 + + + org.springframework.boot + spring-boot-starter-web + + + + mysql + mysql-connector-java + runtime + 5.1.47 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + com.baomidou + mybatis-plus-boot-starter + 3.4.3 + + + + cn.hutool + hutool-all + 5.7.17 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/hm-dianping/src/main/java/com/hmdp/HmDianPingApplication.java b/hm-dianping/src/main/java/com/hmdp/HmDianPingApplication.java new file mode 100644 index 0000000..df2a1b0 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/HmDianPingApplication.java @@ -0,0 +1,15 @@ +package com.hmdp; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@MapperScan("com.hmdp.mapper") +@SpringBootApplication +public class HmDianPingApplication { + + public static void main(String[] args) { + SpringApplication.run(HmDianPingApplication.class, args); + } + +} diff --git a/hm-dianping/src/main/java/com/hmdp/config/MybatisConfig.java b/hm-dianping/src/main/java/com/hmdp/config/MybatisConfig.java new file mode 100644 index 0000000..ffd08c4 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/config/MybatisConfig.java @@ -0,0 +1,17 @@ +package com.hmdp.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MybatisConfig { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/config/WebExceptionAdvice.java b/hm-dianping/src/main/java/com/hmdp/config/WebExceptionAdvice.java new file mode 100644 index 0000000..ae0da66 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/config/WebExceptionAdvice.java @@ -0,0 +1,17 @@ +package com.hmdp.config; + +import com.hmdp.dto.Result; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +public class WebExceptionAdvice { + + @ExceptionHandler(RuntimeException.class) + public Result handleRuntimeException(RuntimeException e) { + log.error(e.toString(), e); + return Result.fail("服务器异常"); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/BlogCommentsController.java b/hm-dianping/src/main/java/com/hmdp/controller/BlogCommentsController.java new file mode 100644 index 0000000..3408b71 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/BlogCommentsController.java @@ -0,0 +1,20 @@ +package com.hmdp.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/blog-comments") +public class BlogCommentsController { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/BlogController.java b/hm-dianping/src/main/java/com/hmdp/controller/BlogController.java new file mode 100644 index 0000000..0a2fa6c --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/BlogController.java @@ -0,0 +1,83 @@ +package com.hmdp.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.hmdp.dto.Result; +import com.hmdp.dto.UserDTO; +import com.hmdp.entity.Blog; +import com.hmdp.entity.User; +import com.hmdp.service.IBlogService; +import com.hmdp.service.IUserService; +import com.hmdp.utils.SystemConstants; +import com.hmdp.utils.UserHolder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/blog") +public class BlogController { + + @Resource + private IBlogService blogService; + @Resource + private IUserService userService; + + @PostMapping + public Result saveBlog(@RequestBody Blog blog) { + // 获取登录用户 + UserDTO user = UserHolder.getUser(); + blog.setUserId(user.getId()); + // 保存探店博文 + blogService.save(blog); + // 返回id + return Result.ok(blog.getId()); + } + + @PutMapping("/like/{id}") + public Result likeBlog(@PathVariable("id") Long id) { + // 修改点赞数量 + blogService.update() + .setSql("liked = liked + 1").eq("id", id).update(); + return Result.ok(); + } + + @GetMapping("/of/me") + public Result queryMyBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) { + // 获取登录用户 + UserDTO user = UserHolder.getUser(); + // 根据用户查询 + Page page = blogService.query() + .eq("user_id", user.getId()).page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); + // 获取当前页数据 + List records = page.getRecords(); + return Result.ok(records); + } + + @GetMapping("/hot") + public Result queryHotBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) { + // 根据用户查询 + Page page = blogService.query() + .orderByDesc("liked") + .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); + // 获取当前页数据 + List records = page.getRecords(); + // 查询用户 + records.forEach(blog ->{ + Long userId = blog.getUserId(); + User user = userService.getById(userId); + blog.setName(user.getNickName()); + blog.setIcon(user.getIcon()); + }); + return Result.ok(records); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/FollowController.java b/hm-dianping/src/main/java/com/hmdp/controller/FollowController.java new file mode 100644 index 0000000..b4d67f3 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/FollowController.java @@ -0,0 +1,20 @@ +package com.hmdp.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/follow") +public class FollowController { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/ShopController.java b/hm-dianping/src/main/java/com/hmdp/controller/ShopController.java new file mode 100644 index 0000000..697c269 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/ShopController.java @@ -0,0 +1,101 @@ +package com.hmdp.controller; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.hmdp.dto.Result; +import com.hmdp.entity.Shop; +import com.hmdp.service.IShopService; +import com.hmdp.utils.SystemConstants; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/shop") +public class ShopController { + + @Resource + public IShopService shopService; + + /** + * 根据id查询商铺信息 + * @param id 商铺id + * @return 商铺详情数据 + */ + @GetMapping("/{id}") + public Result queryShopById(@PathVariable("id") Long id) { + return Result.ok(shopService.getById(id)); + } + + /** + * 新增商铺信息 + * @param shop 商铺数据 + * @return 商铺id + */ + @PostMapping + public Result saveShop(@RequestBody Shop shop) { + // 写入数据库 + shopService.save(shop); + // 返回店铺id + return Result.ok(shop.getId()); + } + + /** + * 更新商铺信息 + * @param shop 商铺数据 + * @return 无 + */ + @PutMapping + public Result updateShop(@RequestBody Shop shop) { + // 写入数据库 + shopService.updateById(shop); + return Result.ok(); + } + + /** + * 根据商铺类型分页查询商铺信息 + * @param typeId 商铺类型 + * @param current 页码 + * @return 商铺列表 + */ + @GetMapping("/of/type") + public Result queryShopByType( + @RequestParam("typeId") Integer typeId, + @RequestParam(value = "current", defaultValue = "1") Integer current + ) { + // 根据类型分页查询 + Page page = shopService.query() + .eq("type_id", typeId) + .page(new Page<>(current, SystemConstants.DEFAULT_PAGE_SIZE)); + // 返回数据 + return Result.ok(page.getRecords()); + } + + /** + * 根据商铺名称关键字分页查询商铺信息 + * @param name 商铺名称关键字 + * @param current 页码 + * @return 商铺列表 + */ + @GetMapping("/of/name") + public Result queryShopByName( + @RequestParam(value = "name", required = false) String name, + @RequestParam(value = "current", defaultValue = "1") Integer current + ) { + // 根据类型分页查询 + Page page = shopService.query() + .like(StrUtil.isNotBlank(name), "name", name) + .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); + // 返回数据 + return Result.ok(page.getRecords()); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/ShopTypeController.java b/hm-dianping/src/main/java/com/hmdp/controller/ShopTypeController.java new file mode 100644 index 0000000..3f34f6c --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/ShopTypeController.java @@ -0,0 +1,34 @@ +package com.hmdp.controller; + + +import com.hmdp.dto.Result; +import com.hmdp.entity.ShopType; +import com.hmdp.service.IShopTypeService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/shop-type") +public class ShopTypeController { + @Resource + private IShopTypeService typeService; + + @GetMapping("list") + public Result queryTypeList() { + List typeList = typeService + .query().orderByAsc("sort").list(); + return Result.ok(typeList); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/UploadController.java b/hm-dianping/src/main/java/com/hmdp/controller/UploadController.java new file mode 100644 index 0000000..56d32e4 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/UploadController.java @@ -0,0 +1,63 @@ +package com.hmdp.controller; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.hmdp.dto.Result; +import com.hmdp.utils.SystemConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +@Slf4j +@RestController +@RequestMapping("upload") +public class UploadController { + + @PostMapping("blog") + public Result uploadImage(@RequestParam("file") MultipartFile image) { + try { + // 获取原始文件名称 + String originalFilename = image.getOriginalFilename(); + // 生成新文件名 + String fileName = createNewFileName(originalFilename); + // 保存文件 + image.transferTo(new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName)); + // 返回结果 + log.debug("文件上传成功,{}", fileName); + return Result.ok(fileName); + } catch (IOException e) { + throw new RuntimeException("文件上传失败", e); + } + } + + @GetMapping("/blog/delete") + public Result deleteBlogImg(@RequestParam("name") String filename) { + File file = new File(SystemConstants.IMAGE_UPLOAD_DIR, filename); + if (file.isDirectory()) { + return Result.fail("错误的文件名称"); + } + FileUtil.del(file); + return Result.ok(); + } + + private String createNewFileName(String originalFilename) { + // 获取后缀 + String suffix = StrUtil.subAfter(originalFilename, ".", true); + // 生成目录 + String name = UUID.randomUUID().toString(); + int hash = name.hashCode(); + int d1 = hash & 0xF; + int d2 = (hash >> 4) & 0xF; + // 判断目录是否存在 + File dir = new File(SystemConstants.IMAGE_UPLOAD_DIR, StrUtil.format("/blogs/{}/{}", d1, d2)); + if (!dir.exists()) { + dir.mkdirs(); + } + // 生成文件名 + return StrUtil.format("/blogs/{}/{}/{}.{}", d1, d2, name, suffix); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/UserController.java b/hm-dianping/src/main/java/com/hmdp/controller/UserController.java new file mode 100644 index 0000000..24545cb --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/UserController.java @@ -0,0 +1,82 @@ +package com.hmdp.controller; + + +import com.hmdp.dto.LoginFormDTO; +import com.hmdp.dto.Result; +import com.hmdp.entity.UserInfo; +import com.hmdp.service.IUserInfoService; +import com.hmdp.service.IUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Slf4j +@RestController +@RequestMapping("/user") +public class UserController { + + @Resource + private IUserService userService; + + @Resource + private IUserInfoService userInfoService; + + /** + * 发送手机验证码 + */ + @PostMapping("code") + public Result sendCode(@RequestParam("phone") String phone, HttpSession session) { + // TODO 发送短信验证码并保存验证码 + return Result.fail("功能未完成"); + } + + /** + * 登录功能 + * @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码 + */ + @PostMapping("/login") + public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){ + // TODO 实现登录功能 + return Result.fail("功能未完成"); + } + + /** + * 登出功能 + * @return 无 + */ + @PostMapping("/logout") + public Result logout(){ + // TODO 实现登出功能 + return Result.fail("功能未完成"); + } + + @GetMapping("/me") + public Result me(){ + // TODO 获取当前登录的用户并返回 + return Result.fail("功能未完成"); + } + + @GetMapping("/info/{id}") + public Result info(@PathVariable("id") Long userId){ + // 查询详情 + UserInfo info = userInfoService.getById(userId); + if (info == null) { + // 没有详情,应该是第一次查看详情 + return Result.ok(); + } + info.setCreateTime(null); + info.setUpdateTime(null); + // 返回 + return Result.ok(info); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/VoucherController.java b/hm-dianping/src/main/java/com/hmdp/controller/VoucherController.java new file mode 100644 index 0000000..328a0e6 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/VoucherController.java @@ -0,0 +1,57 @@ +package com.hmdp.controller; + + +import com.hmdp.dto.Result; +import com.hmdp.entity.Voucher; +import com.hmdp.service.IVoucherService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/voucher") +public class VoucherController { + + @Resource + private IVoucherService voucherService; + + /** + * 新增普通券 + * @param voucher 优惠券信息 + * @return 优惠券id + */ + @PostMapping + public Result addVoucher(@RequestBody Voucher voucher) { + voucherService.save(voucher); + return Result.ok(voucher.getId()); + } + + /** + * 新增秒杀券 + * @param voucher 优惠券信息,包含秒杀信息 + * @return 优惠券id + */ + @PostMapping("seckill") + public Result addSeckillVoucher(@RequestBody Voucher voucher) { + voucherService.addSeckillVoucher(voucher); + return Result.ok(voucher.getId()); + } + + /** + * 查询店铺的优惠券列表 + * @param shopId 店铺id + * @return 优惠券列表 + */ + @GetMapping("/list/{shopId}") + public Result queryVoucherOfShop(@PathVariable("shopId") Long shopId) { + return voucherService.queryVoucherOfShop(shopId); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/controller/VoucherOrderController.java b/hm-dianping/src/main/java/com/hmdp/controller/VoucherOrderController.java new file mode 100644 index 0000000..2bfdee9 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/controller/VoucherOrderController.java @@ -0,0 +1,25 @@ +package com.hmdp.controller; + + +import com.hmdp.dto.Result; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@RestController +@RequestMapping("/voucher-order") +public class VoucherOrderController { + @PostMapping("seckill/{id}") + public Result seckillVoucher(@PathVariable("id") Long voucherId) { + return Result.fail("功能未完成"); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/dto/LoginFormDTO.java b/hm-dianping/src/main/java/com/hmdp/dto/LoginFormDTO.java new file mode 100644 index 0000000..f8f4016 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/dto/LoginFormDTO.java @@ -0,0 +1,10 @@ +package com.hmdp.dto; + +import lombok.Data; + +@Data +public class LoginFormDTO { + private String phone; + private String code; + private String password; +} diff --git a/hm-dianping/src/main/java/com/hmdp/dto/Result.java b/hm-dianping/src/main/java/com/hmdp/dto/Result.java new file mode 100644 index 0000000..cc098e6 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/dto/Result.java @@ -0,0 +1,30 @@ +package com.hmdp.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Result { + private Boolean success; + private String errorMsg; + private Object data; + private Long total; + + public static Result ok(){ + return new Result(true, null, null, null); + } + public static Result ok(Object data){ + return new Result(true, null, data, null); + } + public static Result ok(List data, Long total){ + return new Result(true, null, data, total); + } + public static Result fail(String errorMsg){ + return new Result(false, errorMsg, null, null); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/dto/ScrollResult.java b/hm-dianping/src/main/java/com/hmdp/dto/ScrollResult.java new file mode 100644 index 0000000..530fcac --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/dto/ScrollResult.java @@ -0,0 +1,12 @@ +package com.hmdp.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class ScrollResult { + private List list; + private Long minTime; + private Integer offset; +} diff --git a/hm-dianping/src/main/java/com/hmdp/dto/UserDTO.java b/hm-dianping/src/main/java/com/hmdp/dto/UserDTO.java new file mode 100644 index 0000000..4dd1802 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/dto/UserDTO.java @@ -0,0 +1,10 @@ +package com.hmdp.dto; + +import lombok.Data; + +@Data +public class UserDTO { + private Long id; + private String nickName; + private String icon; +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/Blog.java b/hm-dianping/src/main/java/com/hmdp/entity/Blog.java new file mode 100644 index 0000000..f5c8872 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/Blog.java @@ -0,0 +1,95 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_blog") +public class Blog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 商户id + */ + private Long shopId; + /** + * 用户id + */ + private Long userId; + /** + * 用户图标 + */ + @TableField(exist = false) + private String icon; + /** + * 用户姓名 + */ + @TableField(exist = false) + private String name; + /** + * 是否点赞过了 + */ + @TableField(exist = false) + private Boolean isLike; + + /** + * 标题 + */ + private String title; + + /** + * 探店的照片,最多9张,多张以","隔开 + */ + private String images; + + /** + * 探店的文字描述 + */ + private String content; + + /** + * 点赞数量 + */ + private Integer liked; + + /** + * 评论数量 + */ + private Integer comments; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/BlogComments.java b/hm-dianping/src/main/java/com/hmdp/entity/BlogComments.java new file mode 100644 index 0000000..086f356 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/BlogComments.java @@ -0,0 +1,81 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_blog_comments") +public class BlogComments implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 探店id + */ + private Long blogId; + + /** + * 关联的1级评论id,如果是一级评论,则值为0 + */ + private Long parentId; + + /** + * 回复的评论id + */ + private Long answerId; + + /** + * 回复的内容 + */ + private String content; + + /** + * 点赞数 + */ + private Integer liked; + + /** + * 状态,0:正常,1:被举报,2:禁止查看 + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/Follow.java b/hm-dianping/src/main/java/com/hmdp/entity/Follow.java new file mode 100644 index 0000000..4c8fd3b --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/Follow.java @@ -0,0 +1,51 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_follow") +public class Follow implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 关联的用户id + */ + private Long followUserId; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/SeckillVoucher.java b/hm-dianping/src/main/java/com/hmdp/entity/SeckillVoucher.java new file mode 100644 index 0000000..a2d25ee --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/SeckillVoucher.java @@ -0,0 +1,61 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 秒杀优惠券表,与优惠券是一对一关系 + *

+ * + * @author 虎哥 + * @since 2022-01-04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_seckill_voucher") +public class SeckillVoucher implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 关联的优惠券的id + */ + @TableId(value = "voucher_id", type = IdType.INPUT) + private Long voucherId; + + /** + * 库存 + */ + private Integer stock; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 生效时间 + */ + private LocalDateTime beginTime; + + /** + * 失效时间 + */ + private LocalDateTime endTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/Shop.java b/hm-dianping/src/main/java/com/hmdp/entity/Shop.java new file mode 100644 index 0000000..2a3a626 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/Shop.java @@ -0,0 +1,109 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_shop") +public class Shop implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 商铺名称 + */ + private String name; + + /** + * 商铺类型的id + */ + private Long typeId; + + /** + * 商铺图片,多个图片以','隔开 + */ + private String images; + + /** + * 商圈,例如陆家嘴 + */ + private String area; + + /** + * 地址 + */ + private String address; + + /** + * 经度 + */ + private Double x; + + /** + * 维度 + */ + private Double y; + + /** + * 均价,取整数 + */ + private Long avgPrice; + + /** + * 销量 + */ + private Integer sold; + + /** + * 评论数量 + */ + private Integer comments; + + /** + * 评分,1~5分,乘10保存,避免小数 + */ + private Integer score; + + /** + * 营业时间,例如 10:00-22:00 + */ + private String openHours; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + + @TableField(exist = false) + private Double distance; +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/ShopType.java b/hm-dianping/src/main/java/com/hmdp/entity/ShopType.java new file mode 100644 index 0000000..5d4f259 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/ShopType.java @@ -0,0 +1,64 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_shop_type") +public class ShopType implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 类型名称 + */ + private String name; + + /** + * 图标 + */ + private String icon; + + /** + * 顺序 + */ + private Integer sort; + + /** + * 创建时间 + */ + @JsonIgnore + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @JsonIgnore + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/User.java b/hm-dianping/src/main/java/com/hmdp/entity/User.java new file mode 100644 index 0000000..29f0de7 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/User.java @@ -0,0 +1,66 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_user") +public class User implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 手机号码 + */ + private String phone; + + /** + * 密码,加密存储 + */ + private String password; + + /** + * 昵称,默认是随机字符 + */ + private String nickName; + + /** + * 用户头像 + */ + private String icon = ""; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/UserInfo.java b/hm-dianping/src/main/java/com/hmdp/entity/UserInfo.java new file mode 100644 index 0000000..428be15 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/UserInfo.java @@ -0,0 +1,87 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_user_info") +public class UserInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键,用户id + */ + @TableId(value = "user_id", type = IdType.AUTO) + private Long userId; + + /** + * 城市名称 + */ + private String city; + + /** + * 个人介绍,不要超过128个字符 + */ + private String introduce; + + /** + * 粉丝数量 + */ + private Integer fans; + + /** + * 关注的人的数量 + */ + private Integer followee; + + /** + * 性别,0:男,1:女 + */ + private Boolean gender; + + /** + * 生日 + */ + private LocalDate birthday; + + /** + * 积分 + */ + private Integer credits; + + /** + * 会员级别,0~9级,0代表未开通会员 + */ + private Boolean level; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/Voucher.java b/hm-dianping/src/main/java/com/hmdp/entity/Voucher.java new file mode 100644 index 0000000..daffdee --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/Voucher.java @@ -0,0 +1,105 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_voucher") +public class Voucher implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 商铺id + */ + private Long shopId; + + /** + * 代金券标题 + */ + private String title; + + /** + * 副标题 + */ + private String subTitle; + + /** + * 使用规则 + */ + private String rules; + + /** + * 支付金额 + */ + private Long payValue; + + /** + * 抵扣金额 + */ + private Long actualValue; + + /** + * 优惠券类型 + */ + private Integer type; + + /** + * 优惠券类型 + */ + private Integer status; + /** + * 库存 + */ + @TableField(exist = false) + private Integer stock; + + /** + * 生效时间 + */ + @TableField(exist = false) + private LocalDateTime beginTime; + + /** + * 失效时间 + */ + @TableField(exist = false) + private LocalDateTime endTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/entity/VoucherOrder.java b/hm-dianping/src/main/java/com/hmdp/entity/VoucherOrder.java new file mode 100644 index 0000000..1e5f673 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/entity/VoucherOrder.java @@ -0,0 +1,81 @@ +package com.hmdp.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_voucher_order") +public class VoucherOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.INPUT) + private Long id; + + /** + * 下单的用户id + */ + private Long userId; + + /** + * 购买的代金券id + */ + private Long voucherId; + + /** + * 支付方式 1:余额支付;2:支付宝;3:微信 + */ + private Integer payType; + + /** + * 订单状态,1:未支付;2:已支付;3:已核销;4:已取消;5:退款中;6:已退款 + */ + private Integer status; + + /** + * 下单时间 + */ + private LocalDateTime createTime; + + /** + * 支付时间 + */ + private LocalDateTime payTime; + + /** + * 核销时间 + */ + private LocalDateTime useTime; + + /** + * 退款时间 + */ + private LocalDateTime refundTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/BlogCommentsMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/BlogCommentsMapper.java new file mode 100644 index 0000000..6d40ad0 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/BlogCommentsMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.BlogComments; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface BlogCommentsMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/BlogMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/BlogMapper.java new file mode 100644 index 0000000..ec3b62e --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/BlogMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.Blog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface BlogMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/FollowMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/FollowMapper.java new file mode 100644 index 0000000..926308a --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/FollowMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.Follow; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface FollowMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/SeckillVoucherMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/SeckillVoucherMapper.java new file mode 100644 index 0000000..3cf4af8 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/SeckillVoucherMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.SeckillVoucher; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 秒杀优惠券表,与优惠券是一对一关系 Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2022-01-04 + */ +public interface SeckillVoucherMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/ShopMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/ShopMapper.java new file mode 100644 index 0000000..d5694d4 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/ShopMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.Shop; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface ShopMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/ShopTypeMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/ShopTypeMapper.java new file mode 100644 index 0000000..b09890b --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/ShopTypeMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.ShopType; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface ShopTypeMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/UserInfoMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/UserInfoMapper.java new file mode 100644 index 0000000..77b9250 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/UserInfoMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.UserInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-24 + */ +public interface UserInfoMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/UserMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/UserMapper.java new file mode 100644 index 0000000..adcebe3 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/UserMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.User; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface UserMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/VoucherMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/VoucherMapper.java new file mode 100644 index 0000000..2db21ed --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/VoucherMapper.java @@ -0,0 +1,20 @@ +package com.hmdp.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hmdp.entity.Voucher; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface VoucherMapper extends BaseMapper { + + List queryVoucherOfShop(@Param("shopId") Long shopId); +} diff --git a/hm-dianping/src/main/java/com/hmdp/mapper/VoucherOrderMapper.java b/hm-dianping/src/main/java/com/hmdp/mapper/VoucherOrderMapper.java new file mode 100644 index 0000000..e0cd90a --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/mapper/VoucherOrderMapper.java @@ -0,0 +1,16 @@ +package com.hmdp.mapper; + +import com.hmdp.entity.VoucherOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface VoucherOrderMapper extends BaseMapper { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IBlogCommentsService.java b/hm-dianping/src/main/java/com/hmdp/service/IBlogCommentsService.java new file mode 100644 index 0000000..12dbee0 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IBlogCommentsService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.BlogComments; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IBlogCommentsService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IBlogService.java b/hm-dianping/src/main/java/com/hmdp/service/IBlogService.java new file mode 100644 index 0000000..33ffd0e --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IBlogService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.Blog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IBlogService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IFollowService.java b/hm-dianping/src/main/java/com/hmdp/service/IFollowService.java new file mode 100644 index 0000000..767c12d --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IFollowService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.Follow; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IFollowService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/ISeckillVoucherService.java b/hm-dianping/src/main/java/com/hmdp/service/ISeckillVoucherService.java new file mode 100644 index 0000000..fb6642b --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/ISeckillVoucherService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.SeckillVoucher; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 秒杀优惠券表,与优惠券是一对一关系 服务类 + *

+ * + * @author 虎哥 + * @since 2022-01-04 + */ +public interface ISeckillVoucherService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IShopService.java b/hm-dianping/src/main/java/com/hmdp/service/IShopService.java new file mode 100644 index 0000000..09996f0 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IShopService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.Shop; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IShopService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IShopTypeService.java b/hm-dianping/src/main/java/com/hmdp/service/IShopTypeService.java new file mode 100644 index 0000000..131626f --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IShopTypeService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.ShopType; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IShopTypeService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IUserInfoService.java b/hm-dianping/src/main/java/com/hmdp/service/IUserInfoService.java new file mode 100644 index 0000000..e8df101 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IUserInfoService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.UserInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-24 + */ +public interface IUserInfoService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IUserService.java b/hm-dianping/src/main/java/com/hmdp/service/IUserService.java new file mode 100644 index 0000000..23e740a --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IUserService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.hmdp.entity.User; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IUserService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IVoucherOrderService.java b/hm-dianping/src/main/java/com/hmdp/service/IVoucherOrderService.java new file mode 100644 index 0000000..218cc13 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IVoucherOrderService.java @@ -0,0 +1,16 @@ +package com.hmdp.service; + +import com.hmdp.entity.VoucherOrder; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IVoucherOrderService extends IService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/IVoucherService.java b/hm-dianping/src/main/java/com/hmdp/service/IVoucherService.java new file mode 100644 index 0000000..c8f0b08 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/IVoucherService.java @@ -0,0 +1,20 @@ +package com.hmdp.service; + +import com.hmdp.dto.Result; +import com.hmdp.entity.Voucher; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +public interface IVoucherService extends IService { + + Result queryVoucherOfShop(Long shopId); + + void addSeckillVoucher(Voucher voucher); +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/BlogCommentsServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/BlogCommentsServiceImpl.java new file mode 100644 index 0000000..4224ff9 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/BlogCommentsServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.BlogComments; +import com.hmdp.mapper.BlogCommentsMapper; +import com.hmdp.service.IBlogCommentsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class BlogCommentsServiceImpl extends ServiceImpl implements IBlogCommentsService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java new file mode 100644 index 0000000..dc85c57 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.Blog; +import com.hmdp.mapper.BlogMapper; +import com.hmdp.service.IBlogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class BlogServiceImpl extends ServiceImpl implements IBlogService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/FollowServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/FollowServiceImpl.java new file mode 100644 index 0000000..c044b79 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/FollowServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.Follow; +import com.hmdp.mapper.FollowMapper; +import com.hmdp.service.IFollowService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class FollowServiceImpl extends ServiceImpl implements IFollowService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/SeckillVoucherServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/SeckillVoucherServiceImpl.java new file mode 100644 index 0000000..485860f --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/SeckillVoucherServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.SeckillVoucher; +import com.hmdp.mapper.SeckillVoucherMapper; +import com.hmdp.service.ISeckillVoucherService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 秒杀优惠券表,与优惠券是一对一关系 服务实现类 + *

+ * + * @author 虎哥 + * @since 2022-01-04 + */ +@Service +public class SeckillVoucherServiceImpl extends ServiceImpl implements ISeckillVoucherService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java new file mode 100644 index 0000000..8702842 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.Shop; +import com.hmdp.mapper.ShopMapper; +import com.hmdp.service.IShopService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class ShopServiceImpl extends ServiceImpl implements IShopService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/ShopTypeServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/ShopTypeServiceImpl.java new file mode 100644 index 0000000..811b89a --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/ShopTypeServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.ShopType; +import com.hmdp.mapper.ShopTypeMapper; +import com.hmdp.service.IShopTypeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class ShopTypeServiceImpl extends ServiceImpl implements IShopTypeService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java new file mode 100644 index 0000000..402977f --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.UserInfo; +import com.hmdp.mapper.UserInfoMapper; +import com.hmdp.service.IUserInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-24 + */ +@Service +public class UserInfoServiceImpl extends ServiceImpl implements IUserInfoService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/UserServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..938954f --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/UserServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hmdp.entity.User; +import com.hmdp.mapper.UserMapper; +import com.hmdp.service.IUserService; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements IUserService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java new file mode 100644 index 0000000..8e1750d --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java @@ -0,0 +1,20 @@ +package com.hmdp.service.impl; + +import com.hmdp.entity.VoucherOrder; +import com.hmdp.mapper.VoucherOrderMapper; +import com.hmdp.service.IVoucherOrderService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class VoucherOrderServiceImpl extends ServiceImpl implements IVoucherOrderService { + +} diff --git a/hm-dianping/src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java b/hm-dianping/src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java new file mode 100644 index 0000000..ae4cf2a --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java @@ -0,0 +1,51 @@ +package com.hmdp.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hmdp.dto.Result; +import com.hmdp.entity.Voucher; +import com.hmdp.mapper.VoucherMapper; +import com.hmdp.entity.SeckillVoucher; +import com.hmdp.service.ISeckillVoucherService; +import com.hmdp.service.IVoucherService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author 虎哥 + * @since 2021-12-22 + */ +@Service +public class VoucherServiceImpl extends ServiceImpl implements IVoucherService { + + @Resource + private ISeckillVoucherService seckillVoucherService; + + @Override + public Result queryVoucherOfShop(Long shopId) { + // 查询优惠券信息 + List vouchers = getBaseMapper().queryVoucherOfShop(shopId); + // 返回结果 + return Result.ok(vouchers); + } + + @Override + @Transactional + public void addSeckillVoucher(Voucher voucher) { + // 保存优惠券 + save(voucher); + // 保存秒杀信息 + SeckillVoucher seckillVoucher = new SeckillVoucher(); + seckillVoucher.setVoucherId(voucher.getId()); + seckillVoucher.setStock(voucher.getStock()); + seckillVoucher.setBeginTime(voucher.getBeginTime()); + seckillVoucher.setEndTime(voucher.getEndTime()); + seckillVoucherService.save(seckillVoucher); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/PasswordEncoder.java b/hm-dianping/src/main/java/com/hmdp/utils/PasswordEncoder.java new file mode 100644 index 0000000..1360e38 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/PasswordEncoder.java @@ -0,0 +1,34 @@ +package com.hmdp.utils; + + +import cn.hutool.core.util.RandomUtil; +import org.springframework.util.DigestUtils; + +import java.nio.charset.StandardCharsets; + +public class PasswordEncoder { + + public static String encode(String password) { + // 生成盐 + String salt = RandomUtil.randomString(20); + // 加密 + return encode(password,salt); + } + private static String encode(String password, String salt) { + // 加密 + return salt + "@" + DigestUtils.md5DigestAsHex((password + salt).getBytes(StandardCharsets.UTF_8)); + } + public static Boolean matches(String encodedPassword, String rawPassword) { + if (encodedPassword == null || rawPassword == null) { + return false; + } + if(!encodedPassword.contains("@")){ + throw new RuntimeException("密码格式不正确!"); + } + String[] arr = encodedPassword.split("@"); + // 获取盐 + String salt = arr[0]; + // 比较 + return encodedPassword.equals(encode(rawPassword, salt)); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/RedisConstants.java b/hm-dianping/src/main/java/com/hmdp/utils/RedisConstants.java new file mode 100644 index 0000000..a8f529c --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/RedisConstants.java @@ -0,0 +1,22 @@ +package com.hmdp.utils; + +public class RedisConstants { + public static final String LOGIN_CODE_KEY = "login:code:"; + public static final Long LOGIN_CODE_TTL = 2L; + public static final String LOGIN_USER_KEY = "login:token:"; + public static final Long LOGIN_USER_TTL = 36000L; + + public static final Long CACHE_NULL_TTL = 2L; + + public static final Long CACHE_SHOP_TTL = 30L; + public static final String CACHE_SHOP_KEY = "cache:shop:"; + + public static final String LOCK_SHOP_KEY = "lock:shop:"; + public static final Long LOCK_SHOP_TTL = 10L; + + public static final String SECKILL_STOCK_KEY = "seckill:stock:"; + public static final String BLOG_LIKED_KEY = "blog:liked:"; + public static final String FEED_KEY = "feed:"; + public static final String SHOP_GEO_KEY = "shop:geo:"; + public static final String USER_SIGN_KEY = "sign:"; +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/RedisData.java b/hm-dianping/src/main/java/com/hmdp/utils/RedisData.java new file mode 100644 index 0000000..8f777fc --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/RedisData.java @@ -0,0 +1,11 @@ +package com.hmdp.utils; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class RedisData { + private LocalDateTime expireTime; + private Object data; +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/RegexPatterns.java b/hm-dianping/src/main/java/com/hmdp/utils/RegexPatterns.java new file mode 100644 index 0000000..2276859 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/RegexPatterns.java @@ -0,0 +1,24 @@ +package com.hmdp.utils; + +/** + * @author 虎哥 + */ +public abstract class RegexPatterns { + /** + * 手机号正则 + */ + public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$"; + /** + * 邮箱正则 + */ + public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; + /** + * 密码正则。4~32位的字母、数字、下划线 + */ + public static final String PASSWORD_REGEX = "^\\w{4,32}$"; + /** + * 验证码正则, 6位数字或字母 + */ + public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$"; + +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/RegexUtils.java b/hm-dianping/src/main/java/com/hmdp/utils/RegexUtils.java new file mode 100644 index 0000000..8936b56 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/RegexUtils.java @@ -0,0 +1,42 @@ +package com.hmdp.utils; + +import cn.hutool.core.util.StrUtil; + +/** + * @author 虎哥 + */ +public class RegexUtils { + /** + * 是否是无效手机格式 + * @param phone 要校验的手机号 + * @return true:符合,false:不符合 + */ + public static boolean isPhoneInvalid(String phone){ + return mismatch(phone, RegexPatterns.PHONE_REGEX); + } + /** + * 是否是无效邮箱格式 + * @param email 要校验的邮箱 + * @return true:符合,false:不符合 + */ + public static boolean isEmailInvalid(String email){ + return mismatch(email, RegexPatterns.EMAIL_REGEX); + } + + /** + * 是否是无效验证码格式 + * @param code 要校验的验证码 + * @return true:符合,false:不符合 + */ + public static boolean isCodeInvalid(String code){ + return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX); + } + + // 校验是否不符合正则格式 + private static boolean mismatch(String str, String regex){ + if (StrUtil.isBlank(str)) { + return true; + } + return !str.matches(regex); + } +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/SystemConstants.java b/hm-dianping/src/main/java/com/hmdp/utils/SystemConstants.java new file mode 100644 index 0000000..691fb00 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/SystemConstants.java @@ -0,0 +1,8 @@ +package com.hmdp.utils; + +public class SystemConstants { + public static final String IMAGE_UPLOAD_DIR = "D:\\lesson\\nginx-1.18.0\\html\\hmdp\\imgs\\"; + public static final String USER_NICK_NAME_PREFIX = "user_"; + public static final int DEFAULT_PAGE_SIZE = 5; + public static final int MAX_PAGE_SIZE = 10; +} diff --git a/hm-dianping/src/main/java/com/hmdp/utils/UserHolder.java b/hm-dianping/src/main/java/com/hmdp/utils/UserHolder.java new file mode 100644 index 0000000..cc944f6 --- /dev/null +++ b/hm-dianping/src/main/java/com/hmdp/utils/UserHolder.java @@ -0,0 +1,19 @@ +package com.hmdp.utils; + +import com.hmdp.dto.UserDTO; + +public class UserHolder { + private static final ThreadLocal tl = new ThreadLocal<>(); + + public static void saveUser(UserDTO user){ + tl.set(user); + } + + public static UserDTO getUser(){ + return tl.get(); + } + + public static void removeUser(){ + tl.remove(); + } +} diff --git a/hm-dianping/src/main/resources/application.yaml b/hm-dianping/src/main/resources/application.yaml new file mode 100644 index 0000000..5d138de --- /dev/null +++ b/hm-dianping/src/main/resources/application.yaml @@ -0,0 +1,27 @@ +server: + port: 8081 +spring: + application: + name: hmdp + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://192.168.153.130:3306/hmdp?useSSL=false&serverTimezone=UTC + username: root + password: zfp251217 + redis: + host: 192.168.153.130 + port: 6379 + password: admin + lettuce: + pool: + max-active: 10 + max-idle: 10 + min-idle: 1 + time-between-eviction-runs: 10s + jackson: + default-property-inclusion: non_null # JSON处理时忽略非空字段 +mybatis-plus: + type-aliases-package: com.hmdp.entity # 别名扫描包 +logging: + level: + com.hmdp: debug \ No newline at end of file diff --git a/hm-dianping/src/main/resources/db/hmdp.sql b/hm-dianping/src/main/resources/db/hmdp.sql new file mode 100644 index 0000000..e500b9d --- /dev/null +++ b/hm-dianping/src/main/resources/db/hmdp.sql @@ -0,0 +1,1284 @@ +/* + Navicat Premium Data Transfer + + Source Server : local + Source Server Type : MySQL + Source Server Version : 50622 + Source Host : localhost:3306 + Source Schema : hmdp + + Target Server Type : MySQL + Target Server Version : 50622 + File Encoding : 65001 + + Date: 14/03/2022 21:38:11 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for tb_blog +-- ---------------------------- +DROP TABLE IF EXISTS `tb_blog`; +CREATE TABLE `tb_blog` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `shop_id` bigint(20) NOT NULL COMMENT '商户id', + `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标题', + `images` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '探店的照片,最多9张,多张以\",\"隔开', + `content` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '探店的文字描述', + `liked` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '点赞数量', + `comments` int(8) UNSIGNED NULL DEFAULT NULL COMMENT '评论数量', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_blog +-- ---------------------------- +INSERT INTO `tb_blog` VALUES (4, 4, 2, '无尽浪漫的夜晚丨在万花丛中摇晃着红酒杯🍷品战斧牛排🥩', '/imgs/blogs/7/14/4771fefb-1a87-4252-816c-9f7ec41ffa4a.jpg,/imgs/blogs/4/10/2f07e3c9-ddce-482d-9ea7-c21450f8d7cd.jpg,/imgs/blogs/2/6/b0756279-65da-4f2d-b62a-33f74b06454a.jpg,/imgs/blogs/10/7/7e97f47d-eb49-4dc9-a583-95faa7aed287.jpg,/imgs/blogs/1/2/4a7b496b-2a08-4af7-aa95-df2c3bd0ef97.jpg,/imgs/blogs/14/3/52b290eb-8b5d-403b-8373-ba0bb856d18e.jpg', '生活就是一半烟火·一半诗意
手执烟火谋生活·心怀诗意以谋爱·
当然
\r\n男朋友给不了的浪漫要学会自己给🍒
\n无法重来的一生·尽量快乐.

🏰「小筑里·神秘浪漫花园餐厅」🏰

\n💯这是一家最最最美花园的西餐厅·到处都是花餐桌上是花前台是花 美好无处不在\n品一口葡萄酒,维亚红酒马瑟兰·微醺上头工作的疲惫消失无际·生如此多娇🍃

📍地址:延安路200号(家乐福面)

🚌交通:地铁①号线定安路B口出右转过下通道右转就到啦~

--------------🥣菜品详情🥣---------------

「战斧牛排]
\n超大一块战斧牛排经过火焰的炙烤发出阵阵香,外焦里嫩让人垂涎欲滴,切开牛排的那一刻,牛排的汁水顺势流了出来,分熟的牛排肉质软,简直细嫩到犯规,一刻都等不了要放入嘴里咀嚼~

「奶油培根意面」
太太太好吃了💯
我真的无法形容它的美妙,意面混合奶油香菇的香味真的太太太香了,我真的舔盘了,一丁点美味都不想浪费‼️


「香菜汁烤鲈鱼」
这个酱是辣的 真的绝好吃‼️
鲈鱼本身就很嫩没什么刺,烤过之后外皮酥酥的,鱼肉蘸上酱料根本停不下来啊啊啊啊
能吃辣椒的小伙伴一定要尝尝

非常可 好吃子🍽\n
--------------🍃个人感受🍃---------------

【👩🏻‍🍳服务】
小姐姐特别耐心的给我们介绍彩票
推荐特色菜品,拍照需要帮忙也是尽心尽力配合,太爱他们了

【🍃环境】
比较有格调的西餐厅 整个餐厅的布局可称得上的万花丛生 有种在人间仙境的感觉🌸
集美食美酒与鲜花为一体的风格店铺 令人向往
烟火皆是生活 人间皆是浪漫
', 1, 104, '2021-12-28 19:50:01', '2022-03-10 14:26:34'); +INSERT INTO `tb_blog` VALUES (5, 1, 2, '人均30💰杭州这家港式茶餐厅我疯狂打call‼️', '/imgs/blogs/4/7/863cc302-d150-420d-a596-b16e9232a1a6.jpg,/imgs/blogs/11/12/8b37d208-9414-4e78-b065-9199647bb3e3.jpg,/imgs/blogs/4/1/fa74a6d6-3026-4cb7-b0b6-35abb1e52d11.jpg,/imgs/blogs/9/12/ac2ce2fb-0605-4f14-82cc-c962b8c86688.jpg,/imgs/blogs/4/0/26a7cd7e-6320-432c-a0b4-1b7418f45ec7.jpg,/imgs/blogs/15/9/cea51d9b-ac15-49f6-b9f1-9cf81e9b9c85.jpg', '又吃到一家好吃的茶餐厅🍴环境是怀旧tvb港风📺边吃边拍照片📷几十种菜品均价都在20+💰可以是很平价了!
·
店名:九记冰厅(远洋店)
地址:杭州市丽水路远洋乐堤港负一楼(溜冰场旁边)
·
✔️黯然销魂饭(38💰)
这碗饭我吹爆!米饭上盖满了甜甜的叉烧 还有两颗溏心蛋🍳每一粒米饭都裹着浓郁的酱汁 光盘了
·
✔️铜锣湾漏奶华(28💰)
黄油吐司烤的脆脆的 上面洒满了可可粉🍫一刀切开 奶盖流心像瀑布一样流出来 满足
·
✔️神仙一口西多士士(16💰)
简简单单却超级好吃!西多士烤的很脆 黄油味浓郁 面包体超级柔软 上面淋了炼乳
·
✔️怀旧五柳炸蛋饭(28💰)
四个鸡蛋炸成蓬松的炸蛋!也太好吃了吧!还有大块鸡排 上淋了酸甜的酱汁 太合我胃口了!!
·
✔️烧味双拼例牌(66💰)
选了烧鹅➕叉烧 他家烧腊品质真的惊艳到我!据说是每日广州发货 到店现烧现卖的黑棕鹅 每口都是正宗的味道!肉质很嫩 皮超级超级酥脆!一口爆油!叉烧肉也一点都不柴 甜甜的很入味 搭配梅子酱很解腻 !
·
✔️红烧脆皮乳鸽(18.8💰)
乳鸽很大只 这个价格也太划算了吧, 肉质很有嚼劲 脆皮很酥 越吃越香~
·
✔️大满足小吃拼盘(25💰)
翅尖➕咖喱鱼蛋➕蝴蝶虾➕盐酥鸡
zui喜欢里面的咖喱鱼!咖喱酱香甜浓郁!鱼蛋很q弹~
·
✔️港式熊仔丝袜奶茶(19💰)
小熊🐻造型的奶茶冰也太可爱了!颜值担当 很地道的丝袜奶茶 茶味特别浓郁~
·', 1, 0, '2021-12-28 20:57:49', '2022-03-10 09:21:39'); +INSERT INTO `tb_blog` VALUES (6, 10, 1, '杭州周末好去处|💰50就可以骑马啦🐎', '/imgs/blogs/blog1.jpg', '杭州周末好去处|💰50就可以骑马啦🐎', 1, 0, '2022-01-11 16:05:47', '2022-03-10 09:21:41'); +INSERT INTO `tb_blog` VALUES (7, 10, 1, '杭州周末好去处|💰50就可以骑马啦🐎', '/imgs/blogs/blog1.jpg', '杭州周末好去处|💰50就可以骑马啦🐎', 1, 0, '2022-01-11 16:05:47', '2022-03-10 09:21:42'); + +-- ---------------------------- +-- Table structure for tb_blog_comments +-- ---------------------------- +DROP TABLE IF EXISTS `tb_blog_comments`; +CREATE TABLE `tb_blog_comments` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', + `blog_id` bigint(20) UNSIGNED NOT NULL COMMENT '探店id', + `parent_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的1级评论id,如果是一级评论,则值为0', + `answer_id` bigint(20) UNSIGNED NOT NULL COMMENT '回复的评论id', + `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '回复的内容', + `liked` int(8) UNSIGNED NULL DEFAULT NULL COMMENT '点赞数', + `status` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '状态,0:正常,1:被举报,2:禁止查看', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_blog_comments +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_follow +-- ---------------------------- +DROP TABLE IF EXISTS `tb_follow`; +CREATE TABLE `tb_follow` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', + `follow_user_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的用户id', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_follow +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_seckill_voucher +-- ---------------------------- +DROP TABLE IF EXISTS `tb_seckill_voucher`; +CREATE TABLE `tb_seckill_voucher` ( + `voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的优惠券的id', + `stock` int(8) NOT NULL COMMENT '库存', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `begin_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '生效时间', + `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '失效时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`voucher_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '秒杀优惠券表,与优惠券是一对一关系' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_seckill_voucher +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_shop +-- ---------------------------- +DROP TABLE IF EXISTS `tb_shop`; +CREATE TABLE `tb_shop` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商铺名称', + `type_id` bigint(20) UNSIGNED NOT NULL COMMENT '商铺类型的id', + `images` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商铺图片,多个图片以\',\'隔开', + `area` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商圈,例如陆家嘴', + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地址', + `x` double UNSIGNED NOT NULL COMMENT '经度', + `y` double UNSIGNED NOT NULL COMMENT '维度', + `avg_price` bigint(10) UNSIGNED NULL DEFAULT NULL COMMENT '均价,取整数', + `sold` int(10) UNSIGNED ZEROFILL NOT NULL COMMENT '销量', + `comments` int(10) UNSIGNED ZEROFILL NOT NULL COMMENT '评论数量', + `score` int(2) UNSIGNED ZEROFILL NOT NULL COMMENT '评分,1~5分,乘10保存,避免小数', + `open_hours` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '营业时间,例如 10:00-22:00', + `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `foreign_key_type`(`type_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_shop +-- ---------------------------- +INSERT INTO `tb_shop` VALUES (1, '103茶餐厅', 1, 'https://qcloud.dpfile.com/pc/jiclIsCKmOI2arxKN1Uf0Hx3PucIJH8q0QSz-Z8llzcN56-_QiKuOvyio1OOxsRtFoXqu0G3iT2T27qat3WhLVEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vfCF2ubeXzk49OsGrXt_KYDCngOyCwZK-s3fqawWswzk.jpg,https://qcloud.dpfile.com/pc/IOf6VX3qaBgFXFVgp75w-KKJmWZjFc8GXDU8g9bQC6YGCpAmG00QbfT4vCCBj7njuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '大关', '金华路锦昌文华苑29号', 120.149192, 30.316078, 80, 0000004215, 0000003035, 37, '10:00-22:00', '2021-12-22 18:10:39', '2022-01-13 17:32:19'); +INSERT INTO `tb_shop` VALUES (2, '蔡馬洪涛烤肉·老北京铜锅涮羊肉', 1, 'https://p0.meituan.net/bbia/c1870d570e73accbc9fee90b48faca41195272.jpg,http://p0.meituan.net/mogu/397e40c28fc87715b3d5435710a9f88d706914.jpg,https://qcloud.dpfile.com/pc/MZTdRDqCZdbPDUO0Hk6lZENRKzpKRF7kavrkEI99OxqBZTzPfIxa5E33gBfGouhFuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '拱宸桥/上塘', '上塘路1035号(中国工商银行旁)', 120.151505, 30.333422, 85, 0000002160, 0000001460, 46, '11:30-03:00', '2021-12-22 19:00:13', '2022-01-11 16:12:26'); +INSERT INTO `tb_shop` VALUES (3, '新白鹿餐厅(运河上街店)', 1, 'https://p0.meituan.net/biztone/694233_1619500156517.jpeg,https://img.meituan.net/msmerchant/876ca8983f7395556eda9ceb064e6bc51840883.png,https://img.meituan.net/msmerchant/86a76ed53c28eff709a36099aefe28b51554088.png', '运河上街', '台州路2号运河上街购物中心F5', 120.151954, 30.32497, 61, 0000012035, 0000008045, 47, '10:30-21:00', '2021-12-22 19:10:05', '2022-01-11 16:12:42'); +INSERT INTO `tb_shop` VALUES (4, 'Mamala(杭州远洋乐堤港店)', 1, 'https://img.meituan.net/msmerchant/232f8fdf09050838bd33fb24e79f30f9606056.jpg,https://qcloud.dpfile.com/pc/rDe48Xe15nQOHCcEEkmKUp5wEKWbimt-HDeqYRWsYJseXNncvMiXbuED7x1tXqN4uzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '拱宸桥/上塘', '丽水路66号远洋乐堤港商城2期1层B115号', 120.146659, 30.312742, 290, 0000013519, 0000009529, 49, '11:00-22:00', '2021-12-22 19:17:15', '2022-01-11 16:12:51'); +INSERT INTO `tb_shop` VALUES (5, '海底捞火锅(水晶城购物中心店)', 1, 'https://img.meituan.net/msmerchant/054b5de0ba0b50c18a620cc37482129a45739.jpg,https://img.meituan.net/msmerchant/59b7eff9b60908d52bd4aea9ff356e6d145920.jpg,https://qcloud.dpfile.com/pc/Qe2PTEuvtJ5skpUXKKoW9OQ20qc7nIpHYEqJGBStJx0mpoyeBPQOJE4vOdYZwm9AuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '大关', '上塘路458号水晶城购物中心F6', 120.15778, 30.310633, 104, 0000004125, 0000002764, 49, '10:00-07:00', '2021-12-22 19:20:58', '2022-01-11 16:13:01'); +INSERT INTO `tb_shop` VALUES (6, '幸福里老北京涮锅(丝联店)', 1, 'https://img.meituan.net/msmerchant/e71a2d0d693b3033c15522c43e03f09198239.jpg,https://img.meituan.net/msmerchant/9f8a966d60ffba00daf35458522273ca658239.jpg,https://img.meituan.net/msmerchant/ef9ca5ef6c05d381946fe4a9aa7d9808554502.jpg', '拱宸桥/上塘', '金华南路189号丝联166号', 120.148603, 30.318618, 130, 0000009531, 0000007324, 46, '11:00-13:50,17:00-20:50', '2021-12-22 19:24:53', '2022-01-11 16:13:09'); +INSERT INTO `tb_shop` VALUES (7, '炉鱼(拱墅万达广场店)', 1, 'https://img.meituan.net/msmerchant/909434939a49b36f340523232924402166854.jpg,https://img.meituan.net/msmerchant/32fd2425f12e27db0160e837461c10303700032.jpg,https://img.meituan.net/msmerchant/f7022258ccb8dabef62a0514d3129562871160.jpg', '北部新城', '杭行路666号万达商业中心4幢2单元409室(铺位号4005)', 120.124691, 30.336819, 85, 0000002631, 0000001320, 47, '00:00-24:00', '2021-12-22 19:40:52', '2022-01-11 16:13:19'); +INSERT INTO `tb_shop` VALUES (8, '浅草屋寿司(运河上街店)', 1, 'https://img.meituan.net/msmerchant/cf3dff697bf7f6e11f4b79c4e7d989e4591290.jpg,https://img.meituan.net/msmerchant/0b463f545355c8d8f021eb2987dcd0c8567811.jpg,https://img.meituan.net/msmerchant/c3c2516939efaf36c4ccc64b0e629fad587907.jpg', '运河上街', '拱墅区金华路80号运河上街B1', 120.150526, 30.325231, 88, 0000002406, 0000001206, 46, ' 11:00-21:30', '2021-12-22 19:51:06', '2022-01-11 16:13:25'); +INSERT INTO `tb_shop` VALUES (9, '羊老三羊蝎子牛仔排北派炭火锅(运河上街店)', 1, 'https://p0.meituan.net/biztone/163160492_1624251899456.jpeg,https://img.meituan.net/msmerchant/e478eb16f7e31a7f8b29b5e3bab6de205500837.jpg,https://img.meituan.net/msmerchant/6173eb1d18b9d70ace7fdb3f2dd939662884857.jpg', '运河上街', '台州路2号运河上街购物中心F5', 120.150598, 30.325251, 101, 0000002763, 0000001363, 44, '11:00-21:30', '2021-12-22 19:53:59', '2022-01-11 16:13:34'); +INSERT INTO `tb_shop` VALUES (10, '开乐迪KTV(运河上街店)', 2, 'https://p0.meituan.net/joymerchant/a575fd4adb0b9099c5c410058148b307-674435191.jpg,https://p0.meituan.net/merchantpic/68f11bf850e25e437c5f67decfd694ab2541634.jpg,https://p0.meituan.net/dpdeal/cb3a12225860ba2875e4ea26c6d14fcc197016.jpg', '运河上街', '台州路2号运河上街购物中心F4', 120.149093, 30.324666, 67, 0000026891, 0000000902, 37, '00:00-24:00', '2021-12-22 20:25:16', '2021-12-22 20:25:16'); +INSERT INTO `tb_shop` VALUES (11, 'INLOVE KTV(水晶城店)', 2, 'https://p0.meituan.net/dpmerchantpic/53e74b200211d68988a4f02ae9912c6c1076826.jpg,https://qcloud.dpfile.com/pc/4iWtIvzLzwM2MGgyPu1PCDb4SWEaKqUeHm--YAt1EwR5tn8kypBcqNwHnjg96EvT_Gd2X_f-v9T8Yj4uLt25Gg.jpg,https://qcloud.dpfile.com/pc/WZsJWRI447x1VG2x48Ujgu7vwqksi_9WitdKI4j3jvIgX4MZOpGNaFtM93oSSizbGybIjx5eX6WNgCPvcASYAw.jpg', '水晶城', '上塘路458号水晶城购物中心6层', 120.15853, 30.310002, 75, 0000035977, 0000005684, 47, '11:30-06:00', '2021-12-22 20:29:02', '2021-12-22 20:39:00'); +INSERT INTO `tb_shop` VALUES (12, '魅(杭州远洋乐堤港店)', 2, 'https://p0.meituan.net/dpmerchantpic/63833f6ba0393e2e8722420ef33f3d40466664.jpg,https://p0.meituan.net/dpmerchantpic/ae3c94cc92c529c4b1d7f68cebed33fa105810.png,', '远洋乐堤港', '丽水路58号远洋乐堤港F4', 120.14983, 30.31211, 88, 0000006444, 0000000235, 46, '10:00-02:00', '2021-12-22 20:34:34', '2021-12-22 20:34:34'); +INSERT INTO `tb_shop` VALUES (13, '讴K拉量贩KTV(北城天地店)', 2, 'https://p1.meituan.net/merchantpic/598c83a8c0d06fe79ca01056e214d345875600.jpg,https://qcloud.dpfile.com/pc/HhvI0YyocYHRfGwJWqPQr34hRGRl4cWdvlNwn3dqghvi4WXlM2FY1te0-7pE3Wb9_Gd2X_f-v9T8Yj4uLt25Gg.jpg,https://qcloud.dpfile.com/pc/F5ZVzZaXFE27kvQzPnaL4V8O9QCpVw2nkzGrxZE8BqXgkfyTpNExfNG5CEPQX4pjGybIjx5eX6WNgCPvcASYAw.jpg', 'D32天阳购物中心', '湖州街567号北城天地5层', 120.130453, 30.327655, 58, 0000018997, 0000001857, 41, '12:00-02:00', '2021-12-22 20:38:54', '2021-12-22 20:40:04'); +INSERT INTO `tb_shop` VALUES (14, '星聚会KTV(拱墅区万达店)', 2, 'https://p0.meituan.net/dpmerchantpic/f4cd6d8d4eb1959c3ea826aa05a552c01840451.jpg,https://p0.meituan.net/dpmerchantpic/2efc07aed856a8ab0fc75c86f4b9b0061655777.jpg,https://qcloud.dpfile.com/pc/zWfzzIorCohKT0bFwsfAlHuayWjI6DBEMPHHncmz36EEMU9f48PuD9VxLLDAjdoU_Gd2X_f-v9T8Yj4uLt25Gg.jpg', '北部新城', '杭行路666号万达广场C座1-2F', 120.128958, 30.337252, 60, 0000017771, 0000000685, 47, '10:00-22:00', '2021-12-22 20:48:54', '2021-12-22 20:48:54'); + +-- ---------------------------- +-- Table structure for tb_shop_type +-- ---------------------------- +DROP TABLE IF EXISTS `tb_shop_type`; +CREATE TABLE `tb_shop_type` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型名称', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标', + `sort` int(3) UNSIGNED NULL DEFAULT NULL COMMENT '顺序', + `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_shop_type +-- ---------------------------- +INSERT INTO `tb_shop_type` VALUES (1, '美食', '/types/ms.png', 1, '2021-12-22 20:17:47', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (2, 'KTV', '/types/KTV.png', 2, '2021-12-22 20:18:27', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (3, '丽人·美发', '/types/lrmf.png', 3, '2021-12-22 20:18:48', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (4, '健身运动', '/types/jsyd.png', 10, '2021-12-22 20:19:04', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (5, '按摩·足疗', '/types/amzl.png', 5, '2021-12-22 20:19:27', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (6, '美容SPA', '/types/spa.png', 6, '2021-12-22 20:19:35', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (7, '亲子游乐', '/types/qzyl.png', 7, '2021-12-22 20:19:53', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (8, '酒吧', '/types/jiuba.png', 8, '2021-12-22 20:20:02', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (9, '轰趴馆', '/types/hpg.png', 9, '2021-12-22 20:20:08', '2021-12-23 11:24:31'); +INSERT INTO `tb_shop_type` VALUES (10, '美睫·美甲', '/types/mjmj.png', 4, '2021-12-22 20:21:46', '2021-12-23 11:24:31'); + +-- ---------------------------- +-- Table structure for tb_sign +-- ---------------------------- +DROP TABLE IF EXISTS `tb_sign`; +CREATE TABLE `tb_sign` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', + `year` year NOT NULL COMMENT '签到的年', + `month` tinyint(2) NOT NULL COMMENT '签到的月', + `date` date NOT NULL COMMENT '签到的日期', + `is_backup` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '是否补签', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_sign +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_user +-- ---------------------------- +DROP TABLE IF EXISTS `tb_user`; +CREATE TABLE `tb_user` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号码', + `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码,加密存储', + `nick_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '昵称,默认是用户id', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '人物头像', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniqe_key_phone`(`phone`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1010 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_user +-- ---------------------------- +INSERT INTO `tb_user` VALUES (1, '13686869696', '', '小鱼同学', '/imgs/blogs/blog1.jpg', '2021-12-24 10:27:19', '2022-01-11 16:04:00'); +INSERT INTO `tb_user` VALUES (2, '13838411438', '', '可可今天不吃肉', '/imgs/icons/kkjtbcr.jpg', '2021-12-24 15:14:39', '2021-12-28 19:58:04'); +INSERT INTO `tb_user` VALUES (4, '13456789011', '', 'user_slxaxy2au9f3tanffaxr', '', '2022-01-07 12:07:53', '2022-01-07 12:07:53'); +INSERT INTO `tb_user` VALUES (5, '13456789001', '', '可爱多', '/imgs/icons/user5-icon.png', '2022-01-07 16:11:33', '2022-03-11 09:09:20'); +INSERT INTO `tb_user` VALUES (6, '13456762069', '', 'user_xn5wr3hpsv', '', '2022-02-07 17:54:10', '2022-02-07 17:54:10'); +INSERT INTO `tb_user` VALUES (10, '13688668889', '', 'user_88arndojw9', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (11, '13688668890', '', 'user_qcfr2k1lmi', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (12, '13688668891', '', 'user_ffsk4hli07', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (13, '13688668892', '', 'user_r62q62ijef', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (14, '13688668893', '', 'user_f3rymyt1q5', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (15, '13688668894', '', 'user_hnyhc3mjat', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (16, '13688668895', '', 'user_2spo35f5rl', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (17, '13688668896', '', 'user_q3r70baqe1', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (18, '13688668897', '', 'user_v73ottjqxt', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (19, '13688668898', '', 'user_tmh8o4r11q', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (20, '13688668899', '', 'user_4epgb7b5u1', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (21, '13688668900', '', 'user_g474zoujxj', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (22, '13688668901', '', 'user_r3kh1g6aah', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (23, '13688668902', '', 'user_u3uuo7l5fo', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (24, '13688668903', '', 'user_9o93lbsojt', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (25, '13688668904', '', 'user_jbhmr43wpq', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (26, '13688668905', '', 'user_nevyd3c5ux', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (27, '13688668906', '', 'user_oow4frmjp3', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (28, '13688668907', '', 'user_cvmknmec74', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (29, '13688668908', '', 'user_0t2x5njbz7', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (30, '13688668909', '', 'user_y5x09783hp', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (31, '13688668910', '', 'user_owe4eyuhhh', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (32, '13688668911', '', 'user_j76auh0ggg', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (33, '13688668912', '', 'user_aal5w9rm33', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (34, '13688668913', '', 'user_a2pgu8cr21', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (35, '13688668914', '', 'user_nle60p846v', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (36, '13688668915', '', 'user_w1mck7c7yv', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (37, '13688668916', '', 'user_bnpiybumlk', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (38, '13688668917', '', 'user_4w7xeo2yyt', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (39, '13688668918', '', 'user_99u4voj7xl', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (40, '13688668919', '', 'user_g03is27pd6', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (41, '13688668920', '', 'user_3j9erfkl0p', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (42, '13688668921', '', 'user_l7rs56ah9y', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (43, '13688668922', '', 'user_p3655ctliy', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (44, '13688668923', '', 'user_qi1qze1yp1', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (45, '13688668924', '', 'user_vrd5ir0rj0', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (46, '13688668925', '', 'user_tubboh1byc', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (47, '13688668926', '', 'user_j2bdj3d2eo', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (48, '13688668927', '', 'user_ncj7r0vu1h', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (49, '13688668928', '', 'user_63rhqjqa0a', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (50, '13688668929', '', 'user_80ue5cywnk', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (51, '13688668930', '', 'user_j4q037vhpi', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (52, '13688668931', '', 'user_ms0uat5bf0', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (53, '13688668932', '', 'user_oqep16bdel', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (54, '13688668933', '', 'user_vjtvjjdqh7', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (55, '13688668934', '', 'user_0168i9hv5g', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (56, '13688668935', '', 'user_vh1j6zw1q4', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (57, '13688668936', '', 'user_rkf2nxouof', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (58, '13688668937', '', 'user_whlt2chtv3', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (59, '13688668938', '', 'user_lpqr90wbeo', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (60, '13688668939', '', 'user_h40y3ipk9k', '', '2022-02-28 10:50:47', '2022-02-28 10:50:47'); +INSERT INTO `tb_user` VALUES (61, '13688668940', '', 'user_awdqkmbkt7', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (62, '13688668941', '', 'user_1xgbg9v4r5', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (63, '13688668942', '', 'user_7vf5fgiu68', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (64, '13688668943', '', 'user_lsgiz015vf', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (65, '13688668944', '', 'user_0nqjvanruk', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (66, '13688668945', '', 'user_8alg1taath', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (67, '13688668946', '', 'user_q45ykjgpxe', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (68, '13688668947', '', 'user_4hy0o6ir0r', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (69, '13688668948', '', 'user_q6rh7e6zo9', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (70, '13688668949', '', 'user_1wp3ygfyn2', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (71, '13688668950', '', 'user_13vjvo6flp', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (72, '13688668951', '', 'user_glyshbbwin', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (73, '13688668952', '', 'user_3ewzgsnhzj', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (74, '13688668953', '', 'user_ky481zf1fs', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (75, '13688668954', '', 'user_o5yzu0epev', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (76, '13688668955', '', 'user_ycbracmsi3', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (77, '13688668956', '', 'user_974wwi1283', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (78, '13688668957', '', 'user_1y0xokmk9w', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (79, '13688668958', '', 'user_nd74cho3tu', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (80, '13688668959', '', 'user_5z7u2eysa4', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (81, '13688668960', '', 'user_yvf8hfu5yy', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (82, '13688668961', '', 'user_2poi4wvpms', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (83, '13688668962', '', 'user_v4ysxjt1yu', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (84, '13688668963', '', 'user_kbvn4gpgk6', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (85, '13688668964', '', 'user_23niik1tyg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (86, '13688668965', '', 'user_uf2zz6ispe', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (87, '13688668966', '', 'user_5k19vf7c4o', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (88, '13688668967', '', 'user_5ahdd98xbr', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (89, '13688668968', '', 'user_a5cnfnoopx', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (90, '13688668969', '', 'user_utnmcyfg13', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (91, '13688668970', '', 'user_0k6n8ikb95', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (92, '13688668971', '', 'user_zqk5maqtmi', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (93, '13688668972', '', 'user_9i9suwd3nd', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (94, '13688668973', '', 'user_u0y0ngrdjo', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (95, '13688668974', '', 'user_stvijjwvzu', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (96, '13688668975', '', 'user_7if7tttays', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (97, '13688668976', '', 'user_f9hmz0ngdu', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (98, '13688668977', '', 'user_wuhs2nq9d0', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (99, '13688668978', '', 'user_1u3rlntd5s', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (100, '13688668979', '', 'user_ywe62vhu7u', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (101, '13688668980', '', 'user_rbfpzdt6tg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (102, '13688668981', '', 'user_jv69l0d1kg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (103, '13688668982', '', 'user_dg6hwl48r6', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (104, '13688668983', '', 'user_8rwl92pixr', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (105, '13688668984', '', 'user_k5dek2os3m', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (106, '13688668985', '', 'user_kw1nr2scyz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (107, '13688668986', '', 'user_h81c5g0t7s', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (108, '13688668987', '', 'user_jar6djas5e', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (109, '13688668988', '', 'user_f9x2qm4grh', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (110, '13688668989', '', 'user_mg5h6c4bcu', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (111, '13688668990', '', 'user_hcg7ocbnus', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (112, '13688668991', '', 'user_rsbxx7g2yz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (113, '13688668992', '', 'user_bi3fhutbd1', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (114, '13688668993', '', 'user_o4pjkkyu3q', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (115, '13688668994', '', 'user_7zfs7g5vqb', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (116, '13688668995', '', 'user_oq71inq541', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (117, '13688668996', '', 'user_u9zoiadq6l', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (118, '13688668997', '', 'user_4elguvu5pz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (119, '13688668998', '', 'user_90dclmdv94', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (120, '13688668999', '', 'user_v2of3k1liq', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (121, '13688669000', '', 'user_bg04b99iqn', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (122, '13688669001', '', 'user_6fo9sul3q6', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (123, '13688669002', '', 'user_vl7ajjlhnn', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (124, '13688669003', '', 'user_df3kaj5zi1', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (125, '13688669004', '', 'user_yo6iohe5s2', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (126, '13688669005', '', 'user_2iss3wrcm1', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (127, '13688669006', '', 'user_7y8qm8sv4r', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (128, '13688669007', '', 'user_f825rhknpq', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (129, '13688669008', '', 'user_3bigm0aauz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (130, '13688669009', '', 'user_ib9eo5dtgk', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (131, '13688669010', '', 'user_ci5hhnufj9', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (132, '13688669011', '', 'user_cc56u62rny', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (133, '13688669012', '', 'user_i8fg7azvnt', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (134, '13688669013', '', 'user_bw5dqkv6d9', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (135, '13688669014', '', 'user_1n1o9ri5oz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (136, '13688669015', '', 'user_1b0zexoldy', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (137, '13688669016', '', 'user_lz9dr6wxkw', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (138, '13688669017', '', 'user_zfpfscu53e', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (139, '13688669018', '', 'user_5kldn59nn9', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (140, '13688669019', '', 'user_p0mjswjh9x', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (141, '13688669020', '', 'user_z4jcqggm11', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (142, '13688669021', '', 'user_pv9yctbxza', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (143, '13688669022', '', 'user_u702tikvol', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (144, '13688669023', '', 'user_sy4a5f3qmy', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (145, '13688669024', '', 'user_n6g293r60l', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (146, '13688669025', '', 'user_uylyp6ttqz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (147, '13688669026', '', 'user_h2zmzefha3', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (148, '13688669027', '', 'user_5outop6hz2', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (149, '13688669028', '', 'user_vp8l74sadq', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (150, '13688669029', '', 'user_n9ww3of8fg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (151, '13688669030', '', 'user_rfm7pfgkv8', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (152, '13688669031', '', 'user_h7298xuo0u', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (153, '13688669032', '', 'user_72s0smb2wz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (154, '13688669033', '', 'user_twhphih9nd', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (155, '13688669034', '', 'user_vfocakn5gl', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (156, '13688669035', '', 'user_tfwe1v2x82', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (157, '13688669036', '', 'user_eyrq375qgg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (158, '13688669037', '', 'user_rg2obilrot', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (159, '13688669038', '', 'user_rzfwln2aw2', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (160, '13688669039', '', 'user_rzfgzeshe1', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (161, '13688669040', '', 'user_c67s0sjbmv', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (162, '13688669041', '', 'user_fkyp652kkn', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (163, '13688669042', '', 'user_sv1i552okx', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (164, '13688669043', '', 'user_fsrmh6e0d3', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (165, '13688669044', '', 'user_jey7gkjesn', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (166, '13688669045', '', 'user_00xdq55r0f', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (167, '13688669046', '', 'user_wkb6tveg4e', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (168, '13688669047', '', 'user_51ong6aunx', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (169, '13688669048', '', 'user_ke4h0uxthm', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (170, '13688669049', '', 'user_oswyb9opx5', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (171, '13688669050', '', 'user_iy8itbwg6q', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (172, '13688669051', '', 'user_g1mk023p9r', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (173, '13688669052', '', 'user_2507p7kvzs', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (174, '13688669053', '', 'user_piixbanfxl', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (175, '13688669054', '', 'user_w2d2is43jc', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (176, '13688669055', '', 'user_lrk4it56lt', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (177, '13688669056', '', 'user_3273q3j2ft', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (178, '13688669057', '', 'user_ltf42q0vy4', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (179, '13688669058', '', 'user_7npp13snqp', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (180, '13688669059', '', 'user_slxftqmjp9', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (181, '13688669060', '', 'user_il4dsuvdfr', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (182, '13688669061', '', 'user_esm2d4uh7a', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (183, '13688669062', '', 'user_te4prs2y3j', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (184, '13688669063', '', 'user_dycwcufgj0', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (185, '13688669064', '', 'user_jjo4dvsgag', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (186, '13688669065', '', 'user_9opl0t1sd2', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (187, '13688669066', '', 'user_hbm1dnssq6', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (188, '13688669067', '', 'user_tx88zar5cs', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (189, '13688669068', '', 'user_1p206nyupm', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (190, '13688669069', '', 'user_8lnbd2ao5u', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (191, '13688669070', '', 'user_v4uwls1wg7', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (192, '13688669071', '', 'user_z1bkh9lnjj', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (193, '13688669072', '', 'user_r7u852ex1n', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (194, '13688669073', '', 'user_yqr54gdh8t', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (195, '13688669074', '', 'user_x4kngjjng7', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (196, '13688669075', '', 'user_xvtxjocno2', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (197, '13688669076', '', 'user_1zj77q03tf', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (198, '13688669077', '', 'user_0q8yjtlp7a', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (199, '13688669078', '', 'user_nt2ogdyl73', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (200, '13688669079', '', 'user_6w0ex6afsz', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (201, '13688669080', '', 'user_qpm2vyflc3', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (202, '13688669081', '', 'user_dzvf9xujj1', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (203, '13688669082', '', 'user_aiypeaeupd', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (204, '13688669083', '', 'user_5iznj0t5hg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (205, '13688669084', '', 'user_4t1flvqz2h', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (206, '13688669085', '', 'user_542t36rd41', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (207, '13688669086', '', 'user_kmhowbydu6', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (208, '13688669087', '', 'user_e8nz64jbym', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (209, '13688669088', '', 'user_zjbr3zq6we', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (210, '13688669089', '', 'user_ptk6qaspna', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (211, '13688669090', '', 'user_jei7tqtu1j', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (212, '13688669091', '', 'user_8x7cyv5ey8', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (213, '13688669092', '', 'user_mx3l4tj2jq', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (214, '13688669093', '', 'user_ba6e9l6exg', '', '2022-02-28 10:50:48', '2022-02-28 10:50:48'); +INSERT INTO `tb_user` VALUES (215, '13688669094', '', 'user_vlku3rop6e', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (216, '13688669095', '', 'user_hsff9net6q', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (217, '13688669096', '', 'user_mbaficnzfe', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (218, '13688669097', '', 'user_b3wglh40dk', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (219, '13688669098', '', 'user_dvi1yllk48', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (220, '13688669099', '', 'user_cxv8smu642', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (221, '13688669100', '', 'user_ze5exti1z5', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (222, '13688669101', '', 'user_b6524nuosz', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (223, '13688669102', '', 'user_jw3xmz31ss', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (224, '13688669103', '', 'user_3fqrglyqj0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (225, '13688669104', '', 'user_uf9dy1kfmg', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (226, '13688669105', '', 'user_nn4ss4oupv', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (227, '13688669106', '', 'user_khse5vlch8', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (228, '13688669107', '', 'user_xfpqrk3hea', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (229, '13688669108', '', 'user_0sfyf9o74l', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (230, '13688669109', '', 'user_936vlojcwy', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (231, '13688669110', '', 'user_wq9m8aqmay', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (232, '13688669111', '', 'user_uqw0c5ilp5', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (233, '13688669112', '', 'user_qjucgt4ar1', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (234, '13688669113', '', 'user_sry5bqf8ev', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (235, '13688669114', '', 'user_9csdwveeh8', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (236, '13688669115', '', 'user_y9kl1yd7fk', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (237, '13688669116', '', 'user_mahwf66irm', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (238, '13688669117', '', 'user_tud2i4itlr', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (239, '13688669118', '', 'user_p1s640kfny', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (240, '13688669119', '', 'user_2tyzfj49r6', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (241, '13688669120', '', 'user_wjswilvpou', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (242, '13688669121', '', 'user_yuushg7x44', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (243, '13688669122', '', 'user_pb0fas6tob', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (244, '13688669123', '', 'user_3k4nn4dhuh', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (245, '13688669124', '', 'user_lljtt3ttml', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (246, '13688669125', '', 'user_weftqlsasg', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (247, '13688669126', '', 'user_1lo78exvpl', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (248, '13688669127', '', 'user_qzbukb32cm', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (249, '13688669128', '', 'user_k80i5kfvoj', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (250, '13688669129', '', 'user_ggx53ve2zp', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (251, '13688669130', '', 'user_yz0fmlzjxv', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (252, '13688669131', '', 'user_jh6epyjgiw', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (253, '13688669132', '', 'user_0k0ly383fy', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (254, '13688669133', '', 'user_ibc8pgs2jc', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (255, '13688669134', '', 'user_ys8yxdm6cr', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (256, '13688669135', '', 'user_7zdagyyymi', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (257, '13688669136', '', 'user_9q7fiiqwzm', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (258, '13688669137', '', 'user_64qzvesiku', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (259, '13688669138', '', 'user_5fi8fsc9e5', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (260, '13688669139', '', 'user_1wo4aktp89', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (261, '13688669140', '', 'user_5mis2rucuh', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (262, '13688669141', '', 'user_pghkcw4cog', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (263, '13688669142', '', 'user_ymh7a5t69k', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (264, '13688669143', '', 'user_58qypl26r3', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (265, '13688669144', '', 'user_oknszihfil', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (266, '13688669145', '', 'user_rx5qu0277b', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (267, '13688669146', '', 'user_4mwekx3q8z', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (268, '13688669147', '', 'user_ie9qzfwu27', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (269, '13688669148', '', 'user_l80r6phxur', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (270, '13688669149', '', 'user_np6iqqeuql', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (271, '13688669150', '', 'user_5c27qgw2o3', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (272, '13688669151', '', 'user_ujpa6juatc', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (273, '13688669152', '', 'user_van4fds7cx', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (274, '13688669153', '', 'user_ox11o9krp9', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (275, '13688669154', '', 'user_c7o3u0usf2', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (276, '13688669155', '', 'user_cq7hojlerq', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (277, '13688669156', '', 'user_kphis0ntao', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (278, '13688669157', '', 'user_nd12v2tdpj', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (279, '13688669158', '', 'user_5far04rjm0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (280, '13688669159', '', 'user_f33abomjs2', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (281, '13688669160', '', 'user_1qty1oyawt', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (282, '13688669161', '', 'user_9l463o7me2', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (283, '13688669162', '', 'user_0seyfs8ou8', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (284, '13688669163', '', 'user_7uhqt2zf11', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (285, '13688669164', '', 'user_wy2jtbkr1t', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (286, '13688669165', '', 'user_yjf1kbl6r8', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (287, '13688669166', '', 'user_r98pel35gn', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (288, '13688669167', '', 'user_u2eg1jcwvz', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (289, '13688669168', '', 'user_5z7d4fr9ye', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (290, '13688669169', '', 'user_kl0p0ku6zv', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (291, '13688669170', '', 'user_dsdocfa64r', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (292, '13688669171', '', 'user_gbygsd03kc', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (293, '13688669172', '', 'user_dj1xqos2is', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (294, '13688669173', '', 'user_il6yctz040', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (295, '13688669174', '', 'user_y4zn043gvj', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (296, '13688669175', '', 'user_oh9tjoxq8c', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (297, '13688669176', '', 'user_6xlq088asi', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (298, '13688669177', '', 'user_0sepghh66s', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (299, '13688669178', '', 'user_dzo7q333x7', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (300, '13688669179', '', 'user_n7j3j68agt', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (301, '13688669180', '', 'user_b99vc3qr3d', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (302, '13688669181', '', 'user_o2uu01ngfw', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (303, '13688669182', '', 'user_q0yy8pvku3', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (304, '13688669183', '', 'user_lipi4iyiv9', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (305, '13688669184', '', 'user_x2dq9i90ms', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (306, '13688669185', '', 'user_bz9twrcx01', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (307, '13688669186', '', 'user_iun0ocev18', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (308, '13688669187', '', 'user_uob3pxr062', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (309, '13688669188', '', 'user_nxuwi8q3n5', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (310, '13688669189', '', 'user_g6si4hwe4r', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (311, '13688669190', '', 'user_v4xud6pxnh', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (312, '13688669191', '', 'user_n3vq5a4c49', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (313, '13688669192', '', 'user_6qdfn8dkja', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (314, '13688669193', '', 'user_872mdw0ibu', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (315, '13688669194', '', 'user_s426pmlnno', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (316, '13688669195', '', 'user_n7d3fcnlqf', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (317, '13688669196', '', 'user_d1euhpgvjt', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (318, '13688669197', '', 'user_luwqlqye4n', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (319, '13688669198', '', 'user_m9khstqle0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (320, '13688669199', '', 'user_7u54hoeh5p', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (321, '13688669200', '', 'user_hndxi8iyg7', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (322, '13688669201', '', 'user_csagq8b16v', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (323, '13688669202', '', 'user_sa979r5vfr', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (324, '13688669203', '', 'user_gojbeoieko', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (325, '13688669204', '', 'user_vrxmccmk36', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (326, '13688669205', '', 'user_kwzzzxile8', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (327, '13688669206', '', 'user_8ik6wmzcs3', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (328, '13688669207', '', 'user_x9f4po6eok', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (329, '13688669208', '', 'user_vn0g3rywt0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (330, '13688669209', '', 'user_0h0hqnoqvv', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (331, '13688669210', '', 'user_ne3rvn4cim', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (332, '13688669211', '', 'user_bz20tomja0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (333, '13688669212', '', 'user_7k5d8324tm', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (334, '13688669213', '', 'user_5va74it1op', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (335, '13688669214', '', 'user_gc21xkfgph', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (336, '13688669215', '', 'user_rv1o0ousua', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (337, '13688669216', '', 'user_lkp3hk0t8q', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (338, '13688669217', '', 'user_e2kjjqo7ee', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (339, '13688669218', '', 'user_ja24gfl42z', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (340, '13688669219', '', 'user_5sxrarxxd2', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (341, '13688669220', '', 'user_lzilfx23jr', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (342, '13688669221', '', 'user_4healeh2sq', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (343, '13688669222', '', 'user_txh60qz6xe', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (344, '13688669223', '', 'user_ofie8fobtu', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (345, '13688669224', '', 'user_wxfngmqndc', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (346, '13688669225', '', 'user_n11kdqn95y', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (347, '13688669226', '', 'user_7b9etto6jl', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (348, '13688669227', '', 'user_sa23n9pacw', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (349, '13688669228', '', 'user_1lhe46upfz', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (350, '13688669229', '', 'user_jioft4gdiu', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (351, '13688669230', '', 'user_jta7ld4vty', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (352, '13688669231', '', 'user_5tkaejhk7g', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (353, '13688669232', '', 'user_fkoe771g9p', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (354, '13688669233', '', 'user_snv802ujrx', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (355, '13688669234', '', 'user_4szkwdl3hw', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (356, '13688669235', '', 'user_qq4cteo33l', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (357, '13688669236', '', 'user_hwn4ofw0dp', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (358, '13688669237', '', 'user_2r4xhcvxp2', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (359, '13688669238', '', 'user_iphgurk3nk', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (360, '13688669239', '', 'user_ih9kbl5kzb', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (361, '13688669240', '', 'user_2odlf3rqex', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (362, '13688669241', '', 'user_i9jalo3ouw', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (363, '13688669242', '', 'user_whbqd8vhr2', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (364, '13688669243', '', 'user_bzlvvy10mp', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (365, '13688669244', '', 'user_pe7y2zyii7', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (366, '13688669245', '', 'user_cnk071ghc7', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (367, '13688669246', '', 'user_21cue7tpm0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (368, '13688669247', '', 'user_nidneujm1x', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (369, '13688669248', '', 'user_tx2y3v0pb0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (370, '13688669249', '', 'user_i8ikz0nufr', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (371, '13688669250', '', 'user_omq8bsw2ij', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (372, '13688669251', '', 'user_ffpuo977gj', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (373, '13688669252', '', 'user_jcgx7mukv0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (374, '13688669253', '', 'user_gn6k43jfx8', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (375, '13688669254', '', 'user_esfv726lun', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (376, '13688669255', '', 'user_l7vh3qyhnk', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (377, '13688669256', '', 'user_aqo9nsp13v', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (378, '13688669257', '', 'user_45z1cjwo34', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (379, '13688669258', '', 'user_cukuugiquc', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (380, '13688669259', '', 'user_cmzben5ql1', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (381, '13688669260', '', 'user_fm136hckhd', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (382, '13688669261', '', 'user_4neww35d6t', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (383, '13688669262', '', 'user_p4e2t04dl0', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (384, '13688669263', '', 'user_3s22mzjlgl', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (385, '13688669264', '', 'user_kf0pbo00lp', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (386, '13688669265', '', 'user_7tan2lj2jn', '', '2022-02-28 10:50:49', '2022-02-28 10:50:49'); +INSERT INTO `tb_user` VALUES (387, '13688669266', '', 'user_w88q6nof2r', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (388, '13688669267', '', 'user_9aze983wkj', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (389, '13688669268', '', 'user_wtioxpbho1', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (390, '13688669269', '', 'user_yf70g0cjfu', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (391, '13688669270', '', 'user_i1w18vru0l', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (392, '13688669271', '', 'user_6lr3w5npe5', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (393, '13688669272', '', 'user_9n8rjbb9gp', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (394, '13688669273', '', 'user_fe3u4g7p1f', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (395, '13688669274', '', 'user_618vib46zb', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (396, '13688669275', '', 'user_mj4b8uxpu3', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (397, '13688669276', '', 'user_3jq7brld6h', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (398, '13688669277', '', 'user_8577262ob3', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (399, '13688669278', '', 'user_x63u1e3sap', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (400, '13688669279', '', 'user_o2c2l1j9zs', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (401, '13688669280', '', 'user_rtupie4qut', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (402, '13688669281', '', 'user_othsv0bkha', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (403, '13688669282', '', 'user_4wqa1vn3kw', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (404, '13688669283', '', 'user_xmhuythdnn', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (405, '13688669284', '', 'user_alzyibl549', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (406, '13688669285', '', 'user_3nhqsa0htg', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (407, '13688669286', '', 'user_vn81ys9n64', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (408, '13688669287', '', 'user_iz6t7kpxz2', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (409, '13688669288', '', 'user_7gnmjhg1rh', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (410, '13688669289', '', 'user_r2i71mq5lk', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (411, '13688669290', '', 'user_gevxv4bfda', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (412, '13688669291', '', 'user_hqneva0vaz', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (413, '13688669292', '', 'user_8fvquxjm0t', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (414, '13688669293', '', 'user_9u8dxzs9nk', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (415, '13688669294', '', 'user_8mwcrg9ez9', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (416, '13688669295', '', 'user_erzqptr80b', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (417, '13688669296', '', 'user_97xgccgwaf', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (418, '13688669297', '', 'user_5rz6s0zuoh', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (419, '13688669298', '', 'user_8o7cg6rp05', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (420, '13688669299', '', 'user_rhftetybs4', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (421, '13688669300', '', 'user_mjh9uzi92z', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (422, '13688669301', '', 'user_bvaub566b3', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (423, '13688669302', '', 'user_e97b0z12jc', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (424, '13688669303', '', 'user_mcc1pteaw5', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (425, '13688669304', '', 'user_gz1ymib0dl', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (426, '13688669305', '', 'user_owszpn6jem', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (427, '13688669306', '', 'user_nyqxiekdus', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (428, '13688669307', '', 'user_ilr27xnuxu', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (429, '13688669308', '', 'user_mhzftdfxi4', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (430, '13688669309', '', 'user_kavgc8r8f6', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (431, '13688669310', '', 'user_svztbpgr9w', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (432, '13688669311', '', 'user_fdjhoysgy8', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (433, '13688669312', '', 'user_drssks7627', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (434, '13688669313', '', 'user_53kuim78p1', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (435, '13688669314', '', 'user_tpjaw9ygl6', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (436, '13688669315', '', 'user_zlj9ao4lbw', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (437, '13688669316', '', 'user_9nsckyz0k8', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (438, '13688669317', '', 'user_rkyjx5n0k9', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (439, '13688669318', '', 'user_e47mr17jmo', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (440, '13688669319', '', 'user_gdouwxu8bm', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (441, '13688669320', '', 'user_7odu05tcri', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (442, '13688669321', '', 'user_x6dga1y84j', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (443, '13688669322', '', 'user_ubzwoytroz', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (444, '13688669323', '', 'user_brivojp5b1', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (445, '13688669324', '', 'user_q5sluitgii', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (446, '13688669325', '', 'user_bbqazzzawl', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (447, '13688669326', '', 'user_82fbd0oo0u', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (448, '13688669327', '', 'user_87ft14as7t', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (449, '13688669328', '', 'user_diabg787km', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (450, '13688669329', '', 'user_oo1gf0pxln', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (451, '13688669330', '', 'user_4fc1q8u2f3', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (452, '13688669331', '', 'user_hgny53jwpn', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (453, '13688669332', '', 'user_5m75miuy6r', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (454, '13688669333', '', 'user_qx5ohjcayd', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (455, '13688669334', '', 'user_cff2zkpu62', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (456, '13688669335', '', 'user_dsb1rk9dsr', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (457, '13688669336', '', 'user_50h3ylhjnz', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (458, '13688669337', '', 'user_i02f5rjdab', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (459, '13688669338', '', 'user_3vwdqpif1l', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (460, '13688669339', '', 'user_g6xewzg33w', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (461, '13688669340', '', 'user_63u60u6o7f', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (462, '13688669341', '', 'user_m6ikxcr92q', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (463, '13688669342', '', 'user_yzd5lmecur', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (464, '13688669343', '', 'user_m3163uc9al', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (465, '13688669344', '', 'user_1x6f94jq0v', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (466, '13688669345', '', 'user_keo0udy60g', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (467, '13688669346', '', 'user_87y52es2uw', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (468, '13688669347', '', 'user_1zkkz9j0e6', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (469, '13688669348', '', 'user_baznwk8x5q', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (470, '13688669349', '', 'user_b4hnhsmpxw', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (471, '13688669350', '', 'user_1hr6wbd939', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (472, '13688669351', '', 'user_4w7dhr290a', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (473, '13688669352', '', 'user_tkxg6jo3xa', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (474, '13688669353', '', 'user_saosjqptnq', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (475, '13688669354', '', 'user_wjge9hxzfv', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (476, '13688669355', '', 'user_8ex8ynmec4', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (477, '13688669356', '', 'user_beih06msot', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (478, '13688669357', '', 'user_e4tuso2fad', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (479, '13688669358', '', 'user_iolxs2wbfs', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (480, '13688669359', '', 'user_5trre9akf1', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (481, '13688669360', '', 'user_y3l832hamq', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (482, '13688669361', '', 'user_gs7kvt65y8', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (483, '13688669362', '', 'user_8rda39nfpx', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (484, '13688669363', '', 'user_wix6t6g14l', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (485, '13688669364', '', 'user_s2k023vtn7', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (486, '13688669365', '', 'user_qc3nhavb9f', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (487, '13688669366', '', 'user_98eoecfe9s', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (488, '13688669367', '', 'user_kknik7xw80', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (489, '13688669368', '', 'user_17d7bifhpp', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (490, '13688669369', '', 'user_04vbus432n', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (491, '13688669370', '', 'user_3e1xl0tvss', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (492, '13688669371', '', 'user_jpvv20rmfk', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (493, '13688669372', '', 'user_51jd3tfl3e', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (494, '13688669373', '', 'user_agt44szvcb', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (495, '13688669374', '', 'user_pr7icguenq', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (496, '13688669375', '', 'user_2jl0qaecm0', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (497, '13688669376', '', 'user_m1fxzx8i0u', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (498, '13688669377', '', 'user_fh7a1j0vaz', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (499, '13688669378', '', 'user_ty7afbm01v', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (500, '13688669379', '', 'user_bwazk1tt71', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (501, '13688669380', '', 'user_c1wrwmqzfi', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (502, '13688669381', '', 'user_nbfyg2pfql', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (503, '13688669382', '', 'user_h85lj9y0jy', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (504, '13688669383', '', 'user_e0r5gg439j', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (505, '13688669384', '', 'user_k0s8h8v8wt', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (506, '13688669385', '', 'user_0v423qhiz2', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (507, '13688669386', '', 'user_zgze48neoq', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (508, '13688669387', '', 'user_un4nppmh7k', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (509, '13688669388', '', 'user_knr2flv5mr', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (510, '13688669389', '', 'user_cvhg3r8aqj', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (511, '13688669390', '', 'user_92xh46mlff', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (512, '13688669391', '', 'user_vhp8pxmhk6', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (513, '13688669392', '', 'user_hc4c7z9y3k', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (514, '13688669393', '', 'user_03ikpqtn96', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (515, '13688669394', '', 'user_g0l23kj1ta', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (516, '13688669395', '', 'user_hdd1qkfbjy', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (517, '13688669396', '', 'user_vmc478haq2', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (518, '13688669397', '', 'user_g16kk9w1jp', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (519, '13688669398', '', 'user_vlviloabak', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (520, '13688669399', '', 'user_f4t9c9x0qs', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (521, '13688669400', '', 'user_uhd0vskqux', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (522, '13688669401', '', 'user_uidqqwety9', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (523, '13688669402', '', 'user_ijqz4fb077', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (524, '13688669403', '', 'user_d16wfogt38', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (525, '13688669404', '', 'user_50cj7qxejp', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (526, '13688669405', '', 'user_w0mawjfxbf', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (527, '13688669406', '', 'user_vihcs8gddy', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (528, '13688669407', '', 'user_1io84j51kb', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (529, '13688669408', '', 'user_sac23jn0ct', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (530, '13688669409', '', 'user_84saoi0eaq', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (531, '13688669410', '', 'user_bqfd0lusff', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (532, '13688669411', '', 'user_a717jzadbk', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (533, '13688669412', '', 'user_3e6nd805yp', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (534, '13688669413', '', 'user_bgkv3zjjsy', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (535, '13688669414', '', 'user_4lzfuo6hcl', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (536, '13688669415', '', 'user_y748pleoq8', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (537, '13688669416', '', 'user_ciyuki97of', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (538, '13688669417', '', 'user_kaulf89rnl', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (539, '13688669418', '', 'user_h0dan7ux0u', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (540, '13688669419', '', 'user_fvmx4u2re0', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (541, '13688669420', '', 'user_njomftlkps', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (542, '13688669421', '', 'user_2ezx5lxtc4', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (543, '13688669422', '', 'user_161mxzchbt', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (544, '13688669423', '', 'user_f8e3enit63', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (545, '13688669424', '', 'user_j1ygvb30zr', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (546, '13688669425', '', 'user_lskpl9geya', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (547, '13688669426', '', 'user_feww9njnhi', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (548, '13688669427', '', 'user_e8x6u5i9ca', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (549, '13688669428', '', 'user_17al8oqa4w', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (550, '13688669429', '', 'user_nbo1m8bazt', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (551, '13688669430', '', 'user_rqfyp2isyr', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (552, '13688669431', '', 'user_epr1i52q5x', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (553, '13688669432', '', 'user_x154dr8sch', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (554, '13688669433', '', 'user_i5lvnupsu6', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (555, '13688669434', '', 'user_qsnre265gc', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (556, '13688669435', '', 'user_7f3zwt1uso', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (557, '13688669436', '', 'user_qgkrbv1r7p', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (558, '13688669437', '', 'user_b39j58u8ql', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (559, '13688669438', '', 'user_wby0tn39v5', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (560, '13688669439', '', 'user_9vt11wm6wb', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (561, '13688669440', '', 'user_y4rokt5rzh', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (562, '13688669441', '', 'user_lyarwzepjm', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (563, '13688669442', '', 'user_er844jel5s', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (564, '13688669443', '', 'user_2gkdrbu7rd', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (565, '13688669444', '', 'user_fnks15rgap', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (566, '13688669445', '', 'user_fe79dtlbf3', '', '2022-02-28 10:50:50', '2022-02-28 10:50:50'); +INSERT INTO `tb_user` VALUES (567, '13688669446', '', 'user_jrl1kdhopy', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (568, '13688669447', '', 'user_p5h5hfw0h5', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (569, '13688669448', '', 'user_756lckggox', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (570, '13688669449', '', 'user_9w56lad204', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (571, '13688669450', '', 'user_kjfvuonq64', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (572, '13688669451', '', 'user_k1i16oya8x', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (573, '13688669452', '', 'user_z4wz2wq9oj', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (574, '13688669453', '', 'user_jotms6c1vz', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (575, '13688669454', '', 'user_29iu6j1olp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (576, '13688669455', '', 'user_rfkqpu7bs1', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (577, '13688669456', '', 'user_yecqp8c38k', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (578, '13688669457', '', 'user_1mbkrz4rng', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (579, '13688669458', '', 'user_bx6h4wu47y', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (580, '13688669459', '', 'user_usub0nsxez', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (581, '13688669460', '', 'user_2vvxjpuwgr', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (582, '13688669461', '', 'user_9tmhy4nfm1', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (583, '13688669462', '', 'user_q1gyjoatnm', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (584, '13688669463', '', 'user_vaqe3soyoz', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (585, '13688669464', '', 'user_bz81fj51ul', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (586, '13688669465', '', 'user_pwp8w2oife', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (587, '13688669466', '', 'user_6i8a8jpc4a', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (588, '13688669467', '', 'user_e19oms872y', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (589, '13688669468', '', 'user_7jnvjujuk5', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (590, '13688669469', '', 'user_1brabvuxfp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (591, '13688669470', '', 'user_w25xjchkmt', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (592, '13688669471', '', 'user_qc38678j1q', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (593, '13688669472', '', 'user_5wqfc087pg', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (594, '13688669473', '', 'user_l921wy6ghf', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (595, '13688669474', '', 'user_qgdwy1c8ya', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (596, '13688669475', '', 'user_2ftowbar49', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (597, '13688669476', '', 'user_e0rqhfdde9', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (598, '13688669477', '', 'user_vpswd32xps', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (599, '13688669478', '', 'user_ec479wdojq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (600, '13688669479', '', 'user_6kz95u775k', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (601, '13688669480', '', 'user_iyyh1jdjvk', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (602, '13688669481', '', 'user_jbv97r3zcf', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (603, '13688669482', '', 'user_1t7nmmwx2g', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (604, '13688669483', '', 'user_fb8j6mb1cn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (605, '13688669484', '', 'user_ld0b3fd8uk', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (606, '13688669485', '', 'user_sv8tt0fhb0', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (607, '13688669486', '', 'user_ovqhhaqzfs', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (608, '13688669487', '', 'user_mdybbx800t', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (609, '13688669488', '', 'user_dy1n5yoxhv', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (610, '13688669489', '', 'user_xefu4y7d2d', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (611, '13688669490', '', 'user_4aun9z96dn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (612, '13688669491', '', 'user_guva8ofunq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (613, '13688669492', '', 'user_6l4gzaotnf', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (614, '13688669493', '', 'user_ngbcy6a2zk', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (615, '13688669494', '', 'user_dqqj7ti3pd', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (616, '13688669495', '', 'user_5zq4rzlbik', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (617, '13688669496', '', 'user_7e0qi512hf', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (618, '13688669497', '', 'user_jpmnhzwesi', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (619, '13688669498', '', 'user_00xb9uvv0m', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (620, '13688669499', '', 'user_nxn2ldt3gl', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (621, '13688669500', '', 'user_cyd1a9zfqw', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (622, '13688669501', '', 'user_0nhklq4xie', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (623, '13688669502', '', 'user_rtf3z1wptn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (624, '13688669503', '', 'user_ov4uix8csm', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (625, '13688669504', '', 'user_lxi5i68cdf', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (626, '13688669505', '', 'user_do1slgl1ph', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (627, '13688669506', '', 'user_qj8pbsjpl5', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (628, '13688669507', '', 'user_ygrl56l48d', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (629, '13688669508', '', 'user_maynz9h3vn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (630, '13688669509', '', 'user_m7qnvuej5k', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (631, '13688669510', '', 'user_ceg7kezzrd', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (632, '13688669511', '', 'user_v7ky9w9v6f', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (633, '13688669512', '', 'user_kk8rzbittq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (634, '13688669513', '', 'user_mskczihgi8', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (635, '13688669514', '', 'user_0tmadlzf1j', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (636, '13688669515', '', 'user_oeui72807w', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (637, '13688669516', '', 'user_ad49besbbs', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (638, '13688669517', '', 'user_huzzpviaax', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (639, '13688669518', '', 'user_b0p11t8qon', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (640, '13688669519', '', 'user_14k8fje63n', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (641, '13688669520', '', 'user_bl5rc085pr', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (642, '13688669521', '', 'user_938covh4nt', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (643, '13688669522', '', 'user_olt9qfefvw', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (644, '13688669523', '', 'user_bhkdwtkfdg', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (645, '13688669524', '', 'user_we6790rc8v', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (646, '13688669525', '', 'user_wqmiqbrj3a', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (647, '13688669526', '', 'user_ccdo9ncgzt', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (648, '13688669527', '', 'user_pk3l58b3cf', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (649, '13688669528', '', 'user_meqr7dxbog', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (650, '13688669529', '', 'user_x70v1uaf0g', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (651, '13688669530', '', 'user_yijawdxi8k', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (652, '13688669531', '', 'user_qlv8jnv927', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (653, '13688669532', '', 'user_2tkj1s7aex', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (654, '13688669533', '', 'user_5vbfw1gln6', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (655, '13688669534', '', 'user_zseyyi59z2', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (656, '13688669535', '', 'user_8ch1tq5bfp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (657, '13688669536', '', 'user_gdgb5nbkqn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (658, '13688669537', '', 'user_rr5448qo4l', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (659, '13688669538', '', 'user_e6zwifzqhw', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (660, '13688669539', '', 'user_7ytv4vd6he', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (661, '13688669540', '', 'user_pc84newj49', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (662, '13688669541', '', 'user_h4wpk3e9ht', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (663, '13688669542', '', 'user_d3vt4vqim8', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (664, '13688669543', '', 'user_eqr14mgaz2', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (665, '13688669544', '', 'user_ldd4kzq961', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (666, '13688669545', '', 'user_w4qu1bb2lk', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (667, '13688669546', '', 'user_0627bn8px3', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (668, '13688669547', '', 'user_64aj20cdf1', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (669, '13688669548', '', 'user_l7u34b3ler', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (670, '13688669549', '', 'user_2ze9tl9994', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (671, '13688669550', '', 'user_m5phoejixm', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (672, '13688669551', '', 'user_8ogdovuirm', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (673, '13688669552', '', 'user_wfk4ebck83', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (674, '13688669553', '', 'user_oupbnni466', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (675, '13688669554', '', 'user_89967wcevq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (676, '13688669555', '', 'user_xr6g2q08cm', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (677, '13688669556', '', 'user_m313bjckeq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (678, '13688669557', '', 'user_x25nq1ss14', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (679, '13688669558', '', 'user_jeidzxzp6y', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (680, '13688669559', '', 'user_l7dkffo3n0', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (681, '13688669560', '', 'user_pqio9ol2ln', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (682, '13688669561', '', 'user_k1cbsqi4gt', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (683, '13688669562', '', 'user_p1i9b4p4sv', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (684, '13688669563', '', 'user_07yfm6qtl1', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (685, '13688669564', '', 'user_y3mmmk1kak', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (686, '13688669565', '', 'user_lkxjnwtqa7', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (687, '13688669566', '', 'user_v5w9pm18iq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (688, '13688669567', '', 'user_364l5poxpw', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (689, '13688669568', '', 'user_trlfkptv3g', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (690, '13688669569', '', 'user_rkheg82tnp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (691, '13688669570', '', 'user_5zmzrjgo5o', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (692, '13688669571', '', 'user_6uacx6cqhp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (693, '13688669572', '', 'user_wnats1phoj', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (694, '13688669573', '', 'user_dcm1w7674v', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (695, '13688669574', '', 'user_r7ik7ae272', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (696, '13688669575', '', 'user_xk77qyl4gl', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (697, '13688669576', '', 'user_989d1fsji4', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (698, '13688669577', '', 'user_macs32vcct', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (699, '13688669578', '', 'user_z5mahfpa9r', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (700, '13688669579', '', 'user_tn1bnk3zir', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (701, '13688669580', '', 'user_95ajn6osry', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (702, '13688669581', '', 'user_qff1n375uc', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (703, '13688669582', '', 'user_gdjqlq4i6n', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (704, '13688669583', '', 'user_w6tsnpzfqn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (705, '13688669584', '', 'user_lqp4c4j2ch', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (706, '13688669585', '', 'user_1raii40ps1', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (707, '13688669586', '', 'user_0r9izz201x', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (708, '13688669587', '', 'user_vlrp22q0rk', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (709, '13688669588', '', 'user_f7kvbzb8i4', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (710, '13688669589', '', 'user_yn8nntyyur', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (711, '13688669590', '', 'user_p58nxqajou', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (712, '13688669591', '', 'user_61msspy26k', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (713, '13688669592', '', 'user_fqb0ch1hh1', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (714, '13688669593', '', 'user_oyq3nszclx', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (715, '13688669594', '', 'user_ggybvkn73t', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (716, '13688669595', '', 'user_po0gph6jgp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (717, '13688669596', '', 'user_hlzvh6wl1y', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (718, '13688669597', '', 'user_btb024hqic', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (719, '13688669598', '', 'user_wqasvon847', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (720, '13688669599', '', 'user_rdp7fvaz3z', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (721, '13688669600', '', 'user_oh5q9kfkvc', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (722, '13688669601', '', 'user_ae21kmiles', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (723, '13688669602', '', 'user_b1ouyw3sww', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (724, '13688669603', '', 'user_9o5qz4s17l', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (725, '13688669604', '', 'user_6urs1iwti9', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (726, '13688669605', '', 'user_80pnfhyqyi', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (727, '13688669606', '', 'user_mynvmq4zcn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (728, '13688669607', '', 'user_q09fj27oc4', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (729, '13688669608', '', 'user_v4e7hkfw63', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (730, '13688669609', '', 'user_x4sol5dj4f', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (731, '13688669610', '', 'user_v53dsicdtx', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (732, '13688669611', '', 'user_fcoezs141i', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (733, '13688669612', '', 'user_viv3l4o52c', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (734, '13688669613', '', 'user_8j4m80dj76', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (735, '13688669614', '', 'user_r65xyt3opb', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (736, '13688669615', '', 'user_moi9x442th', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (737, '13688669616', '', 'user_qxkltii6ec', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (738, '13688669617', '', 'user_72vsybd20b', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (739, '13688669618', '', 'user_eai1g9ltu9', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (740, '13688669619', '', 'user_h47ubi7f36', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (741, '13688669620', '', 'user_yxo46519hp', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (742, '13688669621', '', 'user_499diayvwn', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (743, '13688669622', '', 'user_ytomkocl3c', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (744, '13688669623', '', 'user_271mt5x5uo', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (745, '13688669624', '', 'user_h5s36mj609', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (746, '13688669625', '', 'user_sklzx3z3nq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (747, '13688669626', '', 'user_9v2ikjkwm8', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (748, '13688669627', '', 'user_w5jjd49ipx', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (749, '13688669628', '', 'user_3rzokm18yo', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (750, '13688669629', '', 'user_vm6zz6ejs7', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (751, '13688669630', '', 'user_r494p0jlle', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (752, '13688669631', '', 'user_c50thdpyv0', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (753, '13688669632', '', 'user_hc4qi0sfo2', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (754, '13688669633', '', 'user_w8y4nebzxs', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (755, '13688669634', '', 'user_mxxqu6isy9', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (756, '13688669635', '', 'user_sd3f76mtg3', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (757, '13688669636', '', 'user_6zb026vsmm', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (758, '13688669637', '', 'user_mzya91331l', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (759, '13688669638', '', 'user_adu5gmym2g', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (760, '13688669639', '', 'user_31bidh90w5', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (761, '13688669640', '', 'user_iectlacbk7', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (762, '13688669641', '', 'user_by8vl07035', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (763, '13688669642', '', 'user_n8ii3p3b6z', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (764, '13688669643', '', 'user_eopvczuyzq', '', '2022-02-28 10:50:51', '2022-02-28 10:50:51'); +INSERT INTO `tb_user` VALUES (765, '13688669644', '', 'user_2m36qy9yht', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (766, '13688669645', '', 'user_re1q80zze2', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (767, '13688669646', '', 'user_lelhu217ad', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (768, '13688669647', '', 'user_dyv7ll1h9r', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (769, '13688669648', '', 'user_7zws9wi4cp', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (770, '13688669649', '', 'user_tvseis2smv', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (771, '13688669650', '', 'user_975ls201ra', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (772, '13688669651', '', 'user_0416smxpjc', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (773, '13688669652', '', 'user_dkdw3wuvxt', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (774, '13688669653', '', 'user_d1z5jtfh2g', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (775, '13688669654', '', 'user_yg9r3ws35z', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (776, '13688669655', '', 'user_9cos7jzgmy', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (777, '13688669656', '', 'user_679sq0b6eb', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (778, '13688669657', '', 'user_kzk5m1pgqv', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (779, '13688669658', '', 'user_28qetr02oe', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (780, '13688669659', '', 'user_peazcxx51i', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (781, '13688669660', '', 'user_roghf2lerp', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (782, '13688669661', '', 'user_sth9xhgsoj', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (783, '13688669662', '', 'user_38ejcd1npp', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (784, '13688669663', '', 'user_m0y48rqbxs', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (785, '13688669664', '', 'user_a0f919rrdw', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (786, '13688669665', '', 'user_veddhmnfa7', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (787, '13688669666', '', 'user_ltexwx6bm6', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (788, '13688669667', '', 'user_euqn9si8dg', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (789, '13688669668', '', 'user_wm4s4v0o87', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (790, '13688669669', '', 'user_mthbqaorve', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (791, '13688669670', '', 'user_k63cindeeh', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (792, '13688669671', '', 'user_kz30acb48r', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (793, '13688669672', '', 'user_1jmeyd8a28', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (794, '13688669673', '', 'user_su5oi3kpfx', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (795, '13688669674', '', 'user_4eurdp0387', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (796, '13688669675', '', 'user_orxdegd4d4', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (797, '13688669676', '', 'user_50vxeli8rd', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (798, '13688669677', '', 'user_vqsnl66ot5', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (799, '13688669678', '', 'user_en3q7qyiqb', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (800, '13688669679', '', 'user_0yyk9mnng0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (801, '13688669680', '', 'user_l48qjtjmxl', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (802, '13688669681', '', 'user_1wvigh2hxq', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (803, '13688669682', '', 'user_gr0bhwfvhu', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (804, '13688669683', '', 'user_qpku5s9nr6', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (805, '13688669684', '', 'user_kyhepj12kd', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (806, '13688669685', '', 'user_3x99ypxvqy', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (807, '13688669686', '', 'user_np8bk7b07w', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (808, '13688669687', '', 'user_dnu8kswk6o', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (809, '13688669688', '', 'user_u01mnauofu', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (810, '13688669689', '', 'user_48sv36r3xs', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (811, '13688669690', '', 'user_6ojf6nhxch', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (812, '13688669691', '', 'user_wd32jqla7r', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (813, '13688669692', '', 'user_zsdxxcpkuq', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (814, '13688669693', '', 'user_ib97xw8nl2', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (815, '13688669694', '', 'user_b7qb56z1p0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (816, '13688669695', '', 'user_i7jmrgmisg', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (817, '13688669696', '', 'user_5nf21zmos7', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (818, '13688669697', '', 'user_mck6nqe55g', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (819, '13688669698', '', 'user_6xnadvfus7', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (820, '13688669699', '', 'user_450u8mqe4z', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (821, '13688669700', '', 'user_hv55cq5n1w', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (822, '13688669701', '', 'user_qiy3ulbyd0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (823, '13688669702', '', 'user_sx58542ugn', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (824, '13688669703', '', 'user_9xs0uuyds5', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (825, '13688669704', '', 'user_zveuo0azp4', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (826, '13688669705', '', 'user_qwt4x5faay', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (827, '13688669706', '', 'user_ztzuqeybvp', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (828, '13688669707', '', 'user_kh5n7wfie8', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (829, '13688669708', '', 'user_dwxkvw03b7', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (830, '13688669709', '', 'user_3tyhv91k7p', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (831, '13688669710', '', 'user_0jwdppbvdk', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (832, '13688669711', '', 'user_twx4z08vzb', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (833, '13688669712', '', 'user_lly5v9ibpk', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (834, '13688669713', '', 'user_kkho7xpu2u', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (835, '13688669714', '', 'user_l51d2os1wh', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (836, '13688669715', '', 'user_i6gkyfawkv', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (837, '13688669716', '', 'user_v2k5vdh4he', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (838, '13688669717', '', 'user_7k9ql2go9e', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (839, '13688669718', '', 'user_tnz3f99w2c', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (840, '13688669719', '', 'user_833zw6fgxz', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (841, '13688669720', '', 'user_f4hq0ga1oj', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (842, '13688669721', '', 'user_uxuxrig26t', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (843, '13688669722', '', 'user_grn37re7bg', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (844, '13688669723', '', 'user_5msjf8z2fj', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (845, '13688669724', '', 'user_53x3w7l7mv', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (846, '13688669725', '', 'user_pyolvy8m0v', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (847, '13688669726', '', 'user_12i4hpk09n', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (848, '13688669727', '', 'user_zjhyyt7zfq', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (849, '13688669728', '', 'user_avv8zgw4qk', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (850, '13688669729', '', 'user_khxmnqb6ni', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (851, '13688669730', '', 'user_i80iu0pb5k', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (852, '13688669731', '', 'user_lqkx9uurmj', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (853, '13688669732', '', 'user_ewiswre8fm', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (854, '13688669733', '', 'user_d0nwznn64y', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (855, '13688669734', '', 'user_v7wyz44u6m', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (856, '13688669735', '', 'user_ipkx0z0nno', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (857, '13688669736', '', 'user_64tnyqwxun', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (858, '13688669737', '', 'user_r9bjp3fegg', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (859, '13688669738', '', 'user_i36s8hsq72', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (860, '13688669739', '', 'user_cqe1zvq4dr', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (861, '13688669740', '', 'user_omdgisd0ls', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (862, '13688669741', '', 'user_3mgz8z636y', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (863, '13688669742', '', 'user_ts3qtzwp68', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (864, '13688669743', '', 'user_56seol3kxp', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (865, '13688669744', '', 'user_4x55muo0si', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (866, '13688669745', '', 'user_ny46fscq78', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (867, '13688669746', '', 'user_raano2keb9', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (868, '13688669747', '', 'user_31m00sj2bt', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (869, '13688669748', '', 'user_2ovmzeq4f3', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (870, '13688669749', '', 'user_dis12x5ko3', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (871, '13688669750', '', 'user_jx9defd5pu', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (872, '13688669751', '', 'user_k3u9zems0n', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (873, '13688669752', '', 'user_o84aucm31f', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (874, '13688669753', '', 'user_h4msccd8qo', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (875, '13688669754', '', 'user_6sk051bxed', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (876, '13688669755', '', 'user_1s1r4kks05', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (877, '13688669756', '', 'user_2pfvfdb27x', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (878, '13688669757', '', 'user_k5nxhuil69', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (879, '13688669758', '', 'user_6wu2vujv7x', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (880, '13688669759', '', 'user_05jr9c63o0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (881, '13688669760', '', 'user_cc2l1lrlw5', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (882, '13688669761', '', 'user_ieeqrlof8f', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (883, '13688669762', '', 'user_6m5ermqkua', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (884, '13688669763', '', 'user_mh99rug0nh', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (885, '13688669764', '', 'user_n55ceoc392', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (886, '13688669765', '', 'user_72vzhk8py3', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (887, '13688669766', '', 'user_bthii5wt36', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (888, '13688669767', '', 'user_mut3q0vunf', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (889, '13688669768', '', 'user_symgsydmbd', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (890, '13688669769', '', 'user_7qs7kedl19', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (891, '13688669770', '', 'user_uwyx1i29m0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (892, '13688669771', '', 'user_ls2p6sldmi', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (893, '13688669772', '', 'user_1kmmkpegso', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (894, '13688669773', '', 'user_4zp483y1e7', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (895, '13688669774', '', 'user_nr78kan9c3', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (896, '13688669775', '', 'user_0r0m7ngv6x', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (897, '13688669776', '', 'user_lknjznxmau', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (898, '13688669777', '', 'user_v9g6j6h0ah', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (899, '13688669778', '', 'user_wuyim37fx5', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (900, '13688669779', '', 'user_l0lfqjjzs0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (901, '13688669780', '', 'user_6uyxk7pa4u', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (902, '13688669781', '', 'user_f17o0qymn9', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (903, '13688669782', '', 'user_ogpqk1b39a', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (904, '13688669783', '', 'user_9jpofrgda1', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (905, '13688669784', '', 'user_n298v8udm3', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (906, '13688669785', '', 'user_0biwjc5wwt', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (907, '13688669786', '', 'user_xbbdx6wq53', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (908, '13688669787', '', 'user_nh79qly5ir', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (909, '13688669788', '', 'user_v86oajknbs', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (910, '13688669789', '', 'user_e13odsshad', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (911, '13688669790', '', 'user_6cvwrirdtl', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (912, '13688669791', '', 'user_nqr7bpgz67', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (913, '13688669792', '', 'user_wn1ae0p6gw', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (914, '13688669793', '', 'user_te48rluimb', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (915, '13688669794', '', 'user_p2r85n4k8g', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (916, '13688669795', '', 'user_ca8fdlrbty', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (917, '13688669796', '', 'user_toque00p0i', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (918, '13688669797', '', 'user_uiti5cdbhf', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (919, '13688669798', '', 'user_8pgku7viy8', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (920, '13688669799', '', 'user_cdafki4cwc', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (921, '13688669800', '', 'user_fyyk2yfpk5', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (922, '13688669801', '', 'user_78e1meevls', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (923, '13688669802', '', 'user_qzwls7m33b', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (924, '13688669803', '', 'user_jxuw8ixefk', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (925, '13688669804', '', 'user_1xye60infx', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (926, '13688669805', '', 'user_gvccna2mni', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (927, '13688669806', '', 'user_tftvpegd2c', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (928, '13688669807', '', 'user_6ihh78vpox', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (929, '13688669808', '', 'user_46qroyojdl', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (930, '13688669809', '', 'user_wwi4i2wb77', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (931, '13688669810', '', 'user_s28l0bryil', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (932, '13688669811', '', 'user_4lgib8jvrx', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (933, '13688669812', '', 'user_fczpz5s31b', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (934, '13688669813', '', 'user_3cvkn9pv9w', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (935, '13688669814', '', 'user_wtvk7gx8ar', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (936, '13688669815', '', 'user_yrel6rbyyd', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (937, '13688669816', '', 'user_hmxjnsbnon', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (938, '13688669817', '', 'user_cuxcl0d2oo', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (939, '13688669818', '', 'user_1ax8x9zw0c', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (940, '13688669819', '', 'user_p7v98oe5nm', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (941, '13688669820', '', 'user_m90rt3bwsz', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (942, '13688669821', '', 'user_xhty5jm1hy', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (943, '13688669822', '', 'user_7h88k22eo0', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (944, '13688669823', '', 'user_5a75z9jcqa', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (945, '13688669824', '', 'user_3t0twwq0nh', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (946, '13688669825', '', 'user_861ywr4gfr', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (947, '13688669826', '', 'user_iwkz8k1zpx', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (948, '13688669827', '', 'user_vzmhyoz1ap', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (949, '13688669828', '', 'user_5tmpddukgq', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (950, '13688669829', '', 'user_h6siyam4hb', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (951, '13688669830', '', 'user_n5yqq6mgka', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (952, '13688669831', '', 'user_an9epa7f2r', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (953, '13688669832', '', 'user_5vr0cdy8sz', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (954, '13688669833', '', 'user_xpanlhqjbq', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (955, '13688669834', '', 'user_3cfykc172m', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (956, '13688669835', '', 'user_1n0jceyzim', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (957, '13688669836', '', 'user_4ixi7efxtr', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (958, '13688669837', '', 'user_5adpp336iy', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (959, '13688669838', '', 'user_mflzjd6e6b', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (960, '13688669839', '', 'user_80bwfj72p7', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (961, '13688669840', '', 'user_i3anusitco', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (962, '13688669841', '', 'user_yj4pcsrkl9', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (963, '13688669842', '', 'user_7v9x6gxjdz', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (964, '13688669843', '', 'user_2ahufmnyzp', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (965, '13688669844', '', 'user_1oel6c441t', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (966, '13688669845', '', 'user_qxzcv0ib6g', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (967, '13688669846', '', 'user_9uyh0i8ykg', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (968, '13688669847', '', 'user_tb01d4d9ql', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (969, '13688669848', '', 'user_hwpkx6ovii', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (970, '13688669849', '', 'user_pqd04q9hq2', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (971, '13688669850', '', 'user_4t7wkgkufh', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (972, '13688669851', '', 'user_834e4vzf0e', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (973, '13688669852', '', 'user_pxk4urlnmo', '', '2022-02-28 10:50:52', '2022-02-28 10:50:52'); +INSERT INTO `tb_user` VALUES (974, '13688669853', '', 'user_e3x6n0ff0d', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (975, '13688669854', '', 'user_wxnvsvb5ut', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (976, '13688669855', '', 'user_ehi7k4zpjb', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (977, '13688669856', '', 'user_om0pzyh3z1', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (978, '13688669857', '', 'user_9asdqbe7od', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (979, '13688669858', '', 'user_seuabngxt9', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (980, '13688669859', '', 'user_b0qvb27eiy', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (981, '13688669860', '', 'user_63sjue2tkh', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (982, '13688669861', '', 'user_cc3lvxfr1u', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (983, '13688669862', '', 'user_in37hfw5tk', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (984, '13688669863', '', 'user_jtg0c9tyqn', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (985, '13688669864', '', 'user_qzpipaj50w', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (986, '13688669865', '', 'user_ppnb4ljetq', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (987, '13688669866', '', 'user_zbcui7783k', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (988, '13688669867', '', 'user_ki4dxb9q9b', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (989, '13688669868', '', 'user_27b5dxktn0', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (990, '13688669869', '', 'user_fxvb2av882', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (991, '13688669870', '', 'user_6vp3uflnwm', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (992, '13688669871', '', 'user_7ix7djbg30', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (993, '13688669872', '', 'user_vx8r39tjiu', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (994, '13688669873', '', 'user_l2wdiwule0', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (995, '13688669874', '', 'user_z4qe1up5zx', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (996, '13688669875', '', 'user_bklo4b32lu', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (997, '13688669876', '', 'user_ax0y473ndh', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (998, '13688669877', '', 'user_yx2p44qww3', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (999, '13688669878', '', 'user_bnw9bzib34', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1000, '13688669879', '', 'user_cdj4ojh4pc', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1001, '13688669880', '', 'user_l7o3r96hn3', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1002, '13688669881', '', 'user_zbehzrz279', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1003, '13688669882', '', 'user_tql21zepcx', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1004, '13688669883', '', 'user_jnxnrk8qt0', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1005, '13688669884', '', 'user_8e5twg6q0k', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1006, '13688669885', '', 'user_gfeusukbpp', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1007, '13688669886', '', 'user_sveivfswhn', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1008, '13688669887', '', 'user_qgf4t8jkx0', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); +INSERT INTO `tb_user` VALUES (1009, '13688669888', '', 'user_4qh6bofkol', '', '2022-02-28 10:50:53', '2022-02-28 10:50:53'); + +-- ---------------------------- +-- Table structure for tb_user_info +-- ---------------------------- +DROP TABLE IF EXISTS `tb_user_info`; +CREATE TABLE `tb_user_info` ( + `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '主键,用户id', + `city` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '城市名称', + `introduce` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '个人介绍,不要超过128个字符', + `fans` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '粉丝数量', + `followee` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '关注的人的数量', + `gender` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '性别,0:男,1:女', + `birthday` date NULL DEFAULT NULL COMMENT '生日', + `credits` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '积分', + `level` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '会员级别,0~9级,0代表未开通会员', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_user_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_voucher +-- ---------------------------- +DROP TABLE IF EXISTS `tb_voucher`; +CREATE TABLE `tb_voucher` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', + `shop_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '商铺id', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '代金券标题', + `sub_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '副标题', + `rules` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '使用规则', + `pay_value` bigint(10) UNSIGNED NOT NULL COMMENT '支付金额,单位是分。例如200代表2元', + `actual_value` bigint(10) NOT NULL COMMENT '抵扣金额,单位是分。例如200代表2元', + `type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '0,普通券;1,秒杀券', + `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '1,上架; 2,下架; 3,过期', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_voucher +-- ---------------------------- +INSERT INTO `tb_voucher` VALUES (1, 1, '50元代金券', '周一至周日均可使用', '全场通用\\n无需预约\\n可无限叠加\\不兑现、不找零\\n仅限堂食', 4750, 5000, 0, 1, '2022-01-04 09:42:39', '2022-01-04 09:43:31'); + +-- ---------------------------- +-- Table structure for tb_voucher_order +-- ---------------------------- +DROP TABLE IF EXISTS `tb_voucher_order`; +CREATE TABLE `tb_voucher_order` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '下单的用户id', + `voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '购买的代金券id', + `pay_type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '支付方式 1:余额支付;2:支付宝;3:微信', + `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '订单状态,1:未支付;2:已支付;3:已核销;4:已取消;5:退款中;6:已退款', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间', + `pay_time` timestamp NULL DEFAULT NULL COMMENT '支付时间', + `use_time` timestamp NULL DEFAULT NULL COMMENT '核销时间', + `refund_time` timestamp NULL DEFAULT NULL COMMENT '退款时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of tb_voucher_order +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/hm-dianping/src/main/resources/mapper/VoucherMapper.xml b/hm-dianping/src/main/resources/mapper/VoucherMapper.xml new file mode 100644 index 0000000..f87a13b --- /dev/null +++ b/hm-dianping/src/main/resources/mapper/VoucherMapper.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/hm-dianping/src/test/java/com/hmdp/HmDianPingApplicationTests.java b/hm-dianping/src/test/java/com/hmdp/HmDianPingApplicationTests.java new file mode 100644 index 0000000..bf82f64 --- /dev/null +++ b/hm-dianping/src/test/java/com/hmdp/HmDianPingApplicationTests.java @@ -0,0 +1,9 @@ +package com.hmdp; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class HmDianPingApplicationTests { + + +} diff --git a/jedis_demo/.idea/.gitignore b/jedis_demo/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/jedis_demo/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/jedis_demo/.idea/compiler.xml b/jedis_demo/.idea/compiler.xml new file mode 100644 index 0000000..c6433ef --- /dev/null +++ b/jedis_demo/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jedis_demo/.idea/encodings.xml b/jedis_demo/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/jedis_demo/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/jedis_demo/.idea/jarRepositories.xml b/jedis_demo/.idea/jarRepositories.xml new file mode 100644 index 0000000..c7ea920 --- /dev/null +++ b/jedis_demo/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jedis_demo/.idea/misc.xml b/jedis_demo/.idea/misc.xml new file mode 100644 index 0000000..ae9c995 --- /dev/null +++ b/jedis_demo/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jedis_demo/.idea/vcs.xml b/jedis_demo/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/jedis_demo/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/jedis_demo/pom.xml b/jedis_demo/pom.xml new file mode 100644 index 0000000..494b16d --- /dev/null +++ b/jedis_demo/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + com.redis + jedis_demo + 1.0-SNAPSHOT + + + 8 + 8 + UTF-8 + + + + + + redis.clients + jedis + 4.2.3 + + + + + org.junit.jupiter + junit-jupiter + 5.9.0 + test + + + + + + + \ No newline at end of file diff --git a/jedis_demo/src/main/java/com/redis/JedisConnectionFactory.java b/jedis_demo/src/main/java/com/redis/JedisConnectionFactory.java new file mode 100644 index 0000000..723c7ce --- /dev/null +++ b/jedis_demo/src/main/java/com/redis/JedisConnectionFactory.java @@ -0,0 +1,30 @@ +package com.redis; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +import java.time.Duration; + +public class JedisConnectionFactory { + private static final JedisPool jedisPool; + static { + JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); + // 最大连接 + jedisPoolConfig.setMaxTotal(8); + // 最大空闲连接 + jedisPoolConfig.setMaxIdle(8); + // 最小空闲连接,常备一个空闲连接 + jedisPoolConfig.setMinIdle(1); + // 设置最长等待时间,200ms + jedisPoolConfig.setMaxWait(Duration.ofMillis(200)); + + jedisPool = new JedisPool(jedisPoolConfig, "192.168.153.130", 6379, 1000, "admin"); + } + + // 获取jedis对象 + public static Jedis getJedis() { + return jedisPool.getResource(); + } + +} diff --git a/jedis_demo/src/test/java/com/redis/test/JedisTest.java b/jedis_demo/src/test/java/com/redis/test/JedisTest.java new file mode 100644 index 0000000..62619eb --- /dev/null +++ b/jedis_demo/src/test/java/com/redis/test/JedisTest.java @@ -0,0 +1,53 @@ +package com.redis.test; + +import com.redis.JedisConnectionFactory; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import redis.clients.jedis.Jedis; + +import java.util.Map; + +public class JedisTest { + private Jedis jedis; + + @BeforeEach //被该注解修饰的方法每次执行其他方法前自动执行 + void setUp() { + // 建立redis连接 +// jedis = new Jedis("192.168.153.130",6379); + // 使用连接池 + jedis = JedisConnectionFactory.getJedis(); + // 密码 + jedis.auth("admin"); + // 选择数据库 + jedis.select(0); + } + + @Test + void testString() { + String result = jedis.set("name","ooo"); + System.out.println("result: " + result); + + String name = jedis.get("name"); + System.out.println("name: " + name); + } + + @Test + void testHash() { + jedis.hset("project:user:4","id","4"); + jedis.hset("project:user:4","name","test"); + + + Map map = jedis.hgetAll("project:user:4"); + System.out.println(map); + + + } + + @AfterEach //被该注解修饰的方法会在每次执行其他方法后执行 + void closerRedis() { + if (jedis != null) { + jedis.close(); // 关闭连接 + } + } +} diff --git a/jedis_demo/target/classes/com/redis/JedisConnectionFactory.class b/jedis_demo/target/classes/com/redis/JedisConnectionFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..e18cc0dac39886716be2587899db9267ce631f2c GIT binary patch literal 1121 zcmah|ZBG+H5Pr5V+_fA~P81Y*t!P`dOF<9>`GUa|iy9#qzPVhNvgCS4u7}b1r+i6@ zk;Ko&Ut;2aFwWkIkRW)M%Me0tE_mcfSDb}3@ld`GyOB2e1@6HJA>s>Lu~ zbNnWcD@EALzUN6NRKB+&oX`*6QX#V;!|0Gwwh_P;lFn3ggVdDI& zCuszdUH1M4%6sCquy7eyEL=jLg=q{itS=%(*MP27k7_N3&+= zqyfK>t*C4AS~6S{Z#Mi;(07n3RJFRrE!NKF=sCxjFNGow{e^!e>C&$XH9u%@u`irm$*IAn@3r_o2|LAAbKm8Ur6&XB z#NC`yG6sw~T@M50H5RJXv$5hP#^?{S=?7uBrp2UPlJ=x6*?#gkt&G-m=@9G#Z4wwD z+YtpbxJr8~P9T6m@-n!NA&ThBBhd+9d_RcQB&#`6HyZ4v~IR z%9(9+MAj&!+AvFf$b3d;8`crJwn}z)@4(OA&5V=oCoUj`vD9y`6H@!J(%O<9M X$WyU7Vs^~h#3XSXjcARLOtoUjU( literal 0 HcmV?d00001 diff --git a/jedis_demo/target/test-classes/com/redis/test/JedisTest.class b/jedis_demo/target/test-classes/com/redis/test/JedisTest.class new file mode 100644 index 0000000000000000000000000000000000000000..257879a02bf85d32962ca35761e2c550cdee310f GIT binary patch literal 2087 zcmaJ?ZC4vb6n-WN>=L%54dtC`Xaxg>uB}ulAPQIn41EC#t@Uk5hGgkxH*Pkb!*~CK zzeA6v9zCZY`@tXO@tNI_fC-))X71j(^E}VJcV_tepFiIKn8y!EjAJ2*2UzUE7?yM_ zC-DhZ)bOc}SskA#bF~L+Sl94*61`Z^@leehYWO0FO>C){Z5?0g$m!V8@kluy>v*E( zrz&JuS$i7xH9QmOI*|ptDlnGwm0{)`Te?Bj4Bh6o@+}E;FWasitO&%j(+2{Hb*~@= zQaRg|k80&3>F--d4n66dm$#e)%eU2c!VBiqX4cx#xtiM$#+pdNe2EM{e17G7C=IeQ$fp77hhVKnn zI1(88Zyncawo{P4fF9L)F=HT)f&qzR4MhVb*alAUlHE}CUd&KW#rIBRK3J?V$;Ekr zm|YMM^9EkQVP90m4V2-k-BeHkHw|BQdIYYvL_I!Izyg_8beR0Q=ek_rLE5nLf#;u6 za8U-~n!t_h^#30JkxTCe)mpWHXJabc-pc8A7pqW}PAG98yVWru&Z{7>&;hRC3Rxt3lnE^Sld!qiw7No+R55I)7zvf5oy)ovAWd(rJ?!UUA`bF zI!#OJ$?FQQBqsPYkMq6enN=5uRu^sFCyo>RGC2$7op}xM3ym0Va_kPBy|_i&hyw5) zCiw+SadRx({FJlWJT~(OV!tCk^BdynL>*m+%8J*~eb|CbBf-#qXc)jX3}F<*=itX0 z@b5E5k!Lvr(@mYxt5hg|M5&609f(v-qL1|+XCbD@Jjb6>H5ef`R82vr zo)4(%F4t7IBF{Zq7u9{(RJYAF!RVCI^A<@p)iK(l?+X*Z%WmDHg!yxwN;PQbL#d*# O$#I_!fsZ)G@bSOK6XBHr literal 0 HcmV?d00001 diff --git a/nginx-1.18.0/nginx-1.18.0/conf/fastcgi.conf b/nginx-1.18.0/nginx-1.18.0/conf/fastcgi.conf new file mode 100644 index 0000000..091738c --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/fastcgi.conf @@ -0,0 +1,26 @@ + +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; diff --git a/nginx-1.18.0/nginx-1.18.0/conf/fastcgi_params b/nginx-1.18.0/nginx-1.18.0/conf/fastcgi_params new file mode 100644 index 0000000..28decb9 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/fastcgi_params @@ -0,0 +1,25 @@ + +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; diff --git a/nginx-1.18.0/nginx-1.18.0/conf/koi-utf b/nginx-1.18.0/nginx-1.18.0/conf/koi-utf new file mode 100644 index 0000000..e7974ff --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/koi-utf @@ -0,0 +1,109 @@ + +# This map is not a full koi8-r <> utf8 map: it does not contain +# box-drawing and some other characters. Besides this map contains +# several koi8-u and Byelorussian letters which are not in koi8-r. +# If you need a full and standard map, use contrib/unicode2nginx/koi-utf +# map instead. + +charset_map koi8-r utf-8 { + + 80 E282AC ; # euro + + 95 E280A2 ; # bullet + + 9A C2A0 ; #   + + 9E C2B7 ; # · + + A3 D191 ; # small yo + A4 D194 ; # small Ukrainian ye + + A6 D196 ; # small Ukrainian i + A7 D197 ; # small Ukrainian yi + + AD D291 ; # small Ukrainian soft g + AE D19E ; # small Byelorussian short u + + B0 C2B0 ; # ° + + B3 D081 ; # capital YO + B4 D084 ; # capital Ukrainian YE + + B6 D086 ; # capital Ukrainian I + B7 D087 ; # capital Ukrainian YI + + B9 E28496 ; # numero sign + + BD D290 ; # capital Ukrainian soft G + BE D18E ; # capital Byelorussian short U + + BF C2A9 ; # (C) + + C0 D18E ; # small yu + C1 D0B0 ; # small a + C2 D0B1 ; # small b + C3 D186 ; # small ts + C4 D0B4 ; # small d + C5 D0B5 ; # small ye + C6 D184 ; # small f + C7 D0B3 ; # small g + C8 D185 ; # small kh + C9 D0B8 ; # small i + CA D0B9 ; # small j + CB D0BA ; # small k + CC D0BB ; # small l + CD D0BC ; # small m + CE D0BD ; # small n + CF D0BE ; # small o + + D0 D0BF ; # small p + D1 D18F ; # small ya + D2 D180 ; # small r + D3 D181 ; # small s + D4 D182 ; # small t + D5 D183 ; # small u + D6 D0B6 ; # small zh + D7 D0B2 ; # small v + D8 D18C ; # small soft sign + D9 D18B ; # small y + DA D0B7 ; # small z + DB D188 ; # small sh + DC D18D ; # small e + DD D189 ; # small shch + DE D187 ; # small ch + DF D18A ; # small hard sign + + E0 D0AE ; # capital YU + E1 D090 ; # capital A + E2 D091 ; # capital B + E3 D0A6 ; # capital TS + E4 D094 ; # capital D + E5 D095 ; # capital YE + E6 D0A4 ; # capital F + E7 D093 ; # capital G + E8 D0A5 ; # capital KH + E9 D098 ; # capital I + EA D099 ; # capital J + EB D09A ; # capital K + EC D09B ; # capital L + ED D09C ; # capital M + EE D09D ; # capital N + EF D09E ; # capital O + + F0 D09F ; # capital P + F1 D0AF ; # capital YA + F2 D0A0 ; # capital R + F3 D0A1 ; # capital S + F4 D0A2 ; # capital T + F5 D0A3 ; # capital U + F6 D096 ; # capital ZH + F7 D092 ; # capital V + F8 D0AC ; # capital soft sign + F9 D0AB ; # capital Y + FA D097 ; # capital Z + FB D0A8 ; # capital SH + FC D0AD ; # capital E + FD D0A9 ; # capital SHCH + FE D0A7 ; # capital CH + FF D0AA ; # capital hard sign +} diff --git a/nginx-1.18.0/nginx-1.18.0/conf/koi-win b/nginx-1.18.0/nginx-1.18.0/conf/koi-win new file mode 100644 index 0000000..72afabe --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/koi-win @@ -0,0 +1,103 @@ + +charset_map koi8-r windows-1251 { + + 80 88 ; # euro + + 95 95 ; # bullet + + 9A A0 ; #   + + 9E B7 ; # · + + A3 B8 ; # small yo + A4 BA ; # small Ukrainian ye + + A6 B3 ; # small Ukrainian i + A7 BF ; # small Ukrainian yi + + AD B4 ; # small Ukrainian soft g + AE A2 ; # small Byelorussian short u + + B0 B0 ; # ° + + B3 A8 ; # capital YO + B4 AA ; # capital Ukrainian YE + + B6 B2 ; # capital Ukrainian I + B7 AF ; # capital Ukrainian YI + + B9 B9 ; # numero sign + + BD A5 ; # capital Ukrainian soft G + BE A1 ; # capital Byelorussian short U + + BF A9 ; # (C) + + C0 FE ; # small yu + C1 E0 ; # small a + C2 E1 ; # small b + C3 F6 ; # small ts + C4 E4 ; # small d + C5 E5 ; # small ye + C6 F4 ; # small f + C7 E3 ; # small g + C8 F5 ; # small kh + C9 E8 ; # small i + CA E9 ; # small j + CB EA ; # small k + CC EB ; # small l + CD EC ; # small m + CE ED ; # small n + CF EE ; # small o + + D0 EF ; # small p + D1 FF ; # small ya + D2 F0 ; # small r + D3 F1 ; # small s + D4 F2 ; # small t + D5 F3 ; # small u + D6 E6 ; # small zh + D7 E2 ; # small v + D8 FC ; # small soft sign + D9 FB ; # small y + DA E7 ; # small z + DB F8 ; # small sh + DC FD ; # small e + DD F9 ; # small shch + DE F7 ; # small ch + DF FA ; # small hard sign + + E0 DE ; # capital YU + E1 C0 ; # capital A + E2 C1 ; # capital B + E3 D6 ; # capital TS + E4 C4 ; # capital D + E5 C5 ; # capital YE + E6 D4 ; # capital F + E7 C3 ; # capital G + E8 D5 ; # capital KH + E9 C8 ; # capital I + EA C9 ; # capital J + EB CA ; # capital K + EC CB ; # capital L + ED CC ; # capital M + EE CD ; # capital N + EF CE ; # capital O + + F0 CF ; # capital P + F1 DF ; # capital YA + F2 D0 ; # capital R + F3 D1 ; # capital S + F4 D2 ; # capital T + F5 D3 ; # capital U + F6 C6 ; # capital ZH + F7 C2 ; # capital V + F8 DC ; # capital soft sign + F9 DB ; # capital Y + FA C7 ; # capital Z + FB D8 ; # capital SH + FC DD ; # capital E + FD D9 ; # capital SHCH + FE D7 ; # capital CH + FF DA ; # capital hard sign +} diff --git a/nginx-1.18.0/nginx-1.18.0/conf/mime.types b/nginx-1.18.0/nginx-1.18.0/conf/mime.types new file mode 100644 index 0000000..2961256 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/mime.types @@ -0,0 +1,97 @@ + +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + + font/woff woff; + font/woff2 woff2; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.oasis.opendocument.graphics odg; + application/vnd.oasis.opendocument.presentation odp; + application/vnd.oasis.opendocument.spreadsheet ods; + application/vnd.oasis.opendocument.text odt; + application/vnd.openxmlformats-officedocument.presentationml.presentation + pptx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + xlsx; + application/vnd.openxmlformats-officedocument.wordprocessingml.document + docx; + application/vnd.wap.wmlc wmlc; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/nginx-1.18.0/nginx-1.18.0/conf/nginx.conf b/nginx-1.18.0/nginx-1.18.0/conf/nginx.conf new file mode 100644 index 0000000..ff4572f --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/nginx.conf @@ -0,0 +1,51 @@ + +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/json; + + sendfile on; + + keepalive_timeout 65; + + server { + listen 8080; + server_name localhost; + # 指定前端项目所在的位置 + location / { + root html/hmdp; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + + location /api { + default_type application/json; + #internal; + keepalive_timeout 30s; + keepalive_requests 1000; + #支持keep-alive + proxy_http_version 1.1; + rewrite /api(/.*) $1 break; + proxy_pass_request_headers on; + #more_clear_input_headers Accept-Encoding; + proxy_next_upstream error timeout; + proxy_pass http://127.0.0.1:8081; + #proxy_pass http://backend; + } + } + + upstream backend { + server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1; + #server 127.0.0.1:8082 max_fails=5 fail_timeout=10s weight=1; + } +} diff --git a/nginx-1.18.0/nginx-1.18.0/conf/scgi_params b/nginx-1.18.0/nginx-1.18.0/conf/scgi_params new file mode 100644 index 0000000..6d4ce4f --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/scgi_params @@ -0,0 +1,17 @@ + +scgi_param REQUEST_METHOD $request_method; +scgi_param REQUEST_URI $request_uri; +scgi_param QUERY_STRING $query_string; +scgi_param CONTENT_TYPE $content_type; + +scgi_param DOCUMENT_URI $document_uri; +scgi_param DOCUMENT_ROOT $document_root; +scgi_param SCGI 1; +scgi_param SERVER_PROTOCOL $server_protocol; +scgi_param REQUEST_SCHEME $scheme; +scgi_param HTTPS $https if_not_empty; + +scgi_param REMOTE_ADDR $remote_addr; +scgi_param REMOTE_PORT $remote_port; +scgi_param SERVER_PORT $server_port; +scgi_param SERVER_NAME $server_name; diff --git a/nginx-1.18.0/nginx-1.18.0/conf/uwsgi_params b/nginx-1.18.0/nginx-1.18.0/conf/uwsgi_params new file mode 100644 index 0000000..09c732c --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/uwsgi_params @@ -0,0 +1,17 @@ + +uwsgi_param QUERY_STRING $query_string; +uwsgi_param REQUEST_METHOD $request_method; +uwsgi_param CONTENT_TYPE $content_type; +uwsgi_param CONTENT_LENGTH $content_length; + +uwsgi_param REQUEST_URI $request_uri; +uwsgi_param PATH_INFO $document_uri; +uwsgi_param DOCUMENT_ROOT $document_root; +uwsgi_param SERVER_PROTOCOL $server_protocol; +uwsgi_param REQUEST_SCHEME $scheme; +uwsgi_param HTTPS $https if_not_empty; + +uwsgi_param REMOTE_ADDR $remote_addr; +uwsgi_param REMOTE_PORT $remote_port; +uwsgi_param SERVER_PORT $server_port; +uwsgi_param SERVER_NAME $server_name; diff --git a/nginx-1.18.0/nginx-1.18.0/conf/win-utf b/nginx-1.18.0/nginx-1.18.0/conf/win-utf new file mode 100644 index 0000000..ed8bc00 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/conf/win-utf @@ -0,0 +1,126 @@ + +# This map is not a full windows-1251 <> utf8 map: it does not +# contain Serbian and Macedonian letters. If you need a full map, +# use contrib/unicode2nginx/win-utf map instead. + +charset_map windows-1251 utf-8 { + + 82 E2809A ; # single low-9 quotation mark + + 84 E2809E ; # double low-9 quotation mark + 85 E280A6 ; # ellipsis + 86 E280A0 ; # dagger + 87 E280A1 ; # double dagger + 88 E282AC ; # euro + 89 E280B0 ; # per mille + + 91 E28098 ; # left single quotation mark + 92 E28099 ; # right single quotation mark + 93 E2809C ; # left double quotation mark + 94 E2809D ; # right double quotation mark + 95 E280A2 ; # bullet + 96 E28093 ; # en dash + 97 E28094 ; # em dash + + 99 E284A2 ; # trade mark sign + + A0 C2A0 ; #   + A1 D18E ; # capital Byelorussian short U + A2 D19E ; # small Byelorussian short u + + A4 C2A4 ; # currency sign + A5 D290 ; # capital Ukrainian soft G + A6 C2A6 ; # borken bar + A7 C2A7 ; # section sign + A8 D081 ; # capital YO + A9 C2A9 ; # (C) + AA D084 ; # capital Ukrainian YE + AB C2AB ; # left-pointing double angle quotation mark + AC C2AC ; # not sign + AD C2AD ; # soft hypen + AE C2AE ; # (R) + AF D087 ; # capital Ukrainian YI + + B0 C2B0 ; # ° + B1 C2B1 ; # plus-minus sign + B2 D086 ; # capital Ukrainian I + B3 D196 ; # small Ukrainian i + B4 D291 ; # small Ukrainian soft g + B5 C2B5 ; # micro sign + B6 C2B6 ; # pilcrow sign + B7 C2B7 ; # · + B8 D191 ; # small yo + B9 E28496 ; # numero sign + BA D194 ; # small Ukrainian ye + BB C2BB ; # right-pointing double angle quotation mark + + BF D197 ; # small Ukrainian yi + + C0 D090 ; # capital A + C1 D091 ; # capital B + C2 D092 ; # capital V + C3 D093 ; # capital G + C4 D094 ; # capital D + C5 D095 ; # capital YE + C6 D096 ; # capital ZH + C7 D097 ; # capital Z + C8 D098 ; # capital I + C9 D099 ; # capital J + CA D09A ; # capital K + CB D09B ; # capital L + CC D09C ; # capital M + CD D09D ; # capital N + CE D09E ; # capital O + CF D09F ; # capital P + + D0 D0A0 ; # capital R + D1 D0A1 ; # capital S + D2 D0A2 ; # capital T + D3 D0A3 ; # capital U + D4 D0A4 ; # capital F + D5 D0A5 ; # capital KH + D6 D0A6 ; # capital TS + D7 D0A7 ; # capital CH + D8 D0A8 ; # capital SH + D9 D0A9 ; # capital SHCH + DA D0AA ; # capital hard sign + DB D0AB ; # capital Y + DC D0AC ; # capital soft sign + DD D0AD ; # capital E + DE D0AE ; # capital YU + DF D0AF ; # capital YA + + E0 D0B0 ; # small a + E1 D0B1 ; # small b + E2 D0B2 ; # small v + E3 D0B3 ; # small g + E4 D0B4 ; # small d + E5 D0B5 ; # small ye + E6 D0B6 ; # small zh + E7 D0B7 ; # small z + E8 D0B8 ; # small i + E9 D0B9 ; # small j + EA D0BA ; # small k + EB D0BB ; # small l + EC D0BC ; # small m + ED D0BD ; # small n + EE D0BE ; # small o + EF D0BF ; # small p + + F0 D180 ; # small r + F1 D181 ; # small s + F2 D182 ; # small t + F3 D183 ; # small u + F4 D184 ; # small f + F5 D185 ; # small kh + F6 D186 ; # small ts + F7 D187 ; # small ch + F8 D188 ; # small sh + F9 D189 ; # small shch + FA D18A ; # small hard sign + FB D18B ; # small y + FC D18C ; # small soft sign + FD D18D ; # small e + FE D18E ; # small yu + FF D18F ; # small ya +} diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/README b/nginx-1.18.0/nginx-1.18.0/contrib/README new file mode 100644 index 0000000..fec4b20 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/README @@ -0,0 +1,21 @@ + +geo2nginx.pl by Andrei Nigmatulin + + The perl script to convert CSV geoip database ( free download + at http://www.maxmind.com/app/geoip_country ) to format, suitable + for use by the ngx_http_geo_module. + + +unicode2nginx by Maxim Dounin + + The perl script to convert unicode mappings ( available + at http://www.unicode.org/Public/MAPPINGS/ ) to the nginx + configuration file format. + Two generated full maps for windows-1251 and koi8-r. + + +vim by Evan Miller + + Syntax highlighting of nginx configuration for vim, to be + placed into ~/.vim/. + diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/geo2nginx.pl b/nginx-1.18.0/nginx-1.18.0/contrib/geo2nginx.pl new file mode 100644 index 0000000..bc8af46 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/geo2nginx.pl @@ -0,0 +1,58 @@ +#!/usr/bin/perl -w + +# (c) Andrei Nigmatulin, 2005 +# +# this script provided "as is", without any warranties. use it at your own risk. +# +# special thanx to Andrew Sitnikov for perl port +# +# this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country) +# to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx) +# +# for example, line with ip range +# +# "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation" +# +# will be converted to four subnetworks: +# +# 62.16.68.0/22 RU; +# 62.16.72.0/21 RU; +# 62.16.80.0/20 RU; +# 62.16.96.0/19 RU; + + +use warnings; +use strict; + +while( ){ + if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){ + print_subnets($1, $2, $3); + } +} + +sub print_subnets { + my ($a1, $a2, $c) = @_; + my $l; + while ($a1 <= $a2) { + for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){}; + print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n"; + $a1 += (1 << $l); + } +} + +sub long2ip { + my $ip = shift; + + my $str = 0; + + $str = ($ip & 255); + + $ip >>= 8; + $str = ($ip & 255).".$str"; + + $ip >>= 8; + $str = ($ip & 255).".$str"; + + $ip >>= 8; + $str = ($ip & 255).".$str"; +} diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/koi-utf b/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/koi-utf new file mode 100644 index 0000000..48853af --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/koi-utf @@ -0,0 +1,131 @@ +charset_map koi8-r utf-8 { + + 80 E29480 ; # BOX DRAWINGS LIGHT HORIZONTAL + 81 E29482 ; # BOX DRAWINGS LIGHT VERTICAL + 82 E2948C ; # BOX DRAWINGS LIGHT DOWN AND RIGHT + 83 E29490 ; # BOX DRAWINGS LIGHT DOWN AND LEFT + 84 E29494 ; # BOX DRAWINGS LIGHT UP AND RIGHT + 85 E29498 ; # BOX DRAWINGS LIGHT UP AND LEFT + 86 E2949C ; # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 87 E294A4 ; # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 88 E294AC ; # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 89 E294B4 ; # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 8A E294BC ; # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 8B E29680 ; # UPPER HALF BLOCK + 8C E29684 ; # LOWER HALF BLOCK + 8D E29688 ; # FULL BLOCK + 8E E2968C ; # LEFT HALF BLOCK + 8F E29690 ; # RIGHT HALF BLOCK + 90 E29691 ; # LIGHT SHADE + 91 E29692 ; # MEDIUM SHADE + 92 E29693 ; # DARK SHADE + 93 E28CA0 ; # TOP HALF INTEGRAL + 94 E296A0 ; # BLACK SQUARE + 95 E28899 ; # BULLET OPERATOR + 96 E2889A ; # SQUARE ROOT + 97 E28988 ; # ALMOST EQUAL TO + 98 E289A4 ; # LESS-THAN OR EQUAL TO + 99 E289A5 ; # GREATER-THAN OR EQUAL TO + 9A C2A0 ; # NO-BREAK SPACE + 9B E28CA1 ; # BOTTOM HALF INTEGRAL + 9C C2B0 ; # DEGREE SIGN + 9D C2B2 ; # SUPERSCRIPT TWO + 9E C2B7 ; # MIDDLE DOT + 9F C3B7 ; # DIVISION SIGN + A0 E29590 ; # BOX DRAWINGS DOUBLE HORIZONTAL + A1 E29591 ; # BOX DRAWINGS DOUBLE VERTICAL + A2 E29592 ; # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + A3 D191 ; # CYRILLIC SMALL LETTER IO + A4 E29593 ; # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + A5 E29594 ; # BOX DRAWINGS DOUBLE DOWN AND RIGHT + A6 E29595 ; # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + A7 E29596 ; # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + A8 E29597 ; # BOX DRAWINGS DOUBLE DOWN AND LEFT + A9 E29598 ; # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + AA E29599 ; # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + AB E2959A ; # BOX DRAWINGS DOUBLE UP AND RIGHT + AC E2959B ; # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + AD E2959C ; # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + AE E2959D ; # BOX DRAWINGS DOUBLE UP AND LEFT + AF E2959E ; # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + B0 E2959F ; # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + B1 E295A0 ; # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + B2 E295A1 ; # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B3 D081 ; # CYRILLIC CAPITAL LETTER IO + B4 E295A2 ; # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B5 E295A3 ; # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + B6 E295A4 ; # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + B7 E295A5 ; # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + B8 E295A6 ; # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + B9 E295A7 ; # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + BA E295A8 ; # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + BB E295A9 ; # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + BC E295AA ; # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + BD E295AB ; # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + BE E295AC ; # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + BF C2A9 ; # COPYRIGHT SIGN + C0 D18E ; # CYRILLIC SMALL LETTER YU + C1 D0B0 ; # CYRILLIC SMALL LETTER A + C2 D0B1 ; # CYRILLIC SMALL LETTER BE + C3 D186 ; # CYRILLIC SMALL LETTER TSE + C4 D0B4 ; # CYRILLIC SMALL LETTER DE + C5 D0B5 ; # CYRILLIC SMALL LETTER IE + C6 D184 ; # CYRILLIC SMALL LETTER EF + C7 D0B3 ; # CYRILLIC SMALL LETTER GHE + C8 D185 ; # CYRILLIC SMALL LETTER HA + C9 D0B8 ; # CYRILLIC SMALL LETTER I + CA D0B9 ; # CYRILLIC SMALL LETTER SHORT I + CB D0BA ; # CYRILLIC SMALL LETTER KA + CC D0BB ; # CYRILLIC SMALL LETTER EL + CD D0BC ; # CYRILLIC SMALL LETTER EM + CE D0BD ; # CYRILLIC SMALL LETTER EN + CF D0BE ; # CYRILLIC SMALL LETTER O + D0 D0BF ; # CYRILLIC SMALL LETTER PE + D1 D18F ; # CYRILLIC SMALL LETTER YA + D2 D180 ; # CYRILLIC SMALL LETTER ER + D3 D181 ; # CYRILLIC SMALL LETTER ES + D4 D182 ; # CYRILLIC SMALL LETTER TE + D5 D183 ; # CYRILLIC SMALL LETTER U + D6 D0B6 ; # CYRILLIC SMALL LETTER ZHE + D7 D0B2 ; # CYRILLIC SMALL LETTER VE + D8 D18C ; # CYRILLIC SMALL LETTER SOFT SIGN + D9 D18B ; # CYRILLIC SMALL LETTER YERU + DA D0B7 ; # CYRILLIC SMALL LETTER ZE + DB D188 ; # CYRILLIC SMALL LETTER SHA + DC D18D ; # CYRILLIC SMALL LETTER E + DD D189 ; # CYRILLIC SMALL LETTER SHCHA + DE D187 ; # CYRILLIC SMALL LETTER CHE + DF D18A ; # CYRILLIC SMALL LETTER HARD SIGN + E0 D0AE ; # CYRILLIC CAPITAL LETTER YU + E1 D090 ; # CYRILLIC CAPITAL LETTER A + E2 D091 ; # CYRILLIC CAPITAL LETTER BE + E3 D0A6 ; # CYRILLIC CAPITAL LETTER TSE + E4 D094 ; # CYRILLIC CAPITAL LETTER DE + E5 D095 ; # CYRILLIC CAPITAL LETTER IE + E6 D0A4 ; # CYRILLIC CAPITAL LETTER EF + E7 D093 ; # CYRILLIC CAPITAL LETTER GHE + E8 D0A5 ; # CYRILLIC CAPITAL LETTER HA + E9 D098 ; # CYRILLIC CAPITAL LETTER I + EA D099 ; # CYRILLIC CAPITAL LETTER SHORT I + EB D09A ; # CYRILLIC CAPITAL LETTER KA + EC D09B ; # CYRILLIC CAPITAL LETTER EL + ED D09C ; # CYRILLIC CAPITAL LETTER EM + EE D09D ; # CYRILLIC CAPITAL LETTER EN + EF D09E ; # CYRILLIC CAPITAL LETTER O + F0 D09F ; # CYRILLIC CAPITAL LETTER PE + F1 D0AF ; # CYRILLIC CAPITAL LETTER YA + F2 D0A0 ; # CYRILLIC CAPITAL LETTER ER + F3 D0A1 ; # CYRILLIC CAPITAL LETTER ES + F4 D0A2 ; # CYRILLIC CAPITAL LETTER TE + F5 D0A3 ; # CYRILLIC CAPITAL LETTER U + F6 D096 ; # CYRILLIC CAPITAL LETTER ZHE + F7 D092 ; # CYRILLIC CAPITAL LETTER VE + F8 D0AC ; # CYRILLIC CAPITAL LETTER SOFT SIGN + F9 D0AB ; # CYRILLIC CAPITAL LETTER YERU + FA D097 ; # CYRILLIC CAPITAL LETTER ZE + FB D0A8 ; # CYRILLIC CAPITAL LETTER SHA + FC D0AD ; # CYRILLIC CAPITAL LETTER E + FD D0A9 ; # CYRILLIC CAPITAL LETTER SHCHA + FE D0A7 ; # CYRILLIC CAPITAL LETTER CHE + FF D0AA ; # CYRILLIC CAPITAL LETTER HARD SIGN +} diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/unicode-to-nginx.pl b/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/unicode-to-nginx.pl new file mode 100644 index 0000000..d113fed --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/unicode-to-nginx.pl @@ -0,0 +1,48 @@ +#!/usr/bin/perl -w + +# Convert unicode mappings to nginx configuration file format. + +# You may find useful mappings in various places, including +# unicode.org official site: +# +# http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT +# http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT + +# Needs perl 5.6 or later. + +# Written by Maxim Dounin, mdounin@mdounin.ru + +############################################################################### + +require 5.006; + +while (<>) { + # Skip comments and empty lines + + next if /^#/; + next if /^\s*$/; + chomp; + + # Convert mappings + + if (/^\s*0x(..)\s*0x(....)\s*(#.*)/) { + # Mapping "#" + my $cs_code = $1; + my $un_code = $2; + my $un_name = $3; + + # Produce UTF-8 sequence from character code; + + my $un_utf8 = join('', + map { sprintf("%02X", $_) } + unpack("U0C*", pack("U", hex($un_code))) + ); + + print " $cs_code $un_utf8 ; $un_name\n"; + + } else { + warn "Unrecognized line: '$_'"; + } +} + +############################################################################### diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/win-utf b/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/win-utf new file mode 100644 index 0000000..af9f9aa --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/unicode2nginx/win-utf @@ -0,0 +1,130 @@ +charset_map windows-1251 utf-8 { + + 80 D082 ; #CYRILLIC CAPITAL LETTER DJE + 81 D083 ; #CYRILLIC CAPITAL LETTER GJE + 82 E2809A ; #SINGLE LOW-9 QUOTATION MARK + 83 D193 ; #CYRILLIC SMALL LETTER GJE + 84 E2809E ; #DOUBLE LOW-9 QUOTATION MARK + 85 E280A6 ; #HORIZONTAL ELLIPSIS + 86 E280A0 ; #DAGGER + 87 E280A1 ; #DOUBLE DAGGER + 88 E282AC ; #EURO SIGN + 89 E280B0 ; #PER MILLE SIGN + 8A D089 ; #CYRILLIC CAPITAL LETTER LJE + 8B E280B9 ; #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C D08A ; #CYRILLIC CAPITAL LETTER NJE + 8D D08C ; #CYRILLIC CAPITAL LETTER KJE + 8E D08B ; #CYRILLIC CAPITAL LETTER TSHE + 8F D08F ; #CYRILLIC CAPITAL LETTER DZHE + 90 D192 ; #CYRILLIC SMALL LETTER DJE + 91 E28098 ; #LEFT SINGLE QUOTATION MARK + 92 E28099 ; #RIGHT SINGLE QUOTATION MARK + 93 E2809C ; #LEFT DOUBLE QUOTATION MARK + 94 E2809D ; #RIGHT DOUBLE QUOTATION MARK + 95 E280A2 ; #BULLET + 96 E28093 ; #EN DASH + 97 E28094 ; #EM DASH + 99 E284A2 ; #TRADE MARK SIGN + 9A D199 ; #CYRILLIC SMALL LETTER LJE + 9B E280BA ; #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C D19A ; #CYRILLIC SMALL LETTER NJE + 9D D19C ; #CYRILLIC SMALL LETTER KJE + 9E D19B ; #CYRILLIC SMALL LETTER TSHE + 9F D19F ; #CYRILLIC SMALL LETTER DZHE + A0 C2A0 ; #NO-BREAK SPACE + A1 D08E ; #CYRILLIC CAPITAL LETTER SHORT U + A2 D19E ; #CYRILLIC SMALL LETTER SHORT U + A3 D088 ; #CYRILLIC CAPITAL LETTER JE + A4 C2A4 ; #CURRENCY SIGN + A5 D290 ; #CYRILLIC CAPITAL LETTER GHE WITH UPTURN + A6 C2A6 ; #BROKEN BAR + A7 C2A7 ; #SECTION SIGN + A8 D081 ; #CYRILLIC CAPITAL LETTER IO + A9 C2A9 ; #COPYRIGHT SIGN + AA D084 ; #CYRILLIC CAPITAL LETTER UKRAINIAN IE + AB C2AB ; #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC C2AC ; #NOT SIGN + AD C2AD ; #SOFT HYPHEN + AE C2AE ; #REGISTERED SIGN + AF D087 ; #CYRILLIC CAPITAL LETTER YI + B0 C2B0 ; #DEGREE SIGN + B1 C2B1 ; #PLUS-MINUS SIGN + B2 D086 ; #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + B3 D196 ; #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + B4 D291 ; #CYRILLIC SMALL LETTER GHE WITH UPTURN + B5 C2B5 ; #MICRO SIGN + B6 C2B6 ; #PILCROW SIGN + B7 C2B7 ; #MIDDLE DOT + B8 D191 ; #CYRILLIC SMALL LETTER IO + B9 E28496 ; #NUMERO SIGN + BA D194 ; #CYRILLIC SMALL LETTER UKRAINIAN IE + BB C2BB ; #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC D198 ; #CYRILLIC SMALL LETTER JE + BD D085 ; #CYRILLIC CAPITAL LETTER DZE + BE D195 ; #CYRILLIC SMALL LETTER DZE + BF D197 ; #CYRILLIC SMALL LETTER YI + C0 D090 ; #CYRILLIC CAPITAL LETTER A + C1 D091 ; #CYRILLIC CAPITAL LETTER BE + C2 D092 ; #CYRILLIC CAPITAL LETTER VE + C3 D093 ; #CYRILLIC CAPITAL LETTER GHE + C4 D094 ; #CYRILLIC CAPITAL LETTER DE + C5 D095 ; #CYRILLIC CAPITAL LETTER IE + C6 D096 ; #CYRILLIC CAPITAL LETTER ZHE + C7 D097 ; #CYRILLIC CAPITAL LETTER ZE + C8 D098 ; #CYRILLIC CAPITAL LETTER I + C9 D099 ; #CYRILLIC CAPITAL LETTER SHORT I + CA D09A ; #CYRILLIC CAPITAL LETTER KA + CB D09B ; #CYRILLIC CAPITAL LETTER EL + CC D09C ; #CYRILLIC CAPITAL LETTER EM + CD D09D ; #CYRILLIC CAPITAL LETTER EN + CE D09E ; #CYRILLIC CAPITAL LETTER O + CF D09F ; #CYRILLIC CAPITAL LETTER PE + D0 D0A0 ; #CYRILLIC CAPITAL LETTER ER + D1 D0A1 ; #CYRILLIC CAPITAL LETTER ES + D2 D0A2 ; #CYRILLIC CAPITAL LETTER TE + D3 D0A3 ; #CYRILLIC CAPITAL LETTER U + D4 D0A4 ; #CYRILLIC CAPITAL LETTER EF + D5 D0A5 ; #CYRILLIC CAPITAL LETTER HA + D6 D0A6 ; #CYRILLIC CAPITAL LETTER TSE + D7 D0A7 ; #CYRILLIC CAPITAL LETTER CHE + D8 D0A8 ; #CYRILLIC CAPITAL LETTER SHA + D9 D0A9 ; #CYRILLIC CAPITAL LETTER SHCHA + DA D0AA ; #CYRILLIC CAPITAL LETTER HARD SIGN + DB D0AB ; #CYRILLIC CAPITAL LETTER YERU + DC D0AC ; #CYRILLIC CAPITAL LETTER SOFT SIGN + DD D0AD ; #CYRILLIC CAPITAL LETTER E + DE D0AE ; #CYRILLIC CAPITAL LETTER YU + DF D0AF ; #CYRILLIC CAPITAL LETTER YA + E0 D0B0 ; #CYRILLIC SMALL LETTER A + E1 D0B1 ; #CYRILLIC SMALL LETTER BE + E2 D0B2 ; #CYRILLIC SMALL LETTER VE + E3 D0B3 ; #CYRILLIC SMALL LETTER GHE + E4 D0B4 ; #CYRILLIC SMALL LETTER DE + E5 D0B5 ; #CYRILLIC SMALL LETTER IE + E6 D0B6 ; #CYRILLIC SMALL LETTER ZHE + E7 D0B7 ; #CYRILLIC SMALL LETTER ZE + E8 D0B8 ; #CYRILLIC SMALL LETTER I + E9 D0B9 ; #CYRILLIC SMALL LETTER SHORT I + EA D0BA ; #CYRILLIC SMALL LETTER KA + EB D0BB ; #CYRILLIC SMALL LETTER EL + EC D0BC ; #CYRILLIC SMALL LETTER EM + ED D0BD ; #CYRILLIC SMALL LETTER EN + EE D0BE ; #CYRILLIC SMALL LETTER O + EF D0BF ; #CYRILLIC SMALL LETTER PE + F0 D180 ; #CYRILLIC SMALL LETTER ER + F1 D181 ; #CYRILLIC SMALL LETTER ES + F2 D182 ; #CYRILLIC SMALL LETTER TE + F3 D183 ; #CYRILLIC SMALL LETTER U + F4 D184 ; #CYRILLIC SMALL LETTER EF + F5 D185 ; #CYRILLIC SMALL LETTER HA + F6 D186 ; #CYRILLIC SMALL LETTER TSE + F7 D187 ; #CYRILLIC SMALL LETTER CHE + F8 D188 ; #CYRILLIC SMALL LETTER SHA + F9 D189 ; #CYRILLIC SMALL LETTER SHCHA + FA D18A ; #CYRILLIC SMALL LETTER HARD SIGN + FB D18B ; #CYRILLIC SMALL LETTER YERU + FC D18C ; #CYRILLIC SMALL LETTER SOFT SIGN + FD D18D ; #CYRILLIC SMALL LETTER E + FE D18E ; #CYRILLIC SMALL LETTER YU + FF D18F ; #CYRILLIC SMALL LETTER YA +} diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/vim/ftdetect/nginx.vim b/nginx-1.18.0/nginx-1.18.0/contrib/vim/ftdetect/nginx.vim new file mode 100644 index 0000000..3ae470d --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/vim/ftdetect/nginx.vim @@ -0,0 +1,4 @@ +au BufRead,BufNewFile *.nginx set ft=nginx +au BufRead,BufNewFile */etc/nginx/* set ft=nginx +au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx +au BufRead,BufNewFile nginx.conf set ft=nginx diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/vim/ftplugin/nginx.vim b/nginx-1.18.0/nginx-1.18.0/contrib/vim/ftplugin/nginx.vim new file mode 100644 index 0000000..463eea9 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/vim/ftplugin/nginx.vim @@ -0,0 +1 @@ +setlocal commentstring=#\ %s diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/vim/indent/nginx.vim b/nginx-1.18.0/nginx-1.18.0/contrib/vim/indent/nginx.vim new file mode 100644 index 0000000..8601366 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/vim/indent/nginx.vim @@ -0,0 +1,11 @@ +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr= + +" cindent actually works for nginx' simple file structure +setlocal cindent +" Just make sure that the comments are not reset as defs would be. +setlocal cinkeys-=0# diff --git a/nginx-1.18.0/nginx-1.18.0/contrib/vim/syntax/nginx.vim b/nginx-1.18.0/nginx-1.18.0/contrib/vim/syntax/nginx.vim new file mode 100644 index 0000000..1a3a7b7 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/contrib/vim/syntax/nginx.vim @@ -0,0 +1,2338 @@ +" Vim syntax file +" Language: nginx.conf + +if exists("b:current_syntax") + finish +end + +" general syntax + +if has("patch-7.4.1142") + " except control characters, ";", "{", and "}" + syn iskeyword 33-58,60-122,124,126-255 +endif + +syn match ngxName '\([^;{} \t\\]\|\\.\)\+' + \ contains=@ngxDirectives + \ nextgroup=@ngxParams skipwhite skipempty +syn match ngxParam '\(\${\|[^;{ \t\\]\|\\.\)\+' + \ contained + \ contains=ngxVariable + \ nextgroup=@ngxParams skipwhite skipempty +syn region ngxString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ + \ contains=ngxVariableString + \ nextgroup=@ngxParams skipwhite skipempty +syn match ngxParamComment '#.*$' + \ nextgroup=@ngxParams skipwhite skipempty +syn match ngxSemicolon ';' contained +syn region ngxBlock start=+{+ end=+}+ contained + \ contains=@ngxTopLevel +syn match ngxComment '#.*$' + +syn match ngxVariable '\$\(\w\+\|{\w\+}\)' contained +syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained + +syn cluster ngxTopLevel + \ contains=ngxName,ngxString,ngxComment +syn cluster ngxDirectives + \ contains=ngxDirective,ngxDirectiveBlock,ngxDirectiveImportant + \ add=ngxDirectiveControl,ngxDirectiveError,ngxDirectiveDeprecated + \ add=ngxDirectiveThirdParty,ngxDirectiveThirdPartyDeprecated +syn cluster ngxParams + \ contains=ngxParam,ngxString,ngxParamComment,ngxSemicolon,ngxBlock + +" boolean parameters + +syn keyword ngxBoolean contained on off + \ nextgroup=@ngxParams skipwhite skipempty +syn cluster ngxParams add=ngxBoolean + +" listen directive + +syn cluster ngxTopLevel add=ngxDirectiveListen +syn keyword ngxDirectiveListen listen + \ nextgroup=@ngxListenParams skipwhite skipempty +syn match ngxListenParam '\(\${\|[^;{ \t\\]\|\\.\)\+' + \ contained + \ nextgroup=@ngxListenParams skipwhite skipempty +syn region ngxListenString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ + \ contained + \ nextgroup=@ngxListenParams skipwhite skipempty +syn match ngxListenComment '#.*$' + \ contained + \ nextgroup=@ngxListenParams skipwhite skipempty +syn keyword ngxListenOptions contained + \ default_server ssl http2 proxy_protocol + \ setfib fastopen backlog rcvbuf sndbuf accept_filter deferred bind + \ ipv6only reuseport so_keepalive + \ nextgroup=@ngxListenParams skipwhite skipempty +syn keyword ngxListenOptionsDeprecated contained + \ spdy + \ nextgroup=@ngxListenParams skipwhite skipempty +syn cluster ngxListenParams + \ contains=ngxListenParam,ngxListenString,ngxListenComment + \ add=ngxListenOptions,ngxListenOptionsDeprecated + +syn keyword ngxDirectiveBlock contained http +syn keyword ngxDirectiveBlock contained stream +syn keyword ngxDirectiveBlock contained mail +syn keyword ngxDirectiveBlock contained events +syn keyword ngxDirectiveBlock contained server +syn keyword ngxDirectiveBlock contained types +syn keyword ngxDirectiveBlock contained location +syn keyword ngxDirectiveBlock contained upstream +syn keyword ngxDirectiveBlock contained charset_map +syn keyword ngxDirectiveBlock contained limit_except +syn keyword ngxDirectiveBlock contained if +syn keyword ngxDirectiveBlock contained geo +syn keyword ngxDirectiveBlock contained map +syn keyword ngxDirectiveBlock contained split_clients +syn keyword ngxDirectiveBlock contained match + +syn keyword ngxDirectiveImportant contained include +syn keyword ngxDirectiveImportant contained root +syn keyword ngxDirectiveImportant contained server_name +syn keyword ngxDirectiveImportant contained internal +syn keyword ngxDirectiveImportant contained proxy_pass +syn keyword ngxDirectiveImportant contained memcached_pass +syn keyword ngxDirectiveImportant contained fastcgi_pass +syn keyword ngxDirectiveImportant contained scgi_pass +syn keyword ngxDirectiveImportant contained uwsgi_pass +syn keyword ngxDirectiveImportant contained try_files + +syn keyword ngxDirectiveControl contained break +syn keyword ngxDirectiveControl contained return +syn keyword ngxDirectiveControl contained rewrite +syn keyword ngxDirectiveControl contained set + +syn keyword ngxDirectiveError contained error_page +syn keyword ngxDirectiveError contained post_action + +syn keyword ngxDirectiveDeprecated contained limit_zone +syn keyword ngxDirectiveDeprecated contained proxy_downstream_buffer +syn keyword ngxDirectiveDeprecated contained proxy_upstream_buffer +syn keyword ngxDirectiveDeprecated contained spdy_chunk_size +syn keyword ngxDirectiveDeprecated contained spdy_headers_comp +syn keyword ngxDirectiveDeprecated contained spdy_keepalive_timeout +syn keyword ngxDirectiveDeprecated contained spdy_max_concurrent_streams +syn keyword ngxDirectiveDeprecated contained spdy_pool_size +syn keyword ngxDirectiveDeprecated contained spdy_recv_buffer_size +syn keyword ngxDirectiveDeprecated contained spdy_recv_timeout +syn keyword ngxDirectiveDeprecated contained spdy_streams_index_size +syn keyword ngxDirectiveDeprecated contained ssl +syn keyword ngxDirectiveDeprecated contained upstream_conf + +syn keyword ngxDirective contained absolute_redirect +syn keyword ngxDirective contained accept_mutex +syn keyword ngxDirective contained accept_mutex_delay +syn keyword ngxDirective contained acceptex_read +syn keyword ngxDirective contained access_log +syn keyword ngxDirective contained add_after_body +syn keyword ngxDirective contained add_before_body +syn keyword ngxDirective contained add_header +syn keyword ngxDirective contained add_trailer +syn keyword ngxDirective contained addition_types +syn keyword ngxDirective contained aio +syn keyword ngxDirective contained aio_write +syn keyword ngxDirective contained alias +syn keyword ngxDirective contained allow +syn keyword ngxDirective contained ancient_browser +syn keyword ngxDirective contained ancient_browser_value +syn keyword ngxDirective contained api +syn keyword ngxDirective contained auth_basic +syn keyword ngxDirective contained auth_basic_user_file +syn keyword ngxDirective contained auth_http +syn keyword ngxDirective contained auth_http_header +syn keyword ngxDirective contained auth_http_pass_client_cert +syn keyword ngxDirective contained auth_http_timeout +syn keyword ngxDirective contained auth_jwt +syn keyword ngxDirective contained auth_jwt_claim_set +syn keyword ngxDirective contained auth_jwt_header_set +syn keyword ngxDirective contained auth_jwt_key_file +syn keyword ngxDirective contained auth_jwt_key_request +syn keyword ngxDirective contained auth_jwt_leeway +syn keyword ngxDirective contained auth_request +syn keyword ngxDirective contained auth_request_set +syn keyword ngxDirective contained autoindex +syn keyword ngxDirective contained autoindex_exact_size +syn keyword ngxDirective contained autoindex_format +syn keyword ngxDirective contained autoindex_localtime +syn keyword ngxDirective contained charset +syn keyword ngxDirective contained charset_types +syn keyword ngxDirective contained chunked_transfer_encoding +syn keyword ngxDirective contained client_body_buffer_size +syn keyword ngxDirective contained client_body_in_file_only +syn keyword ngxDirective contained client_body_in_single_buffer +syn keyword ngxDirective contained client_body_temp_path +syn keyword ngxDirective contained client_body_timeout +syn keyword ngxDirective contained client_header_buffer_size +syn keyword ngxDirective contained client_header_timeout +syn keyword ngxDirective contained client_max_body_size +syn keyword ngxDirective contained connection_pool_size +syn keyword ngxDirective contained create_full_put_path +syn keyword ngxDirective contained daemon +syn keyword ngxDirective contained dav_access +syn keyword ngxDirective contained dav_methods +syn keyword ngxDirective contained debug_connection +syn keyword ngxDirective contained debug_points +syn keyword ngxDirective contained default_type +syn keyword ngxDirective contained degradation +syn keyword ngxDirective contained degrade +syn keyword ngxDirective contained deny +syn keyword ngxDirective contained devpoll_changes +syn keyword ngxDirective contained devpoll_events +syn keyword ngxDirective contained directio +syn keyword ngxDirective contained directio_alignment +syn keyword ngxDirective contained disable_symlinks +syn keyword ngxDirective contained empty_gif +syn keyword ngxDirective contained env +syn keyword ngxDirective contained epoll_events +syn keyword ngxDirective contained error_log +syn keyword ngxDirective contained etag +syn keyword ngxDirective contained eventport_events +syn keyword ngxDirective contained expires +syn keyword ngxDirective contained f4f +syn keyword ngxDirective contained f4f_buffer_size +syn keyword ngxDirective contained fastcgi_bind +syn keyword ngxDirective contained fastcgi_buffer_size +syn keyword ngxDirective contained fastcgi_buffering +syn keyword ngxDirective contained fastcgi_buffers +syn keyword ngxDirective contained fastcgi_busy_buffers_size +syn keyword ngxDirective contained fastcgi_cache +syn keyword ngxDirective contained fastcgi_cache_background_update +syn keyword ngxDirective contained fastcgi_cache_bypass +syn keyword ngxDirective contained fastcgi_cache_key +syn keyword ngxDirective contained fastcgi_cache_lock +syn keyword ngxDirective contained fastcgi_cache_lock_age +syn keyword ngxDirective contained fastcgi_cache_lock_timeout +syn keyword ngxDirective contained fastcgi_cache_max_range_offset +syn keyword ngxDirective contained fastcgi_cache_methods +syn keyword ngxDirective contained fastcgi_cache_min_uses +syn keyword ngxDirective contained fastcgi_cache_path +syn keyword ngxDirective contained fastcgi_cache_purge +syn keyword ngxDirective contained fastcgi_cache_revalidate +syn keyword ngxDirective contained fastcgi_cache_use_stale +syn keyword ngxDirective contained fastcgi_cache_valid +syn keyword ngxDirective contained fastcgi_catch_stderr +syn keyword ngxDirective contained fastcgi_connect_timeout +syn keyword ngxDirective contained fastcgi_force_ranges +syn keyword ngxDirective contained fastcgi_hide_header +syn keyword ngxDirective contained fastcgi_ignore_client_abort +syn keyword ngxDirective contained fastcgi_ignore_headers +syn keyword ngxDirective contained fastcgi_index +syn keyword ngxDirective contained fastcgi_intercept_errors +syn keyword ngxDirective contained fastcgi_keep_conn +syn keyword ngxDirective contained fastcgi_limit_rate +syn keyword ngxDirective contained fastcgi_max_temp_file_size +syn keyword ngxDirective contained fastcgi_next_upstream +syn keyword ngxDirective contained fastcgi_next_upstream_timeout +syn keyword ngxDirective contained fastcgi_next_upstream_tries +syn keyword ngxDirective contained fastcgi_no_cache +syn keyword ngxDirective contained fastcgi_param +syn keyword ngxDirective contained fastcgi_pass_header +syn keyword ngxDirective contained fastcgi_pass_request_body +syn keyword ngxDirective contained fastcgi_pass_request_headers +syn keyword ngxDirective contained fastcgi_read_timeout +syn keyword ngxDirective contained fastcgi_request_buffering +syn keyword ngxDirective contained fastcgi_send_lowat +syn keyword ngxDirective contained fastcgi_send_timeout +syn keyword ngxDirective contained fastcgi_socket_keepalive +syn keyword ngxDirective contained fastcgi_split_path_info +syn keyword ngxDirective contained fastcgi_store +syn keyword ngxDirective contained fastcgi_store_access +syn keyword ngxDirective contained fastcgi_temp_file_write_size +syn keyword ngxDirective contained fastcgi_temp_path +syn keyword ngxDirective contained flv +syn keyword ngxDirective contained geoip_city +syn keyword ngxDirective contained geoip_country +syn keyword ngxDirective contained geoip_org +syn keyword ngxDirective contained geoip_proxy +syn keyword ngxDirective contained geoip_proxy_recursive +syn keyword ngxDirective contained google_perftools_profiles +syn keyword ngxDirective contained grpc_bind +syn keyword ngxDirective contained grpc_buffer_size +syn keyword ngxDirective contained grpc_connect_timeout +syn keyword ngxDirective contained grpc_hide_header +syn keyword ngxDirective contained grpc_ignore_headers +syn keyword ngxDirective contained grpc_intercept_errors +syn keyword ngxDirective contained grpc_next_upstream +syn keyword ngxDirective contained grpc_next_upstream_timeout +syn keyword ngxDirective contained grpc_next_upstream_tries +syn keyword ngxDirective contained grpc_pass +syn keyword ngxDirective contained grpc_pass_header +syn keyword ngxDirective contained grpc_read_timeout +syn keyword ngxDirective contained grpc_send_timeout +syn keyword ngxDirective contained grpc_set_header +syn keyword ngxDirective contained grpc_socket_keepalive +syn keyword ngxDirective contained grpc_ssl_certificate +syn keyword ngxDirective contained grpc_ssl_certificate_key +syn keyword ngxDirective contained grpc_ssl_ciphers +syn keyword ngxDirective contained grpc_ssl_crl +syn keyword ngxDirective contained grpc_ssl_name +syn keyword ngxDirective contained grpc_ssl_password_file +syn keyword ngxDirective contained grpc_ssl_protocols +syn keyword ngxDirective contained grpc_ssl_server_name +syn keyword ngxDirective contained grpc_ssl_session_reuse +syn keyword ngxDirective contained grpc_ssl_trusted_certificate +syn keyword ngxDirective contained grpc_ssl_verify +syn keyword ngxDirective contained grpc_ssl_verify_depth +syn keyword ngxDirective contained gunzip +syn keyword ngxDirective contained gunzip_buffers +syn keyword ngxDirective contained gzip +syn keyword ngxDirective contained gzip_buffers +syn keyword ngxDirective contained gzip_comp_level +syn keyword ngxDirective contained gzip_disable +syn keyword ngxDirective contained gzip_hash +syn keyword ngxDirective contained gzip_http_version +syn keyword ngxDirective contained gzip_min_length +syn keyword ngxDirective contained gzip_no_buffer +syn keyword ngxDirective contained gzip_proxied +syn keyword ngxDirective contained gzip_static +syn keyword ngxDirective contained gzip_types +syn keyword ngxDirective contained gzip_vary +syn keyword ngxDirective contained gzip_window +syn keyword ngxDirective contained hash +syn keyword ngxDirective contained health_check +syn keyword ngxDirective contained health_check_timeout +syn keyword ngxDirective contained hls +syn keyword ngxDirective contained hls_buffers +syn keyword ngxDirective contained hls_forward_args +syn keyword ngxDirective contained hls_fragment +syn keyword ngxDirective contained hls_mp4_buffer_size +syn keyword ngxDirective contained hls_mp4_max_buffer_size +syn keyword ngxDirective contained http2_body_preread_size +syn keyword ngxDirective contained http2_chunk_size +syn keyword ngxDirective contained http2_idle_timeout +syn keyword ngxDirective contained http2_max_concurrent_pushes +syn keyword ngxDirective contained http2_max_concurrent_streams +syn keyword ngxDirective contained http2_max_field_size +syn keyword ngxDirective contained http2_max_header_size +syn keyword ngxDirective contained http2_max_requests +syn keyword ngxDirective contained http2_pool_size +syn keyword ngxDirective contained http2_push +syn keyword ngxDirective contained http2_push_preload +syn keyword ngxDirective contained http2_recv_buffer_size +syn keyword ngxDirective contained http2_recv_timeout +syn keyword ngxDirective contained http2_streams_index_size +syn keyword ngxDirective contained if_modified_since +syn keyword ngxDirective contained ignore_invalid_headers +syn keyword ngxDirective contained image_filter +syn keyword ngxDirective contained image_filter_buffer +syn keyword ngxDirective contained image_filter_interlace +syn keyword ngxDirective contained image_filter_jpeg_quality +syn keyword ngxDirective contained image_filter_sharpen +syn keyword ngxDirective contained image_filter_transparency +syn keyword ngxDirective contained image_filter_webp_quality +syn keyword ngxDirective contained imap_auth +syn keyword ngxDirective contained imap_capabilities +syn keyword ngxDirective contained imap_client_buffer +syn keyword ngxDirective contained index +syn keyword ngxDirective contained iocp_threads +syn keyword ngxDirective contained ip_hash +syn keyword ngxDirective contained js_access +syn keyword ngxDirective contained js_content +syn keyword ngxDirective contained js_filter +syn keyword ngxDirective contained js_include +syn keyword ngxDirective contained js_path +syn keyword ngxDirective contained js_preread +syn keyword ngxDirective contained js_set +syn keyword ngxDirective contained keepalive +syn keyword ngxDirective contained keepalive_disable +syn keyword ngxDirective contained keepalive_requests +syn keyword ngxDirective contained keepalive_timeout +syn keyword ngxDirective contained keyval +syn keyword ngxDirective contained keyval_zone +syn keyword ngxDirective contained kqueue_changes +syn keyword ngxDirective contained kqueue_events +syn keyword ngxDirective contained large_client_header_buffers +syn keyword ngxDirective contained least_conn +syn keyword ngxDirective contained least_time +syn keyword ngxDirective contained limit_conn +syn keyword ngxDirective contained limit_conn_log_level +syn keyword ngxDirective contained limit_conn_status +syn keyword ngxDirective contained limit_conn_zone +syn keyword ngxDirective contained limit_rate +syn keyword ngxDirective contained limit_rate_after +syn keyword ngxDirective contained limit_req +syn keyword ngxDirective contained limit_req_dry_run +syn keyword ngxDirective contained limit_req_log_level +syn keyword ngxDirective contained limit_req_status +syn keyword ngxDirective contained limit_req_zone +syn keyword ngxDirective contained lingering_close +syn keyword ngxDirective contained lingering_time +syn keyword ngxDirective contained lingering_timeout +syn keyword ngxDirective contained load_module +syn keyword ngxDirective contained lock_file +syn keyword ngxDirective contained log_format +syn keyword ngxDirective contained log_not_found +syn keyword ngxDirective contained log_subrequest +syn keyword ngxDirective contained map_hash_bucket_size +syn keyword ngxDirective contained map_hash_max_size +syn keyword ngxDirective contained master_process +syn keyword ngxDirective contained max_ranges +syn keyword ngxDirective contained memcached_bind +syn keyword ngxDirective contained memcached_buffer_size +syn keyword ngxDirective contained memcached_connect_timeout +syn keyword ngxDirective contained memcached_force_ranges +syn keyword ngxDirective contained memcached_gzip_flag +syn keyword ngxDirective contained memcached_next_upstream +syn keyword ngxDirective contained memcached_next_upstream_timeout +syn keyword ngxDirective contained memcached_next_upstream_tries +syn keyword ngxDirective contained memcached_read_timeout +syn keyword ngxDirective contained memcached_send_timeout +syn keyword ngxDirective contained memcached_socket_keepalive +syn keyword ngxDirective contained merge_slashes +syn keyword ngxDirective contained min_delete_depth +syn keyword ngxDirective contained mirror +syn keyword ngxDirective contained mirror_request_body +syn keyword ngxDirective contained modern_browser +syn keyword ngxDirective contained modern_browser_value +syn keyword ngxDirective contained mp4 +syn keyword ngxDirective contained mp4_buffer_size +syn keyword ngxDirective contained mp4_limit_rate +syn keyword ngxDirective contained mp4_limit_rate_after +syn keyword ngxDirective contained mp4_max_buffer_size +syn keyword ngxDirective contained msie_padding +syn keyword ngxDirective contained msie_refresh +syn keyword ngxDirective contained multi_accept +syn keyword ngxDirective contained ntlm +syn keyword ngxDirective contained open_file_cache +syn keyword ngxDirective contained open_file_cache_errors +syn keyword ngxDirective contained open_file_cache_events +syn keyword ngxDirective contained open_file_cache_min_uses +syn keyword ngxDirective contained open_file_cache_valid +syn keyword ngxDirective contained open_log_file_cache +syn keyword ngxDirective contained output_buffers +syn keyword ngxDirective contained override_charset +syn keyword ngxDirective contained pcre_jit +syn keyword ngxDirective contained perl +syn keyword ngxDirective contained perl_modules +syn keyword ngxDirective contained perl_require +syn keyword ngxDirective contained perl_set +syn keyword ngxDirective contained pid +syn keyword ngxDirective contained pop3_auth +syn keyword ngxDirective contained pop3_capabilities +syn keyword ngxDirective contained port_in_redirect +syn keyword ngxDirective contained post_acceptex +syn keyword ngxDirective contained postpone_gzipping +syn keyword ngxDirective contained postpone_output +syn keyword ngxDirective contained preread_buffer_size +syn keyword ngxDirective contained preread_timeout +syn keyword ngxDirective contained protocol +syn keyword ngxDirective contained proxy +syn keyword ngxDirective contained proxy_bind +syn keyword ngxDirective contained proxy_buffer +syn keyword ngxDirective contained proxy_buffer_size +syn keyword ngxDirective contained proxy_buffering +syn keyword ngxDirective contained proxy_buffers +syn keyword ngxDirective contained proxy_busy_buffers_size +syn keyword ngxDirective contained proxy_cache +syn keyword ngxDirective contained proxy_cache_background_update +syn keyword ngxDirective contained proxy_cache_bypass +syn keyword ngxDirective contained proxy_cache_convert_head +syn keyword ngxDirective contained proxy_cache_key +syn keyword ngxDirective contained proxy_cache_lock +syn keyword ngxDirective contained proxy_cache_lock_age +syn keyword ngxDirective contained proxy_cache_lock_timeout +syn keyword ngxDirective contained proxy_cache_max_range_offset +syn keyword ngxDirective contained proxy_cache_methods +syn keyword ngxDirective contained proxy_cache_min_uses +syn keyword ngxDirective contained proxy_cache_path +syn keyword ngxDirective contained proxy_cache_purge +syn keyword ngxDirective contained proxy_cache_revalidate +syn keyword ngxDirective contained proxy_cache_use_stale +syn keyword ngxDirective contained proxy_cache_valid +syn keyword ngxDirective contained proxy_connect_timeout +syn keyword ngxDirective contained proxy_cookie_domain +syn keyword ngxDirective contained proxy_cookie_path +syn keyword ngxDirective contained proxy_download_rate +syn keyword ngxDirective contained proxy_force_ranges +syn keyword ngxDirective contained proxy_headers_hash_bucket_size +syn keyword ngxDirective contained proxy_headers_hash_max_size +syn keyword ngxDirective contained proxy_hide_header +syn keyword ngxDirective contained proxy_http_version +syn keyword ngxDirective contained proxy_ignore_client_abort +syn keyword ngxDirective contained proxy_ignore_headers +syn keyword ngxDirective contained proxy_intercept_errors +syn keyword ngxDirective contained proxy_limit_rate +syn keyword ngxDirective contained proxy_max_temp_file_size +syn keyword ngxDirective contained proxy_method +syn keyword ngxDirective contained proxy_next_upstream +syn keyword ngxDirective contained proxy_next_upstream_timeout +syn keyword ngxDirective contained proxy_next_upstream_tries +syn keyword ngxDirective contained proxy_no_cache +syn keyword ngxDirective contained proxy_pass_error_message +syn keyword ngxDirective contained proxy_pass_header +syn keyword ngxDirective contained proxy_pass_request_body +syn keyword ngxDirective contained proxy_pass_request_headers +syn keyword ngxDirective contained proxy_protocol +syn keyword ngxDirective contained proxy_protocol_timeout +syn keyword ngxDirective contained proxy_read_timeout +syn keyword ngxDirective contained proxy_redirect +syn keyword ngxDirective contained proxy_request_buffering +syn keyword ngxDirective contained proxy_requests +syn keyword ngxDirective contained proxy_responses +syn keyword ngxDirective contained proxy_send_lowat +syn keyword ngxDirective contained proxy_send_timeout +syn keyword ngxDirective contained proxy_session_drop +syn keyword ngxDirective contained proxy_set_body +syn keyword ngxDirective contained proxy_set_header +syn keyword ngxDirective contained proxy_socket_keepalive +syn keyword ngxDirective contained proxy_ssl +syn keyword ngxDirective contained proxy_ssl_certificate +syn keyword ngxDirective contained proxy_ssl_certificate_key +syn keyword ngxDirective contained proxy_ssl_ciphers +syn keyword ngxDirective contained proxy_ssl_crl +syn keyword ngxDirective contained proxy_ssl_name +syn keyword ngxDirective contained proxy_ssl_password_file +syn keyword ngxDirective contained proxy_ssl_protocols +syn keyword ngxDirective contained proxy_ssl_server_name +syn keyword ngxDirective contained proxy_ssl_session_reuse +syn keyword ngxDirective contained proxy_ssl_trusted_certificate +syn keyword ngxDirective contained proxy_ssl_verify +syn keyword ngxDirective contained proxy_ssl_verify_depth +syn keyword ngxDirective contained proxy_store +syn keyword ngxDirective contained proxy_store_access +syn keyword ngxDirective contained proxy_temp_file_write_size +syn keyword ngxDirective contained proxy_temp_path +syn keyword ngxDirective contained proxy_timeout +syn keyword ngxDirective contained proxy_upload_rate +syn keyword ngxDirective contained queue +syn keyword ngxDirective contained random +syn keyword ngxDirective contained random_index +syn keyword ngxDirective contained read_ahead +syn keyword ngxDirective contained real_ip_header +syn keyword ngxDirective contained real_ip_recursive +syn keyword ngxDirective contained recursive_error_pages +syn keyword ngxDirective contained referer_hash_bucket_size +syn keyword ngxDirective contained referer_hash_max_size +syn keyword ngxDirective contained request_pool_size +syn keyword ngxDirective contained reset_timedout_connection +syn keyword ngxDirective contained resolver +syn keyword ngxDirective contained resolver_timeout +syn keyword ngxDirective contained rewrite_log +syn keyword ngxDirective contained satisfy +syn keyword ngxDirective contained scgi_bind +syn keyword ngxDirective contained scgi_buffer_size +syn keyword ngxDirective contained scgi_buffering +syn keyword ngxDirective contained scgi_buffers +syn keyword ngxDirective contained scgi_busy_buffers_size +syn keyword ngxDirective contained scgi_cache +syn keyword ngxDirective contained scgi_cache_background_update +syn keyword ngxDirective contained scgi_cache_bypass +syn keyword ngxDirective contained scgi_cache_key +syn keyword ngxDirective contained scgi_cache_lock +syn keyword ngxDirective contained scgi_cache_lock_age +syn keyword ngxDirective contained scgi_cache_lock_timeout +syn keyword ngxDirective contained scgi_cache_max_range_offset +syn keyword ngxDirective contained scgi_cache_methods +syn keyword ngxDirective contained scgi_cache_min_uses +syn keyword ngxDirective contained scgi_cache_path +syn keyword ngxDirective contained scgi_cache_purge +syn keyword ngxDirective contained scgi_cache_revalidate +syn keyword ngxDirective contained scgi_cache_use_stale +syn keyword ngxDirective contained scgi_cache_valid +syn keyword ngxDirective contained scgi_connect_timeout +syn keyword ngxDirective contained scgi_force_ranges +syn keyword ngxDirective contained scgi_hide_header +syn keyword ngxDirective contained scgi_ignore_client_abort +syn keyword ngxDirective contained scgi_ignore_headers +syn keyword ngxDirective contained scgi_intercept_errors +syn keyword ngxDirective contained scgi_limit_rate +syn keyword ngxDirective contained scgi_max_temp_file_size +syn keyword ngxDirective contained scgi_next_upstream +syn keyword ngxDirective contained scgi_next_upstream_timeout +syn keyword ngxDirective contained scgi_next_upstream_tries +syn keyword ngxDirective contained scgi_no_cache +syn keyword ngxDirective contained scgi_param +syn keyword ngxDirective contained scgi_pass_header +syn keyword ngxDirective contained scgi_pass_request_body +syn keyword ngxDirective contained scgi_pass_request_headers +syn keyword ngxDirective contained scgi_read_timeout +syn keyword ngxDirective contained scgi_request_buffering +syn keyword ngxDirective contained scgi_send_timeout +syn keyword ngxDirective contained scgi_socket_keepalive +syn keyword ngxDirective contained scgi_store +syn keyword ngxDirective contained scgi_store_access +syn keyword ngxDirective contained scgi_temp_file_write_size +syn keyword ngxDirective contained scgi_temp_path +syn keyword ngxDirective contained secure_link +syn keyword ngxDirective contained secure_link_md5 +syn keyword ngxDirective contained secure_link_secret +syn keyword ngxDirective contained send_lowat +syn keyword ngxDirective contained send_timeout +syn keyword ngxDirective contained sendfile +syn keyword ngxDirective contained sendfile_max_chunk +syn keyword ngxDirective contained server_name_in_redirect +syn keyword ngxDirective contained server_names_hash_bucket_size +syn keyword ngxDirective contained server_names_hash_max_size +syn keyword ngxDirective contained server_tokens +syn keyword ngxDirective contained session_log +syn keyword ngxDirective contained session_log_format +syn keyword ngxDirective contained session_log_zone +syn keyword ngxDirective contained set_real_ip_from +syn keyword ngxDirective contained slice +syn keyword ngxDirective contained smtp_auth +syn keyword ngxDirective contained smtp_capabilities +syn keyword ngxDirective contained smtp_client_buffer +syn keyword ngxDirective contained smtp_greeting_delay +syn keyword ngxDirective contained source_charset +syn keyword ngxDirective contained ssi +syn keyword ngxDirective contained ssi_ignore_recycled_buffers +syn keyword ngxDirective contained ssi_last_modified +syn keyword ngxDirective contained ssi_min_file_chunk +syn keyword ngxDirective contained ssi_silent_errors +syn keyword ngxDirective contained ssi_types +syn keyword ngxDirective contained ssi_value_length +syn keyword ngxDirective contained ssl_buffer_size +syn keyword ngxDirective contained ssl_certificate +syn keyword ngxDirective contained ssl_certificate_key +syn keyword ngxDirective contained ssl_ciphers +syn keyword ngxDirective contained ssl_client_certificate +syn keyword ngxDirective contained ssl_crl +syn keyword ngxDirective contained ssl_dhparam +syn keyword ngxDirective contained ssl_early_data +syn keyword ngxDirective contained ssl_ecdh_curve +syn keyword ngxDirective contained ssl_engine +syn keyword ngxDirective contained ssl_handshake_timeout +syn keyword ngxDirective contained ssl_password_file +syn keyword ngxDirective contained ssl_prefer_server_ciphers +syn keyword ngxDirective contained ssl_preread +syn keyword ngxDirective contained ssl_protocols +syn keyword ngxDirective contained ssl_session_cache +syn keyword ngxDirective contained ssl_session_ticket_key +syn keyword ngxDirective contained ssl_session_tickets +syn keyword ngxDirective contained ssl_session_timeout +syn keyword ngxDirective contained ssl_stapling +syn keyword ngxDirective contained ssl_stapling_file +syn keyword ngxDirective contained ssl_stapling_responder +syn keyword ngxDirective contained ssl_stapling_verify +syn keyword ngxDirective contained ssl_trusted_certificate +syn keyword ngxDirective contained ssl_verify_client +syn keyword ngxDirective contained ssl_verify_depth +syn keyword ngxDirective contained starttls +syn keyword ngxDirective contained state +syn keyword ngxDirective contained status +syn keyword ngxDirective contained status_format +syn keyword ngxDirective contained status_zone +syn keyword ngxDirective contained sticky +syn keyword ngxDirective contained sticky_cookie_insert +syn keyword ngxDirective contained stub_status +syn keyword ngxDirective contained sub_filter +syn keyword ngxDirective contained sub_filter_last_modified +syn keyword ngxDirective contained sub_filter_once +syn keyword ngxDirective contained sub_filter_types +syn keyword ngxDirective contained subrequest_output_buffer_size +syn keyword ngxDirective contained tcp_nodelay +syn keyword ngxDirective contained tcp_nopush +syn keyword ngxDirective contained thread_pool +syn keyword ngxDirective contained timeout +syn keyword ngxDirective contained timer_resolution +syn keyword ngxDirective contained types_hash_bucket_size +syn keyword ngxDirective contained types_hash_max_size +syn keyword ngxDirective contained underscores_in_headers +syn keyword ngxDirective contained uninitialized_variable_warn +syn keyword ngxDirective contained use +syn keyword ngxDirective contained user +syn keyword ngxDirective contained userid +syn keyword ngxDirective contained userid_domain +syn keyword ngxDirective contained userid_expires +syn keyword ngxDirective contained userid_mark +syn keyword ngxDirective contained userid_name +syn keyword ngxDirective contained userid_p3p +syn keyword ngxDirective contained userid_path +syn keyword ngxDirective contained userid_service +syn keyword ngxDirective contained uwsgi_bind +syn keyword ngxDirective contained uwsgi_buffer_size +syn keyword ngxDirective contained uwsgi_buffering +syn keyword ngxDirective contained uwsgi_buffers +syn keyword ngxDirective contained uwsgi_busy_buffers_size +syn keyword ngxDirective contained uwsgi_cache +syn keyword ngxDirective contained uwsgi_cache_background_update +syn keyword ngxDirective contained uwsgi_cache_bypass +syn keyword ngxDirective contained uwsgi_cache_key +syn keyword ngxDirective contained uwsgi_cache_lock +syn keyword ngxDirective contained uwsgi_cache_lock_age +syn keyword ngxDirective contained uwsgi_cache_lock_timeout +syn keyword ngxDirective contained uwsgi_cache_max_range_offset +syn keyword ngxDirective contained uwsgi_cache_methods +syn keyword ngxDirective contained uwsgi_cache_min_uses +syn keyword ngxDirective contained uwsgi_cache_path +syn keyword ngxDirective contained uwsgi_cache_purge +syn keyword ngxDirective contained uwsgi_cache_revalidate +syn keyword ngxDirective contained uwsgi_cache_use_stale +syn keyword ngxDirective contained uwsgi_cache_valid +syn keyword ngxDirective contained uwsgi_connect_timeout +syn keyword ngxDirective contained uwsgi_force_ranges +syn keyword ngxDirective contained uwsgi_hide_header +syn keyword ngxDirective contained uwsgi_ignore_client_abort +syn keyword ngxDirective contained uwsgi_ignore_headers +syn keyword ngxDirective contained uwsgi_intercept_errors +syn keyword ngxDirective contained uwsgi_limit_rate +syn keyword ngxDirective contained uwsgi_max_temp_file_size +syn keyword ngxDirective contained uwsgi_modifier1 +syn keyword ngxDirective contained uwsgi_modifier2 +syn keyword ngxDirective contained uwsgi_next_upstream +syn keyword ngxDirective contained uwsgi_next_upstream_timeout +syn keyword ngxDirective contained uwsgi_next_upstream_tries +syn keyword ngxDirective contained uwsgi_no_cache +syn keyword ngxDirective contained uwsgi_param +syn keyword ngxDirective contained uwsgi_pass_header +syn keyword ngxDirective contained uwsgi_pass_request_body +syn keyword ngxDirective contained uwsgi_pass_request_headers +syn keyword ngxDirective contained uwsgi_read_timeout +syn keyword ngxDirective contained uwsgi_request_buffering +syn keyword ngxDirective contained uwsgi_send_timeout +syn keyword ngxDirective contained uwsgi_socket_keepalive +syn keyword ngxDirective contained uwsgi_ssl_certificate +syn keyword ngxDirective contained uwsgi_ssl_certificate_key +syn keyword ngxDirective contained uwsgi_ssl_ciphers +syn keyword ngxDirective contained uwsgi_ssl_crl +syn keyword ngxDirective contained uwsgi_ssl_name +syn keyword ngxDirective contained uwsgi_ssl_password_file +syn keyword ngxDirective contained uwsgi_ssl_protocols +syn keyword ngxDirective contained uwsgi_ssl_server_name +syn keyword ngxDirective contained uwsgi_ssl_session_reuse +syn keyword ngxDirective contained uwsgi_ssl_trusted_certificate +syn keyword ngxDirective contained uwsgi_ssl_verify +syn keyword ngxDirective contained uwsgi_ssl_verify_depth +syn keyword ngxDirective contained uwsgi_store +syn keyword ngxDirective contained uwsgi_store_access +syn keyword ngxDirective contained uwsgi_string +syn keyword ngxDirective contained uwsgi_temp_file_write_size +syn keyword ngxDirective contained uwsgi_temp_path +syn keyword ngxDirective contained valid_referers +syn keyword ngxDirective contained variables_hash_bucket_size +syn keyword ngxDirective contained variables_hash_max_size +syn keyword ngxDirective contained worker_aio_requests +syn keyword ngxDirective contained worker_connections +syn keyword ngxDirective contained worker_cpu_affinity +syn keyword ngxDirective contained worker_priority +syn keyword ngxDirective contained worker_processes +syn keyword ngxDirective contained worker_rlimit_core +syn keyword ngxDirective contained worker_rlimit_nofile +syn keyword ngxDirective contained worker_shutdown_timeout +syn keyword ngxDirective contained working_directory +syn keyword ngxDirective contained xclient +syn keyword ngxDirective contained xml_entities +syn keyword ngxDirective contained xslt_last_modified +syn keyword ngxDirective contained xslt_param +syn keyword ngxDirective contained xslt_string_param +syn keyword ngxDirective contained xslt_stylesheet +syn keyword ngxDirective contained xslt_types +syn keyword ngxDirective contained zone +syn keyword ngxDirective contained zone_sync +syn keyword ngxDirective contained zone_sync_buffers +syn keyword ngxDirective contained zone_sync_connect_retry_interval +syn keyword ngxDirective contained zone_sync_connect_timeout +syn keyword ngxDirective contained zone_sync_interval +syn keyword ngxDirective contained zone_sync_recv_buffer_size +syn keyword ngxDirective contained zone_sync_server +syn keyword ngxDirective contained zone_sync_ssl +syn keyword ngxDirective contained zone_sync_ssl_certificate +syn keyword ngxDirective contained zone_sync_ssl_certificate_key +syn keyword ngxDirective contained zone_sync_ssl_ciphers +syn keyword ngxDirective contained zone_sync_ssl_crl +syn keyword ngxDirective contained zone_sync_ssl_name +syn keyword ngxDirective contained zone_sync_ssl_password_file +syn keyword ngxDirective contained zone_sync_ssl_protocols +syn keyword ngxDirective contained zone_sync_ssl_server_name +syn keyword ngxDirective contained zone_sync_ssl_trusted_certificate +syn keyword ngxDirective contained zone_sync_ssl_verify +syn keyword ngxDirective contained zone_sync_ssl_verify_depth +syn keyword ngxDirective contained zone_sync_timeout + +" 3rd party modules list taken from +" https://github.com/freebsd/freebsd-ports/blob/master/www/nginx-devel/Makefile +" ----------------------------------------------------------------------------- + +" Accept Language +" https://github.com/giom/nginx_accept_language_module +syn keyword ngxDirectiveThirdParty contained set_from_accept_language + +" Digest Authentication +" https://github.com/atomx/nginx-http-auth-digest +syn keyword ngxDirectiveThirdParty contained auth_digest +syn keyword ngxDirectiveThirdParty contained auth_digest_drop_time +syn keyword ngxDirectiveThirdParty contained auth_digest_evasion_time +syn keyword ngxDirectiveThirdParty contained auth_digest_expires +syn keyword ngxDirectiveThirdParty contained auth_digest_maxtries +syn keyword ngxDirectiveThirdParty contained auth_digest_replays +syn keyword ngxDirectiveThirdParty contained auth_digest_shm_size +syn keyword ngxDirectiveThirdParty contained auth_digest_timeout +syn keyword ngxDirectiveThirdParty contained auth_digest_user_file + +" SPNEGO Authentication +" https://github.com/stnoonan/spnego-http-auth-nginx-module +syn keyword ngxDirectiveThirdParty contained auth_gss +syn keyword ngxDirectiveThirdParty contained auth_gss_allow_basic_fallback +syn keyword ngxDirectiveThirdParty contained auth_gss_authorized_principal +syn keyword ngxDirectiveThirdParty contained auth_gss_force_realm +syn keyword ngxDirectiveThirdParty contained auth_gss_format_full +syn keyword ngxDirectiveThirdParty contained auth_gss_keytab +syn keyword ngxDirectiveThirdParty contained auth_gss_realm +syn keyword ngxDirectiveThirdParty contained auth_gss_service_name + +" LDAP Authentication +" https://github.com/kvspb/nginx-auth-ldap +syn keyword ngxDirectiveThirdParty contained auth_ldap +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_enabled +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_expiration_time +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_size +syn keyword ngxDirectiveThirdParty contained auth_ldap_servers +syn keyword ngxDirectiveThirdParty contained auth_ldap_servers_size +syn keyword ngxDirectiveThirdParty contained ldap_server + +" PAM Authentication +" https://github.com/sto/ngx_http_auth_pam_module +syn keyword ngxDirectiveThirdParty contained auth_pam +syn keyword ngxDirectiveThirdParty contained auth_pam_service_name +syn keyword ngxDirectiveThirdParty contained auth_pam_set_pam_env + +" AJP protocol proxy +" https://github.com/yaoweibin/nginx_ajp_module +syn keyword ngxDirectiveThirdParty contained ajp_buffer_size +syn keyword ngxDirectiveThirdParty contained ajp_buffers +syn keyword ngxDirectiveThirdParty contained ajp_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained ajp_cache +syn keyword ngxDirectiveThirdParty contained ajp_cache_key +syn keyword ngxDirectiveThirdParty contained ajp_cache_lock +syn keyword ngxDirectiveThirdParty contained ajp_cache_lock_timeout +syn keyword ngxDirectiveThirdParty contained ajp_cache_methods +syn keyword ngxDirectiveThirdParty contained ajp_cache_min_uses +syn keyword ngxDirectiveThirdParty contained ajp_cache_path +syn keyword ngxDirectiveThirdParty contained ajp_cache_use_stale +syn keyword ngxDirectiveThirdParty contained ajp_cache_valid +syn keyword ngxDirectiveThirdParty contained ajp_connect_timeout +syn keyword ngxDirectiveThirdParty contained ajp_header_packet_buffer_size +syn keyword ngxDirectiveThirdParty contained ajp_hide_header +syn keyword ngxDirectiveThirdParty contained ajp_ignore_client_abort +syn keyword ngxDirectiveThirdParty contained ajp_ignore_headers +syn keyword ngxDirectiveThirdParty contained ajp_intercept_errors +syn keyword ngxDirectiveThirdParty contained ajp_keep_conn +syn keyword ngxDirectiveThirdParty contained ajp_max_data_packet_size +syn keyword ngxDirectiveThirdParty contained ajp_max_temp_file_size +syn keyword ngxDirectiveThirdParty contained ajp_next_upstream +syn keyword ngxDirectiveThirdParty contained ajp_pass +syn keyword ngxDirectiveThirdParty contained ajp_pass_header +syn keyword ngxDirectiveThirdParty contained ajp_pass_request_body +syn keyword ngxDirectiveThirdParty contained ajp_pass_request_headers +syn keyword ngxDirectiveThirdParty contained ajp_read_timeout +syn keyword ngxDirectiveThirdParty contained ajp_send_lowat +syn keyword ngxDirectiveThirdParty contained ajp_send_timeout +syn keyword ngxDirectiveThirdParty contained ajp_store +syn keyword ngxDirectiveThirdParty contained ajp_store_access +syn keyword ngxDirectiveThirdParty contained ajp_temp_file_write_size +syn keyword ngxDirectiveThirdParty contained ajp_temp_path +syn keyword ngxDirectiveThirdParty contained ajp_upstream_fail_timeout +syn keyword ngxDirectiveThirdParty contained ajp_upstream_max_fails + +" AWS proxy +" https://github.com/anomalizer/ngx_aws_auth +syn keyword ngxDirectiveThirdParty contained aws_access_key +syn keyword ngxDirectiveThirdParty contained aws_endpoint +syn keyword ngxDirectiveThirdParty contained aws_key_scope +syn keyword ngxDirectiveThirdParty contained aws_s3_bucket +syn keyword ngxDirectiveThirdParty contained aws_sign +syn keyword ngxDirectiveThirdParty contained aws_signing_key + +" embedding Clojure or Java or Groovy programs +" https://github.com/nginx-clojure/nginx-clojure +syn keyword ngxDirectiveThirdParty contained access_handler_code +syn keyword ngxDirectiveThirdParty contained access_handler_name +syn keyword ngxDirectiveThirdParty contained access_handler_property +syn keyword ngxDirectiveThirdParty contained access_handler_type +syn keyword ngxDirectiveThirdParty contained always_read_body +syn keyword ngxDirectiveThirdParty contained auto_upgrade_ws +syn keyword ngxDirectiveThirdParty contained body_filter_code +syn keyword ngxDirectiveThirdParty contained body_filter_name +syn keyword ngxDirectiveThirdParty contained body_filter_property +syn keyword ngxDirectiveThirdParty contained body_filter_type +syn keyword ngxDirectiveThirdParty contained content_handler_code +syn keyword ngxDirectiveThirdParty contained content_handler_name +syn keyword ngxDirectiveThirdParty contained content_handler_property +syn keyword ngxDirectiveThirdParty contained content_handler_type +syn keyword ngxDirectiveThirdParty contained handler_code +syn keyword ngxDirectiveThirdParty contained handler_name +syn keyword ngxDirectiveThirdParty contained handler_type +syn keyword ngxDirectiveThirdParty contained handlers_lazy_init +syn keyword ngxDirectiveThirdParty contained header_filter_code +syn keyword ngxDirectiveThirdParty contained header_filter_name +syn keyword ngxDirectiveThirdParty contained header_filter_property +syn keyword ngxDirectiveThirdParty contained header_filter_type +syn keyword ngxDirectiveThirdParty contained jvm_classpath +syn keyword ngxDirectiveThirdParty contained jvm_classpath_check +syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_code +syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_name +syn keyword ngxDirectiveThirdParty contained jvm_handler_type +syn keyword ngxDirectiveThirdParty contained jvm_init_handler_code +syn keyword ngxDirectiveThirdParty contained jvm_init_handler_name +syn keyword ngxDirectiveThirdParty contained jvm_options +syn keyword ngxDirectiveThirdParty contained jvm_path +syn keyword ngxDirectiveThirdParty contained jvm_var +syn keyword ngxDirectiveThirdParty contained jvm_workers +syn keyword ngxDirectiveThirdParty contained max_balanced_tcp_connections +syn keyword ngxDirectiveThirdParty contained rewrite_handler_code +syn keyword ngxDirectiveThirdParty contained rewrite_handler_name +syn keyword ngxDirectiveThirdParty contained rewrite_handler_property +syn keyword ngxDirectiveThirdParty contained rewrite_handler_type +syn keyword ngxDirectiveThirdParty contained shared_map +syn keyword ngxDirectiveThirdParty contained write_page_size + +" Certificate Transparency +" https://github.com/grahamedgecombe/nginx-ct +syn keyword ngxDirectiveThirdParty contained ssl_ct +syn keyword ngxDirectiveThirdParty contained ssl_ct_static_scts + +" ngx_echo +" https://github.com/openresty/echo-nginx-module +syn keyword ngxDirectiveThirdParty contained echo_abort_parent +syn keyword ngxDirectiveThirdParty contained echo_after_body +syn keyword ngxDirectiveThirdParty contained echo_before_body +syn keyword ngxDirectiveThirdParty contained echo_blocking_sleep +syn keyword ngxDirectiveThirdParty contained echo_end +syn keyword ngxDirectiveThirdParty contained echo_exec +syn keyword ngxDirectiveThirdParty contained echo_flush +syn keyword ngxDirectiveThirdParty contained echo_foreach_split +syn keyword ngxDirectiveThirdParty contained echo_location +syn keyword ngxDirectiveThirdParty contained echo_location_async +syn keyword ngxDirectiveThirdParty contained echo_read_request_body +syn keyword ngxDirectiveThirdParty contained echo_request_body +syn keyword ngxDirectiveThirdParty contained echo_reset_timer +syn keyword ngxDirectiveThirdParty contained echo_status +syn keyword ngxDirectiveThirdParty contained echo_subrequest +syn keyword ngxDirectiveThirdParty contained echo_subrequest_async + +" FastDFS +" https://github.com/happyfish100/fastdfs-nginx-module +syn keyword ngxDirectiveThirdParty contained ngx_fastdfs_module + +" ngx_headers_more +" https://github.com/openresty/headers-more-nginx-module +syn keyword ngxDirectiveThirdParty contained more_clear_headers +syn keyword ngxDirectiveThirdParty contained more_clear_input_headers +syn keyword ngxDirectiveThirdParty contained more_set_headers +syn keyword ngxDirectiveThirdParty contained more_set_input_headers + +" NGINX WebDAV missing commands support (PROPFIND & OPTIONS) +" https://github.com/arut/nginx-dav-ext-module +syn keyword ngxDirectiveThirdParty contained dav_ext_lock +syn keyword ngxDirectiveThirdParty contained dav_ext_lock_zone +syn keyword ngxDirectiveThirdParty contained dav_ext_methods + +" ngx_eval +" https://github.com/openresty/nginx-eval-module +syn keyword ngxDirectiveThirdParty contained eval +syn keyword ngxDirectiveThirdParty contained eval_buffer_size +syn keyword ngxDirectiveThirdParty contained eval_escalate +syn keyword ngxDirectiveThirdParty contained eval_override_content_type +syn keyword ngxDirectiveThirdParty contained eval_subrequest_in_memory + +" Fancy Index +" https://github.com/aperezdc/ngx-fancyindex +syn keyword ngxDirectiveThirdParty contained fancyindex +syn keyword ngxDirectiveThirdParty contained fancyindex_css_href +syn keyword ngxDirectiveThirdParty contained fancyindex_default_sort +syn keyword ngxDirectiveThirdParty contained fancyindex_directories_first +syn keyword ngxDirectiveThirdParty contained fancyindex_exact_size +syn keyword ngxDirectiveThirdParty contained fancyindex_footer +syn keyword ngxDirectiveThirdParty contained fancyindex_header +syn keyword ngxDirectiveThirdParty contained fancyindex_hide_parent_dir +syn keyword ngxDirectiveThirdParty contained fancyindex_hide_symlinks +syn keyword ngxDirectiveThirdParty contained fancyindex_ignore +syn keyword ngxDirectiveThirdParty contained fancyindex_localtime +syn keyword ngxDirectiveThirdParty contained fancyindex_name_length +syn keyword ngxDirectiveThirdParty contained fancyindex_show_path +syn keyword ngxDirectiveThirdParty contained fancyindex_time_format + +" Footer filter +" https://github.com/alibaba/nginx-http-footer-filter +syn keyword ngxDirectiveThirdParty contained footer +syn keyword ngxDirectiveThirdParty contained footer_types + +" ngx_http_geoip2_module +" https://github.com/leev/ngx_http_geoip2_module +syn keyword ngxDirectiveThirdParty contained geoip2 +syn keyword ngxDirectiveThirdParty contained geoip2_proxy +syn keyword ngxDirectiveThirdParty contained geoip2_proxy_recursive + +" A version of the Nginx HTTP stub status module that outputs in JSON format +" https://github.com/nginx-modules/nginx-json-status-module +syn keyword ngxDirectiveThirdParty contained json_status +syn keyword ngxDirectiveThirdParty contained json_status_type + +" MogileFS client for nginx +" https://github.com/vkholodkov/nginx-mogilefs-module +syn keyword ngxDirectiveThirdParty contained mogilefs_class +syn keyword ngxDirectiveThirdParty contained mogilefs_connect_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_domain +syn keyword ngxDirectiveThirdParty contained mogilefs_methods +syn keyword ngxDirectiveThirdParty contained mogilefs_noverify +syn keyword ngxDirectiveThirdParty contained mogilefs_pass +syn keyword ngxDirectiveThirdParty contained mogilefs_read_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_send_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_tracker + +" Ancient nginx plugin; probably not useful to anyone +" https://github.com/kr/nginx-notice +syn keyword ngxDirectiveThirdParty contained notice +syn keyword ngxDirectiveThirdParty contained notice_type + +" nchan +" https://github.com/slact/nchan +syn keyword ngxDirectiveThirdParty contained nchan_access_control_allow_credentials +syn keyword ngxDirectiveThirdParty contained nchan_access_control_allow_origin +syn keyword ngxDirectiveThirdParty contained nchan_authorize_request +syn keyword ngxDirectiveThirdParty contained nchan_benchmark +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_channels +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_message_padding_bytes +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_messages_per_channel_per_minute +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_publisher_distribution +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_subscriber_distribution +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_subscribers_per_channel +syn keyword ngxDirectiveThirdParty contained nchan_benchmark_time +syn keyword ngxDirectiveThirdParty contained nchan_channel_event_string +syn keyword ngxDirectiveThirdParty contained nchan_channel_events_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_channel_group +syn keyword ngxDirectiveThirdParty contained nchan_channel_group_accounting +syn keyword ngxDirectiveThirdParty contained nchan_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_channel_id_split_delimiter +syn keyword ngxDirectiveThirdParty contained nchan_channel_timeout +syn keyword ngxDirectiveThirdParty contained nchan_deflate_message_for_websocket +syn keyword ngxDirectiveThirdParty contained nchan_eventsource_event +syn keyword ngxDirectiveThirdParty contained nchan_group_location +syn keyword ngxDirectiveThirdParty contained nchan_group_max_channels +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_disk +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_memory +syn keyword ngxDirectiveThirdParty contained nchan_group_max_subscribers +syn keyword ngxDirectiveThirdParty contained nchan_longpoll_multipart_response +syn keyword ngxDirectiveThirdParty contained nchan_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained nchan_max_channel_subscribers +syn keyword ngxDirectiveThirdParty contained nchan_max_reserved_memory +syn keyword ngxDirectiveThirdParty contained nchan_message_buffer_length +syn keyword ngxDirectiveThirdParty contained nchan_message_max_buffer_length +syn keyword ngxDirectiveThirdParty contained nchan_message_temp_path +syn keyword ngxDirectiveThirdParty contained nchan_message_timeout +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_level +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_memlevel +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_strategy +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_window +syn keyword ngxDirectiveThirdParty contained nchan_pub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_publisher +syn keyword ngxDirectiveThirdParty contained nchan_publisher_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_publisher_location +syn keyword ngxDirectiveThirdParty contained nchan_publisher_upstream_request +syn keyword ngxDirectiveThirdParty contained nchan_pubsub +syn keyword ngxDirectiveThirdParty contained nchan_pubsub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_pubsub_location +syn keyword ngxDirectiveThirdParty contained nchan_redis_connect_timeout +syn keyword ngxDirectiveThirdParty contained nchan_redis_fakesub_timer_interval +syn keyword ngxDirectiveThirdParty contained nchan_redis_idle_channel_cache_timeout +syn keyword ngxDirectiveThirdParty contained nchan_redis_namespace +syn keyword ngxDirectiveThirdParty contained nchan_redis_nostore_fastpublish +syn keyword ngxDirectiveThirdParty contained nchan_redis_optimize_target +syn keyword ngxDirectiveThirdParty contained nchan_redis_pass +syn keyword ngxDirectiveThirdParty contained nchan_redis_pass_inheritable +syn keyword ngxDirectiveThirdParty contained nchan_redis_ping_interval +syn keyword ngxDirectiveThirdParty contained nchan_redis_publish_msgpacked_max_size +syn keyword ngxDirectiveThirdParty contained nchan_redis_server +syn keyword ngxDirectiveThirdParty contained nchan_redis_storage_mode +syn keyword ngxDirectiveThirdParty contained nchan_redis_subscribe_weights +syn keyword ngxDirectiveThirdParty contained nchan_redis_url +syn keyword ngxDirectiveThirdParty contained nchan_redis_wait_after_connecting +syn keyword ngxDirectiveThirdParty contained nchan_shared_memory_size +syn keyword ngxDirectiveThirdParty contained nchan_storage_engine +syn keyword ngxDirectiveThirdParty contained nchan_store_messages +syn keyword ngxDirectiveThirdParty contained nchan_stub_status +syn keyword ngxDirectiveThirdParty contained nchan_sub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_subscribe_existing_channels_only +syn keyword ngxDirectiveThirdParty contained nchan_subscribe_request +syn keyword ngxDirectiveThirdParty contained nchan_subscriber +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_compound_etag_message_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_first_message +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_http_raw_stream_separator +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_last_message_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_location +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_message_id_custom_etag_header +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_timeout +syn keyword ngxDirectiveThirdParty contained nchan_unsubscribe_request +syn keyword ngxDirectiveThirdParty contained nchan_use_redis +syn keyword ngxDirectiveThirdParty contained nchan_websocket_client_heartbeat +syn keyword ngxDirectiveThirdParty contained nchan_websocket_ping_interval +syn keyword ngxDirectiveThirdParty contained push_authorized_channels_only +syn keyword ngxDirectiveThirdParty contained push_channel_group +syn keyword ngxDirectiveThirdParty contained push_channel_timeout +syn keyword ngxDirectiveThirdParty contained push_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained push_max_channel_subscribers +syn keyword ngxDirectiveThirdParty contained push_max_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_max_reserved_memory +syn keyword ngxDirectiveThirdParty contained push_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_message_timeout +syn keyword ngxDirectiveThirdParty contained push_min_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_publisher +syn keyword ngxDirectiveThirdParty contained push_store_messages +syn keyword ngxDirectiveThirdParty contained push_subscriber +syn keyword ngxDirectiveThirdParty contained push_subscriber_concurrency +syn keyword ngxDirectiveThirdParty contained push_subscriber_timeout + +" Push Stream +" https://github.com/wandenberg/nginx-push-stream-module +syn keyword ngxDirectiveThirdParty contained push_stream_allow_connections_to_events_channel +syn keyword ngxDirectiveThirdParty contained push_stream_allowed_origins +syn keyword ngxDirectiveThirdParty contained push_stream_authorized_channels_only +syn keyword ngxDirectiveThirdParty contained push_stream_channel_deleted_message_text +syn keyword ngxDirectiveThirdParty contained push_stream_channel_inactivity_time +syn keyword ngxDirectiveThirdParty contained push_stream_channel_info_on_publish +syn keyword ngxDirectiveThirdParty contained push_stream_channels_path +syn keyword ngxDirectiveThirdParty contained push_stream_channels_statistics +syn keyword ngxDirectiveThirdParty contained push_stream_events_channel_id +syn keyword ngxDirectiveThirdParty contained push_stream_footer_template +syn keyword ngxDirectiveThirdParty contained push_stream_header_template +syn keyword ngxDirectiveThirdParty contained push_stream_header_template_file +syn keyword ngxDirectiveThirdParty contained push_stream_last_event_id +syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_tag +syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_time +syn keyword ngxDirectiveThirdParty contained push_stream_longpolling_connection_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained push_stream_max_messages_stored_per_channel +syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_channels +syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_wildcard_channels +syn keyword ngxDirectiveThirdParty contained push_stream_max_subscribers_per_channel +syn keyword ngxDirectiveThirdParty contained push_stream_message_template +syn keyword ngxDirectiveThirdParty contained push_stream_message_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_padding_by_user_agent +syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_interval +syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_text +syn keyword ngxDirectiveThirdParty contained push_stream_publisher +syn keyword ngxDirectiveThirdParty contained push_stream_shared_memory_size +syn keyword ngxDirectiveThirdParty contained push_stream_store_messages +syn keyword ngxDirectiveThirdParty contained push_stream_subscriber +syn keyword ngxDirectiveThirdParty contained push_stream_subscriber_connection_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_timeout_with_body +syn keyword ngxDirectiveThirdParty contained push_stream_user_agent +syn keyword ngxDirectiveThirdParty contained push_stream_websocket_allow_publish +syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_max_qtd +syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_prefix + +" redis module +" https://www.nginx.com/resources/wiki/modules/redis/ +syn keyword ngxDirectiveThirdParty contained redis_bind +syn keyword ngxDirectiveThirdParty contained redis_buffer_size +syn keyword ngxDirectiveThirdParty contained redis_connect_timeout +syn keyword ngxDirectiveThirdParty contained redis_gzip_flag +syn keyword ngxDirectiveThirdParty contained redis_next_upstream +syn keyword ngxDirectiveThirdParty contained redis_pass +syn keyword ngxDirectiveThirdParty contained redis_read_timeout +syn keyword ngxDirectiveThirdParty contained redis_send_timeout + +" ngx_http_response +" http://catap.ru/downloads/nginx/ +syn keyword ngxDirectiveThirdParty contained response +syn keyword ngxDirectiveThirdParty contained response_type + +" nginx_substitutions_filter +" https://github.com/yaoweibin/ngx_http_substitutions_filter_module +syn keyword ngxDirectiveThirdParty contained subs_buffers +syn keyword ngxDirectiveThirdParty contained subs_filter +syn keyword ngxDirectiveThirdParty contained subs_filter_bypass +syn keyword ngxDirectiveThirdParty contained subs_filter_types +syn keyword ngxDirectiveThirdParty contained subs_line_buffer_size + +" Tarantool nginx upstream module +" https://github.com/tarantool/nginx_upstream_module +syn keyword ngxDirectiveThirdParty contained tnt_allowed_indexes +syn keyword ngxDirectiveThirdParty contained tnt_allowed_spaces +syn keyword ngxDirectiveThirdParty contained tnt_buffer_size +syn keyword ngxDirectiveThirdParty contained tnt_connect_timeout +syn keyword ngxDirectiveThirdParty contained tnt_delete +syn keyword ngxDirectiveThirdParty contained tnt_http_methods +syn keyword ngxDirectiveThirdParty contained tnt_http_rest_methods +syn keyword ngxDirectiveThirdParty contained tnt_in_multiplier +syn keyword ngxDirectiveThirdParty contained tnt_insert +syn keyword ngxDirectiveThirdParty contained tnt_method +syn keyword ngxDirectiveThirdParty contained tnt_multireturn_skip_count +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_timeout +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_tries +syn keyword ngxDirectiveThirdParty contained tnt_out_multiplier +syn keyword ngxDirectiveThirdParty contained tnt_pass +syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request +syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request_buffer_size +syn keyword ngxDirectiveThirdParty contained tnt_pure_result +syn keyword ngxDirectiveThirdParty contained tnt_read_timeout +syn keyword ngxDirectiveThirdParty contained tnt_replace +syn keyword ngxDirectiveThirdParty contained tnt_select +syn keyword ngxDirectiveThirdParty contained tnt_select_limit_max +syn keyword ngxDirectiveThirdParty contained tnt_send_timeout +syn keyword ngxDirectiveThirdParty contained tnt_set_header +syn keyword ngxDirectiveThirdParty contained tnt_update +syn keyword ngxDirectiveThirdParty contained tnt_upsert + +" A module for nginx web server for handling file uploads using multipart/form-data encoding (RFC 1867) +" https://github.com/Austinb/nginx-upload-module +syn keyword ngxDirectiveThirdParty contained upload_aggregate_form_field +syn keyword ngxDirectiveThirdParty contained upload_archive_elm +syn keyword ngxDirectiveThirdParty contained upload_archive_elm_separator +syn keyword ngxDirectiveThirdParty contained upload_archive_path +syn keyword ngxDirectiveThirdParty contained upload_archive_path_separator +syn keyword ngxDirectiveThirdParty contained upload_buffer_size +syn keyword ngxDirectiveThirdParty contained upload_cleanup +syn keyword ngxDirectiveThirdParty contained upload_content_type +syn keyword ngxDirectiveThirdParty contained upload_discard +syn keyword ngxDirectiveThirdParty contained upload_field_name +syn keyword ngxDirectiveThirdParty contained upload_file_crc32 +syn keyword ngxDirectiveThirdParty contained upload_file_md5 +syn keyword ngxDirectiveThirdParty contained upload_file_md5_uc +syn keyword ngxDirectiveThirdParty contained upload_file_name +syn keyword ngxDirectiveThirdParty contained upload_file_sha1 +syn keyword ngxDirectiveThirdParty contained upload_file_sha1_uc +syn keyword ngxDirectiveThirdParty contained upload_file_size +syn keyword ngxDirectiveThirdParty contained upload_filter +syn keyword ngxDirectiveThirdParty contained upload_max_file_size +syn keyword ngxDirectiveThirdParty contained upload_max_output_body_len +syn keyword ngxDirectiveThirdParty contained upload_max_part_header_len +syn keyword ngxDirectiveThirdParty contained upload_pass +syn keyword ngxDirectiveThirdParty contained upload_pass_args +syn keyword ngxDirectiveThirdParty contained upload_pass_form_field +syn keyword ngxDirectiveThirdParty contained upload_set_form_field +syn keyword ngxDirectiveThirdParty contained upload_store +syn keyword ngxDirectiveThirdParty contained upload_store_access +syn keyword ngxDirectiveThirdParty contained upload_tmp_path +syn keyword ngxDirectiveThirdParty contained upload_unzip +syn keyword ngxDirectiveThirdParty contained upload_unzip_buffers +syn keyword ngxDirectiveThirdParty contained upload_unzip_hash +syn keyword ngxDirectiveThirdParty contained upload_unzip_max_file_name_len +syn keyword ngxDirectiveThirdParty contained upload_unzip_window +syn keyword ngxDirectiveThirdParty contained upload_void_content_type + +" nginx-upload-progress-module +" https://github.com/masterzen/nginx-upload-progress-module +syn keyword ngxDirectiveThirdParty contained report_uploads +syn keyword ngxDirectiveThirdParty contained track_uploads +syn keyword ngxDirectiveThirdParty contained upload_progress +syn keyword ngxDirectiveThirdParty contained upload_progress_content_type +syn keyword ngxDirectiveThirdParty contained upload_progress_header +syn keyword ngxDirectiveThirdParty contained upload_progress_java_output +syn keyword ngxDirectiveThirdParty contained upload_progress_json_output +syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_output +syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_parameter +syn keyword ngxDirectiveThirdParty contained upload_progress_template + +" Health checks upstreams for nginx +" https://github.com/yaoweibin/nginx_upstream_check_module +syn keyword ngxDirectiveThirdParty contained check +syn keyword ngxDirectiveThirdParty contained check_fastcgi_param +syn keyword ngxDirectiveThirdParty contained check_http_expect_alive +syn keyword ngxDirectiveThirdParty contained check_http_send +syn keyword ngxDirectiveThirdParty contained check_keepalive_requests +syn keyword ngxDirectiveThirdParty contained check_shm_size +syn keyword ngxDirectiveThirdParty contained check_status + +" The fair load balancer module for nginx +" https://github.com/cryptofuture/nginx-upstream-fair +syn keyword ngxDirectiveThirdParty contained fair +syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size + +" Nginx Video Thumb Extractor Module +" https://github.com/wandenberg/nginx-video-thumbextractor-module +syn keyword ngxDirectiveThirdParty contained video_thumbextractor +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_height +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_width +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_baseline +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_dpi +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_optimize +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_progressive_mode +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_quality +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_smooth +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_next_time +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_only_keyframe +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_processes_per_worker +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_threads +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_color +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_cols +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_margin +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_cols +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_rows +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_padding +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_rows +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_sample_interval +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_filename +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_second + +" drizzle-nginx-module - Upstream module for talking to MySQL and Drizzle directly +" https://github.com/openresty/drizzle-nginx-module +syn keyword ngxDirectiveThirdParty contained drizzle_buffer_size +syn keyword ngxDirectiveThirdParty contained drizzle_connect_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_dbname +syn keyword ngxDirectiveThirdParty contained drizzle_keepalive +syn keyword ngxDirectiveThirdParty contained drizzle_module_header +syn keyword ngxDirectiveThirdParty contained drizzle_pass +syn keyword ngxDirectiveThirdParty contained drizzle_query +syn keyword ngxDirectiveThirdParty contained drizzle_recv_cols_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_recv_rows_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_send_query_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_server +syn keyword ngxDirectiveThirdParty contained drizzle_status + +" ngx_dynamic_upstream +" https://github.com/cubicdaiya/ngx_dynamic_upstream +syn keyword ngxDirectiveThirdParty contained dynamic_upstream + +" encrypt and decrypt nginx variable values +" https://github.com/openresty/encrypted-session-nginx-module +syn keyword ngxDirectiveThirdParty contained encrypted_session_expires +syn keyword ngxDirectiveThirdParty contained encrypted_session_iv +syn keyword ngxDirectiveThirdParty contained encrypted_session_key +syn keyword ngxDirectiveThirdParty contained set_decrypt_session +syn keyword ngxDirectiveThirdParty contained set_encrypt_session + +" serve content directly from MongoDB's GridFS +" https://github.com/mdirolf/nginx-gridfs +syn keyword ngxDirectiveThirdParty contained gridfs +syn keyword ngxDirectiveThirdParty contained mongo + +" Adds support for arithmetic operations to NGINX config +" https://github.com/arut/nginx-let-module +syn keyword ngxDirectiveThirdParty contained let + +" ngx_http_lua_module - Embed the power of Lua into Nginx HTTP Servers +" https://github.com/openresty/lua-nginx-module +syn keyword ngxDirectiveThirdParty contained access_by_lua +syn keyword ngxDirectiveThirdParty contained access_by_lua_block +syn keyword ngxDirectiveThirdParty contained access_by_lua_file +syn keyword ngxDirectiveThirdParty contained access_by_lua_no_postpone +syn keyword ngxDirectiveThirdParty contained balancer_by_lua_block +syn keyword ngxDirectiveThirdParty contained balancer_by_lua_file +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_block +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_file +syn keyword ngxDirectiveThirdParty contained content_by_lua +syn keyword ngxDirectiveThirdParty contained content_by_lua_block +syn keyword ngxDirectiveThirdParty contained content_by_lua_file +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_block +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_file +syn keyword ngxDirectiveThirdParty contained init_by_lua +syn keyword ngxDirectiveThirdParty contained init_by_lua_block +syn keyword ngxDirectiveThirdParty contained init_by_lua_file +syn keyword ngxDirectiveThirdParty contained init_worker_by_lua +syn keyword ngxDirectiveThirdParty contained init_worker_by_lua_block +syn keyword ngxDirectiveThirdParty contained init_worker_by_lua_file +syn keyword ngxDirectiveThirdParty contained log_by_lua +syn keyword ngxDirectiveThirdParty contained log_by_lua_block +syn keyword ngxDirectiveThirdParty contained log_by_lua_file +syn keyword ngxDirectiveThirdParty contained lua_capture_error_log +syn keyword ngxDirectiveThirdParty contained lua_check_client_abort +syn keyword ngxDirectiveThirdParty contained lua_code_cache +syn keyword ngxDirectiveThirdParty contained lua_fake_shm +syn keyword ngxDirectiveThirdParty contained lua_http10_buffering +syn keyword ngxDirectiveThirdParty contained lua_load_resty_core +syn keyword ngxDirectiveThirdParty contained lua_malloc_trim +syn keyword ngxDirectiveThirdParty contained lua_max_pending_timers +syn keyword ngxDirectiveThirdParty contained lua_max_running_timers +syn keyword ngxDirectiveThirdParty contained lua_need_request_body +syn keyword ngxDirectiveThirdParty contained lua_package_cpath +syn keyword ngxDirectiveThirdParty contained lua_package_path +syn keyword ngxDirectiveThirdParty contained lua_regex_cache_max_entries +syn keyword ngxDirectiveThirdParty contained lua_regex_match_limit +syn keyword ngxDirectiveThirdParty contained lua_sa_restart +syn keyword ngxDirectiveThirdParty contained lua_shared_dict +syn keyword ngxDirectiveThirdParty contained lua_socket_buffer_size +syn keyword ngxDirectiveThirdParty contained lua_socket_connect_timeout +syn keyword ngxDirectiveThirdParty contained lua_socket_keepalive_timeout +syn keyword ngxDirectiveThirdParty contained lua_socket_log_errors +syn keyword ngxDirectiveThirdParty contained lua_socket_pool_size +syn keyword ngxDirectiveThirdParty contained lua_socket_read_timeout +syn keyword ngxDirectiveThirdParty contained lua_socket_send_lowat +syn keyword ngxDirectiveThirdParty contained lua_socket_send_timeout +syn keyword ngxDirectiveThirdParty contained lua_ssl_ciphers +syn keyword ngxDirectiveThirdParty contained lua_ssl_crl +syn keyword ngxDirectiveThirdParty contained lua_ssl_protocols +syn keyword ngxDirectiveThirdParty contained lua_ssl_trusted_certificate +syn keyword ngxDirectiveThirdParty contained lua_ssl_verify_depth +syn keyword ngxDirectiveThirdParty contained lua_transform_underscores_in_response_headers +syn keyword ngxDirectiveThirdParty contained lua_use_default_type +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_block +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_file +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_no_postpone +syn keyword ngxDirectiveThirdParty contained set_by_lua +syn keyword ngxDirectiveThirdParty contained set_by_lua_block +syn keyword ngxDirectiveThirdParty contained set_by_lua_file +syn keyword ngxDirectiveThirdParty contained ssl_certificate_by_lua_block +syn keyword ngxDirectiveThirdParty contained ssl_certificate_by_lua_file +syn keyword ngxDirectiveThirdParty contained ssl_session_fetch_by_lua_block +syn keyword ngxDirectiveThirdParty contained ssl_session_fetch_by_lua_file +syn keyword ngxDirectiveThirdParty contained ssl_session_store_by_lua_block +syn keyword ngxDirectiveThirdParty contained ssl_session_store_by_lua_file + +" ngx_memc - An extended version of the standard memcached module +" https://github.com/openresty/memc-nginx-module +syn keyword ngxDirectiveThirdParty contained memc_buffer_size +syn keyword ngxDirectiveThirdParty contained memc_cmds_allowed +syn keyword ngxDirectiveThirdParty contained memc_connect_timeout +syn keyword ngxDirectiveThirdParty contained memc_flags_to_last_modified +syn keyword ngxDirectiveThirdParty contained memc_ignore_client_abort +syn keyword ngxDirectiveThirdParty contained memc_next_upstream +syn keyword ngxDirectiveThirdParty contained memc_pass +syn keyword ngxDirectiveThirdParty contained memc_read_timeout +syn keyword ngxDirectiveThirdParty contained memc_send_timeout +syn keyword ngxDirectiveThirdParty contained memc_upstream_fail_timeout +syn keyword ngxDirectiveThirdParty contained memc_upstream_max_fails + +" ModSecurity web application firewall +" https://github.com/SpiderLabs/ModSecurity/tree/master +syn keyword ngxDirectiveThirdParty contained ModSecurityConfig +syn keyword ngxDirectiveThirdParty contained ModSecurityEnabled +syn keyword ngxDirectiveThirdParty contained pool_context_hash_size + +" NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX +" https://github.com/nbs-system/naxsi +syn keyword ngxDirectiveThirdParty contained BasicRule +syn keyword ngxDirectiveThirdParty contained CheckRule +syn keyword ngxDirectiveThirdParty contained DeniedUrl +syn keyword ngxDirectiveThirdParty contained LearningMode +syn keyword ngxDirectiveThirdParty contained LibInjectionSql +syn keyword ngxDirectiveThirdParty contained LibInjectionXss +syn keyword ngxDirectiveThirdParty contained MainRule +syn keyword ngxDirectiveThirdParty contained SecRulesDisabled +syn keyword ngxDirectiveThirdParty contained SecRulesEnabled +syn keyword ngxDirectiveThirdParty contained basic_rule +syn keyword ngxDirectiveThirdParty contained check_rule +syn keyword ngxDirectiveThirdParty contained denied_url +syn keyword ngxDirectiveThirdParty contained learning_mode +syn keyword ngxDirectiveThirdParty contained libinjection_sql +syn keyword ngxDirectiveThirdParty contained libinjection_xss +syn keyword ngxDirectiveThirdParty contained main_rule +syn keyword ngxDirectiveThirdParty contained rules_disabled +syn keyword ngxDirectiveThirdParty contained rules_enabled + +" Phusion Passenger +" https://www.phusionpassenger.com/library/config/nginx/reference/ +syn keyword ngxDirectiveThirdParty contained passenger_abort_on_startup_error +syn keyword ngxDirectiveThirdParty contained passenger_abort_websockets_on_process_shutdown +syn keyword ngxDirectiveThirdParty contained passenger_admin_panel_auth_type +syn keyword ngxDirectiveThirdParty contained passenger_admin_panel_password +syn keyword ngxDirectiveThirdParty contained passenger_admin_panel_url +syn keyword ngxDirectiveThirdParty contained passenger_admin_panel_username +syn keyword ngxDirectiveThirdParty contained passenger_anonymous_telemetry_proxy +syn keyword ngxDirectiveThirdParty contained passenger_app_env +syn keyword ngxDirectiveThirdParty contained passenger_app_file_descriptor_ulimit +syn keyword ngxDirectiveThirdParty contained passenger_app_group_name +syn keyword ngxDirectiveThirdParty contained passenger_app_log_file +syn keyword ngxDirectiveThirdParty contained passenger_app_rights +syn keyword ngxDirectiveThirdParty contained passenger_app_root +syn keyword ngxDirectiveThirdParty contained passenger_app_type +syn keyword ngxDirectiveThirdParty contained passenger_base_uri +syn keyword ngxDirectiveThirdParty contained passenger_buffer_response +syn keyword ngxDirectiveThirdParty contained passenger_buffer_size +syn keyword ngxDirectiveThirdParty contained passenger_buffers +syn keyword ngxDirectiveThirdParty contained passenger_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained passenger_concurrency_model +syn keyword ngxDirectiveThirdParty contained passenger_core_file_descriptor_ulimit +syn keyword ngxDirectiveThirdParty contained passenger_ctl +syn keyword ngxDirectiveThirdParty contained passenger_data_buffer_dir +syn keyword ngxDirectiveThirdParty contained passenger_debugger +syn keyword ngxDirectiveThirdParty contained passenger_default_group +syn keyword ngxDirectiveThirdParty contained passenger_default_user +syn keyword ngxDirectiveThirdParty contained passenger_disable_anonymous_telemetry +syn keyword ngxDirectiveThirdParty contained passenger_disable_security_update_check +syn keyword ngxDirectiveThirdParty contained passenger_document_root +syn keyword ngxDirectiveThirdParty contained passenger_dump_config_manifest +syn keyword ngxDirectiveThirdParty contained passenger_enabled +syn keyword ngxDirectiveThirdParty contained passenger_env_var +syn keyword ngxDirectiveThirdParty contained passenger_file_descriptor_log_file +syn keyword ngxDirectiveThirdParty contained passenger_fly_with +syn keyword ngxDirectiveThirdParty contained passenger_force_max_concurrent_requests_per_process +syn keyword ngxDirectiveThirdParty contained passenger_friendly_error_pages +syn keyword ngxDirectiveThirdParty contained passenger_group +syn keyword ngxDirectiveThirdParty contained passenger_headers_hash_bucket_size +syn keyword ngxDirectiveThirdParty contained passenger_headers_hash_max_size +syn keyword ngxDirectiveThirdParty contained passenger_ignore_client_abort +syn keyword ngxDirectiveThirdParty contained passenger_ignore_headers +syn keyword ngxDirectiveThirdParty contained passenger_instance_registry_dir +syn keyword ngxDirectiveThirdParty contained passenger_intercept_errors +syn keyword ngxDirectiveThirdParty contained passenger_load_shell_envvars +syn keyword ngxDirectiveThirdParty contained passenger_log_file +syn keyword ngxDirectiveThirdParty contained passenger_log_level +syn keyword ngxDirectiveThirdParty contained passenger_max_instances +syn keyword ngxDirectiveThirdParty contained passenger_max_instances_per_app +syn keyword ngxDirectiveThirdParty contained passenger_max_pool_size +syn keyword ngxDirectiveThirdParty contained passenger_max_preloader_idle_time +syn keyword ngxDirectiveThirdParty contained passenger_max_request_queue_size +syn keyword ngxDirectiveThirdParty contained passenger_max_request_queue_time +syn keyword ngxDirectiveThirdParty contained passenger_max_request_time +syn keyword ngxDirectiveThirdParty contained passenger_max_requests +syn keyword ngxDirectiveThirdParty contained passenger_memory_limit +syn keyword ngxDirectiveThirdParty contained passenger_meteor_app_settings +syn keyword ngxDirectiveThirdParty contained passenger_min_instances +syn keyword ngxDirectiveThirdParty contained passenger_monitor_log_file +syn keyword ngxDirectiveThirdParty contained passenger_nodejs +syn keyword ngxDirectiveThirdParty contained passenger_pass_header +syn keyword ngxDirectiveThirdParty contained passenger_pool_idle_time +syn keyword ngxDirectiveThirdParty contained passenger_pre_start +syn keyword ngxDirectiveThirdParty contained passenger_python +syn keyword ngxDirectiveThirdParty contained passenger_read_timeout +syn keyword ngxDirectiveThirdParty contained passenger_request_queue_overflow_status_code +syn keyword ngxDirectiveThirdParty contained passenger_resist_deployment_errors +syn keyword ngxDirectiveThirdParty contained passenger_response_buffer_high_watermark +syn keyword ngxDirectiveThirdParty contained passenger_restart_dir +syn keyword ngxDirectiveThirdParty contained passenger_rolling_restarts +syn keyword ngxDirectiveThirdParty contained passenger_root +syn keyword ngxDirectiveThirdParty contained passenger_ruby +syn keyword ngxDirectiveThirdParty contained passenger_security_update_check_proxy +syn keyword ngxDirectiveThirdParty contained passenger_set_header +syn keyword ngxDirectiveThirdParty contained passenger_show_version_in_header +syn keyword ngxDirectiveThirdParty contained passenger_socket_backlog +syn keyword ngxDirectiveThirdParty contained passenger_spawn_method +syn keyword ngxDirectiveThirdParty contained passenger_start_timeout +syn keyword ngxDirectiveThirdParty contained passenger_startup_file +syn keyword ngxDirectiveThirdParty contained passenger_stat_throttle_rate +syn keyword ngxDirectiveThirdParty contained passenger_sticky_sessions +syn keyword ngxDirectiveThirdParty contained passenger_sticky_sessions_cookie_name +syn keyword ngxDirectiveThirdParty contained passenger_thread_count +syn keyword ngxDirectiveThirdParty contained passenger_turbocaching +syn keyword ngxDirectiveThirdParty contained passenger_user +syn keyword ngxDirectiveThirdParty contained passenger_user_switching +syn keyword ngxDirectiveThirdParty contained passenger_vary_turbocache_by_cookie +syn keyword ngxDirectiveThirdPartyDeprecated contained passenger_analytics_log_group +syn keyword ngxDirectiveThirdPartyDeprecated contained passenger_analytics_log_user +syn keyword ngxDirectiveThirdPartyDeprecated contained passenger_debug_log_file +syn keyword ngxDirectiveThirdPartyDeprecated contained passenger_use_global_queue +syn keyword ngxDirectiveThirdPartyDeprecated contained rack_env +syn keyword ngxDirectiveThirdPartyDeprecated contained rails_app_spawner_idle_time +syn keyword ngxDirectiveThirdPartyDeprecated contained rails_env +syn keyword ngxDirectiveThirdPartyDeprecated contained rails_framework_spawner_idle_time +syn keyword ngxDirectiveThirdPartyDeprecated contained rails_spawn_method +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_filter +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_gateway_address +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_gateway_cert +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_gateway_port +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_key +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_proxy_address +syn keyword ngxDirectiveThirdPartyDeprecated contained union_station_support + +" ngx_postgres is an upstream module that allows nginx to communicate directly with PostgreSQL database +" https://github.com/FRiCKLE/ngx_postgres +syn keyword ngxDirectiveThirdParty contained postgres_connect_timeout +syn keyword ngxDirectiveThirdParty contained postgres_escape +syn keyword ngxDirectiveThirdParty contained postgres_keepalive +syn keyword ngxDirectiveThirdParty contained postgres_output +syn keyword ngxDirectiveThirdParty contained postgres_pass +syn keyword ngxDirectiveThirdParty contained postgres_query +syn keyword ngxDirectiveThirdParty contained postgres_result_timeout +syn keyword ngxDirectiveThirdParty contained postgres_rewrite +syn keyword ngxDirectiveThirdParty contained postgres_server +syn keyword ngxDirectiveThirdParty contained postgres_set + +" ngx_rds_csv - Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV) +" https://github.com/openresty/rds-csv-nginx-module +syn keyword ngxDirectiveThirdParty contained rds_csv +syn keyword ngxDirectiveThirdParty contained rds_csv_buffer_size +syn keyword ngxDirectiveThirdParty contained rds_csv_content_type +syn keyword ngxDirectiveThirdParty contained rds_csv_field_name_header +syn keyword ngxDirectiveThirdParty contained rds_csv_field_separator +syn keyword ngxDirectiveThirdParty contained rds_csv_row_terminator + +" ngx_rds_json - an output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON +" https://github.com/openresty/rds-json-nginx-module +syn keyword ngxDirectiveThirdParty contained rds_json +syn keyword ngxDirectiveThirdParty contained rds_json_buffer_size +syn keyword ngxDirectiveThirdParty contained rds_json_content_type +syn keyword ngxDirectiveThirdParty contained rds_json_errcode_key +syn keyword ngxDirectiveThirdParty contained rds_json_errstr_key +syn keyword ngxDirectiveThirdParty contained rds_json_format +syn keyword ngxDirectiveThirdParty contained rds_json_ret +syn keyword ngxDirectiveThirdParty contained rds_json_root +syn keyword ngxDirectiveThirdParty contained rds_json_success_property +syn keyword ngxDirectiveThirdParty contained rds_json_user_property + +" ngx_redis2 - Nginx upstream module for the Redis 2.0 protocol +" https://github.com/openresty/redis2-nginx-module +syn keyword ngxDirectiveThirdParty contained redis2_bind +syn keyword ngxDirectiveThirdParty contained redis2_buffer_size +syn keyword ngxDirectiveThirdParty contained redis2_connect_timeout +syn keyword ngxDirectiveThirdParty contained redis2_literal_raw_query +syn keyword ngxDirectiveThirdParty contained redis2_next_upstream +syn keyword ngxDirectiveThirdParty contained redis2_pass +syn keyword ngxDirectiveThirdParty contained redis2_query +syn keyword ngxDirectiveThirdParty contained redis2_raw_queries +syn keyword ngxDirectiveThirdParty contained redis2_raw_query +syn keyword ngxDirectiveThirdParty contained redis2_read_timeout +syn keyword ngxDirectiveThirdParty contained redis2_send_timeout + +" NGINX-based Media Streaming Server +" https://github.com/arut/nginx-rtmp-module +syn keyword ngxDirectiveThirdParty contained ack_window +syn keyword ngxDirectiveThirdParty contained application +syn keyword ngxDirectiveThirdParty contained buffer +syn keyword ngxDirectiveThirdParty contained buflen +syn keyword ngxDirectiveThirdParty contained busy +syn keyword ngxDirectiveThirdParty contained chunk_size +syn keyword ngxDirectiveThirdParty contained dash +syn keyword ngxDirectiveThirdParty contained dash_cleanup +syn keyword ngxDirectiveThirdParty contained dash_fragment +syn keyword ngxDirectiveThirdParty contained dash_nested +syn keyword ngxDirectiveThirdParty contained dash_path +syn keyword ngxDirectiveThirdParty contained dash_playlist_length +syn keyword ngxDirectiveThirdParty contained drop_idle_publisher +syn keyword ngxDirectiveThirdParty contained exec +syn keyword ngxDirectiveThirdParty contained exec_block +syn keyword ngxDirectiveThirdParty contained exec_kill_signal +syn keyword ngxDirectiveThirdParty contained exec_options +syn keyword ngxDirectiveThirdParty contained exec_play +syn keyword ngxDirectiveThirdParty contained exec_play_done +syn keyword ngxDirectiveThirdParty contained exec_publish +syn keyword ngxDirectiveThirdParty contained exec_publish_done +syn keyword ngxDirectiveThirdParty contained exec_pull +syn keyword ngxDirectiveThirdParty contained exec_push +syn keyword ngxDirectiveThirdParty contained exec_record_done +syn keyword ngxDirectiveThirdParty contained exec_static +syn keyword ngxDirectiveThirdParty contained hls_audio_buffer_size +syn keyword ngxDirectiveThirdParty contained hls_base_url +syn keyword ngxDirectiveThirdParty contained hls_cleanup +syn keyword ngxDirectiveThirdParty contained hls_continuous +syn keyword ngxDirectiveThirdParty contained hls_fragment_naming +syn keyword ngxDirectiveThirdParty contained hls_fragment_naming_granularity +syn keyword ngxDirectiveThirdParty contained hls_fragment_slicing +syn keyword ngxDirectiveThirdParty contained hls_fragments_per_key +syn keyword ngxDirectiveThirdParty contained hls_key_path +syn keyword ngxDirectiveThirdParty contained hls_key_url +syn keyword ngxDirectiveThirdParty contained hls_keys +syn keyword ngxDirectiveThirdParty contained hls_max_audio_delay +syn keyword ngxDirectiveThirdParty contained hls_max_fragment +syn keyword ngxDirectiveThirdParty contained hls_muxdelay +syn keyword ngxDirectiveThirdParty contained hls_nested +syn keyword ngxDirectiveThirdParty contained hls_path +syn keyword ngxDirectiveThirdParty contained hls_playlist_length +syn keyword ngxDirectiveThirdParty contained hls_sync +syn keyword ngxDirectiveThirdParty contained hls_type +syn keyword ngxDirectiveThirdParty contained hls_variant +syn keyword ngxDirectiveThirdParty contained idle_streams +syn keyword ngxDirectiveThirdParty contained interleave +syn keyword ngxDirectiveThirdParty contained live +syn keyword ngxDirectiveThirdParty contained max_connections +syn keyword ngxDirectiveThirdParty contained max_message +syn keyword ngxDirectiveThirdParty contained max_streams +syn keyword ngxDirectiveThirdParty contained meta +syn keyword ngxDirectiveThirdParty contained netcall_buffer +syn keyword ngxDirectiveThirdParty contained netcall_timeout +syn keyword ngxDirectiveThirdParty contained notify_method +syn keyword ngxDirectiveThirdParty contained notify_relay_redirect +syn keyword ngxDirectiveThirdParty contained notify_update_strict +syn keyword ngxDirectiveThirdParty contained notify_update_timeout +syn keyword ngxDirectiveThirdParty contained on_connect +syn keyword ngxDirectiveThirdParty contained on_disconnect +syn keyword ngxDirectiveThirdParty contained on_done +syn keyword ngxDirectiveThirdParty contained on_play +syn keyword ngxDirectiveThirdParty contained on_play_done +syn keyword ngxDirectiveThirdParty contained on_publish +syn keyword ngxDirectiveThirdParty contained on_publish_done +syn keyword ngxDirectiveThirdParty contained on_record_done +syn keyword ngxDirectiveThirdParty contained on_update +syn keyword ngxDirectiveThirdParty contained out_cork +syn keyword ngxDirectiveThirdParty contained out_queue +syn keyword ngxDirectiveThirdParty contained ping +syn keyword ngxDirectiveThirdParty contained ping_timeout +syn keyword ngxDirectiveThirdParty contained play +syn keyword ngxDirectiveThirdParty contained play_local_path +syn keyword ngxDirectiveThirdParty contained play_restart +syn keyword ngxDirectiveThirdParty contained play_temp_path +syn keyword ngxDirectiveThirdParty contained play_time_fix +syn keyword ngxDirectiveThirdParty contained publish_notify +syn keyword ngxDirectiveThirdParty contained publish_time_fix +syn keyword ngxDirectiveThirdParty contained pull +syn keyword ngxDirectiveThirdParty contained pull_reconnect +syn keyword ngxDirectiveThirdParty contained push +syn keyword ngxDirectiveThirdParty contained push_reconnect +syn keyword ngxDirectiveThirdParty contained record +syn keyword ngxDirectiveThirdParty contained record_append +syn keyword ngxDirectiveThirdParty contained record_interval +syn keyword ngxDirectiveThirdParty contained record_lock +syn keyword ngxDirectiveThirdParty contained record_max_frames +syn keyword ngxDirectiveThirdParty contained record_max_size +syn keyword ngxDirectiveThirdParty contained record_notify +syn keyword ngxDirectiveThirdParty contained record_path +syn keyword ngxDirectiveThirdParty contained record_suffix +syn keyword ngxDirectiveThirdParty contained record_unique +syn keyword ngxDirectiveThirdParty contained recorder +syn keyword ngxDirectiveThirdParty contained relay_buffer +syn keyword ngxDirectiveThirdParty contained respawn +syn keyword ngxDirectiveThirdParty contained respawn_timeout +syn keyword ngxDirectiveThirdParty contained rtmp +syn keyword ngxDirectiveThirdParty contained rtmp_auto_push +syn keyword ngxDirectiveThirdParty contained rtmp_auto_push_reconnect +syn keyword ngxDirectiveThirdParty contained rtmp_control +syn keyword ngxDirectiveThirdParty contained rtmp_socket_dir +syn keyword ngxDirectiveThirdParty contained rtmp_stat +syn keyword ngxDirectiveThirdParty contained rtmp_stat_stylesheet +syn keyword ngxDirectiveThirdParty contained session_relay +syn keyword ngxDirectiveThirdParty contained so_keepalive +syn keyword ngxDirectiveThirdParty contained stream_buckets +syn keyword ngxDirectiveThirdParty contained sync +syn keyword ngxDirectiveThirdParty contained wait_key +syn keyword ngxDirectiveThirdParty contained wait_video + +" ngx_set_misc - Various set_xxx directives added to nginx's rewrite module (md5/sha1, sql/json quoting, and many more) +" https://github.com/openresty/set-misc-nginx-module +syn keyword ngxDirectiveThirdParty contained set_base32_alphabet +syn keyword ngxDirectiveThirdParty contained set_base32_padding +syn keyword ngxDirectiveThirdParty contained set_decode_base32 +syn keyword ngxDirectiveThirdParty contained set_decode_base64 +syn keyword ngxDirectiveThirdParty contained set_decode_hex +syn keyword ngxDirectiveThirdParty contained set_encode_base32 +syn keyword ngxDirectiveThirdParty contained set_encode_base64 +syn keyword ngxDirectiveThirdParty contained set_encode_hex +syn keyword ngxDirectiveThirdParty contained set_escape_uri +syn keyword ngxDirectiveThirdParty contained set_formatted_gmt_time +syn keyword ngxDirectiveThirdParty contained set_formatted_local_time +syn keyword ngxDirectiveThirdParty contained set_hashed_upstream +syn keyword ngxDirectiveThirdParty contained set_hmac_sha1 +syn keyword ngxDirectiveThirdParty contained set_if_empty +syn keyword ngxDirectiveThirdParty contained set_local_today +syn keyword ngxDirectiveThirdParty contained set_misc_base32_padding +syn keyword ngxDirectiveThirdParty contained set_quote_json_str +syn keyword ngxDirectiveThirdParty contained set_quote_pgsql_str +syn keyword ngxDirectiveThirdParty contained set_quote_sql_str +syn keyword ngxDirectiveThirdParty contained set_random +syn keyword ngxDirectiveThirdParty contained set_rotate +syn keyword ngxDirectiveThirdParty contained set_secure_random_alphanum +syn keyword ngxDirectiveThirdParty contained set_secure_random_lcalpha +syn keyword ngxDirectiveThirdParty contained set_unescape_uri + +" nginx-sflow-module +" https://github.com/sflow/nginx-sflow-module +syn keyword ngxDirectiveThirdParty contained sflow + +" Shibboleth auth request module for Nginx +" https://github.com/nginx-shib/nginx-http-shibboleth +syn keyword ngxDirectiveThirdParty contained shib_request +syn keyword ngxDirectiveThirdParty contained shib_request_set +syn keyword ngxDirectiveThirdParty contained shib_request_use_headers + +" nginx module which adds ability to cache static files +" https://github.com/FRiCKLE/ngx_slowfs_cache +syn keyword ngxDirectiveThirdParty contained slowfs_big_file_size +syn keyword ngxDirectiveThirdParty contained slowfs_cache +syn keyword ngxDirectiveThirdParty contained slowfs_cache_key +syn keyword ngxDirectiveThirdParty contained slowfs_cache_min_uses +syn keyword ngxDirectiveThirdParty contained slowfs_cache_path +syn keyword ngxDirectiveThirdParty contained slowfs_cache_purge +syn keyword ngxDirectiveThirdParty contained slowfs_cache_valid +syn keyword ngxDirectiveThirdParty contained slowfs_temp_path + +" Dynamic Image Transformation Module For nginx +" https://github.com/cubicdaiya/ngx_small_light +syn keyword ngxDirectiveThirdParty contained small_light +syn keyword ngxDirectiveThirdParty contained small_light_buffer +syn keyword ngxDirectiveThirdParty contained small_light_getparam_mode +syn keyword ngxDirectiveThirdParty contained small_light_imlib2_temp_dir +syn keyword ngxDirectiveThirdParty contained small_light_material_dir +syn keyword ngxDirectiveThirdParty contained small_light_pattern_define +syn keyword ngxDirectiveThirdParty contained small_light_radius_max +syn keyword ngxDirectiveThirdParty contained small_light_sigma_max + +" ngx_srcache - Transparent subrequest-based caching layout for arbitrary nginx locations +" https://github.com/openresty/srcache-nginx-module +syn keyword ngxDirectiveThirdParty contained srcache_buffer +syn keyword ngxDirectiveThirdParty contained srcache_default_expire +syn keyword ngxDirectiveThirdParty contained srcache_fetch +syn keyword ngxDirectiveThirdParty contained srcache_fetch_skip +syn keyword ngxDirectiveThirdParty contained srcache_header_buffer_size +syn keyword ngxDirectiveThirdParty contained srcache_ignore_content_encoding +syn keyword ngxDirectiveThirdParty contained srcache_max_expire +syn keyword ngxDirectiveThirdParty contained srcache_methods +syn keyword ngxDirectiveThirdParty contained srcache_request_cache_control +syn keyword ngxDirectiveThirdParty contained srcache_response_cache_control +syn keyword ngxDirectiveThirdParty contained srcache_store +syn keyword ngxDirectiveThirdParty contained srcache_store_hide_header +syn keyword ngxDirectiveThirdParty contained srcache_store_max_size +syn keyword ngxDirectiveThirdParty contained srcache_store_no_cache +syn keyword ngxDirectiveThirdParty contained srcache_store_no_store +syn keyword ngxDirectiveThirdParty contained srcache_store_pass_header +syn keyword ngxDirectiveThirdParty contained srcache_store_private +syn keyword ngxDirectiveThirdParty contained srcache_store_ranges +syn keyword ngxDirectiveThirdParty contained srcache_store_skip +syn keyword ngxDirectiveThirdParty contained srcache_store_statuses + +" NGINX-based VOD Packager +" https://github.com/kaltura/nginx-vod-module +syn keyword ngxDirectiveThirdParty contained vod +syn keyword ngxDirectiveThirdParty contained vod_align_segments_to_key_frames +syn keyword ngxDirectiveThirdParty contained vod_apply_dynamic_mapping +syn keyword ngxDirectiveThirdParty contained vod_base_url +syn keyword ngxDirectiveThirdParty contained vod_bootstrap_segment_durations +syn keyword ngxDirectiveThirdParty contained vod_cache_buffer_size +syn keyword ngxDirectiveThirdParty contained vod_clip_from_param_name +syn keyword ngxDirectiveThirdParty contained vod_clip_to_param_name +syn keyword ngxDirectiveThirdParty contained vod_drm_clear_lead_segment_count +syn keyword ngxDirectiveThirdParty contained vod_drm_enabled +syn keyword ngxDirectiveThirdParty contained vod_drm_info_cache +syn keyword ngxDirectiveThirdParty contained vod_drm_max_info_length +syn keyword ngxDirectiveThirdParty contained vod_drm_request_uri +syn keyword ngxDirectiveThirdParty contained vod_drm_single_key +syn keyword ngxDirectiveThirdParty contained vod_drm_upstream_location +syn keyword ngxDirectiveThirdParty contained vod_dynamic_clip_map_uri +syn keyword ngxDirectiveThirdParty contained vod_dynamic_mapping_cache +syn keyword ngxDirectiveThirdParty contained vod_encryption_iv_seed +syn keyword ngxDirectiveThirdParty contained vod_expires +syn keyword ngxDirectiveThirdParty contained vod_expires_live +syn keyword ngxDirectiveThirdParty contained vod_expires_live_time_dependent +syn keyword ngxDirectiveThirdParty contained vod_fallback_upstream_location +syn keyword ngxDirectiveThirdParty contained vod_force_continuous_timestamps +syn keyword ngxDirectiveThirdParty contained vod_force_playlist_type_vod +syn keyword ngxDirectiveThirdParty contained vod_force_sequence_index +syn keyword ngxDirectiveThirdParty contained vod_gop_look_ahead +syn keyword ngxDirectiveThirdParty contained vod_gop_look_behind +syn keyword ngxDirectiveThirdParty contained vod_ignore_edit_list +syn keyword ngxDirectiveThirdParty contained vod_initial_read_size +syn keyword ngxDirectiveThirdParty contained vod_lang_param_name +syn keyword ngxDirectiveThirdParty contained vod_last_modified +syn keyword ngxDirectiveThirdParty contained vod_last_modified_types +syn keyword ngxDirectiveThirdParty contained vod_live_mapping_cache +syn keyword ngxDirectiveThirdParty contained vod_live_response_cache +syn keyword ngxDirectiveThirdParty contained vod_live_window_duration +syn keyword ngxDirectiveThirdParty contained vod_manifest_duration_policy +syn keyword ngxDirectiveThirdParty contained vod_manifest_segment_durations_mode +syn keyword ngxDirectiveThirdParty contained vod_mapping_cache +syn keyword ngxDirectiveThirdParty contained vod_max_frames_size +syn keyword ngxDirectiveThirdParty contained vod_max_mapping_response_size +syn keyword ngxDirectiveThirdParty contained vod_max_metadata_size +syn keyword ngxDirectiveThirdParty contained vod_max_upstream_headers_size +syn keyword ngxDirectiveThirdParty contained vod_media_set_map_uri +syn keyword ngxDirectiveThirdParty contained vod_media_set_override_json +syn keyword ngxDirectiveThirdParty contained vod_metadata_cache +syn keyword ngxDirectiveThirdParty contained vod_min_single_nalu_per_frame_segment +syn keyword ngxDirectiveThirdParty contained vod_mode +syn keyword ngxDirectiveThirdParty contained vod_multi_uri_suffix +syn keyword ngxDirectiveThirdParty contained vod_notification_uri +syn keyword ngxDirectiveThirdParty contained vod_open_file_thread_pool +syn keyword ngxDirectiveThirdParty contained vod_output_buffer_pool +syn keyword ngxDirectiveThirdParty contained vod_parse_hdlr_name +syn keyword ngxDirectiveThirdParty contained vod_path_response_postfix +syn keyword ngxDirectiveThirdParty contained vod_path_response_prefix +syn keyword ngxDirectiveThirdParty contained vod_performance_counters +syn keyword ngxDirectiveThirdParty contained vod_proxy_header_name +syn keyword ngxDirectiveThirdParty contained vod_proxy_header_value +syn keyword ngxDirectiveThirdParty contained vod_redirect_segments_url +syn keyword ngxDirectiveThirdParty contained vod_remote_upstream_location +syn keyword ngxDirectiveThirdParty contained vod_response_cache +syn keyword ngxDirectiveThirdParty contained vod_secret_key +syn keyword ngxDirectiveThirdParty contained vod_segment_count_policy +syn keyword ngxDirectiveThirdParty contained vod_segment_duration +syn keyword ngxDirectiveThirdParty contained vod_segments_base_url +syn keyword ngxDirectiveThirdParty contained vod_source_clip_map_uri +syn keyword ngxDirectiveThirdParty contained vod_speed_param_name +syn keyword ngxDirectiveThirdParty contained vod_status +syn keyword ngxDirectiveThirdParty contained vod_time_shift_param_name +syn keyword ngxDirectiveThirdParty contained vod_tracks_param_name +syn keyword ngxDirectiveThirdParty contained vod_upstream_extra_args +syn keyword ngxDirectiveThirdParty contained vod_upstream_location + +" Nginx virtual host traffic status module +" https://github.com/vozlt/nginx-module-vts +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_average_method +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_bypass_limit +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_bypass_stats +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_format +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_jsonp +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_sum_key +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_dump +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_by_host +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_by_set_key +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_check_duplicate +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_max_node +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_histogram_buckets +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_check_duplicate +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_traffic +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_traffic_by_set_key +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_set_by_filter +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_zone + +" xss-nginx-module - Native cross-site scripting support in nginx +" https://github.com/openresty/xss-nginx-module +syn keyword ngxDirectiveThirdParty contained xss_callback_arg +syn keyword ngxDirectiveThirdParty contained xss_check_status +syn keyword ngxDirectiveThirdParty contained xss_get +syn keyword ngxDirectiveThirdParty contained xss_input_types +syn keyword ngxDirectiveThirdParty contained xss_output_type +syn keyword ngxDirectiveThirdParty contained xss_override_status + +" Add support for array-typed variables to nginx config files +" https://github.com/openresty/array-var-nginx-module +syn keyword ngxDirectiveThirdParty contained array_join +syn keyword ngxDirectiveThirdParty contained array_map +syn keyword ngxDirectiveThirdParty contained array_map_op +syn keyword ngxDirectiveThirdParty contained array_split + +" NGINX module for Brotli compression +" https://github.com/eustas/ngx_brotli +syn keyword ngxDirectiveThirdParty contained brotli +syn keyword ngxDirectiveThirdParty contained brotli_buffers +syn keyword ngxDirectiveThirdParty contained brotli_comp_level +syn keyword ngxDirectiveThirdParty contained brotli_min_length +syn keyword ngxDirectiveThirdParty contained brotli_static +syn keyword ngxDirectiveThirdParty contained brotli_types +syn keyword ngxDirectiveThirdParty contained brotli_window + +" form-input-nginx-module +" https://github.com/calio/form-input-nginx-module +syn keyword ngxDirectiveThirdParty contained set_form_input +syn keyword ngxDirectiveThirdParty contained set_form_input_multi + +" character conversion nginx module using libiconv +" https://github.com/calio/iconv-nginx-module +syn keyword ngxDirectiveThirdParty contained iconv_buffer_size +syn keyword ngxDirectiveThirdParty contained iconv_filter +syn keyword ngxDirectiveThirdParty contained set_iconv + +" 3rd party modules list taken from +" https://www.nginx.com/resources/wiki/modules/ +" --------------------------------------------- + +" Nginx Module for Authenticating Akamai G2O requests +" https://github.com/kaltura/nginx_mod_akamai_g2o +syn keyword ngxDirectiveThirdParty contained g2o +syn keyword ngxDirectiveThirdParty contained g2o_data_header +syn keyword ngxDirectiveThirdParty contained g2o_hash_function +syn keyword ngxDirectiveThirdParty contained g2o_key +syn keyword ngxDirectiveThirdParty contained g2o_log_level +syn keyword ngxDirectiveThirdParty contained g2o_nonce +syn keyword ngxDirectiveThirdParty contained g2o_sign_header +syn keyword ngxDirectiveThirdParty contained g2o_time_window +syn keyword ngxDirectiveThirdParty contained g2o_version + +" nginx_lua_module +" https://github.com/alacner/nginx_lua_module +syn keyword ngxDirectiveThirdParty contained lua_file + +" Nginx Audio Track for HTTP Live Streaming +" https://github.com/flavioribeiro/nginx-audio-track-for-hls-module +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_format +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_header +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_rootpath + +" A Nginx module to dump backtrace when a worker process exits abnormally +" https://github.com/alibaba/nginx-backtrace +syn keyword ngxDirectiveThirdParty contained backtrace_log +syn keyword ngxDirectiveThirdParty contained backtrace_max_stack_size + +" circle_gif module +" https://github.com/evanmiller/nginx_circle_gif +syn keyword ngxDirectiveThirdParty contained circle_gif +syn keyword ngxDirectiveThirdParty contained circle_gif_max_radius +syn keyword ngxDirectiveThirdParty contained circle_gif_min_radius +syn keyword ngxDirectiveThirdParty contained circle_gif_step_radius + +" Upstream Consistent Hash +" https://github.com/replay/ngx_http_consistent_hash +syn keyword ngxDirectiveThirdParty contained consistent_hash + +" Nginx module for etags on dynamic content +" https://github.com/kali/nginx-dynamic-etags +syn keyword ngxDirectiveThirdParty contained dynamic_etags + +" Enhanced Nginx Memcached Module +" https://github.com/bpaquet/ngx_http_enhanced_memcached_module +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_delete +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_put +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_bind +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_buffer_size +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_connect_timeout +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush_namespace +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_hash_keys_with_md5 +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_pass +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_read_timeout +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_send_timeout +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_stats + +" nginx max connections queue +" https://github.com/ezmobius/nginx-ey-balancer +syn keyword ngxDirectiveThirdParty contained max_connections_max_queue_length +syn keyword ngxDirectiveThirdParty contained max_connections_queue_timeout + +" Nginx module for POST authentication and authorization +" https://github.com/veruu/ngx_form_auth +syn keyword ngxDirectiveThirdParty contained form_auth +syn keyword ngxDirectiveThirdParty contained form_auth_login +syn keyword ngxDirectiveThirdParty contained form_auth_pam_service +syn keyword ngxDirectiveThirdParty contained form_auth_password +syn keyword ngxDirectiveThirdParty contained form_auth_remote_user + +" ngx_http_accounting_module +" https://github.com/Lax/ngx_http_accounting_module +syn keyword ngxDirectiveThirdParty contained accounting +syn keyword ngxDirectiveThirdParty contained accounting_id +syn keyword ngxDirectiveThirdParty contained accounting_interval +syn keyword ngxDirectiveThirdParty contained accounting_log +syn keyword ngxDirectiveThirdParty contained accounting_perturb + +" concatenating files in a given context: CSS and JS files usually +" https://github.com/alibaba/nginx-http-concat +syn keyword ngxDirectiveThirdParty contained concat +syn keyword ngxDirectiveThirdParty contained concat_delimiter +syn keyword ngxDirectiveThirdParty contained concat_ignore_file_error +syn keyword ngxDirectiveThirdParty contained concat_max_files +syn keyword ngxDirectiveThirdParty contained concat_types +syn keyword ngxDirectiveThirdParty contained concat_unique + +" update upstreams' config by restful interface +" https://github.com/yzprofile/ngx_http_dyups_module +syn keyword ngxDirectiveThirdParty contained dyups_interface +syn keyword ngxDirectiveThirdParty contained dyups_read_msg_log +syn keyword ngxDirectiveThirdParty contained dyups_read_msg_timeout +syn keyword ngxDirectiveThirdParty contained dyups_shm_zone_size +syn keyword ngxDirectiveThirdParty contained dyups_trylock +syn keyword ngxDirectiveThirdParty contained dyups_upstream_conf + +" add given content to the end of the response according to the condition specified +" https://github.com/flygoast/ngx_http_footer_if_filter +syn keyword ngxDirectiveThirdParty contained footer_if + +" NGINX HTTP Internal Redirect Module +" https://github.com/flygoast/ngx_http_internal_redirect +syn keyword ngxDirectiveThirdParty contained internal_redirect_if +syn keyword ngxDirectiveThirdParty contained internal_redirect_if_no_postpone + +" nginx-ip-blocker +" https://github.com/tmthrgd/nginx-ip-blocker +syn keyword ngxDirectiveThirdParty contained ip_blocker + +" IP2Location Nginx +" https://github.com/chrislim2888/ip2location-nginx +syn keyword ngxDirectiveThirdParty contained ip2location_database + +" Limit upload rate +" https://github.com/cfsego/limit_upload_rate +syn keyword ngxDirectiveThirdParty contained limit_upload_rate +syn keyword ngxDirectiveThirdParty contained limit_upload_rate_after +syn keyword ngxDirectiveThirdParty contained limit_upload_rate_log_level + +" limit the number of connections to upstream +" https://github.com/cfsego/nginx-limit-upstream +syn keyword ngxDirectiveThirdParty contained limit_upstream_conn +syn keyword ngxDirectiveThirdParty contained limit_upstream_log_level +syn keyword ngxDirectiveThirdParty contained limit_upstream_zone + +" conditional accesslog for nginx +" https://github.com/cfsego/ngx_log_if +syn keyword ngxDirectiveThirdParty contained access_log_bypass_if + +" log messages over ZeroMQ +" https://github.com/alticelabs/nginx-log-zmq +syn keyword ngxDirectiveThirdParty contained log_zmq_endpoint +syn keyword ngxDirectiveThirdParty contained log_zmq_format +syn keyword ngxDirectiveThirdParty contained log_zmq_off +syn keyword ngxDirectiveThirdParty contained log_zmq_server + +" simple module to uppercase/lowercase strings in the nginx config +" https://github.com/replay/ngx_http_lower_upper_case +syn keyword ngxDirectiveThirdParty contained lower +syn keyword ngxDirectiveThirdParty contained upper + +" content filter for nginx, which returns the md5 hash of the content otherwise returned +" https://github.com/kainswor/nginx_md5_filter +syn keyword ngxDirectiveThirdParty contained md5_filter + +" Non-blocking upstream module for Nginx to connect to MongoDB +" https://github.com/simpl/ngx_mongo +syn keyword ngxDirectiveThirdParty contained mongo_auth +syn keyword ngxDirectiveThirdParty contained mongo_bind +syn keyword ngxDirectiveThirdParty contained mongo_buffer_size +syn keyword ngxDirectiveThirdParty contained mongo_buffering +syn keyword ngxDirectiveThirdParty contained mongo_buffers +syn keyword ngxDirectiveThirdParty contained mongo_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained mongo_connect_timeout +syn keyword ngxDirectiveThirdParty contained mongo_json +syn keyword ngxDirectiveThirdParty contained mongo_next_upstream +syn keyword ngxDirectiveThirdParty contained mongo_pass +syn keyword ngxDirectiveThirdParty contained mongo_query +syn keyword ngxDirectiveThirdParty contained mongo_read_timeout +syn keyword ngxDirectiveThirdParty contained mongo_send_timeout + +" Nginx OCSP processing module designed for response caching +" https://github.com/kyprizel/nginx_ocsp_proxy-module +syn keyword ngxDirectiveThirdParty contained ocsp_cache_timeout +syn keyword ngxDirectiveThirdParty contained ocsp_proxy + +" Nginx OpenSSL version check at startup +" https://github.com/apcera/nginx-openssl-version +syn keyword ngxDirectiveThirdParty contained openssl_builddate_minimum +syn keyword ngxDirectiveThirdParty contained openssl_version_minimum + +" Automatic PageSpeed optimization module for Nginx +" https://github.com/pagespeed/ngx_pagespeed +syn keyword ngxDirectiveThirdParty contained pagespeed + +" PECL Memcache standard hashing compatible loadbalancer for Nginx +" https://github.com/replay/ngx_http_php_memcache_standard_balancer +syn keyword ngxDirectiveThirdParty contained hash_key + +" nginx module to parse php sessions +" https://github.com/replay/ngx_http_php_session +syn keyword ngxDirectiveThirdParty contained php_session_parse +syn keyword ngxDirectiveThirdParty contained php_session_strip_formatting + +" Nginx HTTP rDNS module +" https://github.com/flant/nginx-http-rdns +syn keyword ngxDirectiveThirdParty contained rdns +syn keyword ngxDirectiveThirdParty contained rdns_allow +syn keyword ngxDirectiveThirdParty contained rdns_deny + +" Streaming regular expression replacement in response bodies +" https://github.com/openresty/replace-filter-nginx-module +syn keyword ngxDirectiveThirdParty contained replace_filter +syn keyword ngxDirectiveThirdParty contained replace_filter_last_modified +syn keyword ngxDirectiveThirdParty contained replace_filter_max_buffered_size +syn keyword ngxDirectiveThirdParty contained replace_filter_skip +syn keyword ngxDirectiveThirdParty contained replace_filter_types + +" Link RRDtool's graphing facilities directly into nginx +" https://github.com/evanmiller/mod_rrd_graph +syn keyword ngxDirectiveThirdParty contained rrd_graph +syn keyword ngxDirectiveThirdParty contained rrd_graph_root + +" Module for nginx to proxy rtmp using http protocol +" https://github.com/kwojtek/nginx-rtmpt-proxy-module +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_http_timeout +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_rtmp_timeout +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_stat +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_stylesheet +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_target + +" Syntactically Awesome NGINX Module +" https://github.com/mneudert/sass-nginx-module +syn keyword ngxDirectiveThirdParty contained sass_compile +syn keyword ngxDirectiveThirdParty contained sass_error_log +syn keyword ngxDirectiveThirdParty contained sass_include_path +syn keyword ngxDirectiveThirdParty contained sass_indent +syn keyword ngxDirectiveThirdParty contained sass_is_indented_syntax +syn keyword ngxDirectiveThirdParty contained sass_linefeed +syn keyword ngxDirectiveThirdParty contained sass_output_style +syn keyword ngxDirectiveThirdParty contained sass_precision +syn keyword ngxDirectiveThirdParty contained sass_source_comments +syn keyword ngxDirectiveThirdParty contained sass_source_map_embed + +" Nginx Selective Cache Purge Module +" https://github.com/wandenberg/nginx-selective-cache-purge-module +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_query +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_database +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_host +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_password +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_port +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_unix_socket + +" cconv nginx module +" https://github.com/liseen/set-cconv-nginx-module +syn keyword ngxDirectiveThirdParty contained set_cconv_to_simp +syn keyword ngxDirectiveThirdParty contained set_cconv_to_trad +syn keyword ngxDirectiveThirdParty contained set_pinyin_to_normal + +" Nginx module that allows the setting of variables to the value of a variety of hashes +" https://github.com/simpl/ngx_http_set_hash +syn keyword ngxDirectiveThirdParty contained set_md5 +syn keyword ngxDirectiveThirdParty contained set_md5_upper +syn keyword ngxDirectiveThirdParty contained set_murmur2 +syn keyword ngxDirectiveThirdParty contained set_murmur2_upper +syn keyword ngxDirectiveThirdParty contained set_sha1 +syn keyword ngxDirectiveThirdParty contained set_sha1_upper + +" Nginx module to set the language of a request based on a number of options +" https://github.com/simpl/ngx_http_set_lang +syn keyword ngxDirectiveThirdParty contained lang_cookie +syn keyword ngxDirectiveThirdParty contained lang_get_var +syn keyword ngxDirectiveThirdParty contained lang_host +syn keyword ngxDirectiveThirdParty contained lang_list +syn keyword ngxDirectiveThirdParty contained lang_post_var +syn keyword ngxDirectiveThirdParty contained lang_referer +syn keyword ngxDirectiveThirdParty contained set_lang +syn keyword ngxDirectiveThirdParty contained set_lang_method + +" Nginx Sorted Querystring Module +" https://github.com/wandenberg/nginx-sorted-querystring-module +syn keyword ngxDirectiveThirdParty contained sorted_querysting_filter_parameter + +" Nginx upstream module for Sphinx 2.x search daemon +" https://github.com/reeteshranjan/sphinx2-nginx-module +syn keyword ngxDirectiveThirdParty contained sphinx2_bind +syn keyword ngxDirectiveThirdParty contained sphinx2_buffer_size +syn keyword ngxDirectiveThirdParty contained sphinx2_connect_timeout +syn keyword ngxDirectiveThirdParty contained sphinx2_next_upstream +syn keyword ngxDirectiveThirdParty contained sphinx2_pass +syn keyword ngxDirectiveThirdParty contained sphinx2_read_timeout +syn keyword ngxDirectiveThirdParty contained sphinx2_send_timeout + +" Nginx module for retrieving user attributes and groups from SSSD +" https://github.com/veruu/ngx_sssd_info +syn keyword ngxDirectiveThirdParty contained sssd_info +syn keyword ngxDirectiveThirdParty contained sssd_info_attribute +syn keyword ngxDirectiveThirdParty contained sssd_info_attribute_separator +syn keyword ngxDirectiveThirdParty contained sssd_info_attributes +syn keyword ngxDirectiveThirdParty contained sssd_info_group +syn keyword ngxDirectiveThirdParty contained sssd_info_group_separator +syn keyword ngxDirectiveThirdParty contained sssd_info_groups +syn keyword ngxDirectiveThirdParty contained sssd_info_output_to + +" An nginx module for sending statistics to statsd +" https://github.com/zebrafishlabs/nginx-statsd +syn keyword ngxDirectiveThirdParty contained statsd_count +syn keyword ngxDirectiveThirdParty contained statsd_sample_rate +syn keyword ngxDirectiveThirdParty contained statsd_server +syn keyword ngxDirectiveThirdParty contained statsd_timing + +" ngx_stream_echo - TCP/stream echo module for NGINX (a port of the ngx_http_echo module) +" https://github.com/openresty/stream-echo-nginx-module +syn keyword ngxDirectiveThirdParty contained echo +syn keyword ngxDirectiveThirdParty contained echo_client_error_log_level +syn keyword ngxDirectiveThirdParty contained echo_discard_request +syn keyword ngxDirectiveThirdParty contained echo_duplicate +syn keyword ngxDirectiveThirdParty contained echo_flush_wait +syn keyword ngxDirectiveThirdParty contained echo_lingering_close +syn keyword ngxDirectiveThirdParty contained echo_lingering_time +syn keyword ngxDirectiveThirdParty contained echo_lingering_timeout +syn keyword ngxDirectiveThirdParty contained echo_read_buffer_size +syn keyword ngxDirectiveThirdParty contained echo_read_bytes +syn keyword ngxDirectiveThirdParty contained echo_read_line +syn keyword ngxDirectiveThirdParty contained echo_read_timeout +syn keyword ngxDirectiveThirdParty contained echo_request_data +syn keyword ngxDirectiveThirdParty contained echo_send_timeout +syn keyword ngxDirectiveThirdParty contained echo_sleep + +" Embed the power of Lua into NGINX TCP/UDP servers +" https://github.com/openresty/stream-lua-nginx-module +syn keyword ngxDirectiveThirdParty contained lua_add_variable +syn keyword ngxDirectiveThirdParty contained preread_by_lua_block +syn keyword ngxDirectiveThirdParty contained preread_by_lua_file +syn keyword ngxDirectiveThirdParty contained preread_by_lua_no_postpone + +" nginx-upsync-module +" https://github.com/weibocom/nginx-upsync-module +syn keyword ngxDirectiveThirdParty contained upstream_show +syn keyword ngxDirectiveThirdParty contained upsync +syn keyword ngxDirectiveThirdParty contained upsync_dump_path +syn keyword ngxDirectiveThirdParty contained upsync_lb + +" Whitespace stripper for nginx +" https://github.com/evanmiller/mod_strip +syn keyword ngxDirectiveThirdParty contained strip + +" Split one big HTTP/Range request to multiple subrange requesets +" https://github.com/Qihoo360/ngx_http_subrange_module +syn keyword ngxDirectiveThirdParty contained subrange + +" summarizer-nginx-module +" https://github.com/reeteshranjan/summarizer-nginx-module +syn keyword ngxDirectiveThirdParty contained summarizer_bind +syn keyword ngxDirectiveThirdParty contained summarizer_buffer_size +syn keyword ngxDirectiveThirdParty contained summarizer_connect_timeout +syn keyword ngxDirectiveThirdParty contained summarizer_next_upstream +syn keyword ngxDirectiveThirdParty contained summarizer_pass +syn keyword ngxDirectiveThirdParty contained summarizer_read_timeout +syn keyword ngxDirectiveThirdParty contained summarizer_send_timeout + +" nginx module providing API to communicate with supervisord and manage (start/stop) backends on-demand +" https://github.com/FRiCKLE/ngx_supervisord +syn keyword ngxDirectiveThirdParty contained supervisord +syn keyword ngxDirectiveThirdParty contained supervisord_inherit_backend_status +syn keyword ngxDirectiveThirdParty contained supervisord_name +syn keyword ngxDirectiveThirdParty contained supervisord_start +syn keyword ngxDirectiveThirdParty contained supervisord_stop + +" simple robot mitigation module using cookie based challenge/response technique. Not supported any more. +" https://github.com/kyprizel/testcookie-nginx-module +syn keyword ngxDirectiveThirdParty contained testcookie +syn keyword ngxDirectiveThirdParty contained testcookie_arg +syn keyword ngxDirectiveThirdParty contained testcookie_deny_keepalive +syn keyword ngxDirectiveThirdParty contained testcookie_domain +syn keyword ngxDirectiveThirdParty contained testcookie_expires +syn keyword ngxDirectiveThirdParty contained testcookie_fallback +syn keyword ngxDirectiveThirdParty contained testcookie_get_only +syn keyword ngxDirectiveThirdParty contained testcookie_httponly_flag +syn keyword ngxDirectiveThirdParty contained testcookie_https_location +syn keyword ngxDirectiveThirdParty contained testcookie_internal +syn keyword ngxDirectiveThirdParty contained testcookie_max_attempts +syn keyword ngxDirectiveThirdParty contained testcookie_name +syn keyword ngxDirectiveThirdParty contained testcookie_p3p +syn keyword ngxDirectiveThirdParty contained testcookie_pass +syn keyword ngxDirectiveThirdParty contained testcookie_path +syn keyword ngxDirectiveThirdParty contained testcookie_port_in_redirect +syn keyword ngxDirectiveThirdParty contained testcookie_redirect_via_refresh +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie_iv +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie_key +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_status +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_template +syn keyword ngxDirectiveThirdParty contained testcookie_secret +syn keyword ngxDirectiveThirdParty contained testcookie_secure_flag +syn keyword ngxDirectiveThirdParty contained testcookie_session +syn keyword ngxDirectiveThirdParty contained testcookie_whitelist + +" ngx_http_types_filter_module +" https://github.com/flygoast/ngx_http_types_filter +syn keyword ngxDirectiveThirdParty contained types_filter +syn keyword ngxDirectiveThirdParty contained types_filter_use_default + +" A module allowing the nginx to use files embedded in a zip file +" https://github.com/youzee/nginx-unzip-module +syn keyword ngxDirectiveThirdParty contained file_in_unzip +syn keyword ngxDirectiveThirdParty contained file_in_unzip_archivefile +syn keyword ngxDirectiveThirdParty contained file_in_unzip_extract + +" An asynchronous domain name resolve module for nginx upstream +" https://github.com/wdaike/ngx_upstream_jdomain +syn keyword ngxDirectiveThirdParty contained jdomain + +" Nginx url encoding converting module +" https://github.com/vozlt/nginx-module-url +syn keyword ngxDirectiveThirdParty contained url_encoding_convert +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_alloc_size +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_alloc_size_x +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_from +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_phase +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_to + +" A nginx module to match browsers and crawlers +" https://github.com/alibaba/nginx-http-user-agent +syn keyword ngxDirectiveThirdParty contained user_agent + +" nginx load-balancer module implementing ketama consistent hashing +" https://github.com/flygoast/ngx_http_upstream_ketama_chash +syn keyword ngxDirectiveThirdParty contained ketama_chash + + + + +" highlight + +hi link ngxComment Comment +hi link ngxParamComment Comment +hi link ngxListenComment Comment +hi link ngxVariable Identifier +hi link ngxVariableString PreProc +hi link ngxString String +hi link ngxListenString String + +hi link ngxBoolean Boolean +hi link ngxDirectiveBlock Statement +hi link ngxDirectiveImportant Type +hi link ngxDirectiveListen Type +hi link ngxDirectiveControl Keyword +hi link ngxDirectiveError Constant +hi link ngxDirectiveDeprecated Error +hi link ngxDirective Identifier +hi link ngxDirectiveThirdParty Special +hi link ngxDirectiveThirdPartyDeprecated Error + +hi link ngxListenOptions Keyword +hi link ngxListenOptionsDeprecated Error + +let b:current_syntax = "nginx" diff --git a/nginx-1.18.0/nginx-1.18.0/docs/CHANGES b/nginx-1.18.0/nginx-1.18.0/docs/CHANGES new file mode 100644 index 0000000..6da9172 --- /dev/null +++ b/nginx-1.18.0/nginx-1.18.0/docs/CHANGES @@ -0,0 +1,8508 @@ + +Changes with nginx 1.18.0 21 Apr 2020 + + *) 1.18.x stable branch. + + +Changes with nginx 1.17.10 14 Apr 2020 + + *) Feature: the "auth_delay" directive. + + +Changes with nginx 1.17.9 03 Mar 2020 + + *) Change: now nginx does not allow several "Host" request header lines. + + *) Bugfix: nginx ignored additional "Transfer-Encoding" request header + lines. + + *) Bugfix: socket leak when using HTTP/2. + + *) Bugfix: a segmentation fault might occur in a worker process if OCSP + stapling was used. + + *) Bugfix: in the ngx_http_mp4_module. + + *) Bugfix: nginx used status code 494 instead of 400 if errors with code + 494 were redirected with the "error_page" directive. + + *) Bugfix: socket leak when using subrequests in the njs module and the + "aio" directive. + + +Changes with nginx 1.17.8 21 Jan 2020 + + *) Feature: variables support in the "grpc_pass" directive. + + *) Bugfix: a timeout might occur while handling pipelined requests in an + SSL connection; the bug had appeared in 1.17.5. + + *) Bugfix: in the "debug_points" directive when using HTTP/2. + Thanks to Daniil Bondarev. + + +Changes with nginx 1.17.7 24 Dec 2019 + + *) Bugfix: a segmentation fault might occur on start or during + reconfiguration if the "rewrite" directive with an empty replacement + string was used in the configuration. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "break" directive was used with the "alias" directive or with the + "proxy_pass" directive with a URI. + + *) Bugfix: the "Location" response header line might contain garbage if + the request URI was rewritten to the one containing a null character. + + *) Bugfix: requests with bodies were handled incorrectly when returning + redirections with the "error_page" directive; the bug had appeared in + 0.7.12. + + *) Bugfix: socket leak when using HTTP/2. + + *) Bugfix: a timeout might occur while handling pipelined requests in an + SSL connection; the bug had appeared in 1.17.5. + + *) Bugfix: in the ngx_http_dav_module. + + +Changes with nginx 1.17.6 19 Nov 2019 + + *) Feature: the $proxy_protocol_server_addr and + $proxy_protocol_server_port variables. + + *) Feature: the "limit_conn_dry_run" directive. + + *) Feature: the $limit_req_status and $limit_conn_status variables. + + +Changes with nginx 1.17.5 22 Oct 2019 + + *) Feature: now nginx uses ioctl(FIONREAD), if available, to avoid + reading from a fast connection for a long time. + + *) Bugfix: incomplete escaped characters at the end of the request URI + were ignored. + + *) Bugfix: "/." and "/.." at the end of the request URI were not + normalized. + + *) Bugfix: in the "merge_slashes" directive. + + *) Bugfix: in the "ignore_invalid_headers" directive. + Thanks to Alan Kemp. + + *) Bugfix: nginx could not be built with MinGW-w64 gcc 8.1 or newer. + + +Changes with nginx 1.17.4 24 Sep 2019 + + *) Change: better detection of incorrect client behavior in HTTP/2. + + *) Change: in handling of not fully read client request body when + returning errors in HTTP/2. + + *) Bugfix: the "worker_shutdown_timeout" directive might not work when + using HTTP/2. + + *) Bugfix: a segmentation fault might occur in a worker process when + using HTTP/2 and the "proxy_request_buffering" directive. + + *) Bugfix: the ECONNABORTED error log level was "crit" instead of + "error" on Windows when using SSL. + + *) Bugfix: nginx ignored extra data when using chunked transfer + encoding. + + *) Bugfix: nginx always returned the 500 error if the "return" directive + was used and an error occurred during reading client request body. + + *) Bugfix: in memory allocation error handling. + + +Changes with nginx 1.17.3 13 Aug 2019 + + *) Security: when using HTTP/2 a client might cause excessive memory + consumption and CPU usage (CVE-2019-9511, CVE-2019-9513, + CVE-2019-9516). + + *) Bugfix: "zero size buf" alerts might appear in logs when using + gzipping; the bug had appeared in 1.17.2. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "resolver" directive was used in SMTP proxy. + + +Changes with nginx 1.17.2 23 Jul 2019 + + *) Change: minimum supported zlib version is 1.2.0.4. + Thanks to Ilya Leoshkevich. + + *) Change: the $r->internal_redirect() embedded perl method now expects + escaped URIs. + + *) Feature: it is now possible to switch to a named location using the + $r->internal_redirect() embedded perl method. + + *) Bugfix: in error handling in embedded perl. + + *) Bugfix: a segmentation fault might occur on start or during + reconfiguration if hash bucket size larger than 64 kilobytes was used + in the configuration. + + *) Bugfix: nginx might hog CPU during unbuffered proxying and when + proxying WebSocket connections if the select, poll, or /dev/poll + methods were used. + + *) Bugfix: in the ngx_http_xslt_filter_module. + + *) Bugfix: in the ngx_http_ssi_filter_module. + + +Changes with nginx 1.17.1 25 Jun 2019 + + *) Feature: the "limit_req_dry_run" directive. + + *) Feature: when using the "hash" directive inside the "upstream" block + an empty hash key now triggers round-robin balancing. + Thanks to Niklas Keller. + + *) Bugfix: a segmentation fault might occur in a worker process if + caching was used along with the "image_filter" directive, and errors + with code 415 were redirected with the "error_page" directive; the + bug had appeared in 1.11.10. + + *) Bugfix: a segmentation fault might occur in a worker process if + embedded perl was used; the bug had appeared in 1.7.3. + + +Changes with nginx 1.17.0 21 May 2019 + + *) Feature: variables support in the "limit_rate" and "limit_rate_after" + directives. + + *) Feature: variables support in the "proxy_upload_rate" and + "proxy_download_rate" directives in the stream module. + + *) Change: minimum supported OpenSSL version is 0.9.8. + + *) Change: now the postpone filter is always built. + + *) Bugfix: the "include" directive did not work inside the "if" and + "limit_except" blocks. + + *) Bugfix: in byte ranges processing. + + +Changes with nginx 1.15.12 16 Apr 2019 + + *) Bugfix: a segmentation fault might occur in a worker process if + variables were used in the "ssl_certificate" or "ssl_certificate_key" + directives and OCSP stapling was enabled. + + +Changes with nginx 1.15.11 09 Apr 2019 + + *) Bugfix: in the "ssl_stapling_file" directive on Windows. + + +Changes with nginx 1.15.10 26 Mar 2019 + + *) Change: when using a hostname in the "listen" directive nginx now + creates listening sockets for all addresses the hostname resolves to + (previously, only the first address was used). + + *) Feature: port ranges in the "listen" directive. + + *) Feature: loading of SSL certificates and secret keys from variables. + + *) Workaround: the $ssl_server_name variable might be empty when using + OpenSSL 1.1.1. + + *) Bugfix: nginx/Windows could not be built with Visual Studio 2015 or + newer; the bug had appeared in 1.15.9. + + +Changes with nginx 1.15.9 26 Feb 2019 + + *) Feature: variables support in the "ssl_certificate" and + "ssl_certificate_key" directives. + + *) Feature: the "poll" method is now available on Windows when using + Windows Vista or newer. + + *) Bugfix: if the "select" method was used on Windows and an error + occurred while establishing a backend connection, nginx waited for + the connection establishment timeout to expire. + + *) Bugfix: the "proxy_upload_rate" and "proxy_download_rate" directives + in the stream module worked incorrectly when proxying UDP datagrams. + + +Changes with nginx 1.15.8 25 Dec 2018 + + *) Feature: the $upstream_bytes_sent variable. + Thanks to Piotr Sikora. + + *) Feature: new directives in vim syntax highlighting scripts. + Thanks to Gena Makhomed. + + *) Bugfix: in the "proxy_cache_background_update" directive. + + *) Bugfix: in the "geo" directive when using unix domain listen sockets. + + *) Workaround: the "ignoring stale global SSL error ... bad length" + alerts might appear in logs when using the "ssl_early_data" directive + with OpenSSL. + + *) Bugfix: in nginx/Windows. + + *) Bugfix: in the ngx_http_autoindex_module on 32-bit platforms. + + +Changes with nginx 1.15.7 27 Nov 2018 + + *) Feature: the "proxy_requests" directive in the stream module. + + *) Feature: the "delay" parameter of the "limit_req" directive. + Thanks to Vladislav Shabanov and Peter Shchuchkin. + + *) Bugfix: memory leak on errors during reconfiguration. + + *) Bugfix: in the $upstream_response_time, $upstream_connect_time, and + $upstream_header_time variables. + + *) Bugfix: a segmentation fault might occur in a worker process if the + ngx_http_mp4_module was used on 32-bit platforms. + + +Changes with nginx 1.15.6 06 Nov 2018 + + *) Security: when using HTTP/2 a client might cause excessive memory + consumption (CVE-2018-16843) and CPU usage (CVE-2018-16844). + + *) Security: processing of a specially crafted mp4 file with the + ngx_http_mp4_module might result in worker process memory disclosure + (CVE-2018-16845). + + *) Feature: the "proxy_socket_keepalive", "fastcgi_socket_keepalive", + "grpc_socket_keepalive", "memcached_socket_keepalive", + "scgi_socket_keepalive", and "uwsgi_socket_keepalive" directives. + + *) Bugfix: if nginx was built with OpenSSL 1.1.0 and used with OpenSSL + 1.1.1, the TLS 1.3 protocol was always enabled. + + *) Bugfix: working with gRPC backends might result in excessive memory + consumption. + + +Changes with nginx 1.15.5 02 Oct 2018 + + *) Bugfix: a segmentation fault might occur in a worker process when + using OpenSSL 1.1.0h or newer; the bug had appeared in 1.15.4. + + *) Bugfix: of minor potential bugs. + + +Changes with nginx 1.15.4 25 Sep 2018 + + *) Feature: now the "ssl_early_data" directive can be used with OpenSSL. + + *) Bugfix: in the ngx_http_uwsgi_module. + Thanks to Chris Caputo. + + *) Bugfix: connections with some gRPC backends might not be cached when + using the "keepalive" directive. + + *) Bugfix: a socket leak might occur when using the "error_page" + directive to redirect early request processing errors, notably errors + with code 400. + + *) Bugfix: the "return" directive did not change the response code when + returning errors if the request was redirected by the "error_page" + directive. + + *) Bugfix: standard error pages and responses of the + ngx_http_autoindex_module module used the "bgcolor" attribute, and + might be displayed incorrectly when using custom color settings in + browsers. + Thanks to Nova DasSarma. + + *) Change: the logging level of the "no suitable key share" and "no + suitable signature algorithm" SSL errors has been lowered from "crit" + to "info". + + +Changes with nginx 1.15.3 28 Aug 2018 + + *) Feature: now TLSv1.3 can be used with BoringSSL. + + *) Feature: the "ssl_early_data" directive, currently available with + BoringSSL. + + *) Feature: the "keepalive_timeout" and "keepalive_requests" directives + in the "upstream" block. + + *) Bugfix: the ngx_http_dav_module did not truncate destination file + when copying a file over an existing one with the COPY method. + + *) Bugfix: the ngx_http_dav_module used zero access rights on the + destination file and did not preserve file modification time when + moving a file between different file systems with the MOVE method. + + *) Bugfix: the ngx_http_dav_module used default access rights when + copying a file with the COPY method. + + *) Workaround: some clients might not work when using HTTP/2; the bug + had appeared in 1.13.5. + + *) Bugfix: nginx could not be built with LibreSSL 2.8.0. + + +Changes with nginx 1.15.2 24 Jul 2018 + + *) Feature: the $ssl_preread_protocol variable in the + ngx_stream_ssl_preread_module. + + *) Feature: now when using the "reset_timedout_connection" directive + nginx will reset connections being closed with the 444 code. + + *) Change: a logging level of the "http request", "https proxy request", + "unsupported protocol", and "version too low" SSL errors has been + lowered from "crit" to "info". + + *) Bugfix: DNS requests were not resent if initial sending of a request + failed. + + *) Bugfix: the "reuseport" parameter of the "listen" directive was + ignored if the number of worker processes was specified after the + "listen" directive. + + *) Bugfix: when using OpenSSL 1.1.0 or newer it was not possible to + switch off "ssl_prefer_server_ciphers" in a virtual server if it was + switched on in the default server. + + *) Bugfix: SSL session reuse with upstream servers did not work with the + TLS 1.3 protocol. + + +Changes with nginx 1.15.1 03 Jul 2018 + + *) Feature: the "random" directive inside the "upstream" block. + + *) Feature: improved performance when using the "hash" and "ip_hash" + directives with the "zone" directive. + + *) Feature: the "reuseport" parameter of the "listen" directive now uses + SO_REUSEPORT_LB on FreeBSD 12. + + *) Bugfix: HTTP/2 server push did not work if SSL was terminated by a + proxy server in front of nginx. + + *) Bugfix: the "tcp_nopush" directive was always used on backend + connections. + + *) Bugfix: sending a disk-buffered request body to a gRPC backend might + fail. + + +Changes with nginx 1.15.0 05 Jun 2018 + + *) Change: the "ssl" directive is deprecated; the "ssl" parameter of the + "listen" directive should be used instead. + + *) Change: now nginx detects missing SSL certificates during + configuration testing when using the "ssl" parameter of the "listen" + directive. + + *) Feature: now the stream module can handle multiple incoming UDP + datagrams from a client within a single session. + + *) Bugfix: it was possible to specify an incorrect response code in the + "proxy_cache_valid" directive. + + *) Bugfix: nginx could not be built by gcc 8.1. + + *) Bugfix: logging to syslog stopped on local IP address changes. + + *) Bugfix: nginx could not be built by clang with CUDA SDK installed; + the bug had appeared in 1.13.8. + + *) Bugfix: "getsockopt(TCP_FASTOPEN) ... failed" messages might appear + in logs during binary upgrade when using unix domain listen sockets + on FreeBSD. + + *) Bugfix: nginx could not be built on Fedora 28 Linux. + + *) Bugfix: request processing rate might exceed configured rate when + using the "limit_req" directive. + + *) Bugfix: in handling of client addresses when using unix domain listen + sockets to work with datagrams on Linux. + + *) Bugfix: in memory allocation error handling. + + +Changes with nginx 1.13.12 10 Apr 2018 + + *) Bugfix: connections with gRPC backends might be closed unexpectedly + when returning a large response. + + +Changes with nginx 1.13.11 03 Apr 2018 + + *) Feature: the "proxy_protocol" parameter of the "listen" directive now + supports the PROXY protocol version 2. + + *) Bugfix: nginx could not be built with OpenSSL 1.1.1 statically on + Linux. + + *) Bugfix: in the "http_404", "http_500", etc. parameters of the + "proxy_next_upstream" directive. + + +Changes with nginx 1.13.10 20 Mar 2018 + + *) Feature: the "set" parameter of the "include" SSI directive now + allows writing arbitrary responses to a variable; the + "subrequest_output_buffer_size" directive defines maximum response + size. + + *) Feature: now nginx uses clock_gettime(CLOCK_MONOTONIC) if available, + to avoid timeouts being incorrectly triggered on system time changes. + + *) Feature: the "escape=none" parameter of the "log_format" directive. + Thanks to Johannes Baiter and Calin Don. + + *) Feature: the $ssl_preread_alpn_protocols variable in the + ngx_stream_ssl_preread_module. + + *) Feature: the ngx_http_grpc_module. + + *) Bugfix: in memory allocation error handling in the "geo" directive. + + *) Bugfix: when using variables in the "auth_basic_user_file" directive + a null character might appear in logs. + Thanks to Vadim Filimonov. + + +Changes with nginx 1.13.9 20 Feb 2018 + + *) Feature: HTTP/2 server push support; the "http2_push" and + "http2_push_preload" directives. + + *) Bugfix: "header already sent" alerts might appear in logs when using + cache; the bug had appeared in 1.9.13. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "ssl_verify_client" directive was used and no SSL certificate was + specified in a virtual server. + + *) Bugfix: in the ngx_http_v2_module. + + *) Bugfix: in the ngx_http_dav_module. + + +Changes with nginx 1.13.8 26 Dec 2017 + + *) Feature: now nginx automatically preserves the CAP_NET_RAW capability + in worker processes when using the "transparent" parameter of the + "proxy_bind", "fastcgi_bind", "memcached_bind", "scgi_bind", and + "uwsgi_bind" directives. + + *) Feature: improved CPU cache line size detection. + Thanks to Debayan Ghosh. + + *) Feature: new directives in vim syntax highlighting scripts. + Thanks to Gena Makhomed. + + *) Bugfix: binary upgrade refused to work if nginx was re-parented to a + process with PID different from 1 after its parent process has + finished. + + *) Bugfix: the ngx_http_autoindex_module incorrectly handled requests + with bodies. + + *) Bugfix: in the "proxy_limit_rate" directive when used with the + "keepalive" directive. + + *) Bugfix: some parts of a response might be buffered when using + "proxy_buffering off" if the client connection used SSL. + Thanks to Patryk Lesiewicz. + + *) Bugfix: in the "proxy_cache_background_update" directive. + + *) Bugfix: it was not possible to start a parameter with a variable in + the "${name}" form with the name in curly brackets without enclosing + the parameter into single or double quotes. + + +Changes with nginx 1.13.7 21 Nov 2017 + + *) Bugfix: in the $upstream_status variable. + + *) Bugfix: a segmentation fault might occur in a worker process if a + backend returned a "101 Switching Protocols" response to a + subrequest. + + *) Bugfix: a segmentation fault occurred in a master process if a shared + memory zone size was changed during a reconfiguration and the + reconfiguration failed. + + *) Bugfix: in the ngx_http_fastcgi_module. + + *) Bugfix: nginx returned the 500 error if parameters without variables + were specified in the "xslt_stylesheet" directive. + + *) Workaround: "gzip filter failed to use preallocated memory" alerts + appeared in logs when using a zlib library variant from Intel. + + *) Bugfix: the "worker_shutdown_timeout" directive did not work when + using mail proxy and when proxying WebSocket connections. + + +Changes with nginx 1.13.6 10 Oct 2017 + + *) Bugfix: switching to the next upstream server in the stream module + did not work when using the "ssl_preread" directive. + + *) Bugfix: in the ngx_http_v2_module. + Thanks to Piotr Sikora. + + *) Bugfix: nginx did not support dates after the year 2038 on 32-bit + platforms with 64-bit time_t. + + *) Bugfix: in handling of dates prior to the year 1970 and after the + year 10000. + + *) Bugfix: in the stream module timeouts waiting for UDP datagrams from + upstream servers were not logged or logged at the "info" level + instead of "error". + + *) Bugfix: when using HTTP/2 nginx might return the 400 response without + logging the reason. + + *) Bugfix: in processing of corrupted cache files. + + *) Bugfix: cache control headers were ignored when caching errors + intercepted by error_page. + + *) Bugfix: when using HTTP/2 client request body might be corrupted. + + *) Bugfix: in handling of client addresses when using unix domain + sockets. + + *) Bugfix: nginx hogged CPU when using the "hash ... consistent" + directive in the upstream block if large weights were used and all or + most of the servers were unavailable. + + +Changes with nginx 1.13.5 05 Sep 2017 + + *) Feature: the $ssl_client_escaped_cert variable. + + *) Bugfix: the "ssl_session_ticket_key" directive and the "include" + parameter of the "geo" directive did not work on Windows. + + *) Bugfix: incorrect response length was returned on 32-bit platforms + when requesting more than 4 gigabytes with multiple ranges. + + *) Bugfix: the "expires modified" directive and processing of the + "If-Range" request header line did not use the response last + modification time if proxying without caching was used. + + +Changes with nginx 1.13.4 08 Aug 2017 + + *) Feature: the ngx_http_mirror_module. + + *) Bugfix: client connections might be dropped during configuration + testing when using the "reuseport" parameter of the "listen" + directive on Linux. + + *) Bugfix: request body might not be available in subrequests if it was + saved to a file and proxying was used. + + *) Bugfix: cleaning cache based on the "max_size" parameter did not work + on Windows. + + *) Bugfix: any shared memory allocation required 4096 bytes on Windows. + + *) Bugfix: nginx worker might be terminated abnormally when using the + "zone" directive inside the "upstream" block on Windows. + + +Changes with nginx 1.13.3 11 Jul 2017 + + *) Security: a specially crafted request might result in an integer + overflow and incorrect processing of ranges in the range filter, + potentially resulting in sensitive information leak (CVE-2017-7529). + + +Changes with nginx 1.13.2 27 Jun 2017 + + *) Change: nginx now returns 200 instead of 416 when a range starting + with 0 is requested from an empty file. + + *) Feature: the "add_trailer" directive. + Thanks to Piotr Sikora. + + *) Bugfix: nginx could not be built on Cygwin and NetBSD; the bug had + appeared in 1.13.0. + + *) Bugfix: nginx could not be built under MSYS2 / MinGW 64-bit. + Thanks to Orgad Shaneh. + + *) Bugfix: a segmentation fault might occur in a worker process when + using SSI with many includes and proxy_pass with variables. + + *) Bugfix: in the ngx_http_v2_module. + Thanks to Piotr Sikora. + + +Changes with nginx 1.13.1 30 May 2017 + + *) Feature: now a hostname can be used as the "set_real_ip_from" + directive parameter. + + *) Feature: vim syntax highlighting scripts improvements. + + *) Feature: the "worker_cpu_affinity" directive now works on DragonFly + BSD. + Thanks to Sepherosa Ziehau. + + *) Bugfix: SSL renegotiation on backend connections did not work when + using OpenSSL before 1.1.0. + + *) Workaround: nginx could not be built with Oracle Developer Studio + 12.5. + + *) Workaround: now cache manager ignores long locked cache entries when + cleaning cache based on the "max_size" parameter. + + *) Bugfix: client SSL connections were immediately closed if deferred + accept and the "proxy_protocol" parameter of the "listen" directive + were used. + + *) Bugfix: in the "proxy_cache_background_update" directive. + + *) Workaround: now the "tcp_nodelay" directive sets the TCP_NODELAY + option before an SSL handshake. + + +Changes with nginx 1.13.0 25 Apr 2017 + + *) Change: SSL renegotiation is now allowed on backend connections. + + *) Feature: the "rcvbuf" and "sndbuf" parameters of the "listen" + directives of the mail proxy and stream modules. + + *) Feature: the "return" and "error_page" directives can now be used to + return 308 redirections. + Thanks to Simon Leblanc. + + *) Feature: the "TLSv1.3" parameter of the "ssl_protocols" directive. + + *) Feature: when logging signals nginx now logs PID of the process which + sent the signal. + + *) Bugfix: in memory allocation error handling. + + *) Bugfix: if a server in the stream module listened on a wildcard + address, the source address of a response UDP datagram could differ + from the original datagram destination address. + + +Changes with nginx 1.11.13 04 Apr 2017 + + *) Feature: the "http_429" parameter of the "proxy_next_upstream", + "fastcgi_next_upstream", "scgi_next_upstream", and + "uwsgi_next_upstream" directives. + Thanks to Piotr Sikora. + + *) Bugfix: in memory allocation error handling. + + *) Bugfix: requests might hang when using the "sendfile" and + "timer_resolution" directives on Linux. + + *) Bugfix: requests might hang when using the "sendfile" and "aio_write" + directives with subrequests. + + *) Bugfix: in the ngx_http_v2_module. + Thanks to Piotr Sikora. + + *) Bugfix: a segmentation fault might occur in a worker process when + using HTTP/2. + + *) Bugfix: requests might hang when using the "limit_rate", + "sendfile_max_chunk", "limit_req" directives, or the $r->sleep() + embedded perl method with subrequests. + + *) Bugfix: in the ngx_http_slice_module. + + +Changes with nginx 1.11.12 24 Mar 2017 + + *) Bugfix: nginx might hog CPU; the bug had appeared in 1.11.11. + + +Changes with nginx 1.11.11 21 Mar 2017 + + *) Feature: the "worker_shutdown_timeout" directive. + + *) Feature: vim syntax highlighting scripts improvements. + Thanks to Wei-Ko Kao. + + *) Bugfix: a segmentation fault might occur in a worker process if the + $limit_rate variable was set to an empty string. + + *) Bugfix: the "proxy_cache_background_update", + "fastcgi_cache_background_update", "scgi_cache_background_update", + and "uwsgi_cache_background_update" directives might work incorrectly + if the "if" directive was used. + + *) Bugfix: a segmentation fault might occur in a worker process if + number of large_client_header_buffers in a virtual server was + different from the one in the default server. + + *) Bugfix: in the mail proxy server. + + +Changes with nginx 1.11.10 14 Feb 2017 + + *) Change: cache header format has been changed, previously cached + responses will be invalidated. + + *) Feature: support of "stale-while-revalidate" and "stale-if-error" + extensions in the "Cache-Control" backend response header line. + + *) Feature: the "proxy_cache_background_update", + "fastcgi_cache_background_update", "scgi_cache_background_update", + and "uwsgi_cache_background_update" directives. + + *) Feature: nginx is now able to cache responses with the "Vary" header + line up to 128 characters long (instead of 42 characters in previous + versions). + + *) Feature: the "build" parameter of the "server_tokens" directive. + Thanks to Tom Thorogood. + + *) Bugfix: "[crit] SSL_write() failed" messages might appear in logs + when handling requests with the "Expect: 100-continue" request header + line. + + *) Bugfix: the ngx_http_slice_module did not work in named locations. + + *) Bugfix: a segmentation fault might occur in a worker process when + using AIO after an "X-Accel-Redirect" redirection. + + *) Bugfix: reduced memory consumption for long-lived requests using + gzipping. + + +Changes with nginx 1.11.9 24 Jan 2017 + + *) Bugfix: nginx might hog CPU when using the stream module; the bug had + appeared in 1.11.5. + + *) Bugfix: EXTERNAL authentication mechanism in mail proxy was accepted + even if it was not enabled in the configuration. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "ssl_verify_client" directive of the stream module was used. + + *) Bugfix: the "ssl_verify_client" directive of the stream module might + not work. + + *) Bugfix: closing keepalive connections due to no free worker + connections might be too aggressive. + Thanks to Joel Cunningham. + + *) Bugfix: an incorrect response might be returned when using the + "sendfile" directive on FreeBSD and macOS; the bug had appeared in + 1.7.8. + + *) Bugfix: a truncated response might be stored in cache when using the + "aio_write" directive. + + *) Bugfix: a socket leak might occur when using the "aio_write" + directive. + + +Changes with nginx 1.11.8 27 Dec 2016 + + *) Feature: the "absolute_redirect" directive. + + *) Feature: the "escape" parameter of the "log_format" directive. + + *) Feature: client SSL certificates verification in the stream module. + + *) Feature: the "ssl_session_ticket_key" directive supports AES256 + encryption of TLS session tickets when used with 80-byte keys. + + *) Feature: vim-commentary support in vim scripts. + Thanks to Armin Grodon. + + *) Bugfix: recursion when evaluating variables was not limited. + + *) Bugfix: in the ngx_stream_ssl_preread_module. + + *) Bugfix: if a server in an upstream in the stream module failed, it + was considered alive only when a test connection sent to it after + fail_timeout was closed; now a successfully established connection is + enough. + + *) Bugfix: nginx/Windows could not be built with 64-bit Visual Studio. + + *) Bugfix: nginx/Windows could not be built with OpenSSL 1.1.0. + + +Changes with nginx 1.11.7 13 Dec 2016 + + *) Change: now in case of a client certificate verification error the + $ssl_client_verify variable contains a string with the failure + reason, for example, "FAILED:certificate has expired". + + *) Feature: the $ssl_ciphers, $ssl_curves, $ssl_client_v_start, + $ssl_client_v_end, and $ssl_client_v_remain variables. + + *) Feature: the "volatile" parameter of the "map" directive. + + *) Bugfix: dependencies specified for a module were ignored while + building dynamic modules. + + *) Bugfix: when using HTTP/2 and the "limit_req" or "auth_request" + directives client request body might be corrupted; the bug had + appeared in 1.11.0. + + *) Bugfix: a segmentation fault might occur in a worker process when + using HTTP/2; the bug had appeared in 1.11.3. + + *) Bugfix: in the ngx_http_mp4_module. + Thanks to Congcong Hu. + + *) Bugfix: in the ngx_http_perl_module. + + +Changes with nginx 1.11.6 15 Nov 2016 + + *) Change: format of the $ssl_client_s_dn and $ssl_client_i_dn variables + has been changed to follow RFC 2253 (RFC 4514); values in the old + format are available in the $ssl_client_s_dn_legacy and + $ssl_client_i_dn_legacy variables. + + *) Change: when storing temporary files in a cache directory they will + be stored in the same subdirectories as corresponding cache files + instead of a separate subdirectory for temporary files. + + *) Feature: EXTERNAL authentication mechanism support in mail proxy. + Thanks to Robert Norris. + + *) Feature: WebP support in the ngx_http_image_filter_module. + + *) Feature: variables support in the "proxy_method" directive. + Thanks to Dmitry Lazurkin. + + *) Feature: the "http2_max_requests" directive in the + ngx_http_v2_module. + + *) Feature: the "proxy_cache_max_range_offset", + "fastcgi_cache_max_range_offset", "scgi_cache_max_range_offset", and + "uwsgi_cache_max_range_offset" directives. + + *) Bugfix: graceful shutdown of old worker processes might require + infinite time when using HTTP/2. + + *) Bugfix: in the ngx_http_mp4_module. + + *) Bugfix: "ignore long locked inactive cache entry" alerts might appear + in logs when proxying WebSocket connections with caching enabled. + + *) Bugfix: nginx did not write anything to log and returned a response + with code 502 instead of 504 when a timeout occurred during an SSL + handshake to a backend. + + +Changes with nginx 1.11.5 11 Oct 2016 + + *) Change: the --with-ipv6 configure option was removed, now IPv6 + support is configured automatically. + + *) Change: now if there are no available servers in an upstream, nginx + will not reset number of failures of all servers as it previously + did, but will wait for fail_timeout to expire. + + *) Feature: the ngx_stream_ssl_preread_module. + + *) Feature: the "server" directive in the "upstream" context supports + the "max_conns" parameter. + + *) Feature: the --with-compat configure option. + + *) Feature: "manager_files", "manager_threshold", and "manager_sleep" + parameters of the "proxy_cache_path", "fastcgi_cache_path", + "scgi_cache_path", and "uwsgi_cache_path" directives. + + *) Bugfix: flags passed by the --with-ld-opt configure option were not + used while building perl module. + + *) Bugfix: in the "add_after_body" directive when used with the + "sub_filter" directive. + + *) Bugfix: in the $realip_remote_addr variable. + + *) Bugfix: the "dav_access", "proxy_store_access", + "fastcgi_store_access", "scgi_store_access", and "uwsgi_store_access" + directives ignored permissions specified for user. + + *) Bugfix: unix domain listen sockets might not be inherited during + binary upgrade on Linux. + + *) Bugfix: nginx returned the 400 response on requests with the "-" + character in the HTTP method. + + +Changes with nginx 1.11.4 13 Sep 2016 + + *) Feature: the $upstream_bytes_received variable. + + *) Feature: the $bytes_received, $session_time, $protocol, $status, + $upstream_addr, $upstream_bytes_sent, $upstream_bytes_received, + $upstream_connect_time, $upstream_first_byte_time, and + $upstream_session_time variables in the stream module. + + *) Feature: the ngx_stream_log_module. + + *) Feature: the "proxy_protocol" parameter of the "listen" directive, + the $proxy_protocol_addr and $proxy_protocol_port variables in the + stream module. + + *) Feature: the ngx_stream_realip_module. + + *) Bugfix: nginx could not be built with the stream module and the + ngx_http_ssl_module, but without ngx_stream_ssl_module; the bug had + appeared in 1.11.3. + + *) Feature: the IP_BIND_ADDRESS_NO_PORT socket option was not used; the + bug had appeared in 1.11.2. + + *) Bugfix: in the "ranges" parameter of the "geo" directive. + + *) Bugfix: an incorrect response might be returned when using the "aio + threads" and "sendfile" directives; the bug had appeared in 1.9.13. + + +Changes with nginx 1.11.3 26 Jul 2016 + + *) Change: now the "accept_mutex" directive is turned off by default. + + *) Feature: now nginx uses EPOLLEXCLUSIVE on Linux. + + *) Feature: the ngx_stream_geo_module. + + *) Feature: the ngx_stream_geoip_module. + + *) Feature: the ngx_stream_split_clients_module. + + *) Feature: variables support in the "proxy_pass" and "proxy_ssl_name" + directives in the stream module. + + *) Bugfix: socket leak when using HTTP/2. + + *) Bugfix: in configure tests. + Thanks to Piotr Sikora. + + +Changes with nginx 1.11.2 05 Jul 2016 + + *) Change: now nginx always uses internal MD5 and SHA1 implementations; + the --with-md5 and --with-sha1 configure options were canceled. + + *) Feature: variables support in the stream module. + + *) Feature: the ngx_stream_map_module. + + *) Feature: the ngx_stream_return_module. + + *) Feature: a port can be specified in the "proxy_bind", "fastcgi_bind", + "memcached_bind", "scgi_bind", and "uwsgi_bind" directives. + + *) Feature: now nginx uses the IP_BIND_ADDRESS_NO_PORT socket option + when available. + + *) Bugfix: a segmentation fault might occur in a worker process when + using HTTP/2 and the "proxy_request_buffering" directive. + + *) Bugfix: the "Content-Length" request header line was always added to + requests passed to backends, including requests without body, when + using HTTP/2. + + *) Bugfix: "http request count is zero" alerts might appear in logs when + using HTTP/2. + + *) Bugfix: unnecessary buffering might occur when using the "sub_filter" + directive; the issue had appeared in 1.9.4. + + +Changes with nginx 1.11.1 31 May 2016 + + *) Security: a segmentation fault might occur in a worker process while + writing a specially crafted request body to a temporary file + (CVE-2016-4450); the bug had appeared in 1.3.9. + + +Changes with nginx 1.11.0 24 May 2016 + + *) Feature: the "transparent" parameter of the "proxy_bind", + "fastcgi_bind", "memcached_bind", "scgi_bind", and "uwsgi_bind" + directives. + + *) Feature: the $request_id variable. + + *) Feature: the "map" directive supports combinations of multiple + variables as resulting values. + + *) Feature: now nginx checks if EPOLLRDHUP events are supported by + kernel, and optimizes connection handling accordingly if the "epoll" + method is used. + + *) Feature: the "ssl_certificate" and "ssl_certificate_key" directives + can be specified multiple times to load certificates of different + types (for example, RSA and ECDSA). + + *) Feature: the "ssl_ecdh_curve" directive now allows specifying a list + of curves when using OpenSSL 1.0.2 or newer; by default a list built + into OpenSSL is used. + + *) Change: to use DHE ciphers it is now required to specify parameters + using the "ssl_dhparam" directive. + + *) Feature: the $proxy_protocol_port variable. + + *) Feature: the $realip_remote_port variable in the + ngx_http_realip_module. + + *) Feature: the ngx_http_realip_module is now able to set the client + port in addition to the address. + + *) Change: the "421 Misdirected Request" response now used when + rejecting requests to a virtual server different from one negotiated + during an SSL handshake; this improves interoperability with some + HTTP/2 clients when using client certificates. + + *) Change: HTTP/2 clients can now start sending request body + immediately; the "http2_body_preread_size" directive controls size of + the buffer used before nginx will start reading client request body. + + *) Bugfix: cached error responses were not updated when using the + "proxy_cache_bypass" directive. + + +Changes with nginx 1.9.15 19 Apr 2016 + + *) Bugfix: "recv() failed" errors might occur when using HHVM as a + FastCGI server. + + *) Bugfix: when using HTTP/2 and the "limit_req" or "auth_request" + directives a timeout or a "client violated flow control" error might + occur while reading client request body; the bug had appeared in + 1.9.14. + + *) Workaround: a response might not be shown by some browsers if HTTP/2 + was used and client request body was not fully read; the bug had + appeared in 1.9.14. + + *) Bugfix: connections might hang when using the "aio threads" + directive. + Thanks to Mindaugas Rasiukevicius. + + +Changes with nginx 1.9.14 05 Apr 2016 + + *) Feature: OpenSSL 1.1.0 compatibility. + + *) Feature: the "proxy_request_buffering", "fastcgi_request_buffering", + "scgi_request_buffering", and "uwsgi_request_buffering" directives + now work with HTTP/2. + + *) Bugfix: "zero size buf in output" alerts might appear in logs when + using HTTP/2. + + *) Bugfix: the "client_max_body_size" directive might work incorrectly + when using HTTP/2. + + *) Bugfix: of minor bugs in logging. + + +Changes with nginx 1.9.13 29 Mar 2016 + + *) Change: non-idempotent requests (POST, LOCK, PATCH) are no longer + passed to the next server by default if a request has been sent to a + backend; the "non_idempotent" parameter of the "proxy_next_upstream" + directive explicitly allows retrying such requests. + + *) Feature: the ngx_http_perl_module can be built dynamically. + + *) Feature: UDP support in the stream module. + + *) Feature: the "aio_write" directive. + + *) Feature: now cache manager monitors number of elements in caches and + tries to avoid cache keys zone overflows. + + *) Bugfix: "task already active" and "second aio post" alerts might + appear in logs when using the "sendfile" and "aio" directives with + subrequests. + + *) Bugfix: "zero size buf in output" alerts might appear in logs if + caching was used and a client closed a connection prematurely. + + *) Bugfix: connections with clients might be closed needlessly if + caching was used. + Thanks to Justin Li. + + *) Bugfix: nginx might hog CPU if the "sendfile" directive was used on + Linux or Solaris and a file being sent was changed during sending. + + *) Bugfix: connections might hang when using the "sendfile" and "aio + threads" directives. + + *) Bugfix: in the "proxy_pass", "fastcgi_pass", "scgi_pass", and + "uwsgi_pass" directives when using variables. + Thanks to Piotr Sikora. + + *) Bugfix: in the ngx_http_sub_filter_module. + + *) Bugfix: if an error occurred in a cached backend connection, the + request was passed to the next server regardless of the + proxy_next_upstream directive. + + *) Bugfix: "CreateFile() failed" errors when creating temporary files on + Windows. + + +Changes with nginx 1.9.12 24 Feb 2016 + + *) Feature: Huffman encoding of response headers in HTTP/2. + Thanks to Vlad Krasnov. + + *) Feature: the "worker_cpu_affinity" directive now supports more than + 64 CPUs. + + *) Bugfix: compatibility with 3rd party C++ modules; the bug had + appeared in 1.9.11. + Thanks to Piotr Sikora. + + *) Bugfix: nginx could not be built statically with OpenSSL on Linux; + the bug had appeared in 1.9.11. + + *) Bugfix: the "add_header ... always" directive with an empty value did + not delete "Last-Modified" and "ETag" header lines from error + responses. + + *) Workaround: "called a function you should not call" and "shutdown + while in init" messages might appear in logs when using OpenSSL + 1.0.2f. + + *) Bugfix: invalid headers might be logged incorrectly. + + *) Bugfix: socket leak when using HTTP/2. + + *) Bugfix: in the ngx_http_v2_module. + + +Changes with nginx 1.9.11 09 Feb 2016 + + *) Feature: TCP support in resolver. + + *) Feature: dynamic modules. + + *) Bugfix: the $request_length variable did not include size of request + headers when using HTTP/2. + + *) Bugfix: in the ngx_http_v2_module. + + +Changes with nginx 1.9.10 26 Jan 2016 + + *) Security: invalid pointer dereference might occur during DNS server + response processing if the "resolver" directive was used, allowing an + attacker who is able to forge UDP packets from the DNS server to + cause segmentation fault in a worker process (CVE-2016-0742). + + *) Security: use-after-free condition might occur during CNAME response + processing if the "resolver" directive was used, allowing an attacker + who is able to trigger name resolution to cause segmentation fault in + a worker process, or might have potential other impact + (CVE-2016-0746). + + *) Security: CNAME resolution was insufficiently limited if the + "resolver" directive was used, allowing an attacker who is able to + trigger arbitrary name resolution to cause excessive resource + consumption in worker processes (CVE-2016-0747). + + *) Feature: the "auto" parameter of the "worker_cpu_affinity" directive. + + *) Bugfix: the "proxy_protocol" parameter of the "listen" directive did + not work with IPv6 listen sockets. + + *) Bugfix: connections to upstream servers might be cached incorrectly + when using the "keepalive" directive. + + *) Bugfix: proxying used the HTTP method of the original request after + an "X-Accel-Redirect" redirection. + + +Changes with nginx 1.9.9 09 Dec 2015 + + *) Bugfix: proxying to unix domain sockets did not work when using + variables; the bug had appeared in 1.9.8. + + +Changes with nginx 1.9.8 08 Dec 2015 + + *) Feature: pwritev() support. + + *) Feature: the "include" directive inside the "upstream" block. + + *) Feature: the ngx_http_slice_module. + + *) Bugfix: a segmentation fault might occur in a worker process when + using LibreSSL; the bug had appeared in 1.9.6. + + *) Bugfix: nginx could not be built on OS X in some cases. + + +Changes with nginx 1.9.7 17 Nov 2015 + + *) Feature: the "nohostname" parameter of logging to syslog. + + *) Feature: the "proxy_cache_convert_head" directive. + + *) Feature: the $realip_remote_addr variable in the + ngx_http_realip_module. + + *) Bugfix: the "expires" directive might not work when using variables. + + *) Bugfix: a segmentation fault might occur in a worker process when + using HTTP/2; the bug had appeared in 1.9.6. + + *) Bugfix: if nginx was built with the ngx_http_v2_module it was + possible to use the HTTP/2 protocol even if the "http2" parameter of + the "listen" directive was not specified. + + *) Bugfix: in the ngx_http_v2_module. + + +Changes with nginx 1.9.6 27 Oct 2015 + + *) Bugfix: a segmentation fault might occur in a worker process when + using HTTP/2. + Thanks to Piotr Sikora and Denis Andzakovic. + + *) Bugfix: the $server_protocol variable was empty when using HTTP/2. + + *) Bugfix: backend SSL connections in the stream module might be timed + out unexpectedly. + + *) Bugfix: a segmentation fault might occur in a worker process if + different ssl_session_cache settings were used in different virtual + servers. + + *) Bugfix: nginx/Windows could not be built with MinGW gcc; the bug had + appeared in 1.9.4. + Thanks to Kouhei Sutou. + + *) Bugfix: time was not updated when the timer_resolution directive was + used on Windows. + + *) Miscellaneous minor fixes and improvements. + Thanks to Markus Linnala, Kurtis Nusbaum and Piotr Sikora. + + +Changes with nginx 1.9.5 22 Sep 2015 + + *) Feature: the ngx_http_v2_module (replaces ngx_http_spdy_module). + Thanks to Dropbox and Automattic for sponsoring this work. + + *) Change: now the "output_buffers" directive uses two buffers by + default. + + *) Change: now nginx limits subrequests recursion, not simultaneous + subrequests. + + *) Change: now nginx checks the whole cache key when returning a + response from cache. + Thanks to Gena Makhomed and Sergey Brester. + + *) Bugfix: "header already sent" alerts might appear in logs when using + cache; the bug had appeared in 1.7.5. + + *) Bugfix: "writev() failed (4: Interrupted system call)" errors might + appear in logs when using CephFS and the "timer_resolution" directive + on Linux. + + *) Bugfix: in invalid configurations handling. + Thanks to Markus Linnala. + + *) Bugfix: a segmentation fault occurred in a worker process if the + "sub_filter" directive was used at http level; the bug had appeared + in 1.9.4. + + +Changes with nginx 1.9.4 18 Aug 2015 + + *) Change: the "proxy_downstream_buffer" and "proxy_upstream_buffer" + directives of the stream module are replaced with the + "proxy_buffer_size" directive. + + *) Feature: the "tcp_nodelay" directive in the stream module. + + *) Feature: multiple "sub_filter" directives can be used simultaneously. + + *) Feature: variables support in the search string of the "sub_filter" + directive. + + *) Workaround: configuration testing might fail under Linux OpenVZ. + Thanks to Gena Makhomed. + + *) Bugfix: old worker processes might hog CPU after reconfiguration with + a large number of worker_connections. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "try_files" and "alias" directives were used inside a location given + by a regular expression; the bug had appeared in 1.7.1. + + *) Bugfix: the "try_files" directive inside a nested location given by a + regular expression worked incorrectly if the "alias" directive was + used in the outer location. + + *) Bugfix: in hash table initialization error handling. + + *) Bugfix: nginx could not be built with Visual Studio 2015. + + +Changes with nginx 1.9.3 14 Jul 2015 + + *) Change: duplicate "http", "mail", and "stream" blocks are now + disallowed. + + *) Feature: connection limiting in the stream module. + + *) Feature: data rate limiting in the stream module. + + *) Bugfix: the "zone" directive inside the "upstream" block did not work + on Windows. + + *) Bugfix: compatibility with LibreSSL in the stream module. + Thanks to Piotr Sikora. + + *) Bugfix: in the "--builddir" configure parameter. + Thanks to Piotr Sikora. + + *) Bugfix: the "ssl_stapling_file" directive did not work; the bug had + appeared in 1.9.2. + Thanks to Faidon Liambotis and Brandon Black. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "ssl_stapling" directive was used; the bug had appeared in 1.9.2. + Thanks to Matthew Baldwin. + + +Changes with nginx 1.9.2 16 Jun 2015 + + *) Feature: the "backlog" parameter of the "listen" directives of the + mail proxy and stream modules. + + *) Feature: the "allow" and "deny" directives in the stream module. + + *) Feature: the "proxy_bind" directive in the stream module. + + *) Feature: the "proxy_protocol" directive in the stream module. + + *) Feature: the -T switch. + + *) Feature: the REQUEST_SCHEME parameter added to the fastcgi.conf, + fastcgi_params, scgi_params, and uwsgi_params standard configuration + files. + + *) Bugfix: the "reuseport" parameter of the "listen" directive of the + stream module did not work. + + *) Bugfix: OCSP stapling might return an expired OCSP response in some + cases. + + +Changes with nginx 1.9.1 26 May 2015 + + *) Change: now SSLv3 protocol is disabled by default. + + *) Change: some long deprecated directives are not supported anymore. + + *) Feature: the "reuseport" parameter of the "listen" directive. + Thanks to Yingqi Lu at Intel and Sepherosa Ziehau. + + *) Feature: the $upstream_connect_time variable. + + *) Bugfix: in the "hash" directive on big-endian platforms. + + *) Bugfix: nginx might fail to start on some old Linux variants; the bug + had appeared in 1.7.11. + + *) Bugfix: in IP address parsing. + Thanks to Sergey Polovko. + + +Changes with nginx 1.9.0 28 Apr 2015 + + *) Change: obsolete aio and rtsig event methods have been removed. + + *) Feature: the "zone" directive inside the "upstream" block. + + *) Feature: the stream module. + + *) Feature: byte ranges support in the ngx_http_memcached_module. + Thanks to Martin Mlynář. + + *) Feature: shared memory can now be used on Windows versions with + address space layout randomization. + Thanks to Sergey Brester. + + *) Feature: the "error_log" directive can now be used on mail and server + levels in mail proxy. + + *) Bugfix: the "proxy_protocol" parameter of the "listen" directive did + not work if not specified in the first "listen" directive for a + listen socket. + + +Changes with nginx 1.7.12 07 Apr 2015 + + *) Feature: now the "tcp_nodelay" directive works with backend SSL + connections. + + *) Feature: now thread pools can be used to read cache file headers. + + *) Bugfix: in the "proxy_request_buffering" directive. + + *) Bugfix: a segmentation fault might occur in a worker process when + using thread pools on Linux. + + *) Bugfix: in error handling when using the "ssl_stapling" directive. + Thanks to Filipe da Silva. + + *) Bugfix: in the ngx_http_spdy_module. + + +Changes with nginx 1.7.11 24 Mar 2015 + + *) Change: the "sendfile" parameter of the "aio" directive is + deprecated; now nginx automatically uses AIO to pre-load data for + sendfile if both "aio" and "sendfile" directives are used. + + *) Feature: experimental thread pools support. + + *) Feature: the "proxy_request_buffering", "fastcgi_request_buffering", + "scgi_request_buffering", and "uwsgi_request_buffering" directives. + + *) Feature: request body filters experimental API. + + *) Feature: client SSL certificates support in mail proxy. + Thanks to Sven Peter, Franck Levionnois, and Filipe Da Silva. + + *) Feature: startup speedup when using the "hash ... consistent" + directive in the upstream block. + Thanks to Wai Keen Woon. + + *) Feature: debug logging into a cyclic memory buffer. + + *) Bugfix: in hash table handling. + Thanks to Chris West. + + *) Bugfix: in the "proxy_cache_revalidate" directive. + + *) Bugfix: SSL connections might hang if deferred accept or the + "proxy_protocol" parameter of the "listen" directive were used. + Thanks to James Hamlin. + + *) Bugfix: the $upstream_response_time variable might contain a wrong + value if the "image_filter" directive was used. + + *) Bugfix: in integer overflow handling. + Thanks to Régis Leroy. + + *) Bugfix: it was not possible to enable SSLv3 with LibreSSL. + + *) Bugfix: the "ignoring stale global SSL error ... called a function + you should not call" alerts appeared in logs when using LibreSSL. + + *) Bugfix: certificates specified by the "ssl_client_certificate" and + "ssl_trusted_certificate" directives were inadvertently used to + automatically construct certificate chains. + + +Changes with nginx 1.7.10 10 Feb 2015 + + *) Feature: the "use_temp_path" parameter of the "proxy_cache_path", + "fastcgi_cache_path", "scgi_cache_path", and "uwsgi_cache_path" + directives. + + *) Feature: the $upstream_header_time variable. + + *) Workaround: now on disk overflow nginx tries to write error logs once + a second only. + + *) Bugfix: the "try_files" directive did not ignore normal files while + testing directories. + Thanks to Damien Tournoud. + + *) Bugfix: alerts "sendfile() failed" if the "sendfile" directive was + used on OS X; the bug had appeared in 1.7.8. + + *) Bugfix: alerts "sem_post() failed" might appear in logs. + + *) Bugfix: nginx could not be built with musl libc. + Thanks to James Taylor. + + *) Bugfix: nginx could not be built on Tru64 UNIX. + Thanks to Goetz T. Fischer. + + +Changes with nginx 1.7.9 23 Dec 2014 + + *) Feature: variables support in the "proxy_cache", "fastcgi_cache", + "scgi_cache", and "uwsgi_cache" directives. + + *) Feature: variables support in the "expires" directive. + + *) Feature: loading of secret keys from hardware tokens with OpenSSL + engines. + Thanks to Dmitrii Pichulin. + + *) Feature: the "autoindex_format" directive. + + *) Bugfix: cache revalidation is now only used for responses with 200 + and 206 status codes. + Thanks to Piotr Sikora. + + *) Bugfix: the "TE" client request header line was passed to backends + while proxying. + + *) Bugfix: the "proxy_pass", "fastcgi_pass", "scgi_pass", and + "uwsgi_pass" directives might not work correctly inside the "if" and + "limit_except" blocks. + + *) Bugfix: the "proxy_store" directive with the "on" parameter was + ignored if the "proxy_store" directive with an explicitly specified + file path was used on a previous level. + + *) Bugfix: nginx could not be built with BoringSSL. + Thanks to Lukas Tribus. + + +Changes with nginx 1.7.8 02 Dec 2014 + + *) Change: now the "If-Modified-Since", "If-Range", etc. client request + header lines are passed to a backend while caching if nginx knows in + advance that the response will not be cached (e.g., when using + proxy_cache_min_uses). + + *) Change: now after proxy_cache_lock_timeout nginx sends a request to a + backend with caching disabled; the new directives + "proxy_cache_lock_age", "fastcgi_cache_lock_age", + "scgi_cache_lock_age", and "uwsgi_cache_lock_age" specify a time + after which the lock will be released and another attempt to cache a + response will be made. + + *) Change: the "log_format" directive can now be used only at http + level. + + *) Feature: the "proxy_ssl_certificate", "proxy_ssl_certificate_key", + "proxy_ssl_password_file", "uwsgi_ssl_certificate", + "uwsgi_ssl_certificate_key", and "uwsgi_ssl_password_file" + directives. + Thanks to Piotr Sikora. + + *) Feature: it is now possible to switch to a named location using + "X-Accel-Redirect". + Thanks to Toshikuni Fukaya. + + *) Feature: now the "tcp_nodelay" directive works with SPDY connections. + + *) Feature: new directives in vim syntax highliting scripts. + Thanks to Peter Wu. + + *) Bugfix: nginx ignored the "s-maxage" value in the "Cache-Control" + backend response header line. + Thanks to Piotr Sikora. + + *) Bugfix: in the ngx_http_spdy_module. + Thanks to Piotr Sikora. + + *) Bugfix: in the "ssl_password_file" directive when using OpenSSL + 0.9.8zc, 1.0.0o, 1.0.1j. + + *) Bugfix: alerts "header already sent" appeared in logs if the + "post_action" directive was used; the bug had appeared in 1.5.4. + + *) Bugfix: alerts "the http output chain is empty" might appear in logs + if the "postpone_output 0" directive was used with SSI includes. + + *) Bugfix: in the "proxy_cache_lock" directive with SSI subrequests. + Thanks to Yichun Zhang. + + +Changes with nginx 1.7.7 28 Oct 2014 + + *) Change: now nginx takes into account the "Vary" header line in a + backend response while caching. + + *) Feature: the "proxy_force_ranges", "fastcgi_force_ranges", + "scgi_force_ranges", and "uwsgi_force_ranges" directives. + + *) Feature: the "proxy_limit_rate", "fastcgi_limit_rate", + "scgi_limit_rate", and "uwsgi_limit_rate" directives. + + *) Feature: the "Vary" parameter of the "proxy_ignore_headers", + "fastcgi_ignore_headers", "scgi_ignore_headers", and + "uwsgi_ignore_headers" directives. + + *) Bugfix: the last part of a response received from a backend with + unbufferred proxy might not be sent to a client if "gzip" or "gunzip" + directives were used. + + *) Bugfix: in the "proxy_cache_revalidate" directive. + Thanks to Piotr Sikora. + + *) Bugfix: in error handling. + Thanks to Yichun Zhang and Daniil Bondarev. + + *) Bugfix: in the "proxy_next_upstream_tries" and + "proxy_next_upstream_timeout" directives. + Thanks to Feng Gu. + + *) Bugfix: nginx/Windows could not be built with MinGW-w64 gcc. + Thanks to Kouhei Sutou. + + +Changes with nginx 1.7.6 30 Sep 2014 + + *) Change: the deprecated "limit_zone" directive is not supported + anymore. + + *) Feature: the "limit_conn_zone" and "limit_req_zone" directives now + can be used with combinations of multiple variables. + + *) Bugfix: request body might be transmitted incorrectly when retrying a + FastCGI request to the next upstream server. + + *) Bugfix: in logging to syslog. + + +Changes with nginx 1.7.5 16 Sep 2014 + + *) Security: it was possible to reuse SSL sessions in unrelated contexts + if a shared SSL session cache or the same TLS session ticket key was + used for multiple "server" blocks (CVE-2014-3616). + Thanks to Antoine Delignat-Lavaud. + + *) Change: now the "stub_status" directive does not require a parameter. + + *) Feature: the "always" parameter of the "add_header" directive. + + *) Feature: the "proxy_next_upstream_tries", + "proxy_next_upstream_timeout", "fastcgi_next_upstream_tries", + "fastcgi_next_upstream_timeout", "memcached_next_upstream_tries", + "memcached_next_upstream_timeout", "scgi_next_upstream_tries", + "scgi_next_upstream_timeout", "uwsgi_next_upstream_tries", and + "uwsgi_next_upstream_timeout" directives. + + *) Bugfix: in the "if" parameter of the "access_log" directive. + + *) Bugfix: in the ngx_http_perl_module. + Thanks to Piotr Sikora. + + *) Bugfix: the "listen" directive of the mail proxy module did not allow + to specify more than two parameters. + + *) Bugfix: the "sub_filter" directive did not work with a string to + replace consisting of a single character. + + *) Bugfix: requests might hang if resolver was used and a timeout + occurred during a DNS request. + + *) Bugfix: in the ngx_http_spdy_module when using with AIO. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "set" directive was used to change the "$http_...", "$sent_http_...", + or "$upstream_http_..." variables. + + *) Bugfix: in memory allocation error handling. + Thanks to Markus Linnala and Feng Gu. + + +Changes with nginx 1.7.4 05 Aug 2014 + + *) Security: pipelined commands were not discarded after STARTTLS + command in SMTP proxy (CVE-2014-3556); the bug had appeared in 1.5.6. + Thanks to Chris Boulton. + + *) Change: URI escaping now uses uppercase hexadecimal digits. + Thanks to Piotr Sikora. + + *) Feature: now nginx can be build with BoringSSL and LibreSSL. + Thanks to Piotr Sikora. + + *) Bugfix: requests might hang if resolver was used and a DNS server + returned a malformed response; the bug had appeared in 1.5.8. + + *) Bugfix: in the ngx_http_spdy_module. + Thanks to Piotr Sikora. + + *) Bugfix: the $uri variable might contain garbage when returning errors + with code 400. + Thanks to Sergey Bobrov. + + *) Bugfix: in error handling in the "proxy_store" directive and the + ngx_http_dav_module. + Thanks to Feng Gu. + + *) Bugfix: a segmentation fault might occur if logging of errors to + syslog was used; the bug had appeared in 1.7.1. + + *) Bugfix: the $geoip_latitude, $geoip_longitude, $geoip_dma_code, and + $geoip_area_code variables might not work. + Thanks to Yichun Zhang. + + *) Bugfix: in memory allocation error handling. + Thanks to Tatsuhiko Kubo and Piotr Sikora. + + +Changes with nginx 1.7.3 08 Jul 2014 + + *) Feature: weak entity tags are now preserved on response + modifications, and strong ones are changed to weak. + + *) Feature: cache revalidation now uses If-None-Match header if + possible. + + *) Feature: the "ssl_password_file" directive. + + *) Bugfix: the If-None-Match request header line was ignored if there + was no Last-Modified header in a response returned from cache. + + *) Bugfix: "peer closed connection in SSL handshake" messages were + logged at "info" level instead of "error" while connecting to + backends. + + *) Bugfix: in the ngx_http_dav_module module in nginx/Windows. + + *) Bugfix: SPDY connections might be closed prematurely if caching was + used. + + +Changes with nginx 1.7.2 17 Jun 2014 + + *) Feature: the "hash" directive inside the "upstream" block. + + *) Feature: defragmentation of free shared memory blocks. + Thanks to Wandenberg Peixoto and Yichun Zhang. + + *) Bugfix: a segmentation fault might occur in a worker process if the + default value of the "access_log" directive was used; the bug had + appeared in 1.7.0. + Thanks to Piotr Sikora. + + *) Bugfix: trailing slash was mistakenly removed from the last parameter + of the "try_files" directive. + + *) Bugfix: nginx could not be built on OS X in some cases. + + *) Bugfix: in the ngx_http_spdy_module. + + +Changes with nginx 1.7.1 27 May 2014 + + *) Feature: the "$upstream_cookie_..." variables. + + *) Feature: the $ssl_client_fingerprint variable. + + *) Feature: the "error_log" and "access_log" directives now support + logging to syslog. + + *) Feature: the mail proxy now logs client port on connect. + + *) Bugfix: memory leak if the "ssl_stapling" directive was used. + Thanks to Filipe da Silva. + + *) Bugfix: the "alias" directive used inside a location given by a + regular expression worked incorrectly if the "if" or "limit_except" + directives were used. + + *) Bugfix: the "charset" directive did not set a charset to encoded + backend responses. + + *) Bugfix: a "proxy_pass" directive without URI part might use original + request after the $args variable was set. + Thanks to Yichun Zhang. + + *) Bugfix: in the "none" parameter in the "smtp_auth" directive; the bug + had appeared in 1.5.6. + Thanks to Svyatoslav Nikolsky. + + *) Bugfix: if sub_filter and SSI were used together, then responses + might be transferred incorrectly. + + *) Bugfix: nginx could not be built with the --with-file-aio option on + Linux/aarch64. + + +Changes with nginx 1.7.0 24 Apr 2014 + + *) Feature: backend SSL certificate verification. + + *) Feature: support for SNI while working with SSL backends. + + *) Feature: the $ssl_server_name variable. + + *) Feature: the "if" parameter of the "access_log" directive. + + +Changes with nginx 1.5.13 08 Apr 2014 + + *) Change: improved hash table handling; the default values of the + "variables_hash_max_size" and "types_hash_bucket_size" were changed + to 1024 and 64 respectively. + + *) Feature: the ngx_http_mp4_module now supports the "end" argument. + + *) Feature: byte ranges support in the ngx_http_mp4_module and while + saving responses to cache. + + *) Bugfix: alerts "ngx_slab_alloc() failed: no memory" no longer logged + when using shared memory in the "ssl_session_cache" directive and in + the ngx_http_limit_req_module. + + *) Bugfix: the "underscores_in_headers" directive did not allow + underscore as a first character of a header. + Thanks to Piotr Sikora. + + *) Bugfix: cache manager might hog CPU on exit in nginx/Windows. + + *) Bugfix: nginx/Windows terminated abnormally if the + "ssl_session_cache" directive was used with the "shared" parameter. + + *) Bugfix: in the ngx_http_spdy_module. + + +Changes with nginx 1.5.12 18 Mar 2014 + + *) Security: a heap memory buffer overflow might occur in a worker + process while handling a specially crafted request by + ngx_http_spdy_module, potentially resulting in arbitrary code + execution (CVE-2014-0133). + Thanks to Lucas Molas, researcher at Programa STIC, Fundación Dr. + Manuel Sadosky, Buenos Aires, Argentina. + + *) Feature: the "proxy_protocol" parameters of the "listen" and + "real_ip_header" directives, the $proxy_protocol_addr variable. + + *) Bugfix: in the "fastcgi_next_upstream" directive. + Thanks to Lucas Molas. + + +Changes with nginx 1.5.11 04 Mar 2014 + + *) Security: memory corruption might occur in a worker process on 32-bit + platforms while handling a specially crafted request by + ngx_http_spdy_module, potentially resulting in arbitrary code + execution (CVE-2014-0088); the bug had appeared in 1.5.10. + Thanks to Lucas Molas, researcher at Programa STIC, Fundación Dr. + Manuel Sadosky, Buenos Aires, Argentina. + + *) Feature: the $ssl_session_reused variable. + + *) Bugfix: the "client_max_body_size" directive might not work when + reading a request body using chunked transfer encoding; the bug had + appeared in 1.3.9. + Thanks to Lucas Molas. + + *) Bugfix: a segmentation fault might occur in a worker process when + proxying WebSocket connections. + + *) Bugfix: a segmentation fault might occur in a worker process if the + ngx_http_spdy_module was used on 32-bit platforms; the bug had + appeared in 1.5.10. + + *) Bugfix: the $upstream_status variable might contain wrong data if the + "proxy_cache_use_stale" or "proxy_cache_revalidate" directives were + used. + Thanks to Piotr Sikora. + + *) Bugfix: a segmentation fault might occur in a worker process if + errors with code 400 were redirected to a named location using the + "error_page" directive. + + *) Bugfix: nginx/Windows could not be built with Visual Studio 2013. + + +Changes with nginx 1.5.10 04 Feb 2014 + + *) Feature: the ngx_http_spdy_module now uses SPDY 3.1 protocol. + Thanks to Automattic and MaxCDN for sponsoring this work. + + *) Feature: the ngx_http_mp4_module now skips tracks too short for a + seek requested. + + *) Bugfix: a segmentation fault might occur in a worker process if the + $ssl_session_id variable was used in logs; the bug had appeared in + 1.5.9. + + *) Bugfix: the $date_local and $date_gmt variables used wrong format + outside of the ngx_http_ssi_filter_module. + + *) Bugfix: client connections might be immediately closed if deferred + accept was used; the bug had appeared in 1.3.15. + + *) Bugfix: alerts "getsockopt(TCP_FASTOPEN) ... failed" appeared in logs + during binary upgrade on Linux; the bug had appeared in 1.5.8. + Thanks to Piotr Sikora. + + +Changes with nginx 1.5.9 22 Jan 2014 + + *) Change: now nginx expects escaped URIs in "X-Accel-Redirect" headers. + + *) Feature: the "ssl_buffer_size" directive. + + *) Feature: the "limit_rate" directive can now be used to rate limit + responses sent in SPDY connections. + + *) Feature: the "spdy_chunk_size" directive. + + *) Feature: the "ssl_session_tickets" directive. + Thanks to Dirkjan Bussink. + + *) Bugfix: the $ssl_session_id variable contained full session + serialized instead of just a session id. + Thanks to Ivan Ristić. + + *) Bugfix: nginx incorrectly handled escaped "?" character in the + "include" SSI command. + + *) Bugfix: the ngx_http_dav_module did not unescape destination URI of + the COPY and MOVE methods. + + *) Bugfix: resolver did not understand domain names with a trailing dot. + Thanks to Yichun Zhang. + + *) Bugfix: alerts "zero size buf in output" might appear in logs while + proxying; the bug had appeared in 1.3.9. + + *) Bugfix: a segmentation fault might occur in a worker process if the + ngx_http_spdy_module was used. + + *) Bugfix: proxied WebSocket connections might hang right after + handshake if the select, poll, or /dev/poll methods were used. + + *) Bugfix: the "xclient" directive of the mail proxy module incorrectly + handled IPv6 client addresses. + + +Changes with nginx 1.5.8 17 Dec 2013 + + *) Feature: IPv6 support in resolver. + + *) Feature: the "listen" directive supports the "fastopen" parameter. + Thanks to Mathew Rodley. + + *) Feature: SSL support in the ngx_http_uwsgi_module. + Thanks to Roberto De Ioris. + + *) Feature: vim syntax highlighting scripts were added to contrib. + Thanks to Evan Miller. + + *) Bugfix: a timeout might occur while reading client request body in an + SSL connection using chunked transfer encoding. + + *) Bugfix: the "master_process" directive did not work correctly in + nginx/Windows. + + *) Bugfix: the "setfib" parameter of the "listen" directive might not + work. + + *) Bugfix: in the ngx_http_spdy_module. + + +Changes with nginx 1.5.7 19 Nov 2013 + + *) Security: a character following an unescaped space in a request line + was handled incorrectly (CVE-2013-4547); the bug had appeared in + 0.8.41. + Thanks to Ivan Fratric of the Google Security Team. + + *) Change: a logging level of auth_basic errors about no user/password + provided has been lowered from "error" to "info". + + *) Feature: the "proxy_cache_revalidate", "fastcgi_cache_revalidate", + "scgi_cache_revalidate", and "uwsgi_cache_revalidate" directives. + + *) Feature: the "ssl_session_ticket_key" directive. + Thanks to Piotr Sikora. + + *) Bugfix: the directive "add_header Cache-Control ''" added a + "Cache-Control" response header line with an empty value. + + *) Bugfix: the "satisfy any" directive might return 403 error instead of + 401 if auth_request and auth_basic directives were used. + Thanks to Jan Marc Hoffmann. + + *) Bugfix: the "accept_filter" and "deferred" parameters of the "listen" + directive were ignored for listen sockets created during binary + upgrade. + Thanks to Piotr Sikora. + + *) Bugfix: some data received from a backend with unbufferred proxy + might not be sent to a client immediately if "gzip" or "gunzip" + directives were used. + Thanks to Yichun Zhang. + + *) Bugfix: in error handling in ngx_http_gunzip_filter_module. + + *) Bugfix: responses might hang if the ngx_http_spdy_module was used + with the "auth_request" directive. + + *) Bugfix: memory leak in nginx/Windows. + + +Changes with nginx 1.5.6 01 Oct 2013 + + *) Feature: the "fastcgi_buffering" directive. + + *) Feature: the "proxy_ssl_protocols" and "proxy_ssl_ciphers" + directives. + Thanks to Piotr Sikora. + + *) Feature: optimization of SSL handshakes when using long certificate + chains. + + *) Feature: the mail proxy supports SMTP pipelining. + + *) Bugfix: in the ngx_http_auth_basic_module when using "$apr1$" + password encryption method. + Thanks to Markus Linnala. + + *) Bugfix: in MacOSX, Cygwin, and nginx/Windows incorrect location might + be used to process a request if locations were given using characters + in different cases. + + *) Bugfix: automatic redirect with appended trailing slash for proxied + locations might not work. + + *) Bugfix: in the mail proxy server. + + *) Bugfix: in the ngx_http_spdy_module. + + +Changes with nginx 1.5.5 17 Sep 2013 + + *) Change: now nginx assumes HTTP/1.0 by default if it is not able to + detect protocol reliably. + + *) Feature: the "disable_symlinks" directive now uses O_PATH on Linux. + + *) Feature: now nginx uses EPOLLRDHUP events to detect premature + connection close by clients if the "epoll" method is used. + + *) Bugfix: in the "valid_referers" directive if the "server_names" + parameter was used. + + *) Bugfix: the $request_time variable did not work in nginx/Windows. + + *) Bugfix: in the "image_filter" directive. + Thanks to Lanshun Zhou. + + *) Bugfix: OpenSSL 1.0.1f compatibility. + Thanks to Piotr Sikora. + + +Changes with nginx 1.5.4 27 Aug 2013 + + *) Change: the "js" extension MIME type has been changed to + "application/javascript"; default value of the "charset_types" + directive was changed accordingly. + + *) Change: now the "image_filter" directive with the "size" parameter + returns responses with the "application/json" MIME type. + + *) Feature: the ngx_http_auth_request_module. + + *) Bugfix: a segmentation fault might occur on start or during + reconfiguration if the "try_files" directive was used with an empty + parameter. + + *) Bugfix: memory leak if relative paths were specified using variables + in the "root" or "auth_basic_user_file" directives. + + *) Bugfix: the "valid_referers" directive incorrectly executed regular + expressions if a "Referer" header started with "https://". + Thanks to Liangbin Li. + + *) Bugfix: responses might hang if subrequests were used and an SSL + handshake error happened during subrequest processing. + Thanks to Aviram Cohen. + + *) Bugfix: in the ngx_http_autoindex_module. + + *) Bugfix: in the ngx_http_spdy_module. + + +Changes with nginx 1.5.3 30 Jul 2013 + + *) Change in internal API: now u->length defaults to -1 if working with + backends in unbuffered mode. + + *) Change: now after receiving an incomplete response from a backend + server nginx tries to send an available part of the response to a + client, and then closes client connection. + + *) Bugfix: a segmentation fault might occur in a worker process if the + ngx_http_spdy_module was used with the "client_body_in_file_only" + directive. + + *) Bugfix: the "so_keepalive" parameter of the "listen" directive might + be handled incorrectly on DragonFlyBSD. + Thanks to Sepherosa Ziehau. + + *) Bugfix: in the ngx_http_xslt_filter_module. + + *) Bugfix: in the ngx_http_sub_filter_module. + + +Changes with nginx 1.5.2 02 Jul 2013 + + *) Feature: now several "error_log" directives can be used. + + *) Bugfix: the $r->header_in() embedded perl method did not return value + of the "Cookie" and "X-Forwarded-For" request header lines; the bug + had appeared in 1.3.14. + + *) Bugfix: in the ngx_http_spdy_module. + Thanks to Jim Radford. + + *) Bugfix: nginx could not be built on Linux with x32 ABI. + Thanks to Serguei Ivantsov. + + +Changes with nginx 1.5.1 04 Jun 2013 + + *) Feature: the "ssi_last_modified", "sub_filter_last_modified", and + "xslt_last_modified" directives. + Thanks to Alexey Kolpakov. + + *) Feature: the "http_403" parameter of the "proxy_next_upstream", + "fastcgi_next_upstream", "scgi_next_upstream", and + "uwsgi_next_upstream" directives. + + *) Feature: the "allow" and "deny" directives now support unix domain + sockets. + + *) Bugfix: nginx could not be built with the ngx_mail_ssl_module, but + without ngx_http_ssl_module; the bug had appeared in 1.3.14. + + *) Bugfix: in the "proxy_set_body" directive. + Thanks to Lanshun Zhou. + + *) Bugfix: in the "lingering_time" directive. + Thanks to Lanshun Zhou. + + *) Bugfix: the "fail_timeout" parameter of the "server" directive in the + "upstream" context might not work if "max_fails" parameter was used; + the bug had appeared in 1.3.0. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "ssl_stapling" directive was used. + Thanks to Piotr Sikora. + + *) Bugfix: in the mail proxy server. + Thanks to Filipe Da Silva. + + *) Bugfix: nginx/Windows might stop accepting connections if several + worker processes were used. + + +Changes with nginx 1.5.0 07 May 2013 + + *) Security: a stack-based buffer overflow might occur in a worker + process while handling a specially crafted request, potentially + resulting in arbitrary code execution (CVE-2013-2028); the bug had + appeared in 1.3.9. + Thanks to Greg MacManus, iSIGHT Partners Labs. + + +Changes with nginx 1.4.0 24 Apr 2013 + + *) Bugfix: nginx could not be built with the ngx_http_perl_module if the + --with-openssl option was used; the bug had appeared in 1.3.16. + + *) Bugfix: in a request body handling in the ngx_http_perl_module; the + bug had appeared in 1.3.9. + + +Changes with nginx 1.3.16 16 Apr 2013 + + *) Bugfix: a segmentation fault might occur in a worker process if + subrequests were used; the bug had appeared in 1.3.9. + + *) Bugfix: the "tcp_nodelay" directive caused an error if a WebSocket + connection was proxied into a unix domain socket. + + *) Bugfix: the $upstream_response_length variable has an incorrect value + "0" if buffering was not used. + Thanks to Piotr Sikora. + + *) Bugfix: in the eventport and /dev/poll methods. + + +Changes with nginx 1.3.15 26 Mar 2013 + + *) Change: opening and closing a connection without sending any data in + it is no longer logged to access_log with error code 400. + + *) Feature: the ngx_http_spdy_module. + Thanks to Automattic for sponsoring this work. + + *) Feature: the "limit_req_status" and "limit_conn_status" directives. + Thanks to Nick Marden. + + *) Feature: the "image_filter_interlace" directive. + Thanks to Ian Babrou. + + *) Feature: $connections_waiting variable in the + ngx_http_stub_status_module. + + *) Feature: the mail proxy module now supports IPv6 backends. + + *) Bugfix: request body might be transmitted incorrectly when retrying a + request to the next upstream server; the bug had appeared in 1.3.9. + Thanks to Piotr Sikora. + + *) Bugfix: in the "client_body_in_file_only" directive; the bug had + appeared in 1.3.9. + + *) Bugfix: responses might hang if subrequests were used and a DNS error + happened during subrequest processing. + Thanks to Lanshun Zhou. + + *) Bugfix: in backend usage accounting. + + +Changes with nginx 1.3.14 05 Mar 2013 + + *) Feature: $connections_active, $connections_reading, and + $connections_writing variables in the ngx_http_stub_status_module. + + *) Feature: support of WebSocket connections in the + ngx_http_uwsgi_module and ngx_http_scgi_module. + + *) Bugfix: in virtual servers handling with SNI. + + *) Bugfix: new sessions were not always stored if the "ssl_session_cache + shared" directive was used and there was no free space in shared + memory. + Thanks to Piotr Sikora. + + *) Bugfix: multiple X-Forwarded-For headers were handled incorrectly. + Thanks to Neal Poole for sponsoring this work. + + *) Bugfix: in the ngx_http_mp4_module. + Thanks to Gernot Vormayr. + + +Changes with nginx 1.3.13 19 Feb 2013 + + *) Change: a compiler with name "cc" is now used by default. + + *) Feature: support for proxying of WebSocket connections. + Thanks to Apcera and CloudBees for sponsoring this work. + + *) Feature: the "auth_basic_user_file" directive supports "{SHA}" + password encryption method. + Thanks to Louis Opter. + + +Changes with nginx 1.3.12 05 Feb 2013 + + *) Feature: variables support in the "proxy_bind", "fastcgi_bind", + "memcached_bind", "scgi_bind", and "uwsgi_bind" directives. + + *) Feature: the $pipe, $request_length, $time_iso8601, and $time_local + variables can now be used not only in the "log_format" directive. + Thanks to Kiril Kalchev. + + *) Feature: IPv6 support in the ngx_http_geoip_module. + Thanks to Gregor Kališnik. + + *) Bugfix: in the "proxy_method" directive. + + *) Bugfix: a segmentation fault might occur in a worker process if + resolver was used with the poll method. + + *) Bugfix: nginx might hog CPU during SSL handshake with a backend if + the select, poll, or /dev/poll methods were used. + + *) Bugfix: the "[crit] SSL_write() failed (SSL:)" error. + + *) Bugfix: in the "client_body_in_file_only" directive; the bug had + appeared in 1.3.9. + + *) Bugfix: in the "fastcgi_keep_conn" directive. + + +Changes with nginx 1.3.11 10 Jan 2013 + + *) Bugfix: a segmentation fault might occur if logging was used; the bug + had appeared in 1.3.10. + + *) Bugfix: the "proxy_pass" directive did not work with IP addresses + without port specified; the bug had appeared in 1.3.10. + + *) Bugfix: a segmentation fault occurred on start or during + reconfiguration if the "keepalive" directive was specified more than + once in a single upstream block. + + *) Bugfix: parameter "default" of the "geo" directive did not set + default value for IPv6 addresses. + + +Changes with nginx 1.3.10 25 Dec 2012 + + *) Change: domain names specified in configuration file are now resolved + to IPv6 addresses as well as IPv4 ones. + + *) Change: now if the "include" directive with mask is used on Unix + systems, included files are sorted in alphabetical order. + + *) Change: the "add_header" directive adds headers to 201 responses. + + *) Feature: the "geo" directive now supports IPv6 addresses in CIDR + notation. + + *) Feature: the "flush" and "gzip" parameters of the "access_log" + directive. + + *) Feature: variables support in the "auth_basic" directive. + + *) Bugfix: nginx could not be built with the ngx_http_perl_module in + some cases. + + *) Bugfix: a segmentation fault might occur in a worker process if the + ngx_http_xslt_module was used. + + *) Bugfix: nginx could not be built on MacOSX in some cases. + Thanks to Piotr Sikora. + + *) Bugfix: the "limit_rate" directive with high rates might result in + truncated responses on 32-bit platforms. + Thanks to Alexey Antropov. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "if" directive was used. + Thanks to Piotr Sikora. + + *) Bugfix: a "100 Continue" response was issued with "413 Request Entity + Too Large" responses. + + *) Bugfix: the "image_filter", "image_filter_jpeg_quality" and + "image_filter_sharpen" directives might be inherited incorrectly. + Thanks to Ian Babrou. + + *) Bugfix: "crypt_r() failed" errors might appear if the "auth_basic" + directive was used on Linux. + + *) Bugfix: in backup servers handling. + Thanks to Thomas Chen. + + *) Bugfix: proxied HEAD requests might return incorrect response if the + "gzip" directive was used. + + +Changes with nginx 1.3.9 27 Nov 2012 + + *) Feature: support for chunked transfer encoding while reading client + request body. + + *) Feature: the $request_time and $msec variables can now be used not + only in the "log_format" directive. + + *) Bugfix: cache manager and cache loader processes might not be able to + start if more than 512 listen sockets were used. + + *) Bugfix: in the ngx_http_dav_module. + + +Changes with nginx 1.3.8 30 Oct 2012 + + *) Feature: the "optional_no_ca" parameter of the "ssl_verify_client" + directive. + Thanks to Mike Kazantsev and Eric O'Connor. + + *) Feature: the $bytes_sent, $connection, and $connection_requests + variables can now be used not only in the "log_format" directive. + Thanks to Benjamin Grössing. + + *) Feature: the "auto" parameter of the "worker_processes" directive. + + *) Bugfix: "cache file ... has md5 collision" alert. + + *) Bugfix: in the ngx_http_gunzip_filter_module. + + *) Bugfix: in the "ssl_stapling" directive. + + +Changes with nginx 1.3.7 02 Oct 2012 + + *) Feature: OCSP stapling support. + Thanks to Comodo, DigiCert and GlobalSign for sponsoring this work. + + *) Feature: the "ssl_trusted_certificate" directive. + + *) Feature: resolver now randomly rotates addresses returned from cache. + Thanks to Anton Jouline. + + *) Bugfix: OpenSSL 0.9.7 compatibility. + + +Changes with nginx 1.3.6 12 Sep 2012 + + *) Feature: the ngx_http_gunzip_filter_module. + + *) Feature: the "memcached_gzip_flag" directive. + + *) Feature: the "always" parameter of the "gzip_static" directive. + + *) Bugfix: in the "limit_req" directive; the bug had appeared in 1.1.14. + Thanks to Charles Chen. + + *) Bugfix: nginx could not be built by gcc 4.7 with -O2 optimization if + the --with-ipv6 option was used. + + +Changes with nginx 1.3.5 21 Aug 2012 + + *) Change: the ngx_http_mp4_module module no longer skips tracks in + formats other than H.264 and AAC. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "map" directive was used with variables as values. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "geo" directive was used with the "ranges" parameter but without the + "default" parameter; the bug had appeared in 0.8.43. + Thanks to Zhen Chen and Weibin Yao. + + *) Bugfix: in the -p command-line parameter handling. + + *) Bugfix: in the mail proxy server. + + *) Bugfix: of minor potential bugs. + Thanks to Coverity. + + *) Bugfix: nginx/Windows could not be built with Visual Studio 2005 + Express. + Thanks to HAYASHI Kentaro. + + +Changes with nginx 1.3.4 31 Jul 2012 + + *) Change: the "ipv6only" parameter is now turned on by default for + listening IPv6 sockets. + + *) Feature: the Clang compiler support. + + *) Bugfix: extra listening sockets might be created. + Thanks to Roman Odaisky. + + *) Bugfix: nginx/Windows might hog CPU if a worker process failed to + start. + Thanks to Ricardo Villalobos Guevara. + + *) Bugfix: the "proxy_pass_header", "fastcgi_pass_header", + "scgi_pass_header", "uwsgi_pass_header", "proxy_hide_header", + "fastcgi_hide_header", "scgi_hide_header", and "uwsgi_hide_header" + directives might be inherited incorrectly. + + +Changes with nginx 1.3.3 10 Jul 2012 + + *) Feature: entity tags support and the "etag" directive. + + *) Bugfix: trailing dot in a source value was not ignored if the "map" + directive was used with the "hostnames" parameter. + + *) Bugfix: incorrect location might be used to process a request if a + URI was changed via a "rewrite" directive before an internal redirect + to a named location. + + +Changes with nginx 1.3.2 26 Jun 2012 + + *) Change: the "single" parameter of the "keepalive" directive is now + ignored. + + *) Change: SSL compression is now disabled when using all versions of + OpenSSL, including ones prior to 1.0.0. + + *) Feature: it is now possible to use the "ip_hash" directive to balance + IPv6 clients. + + *) Feature: the $status variable can now be used not only in the + "log_format" directive. + + *) Bugfix: a segmentation fault might occur in a worker process on + shutdown if the "resolver" directive was used. + + *) Bugfix: a segmentation fault might occur in a worker process if the + ngx_http_mp4_module was used. + + *) Bugfix: in the ngx_http_mp4_module. + + *) Bugfix: a segmentation fault might occur in a worker process if + conflicting wildcard server names were used. + + *) Bugfix: nginx might be terminated abnormally on a SIGBUS signal on + ARM platform. + + *) Bugfix: an alert "sendmsg() failed (9: Bad file number)" on HP-UX + while reconfiguration. + + +Changes with nginx 1.3.1 05 Jun 2012 + + *) Security: now nginx/Windows ignores trailing dot in URI path + component, and does not allow URIs with ":$" in it. + Thanks to Vladimir Kochetkov, Positive Research Center. + + *) Feature: the "proxy_pass", "fastcgi_pass", "scgi_pass", "uwsgi_pass" + directives, and the "server" directive inside the "upstream" block, + now support IPv6 addresses. + + *) Feature: the "resolver" directive now supports IPv6 addresses and an + optional port specification. + + *) Feature: the "least_conn" directive inside the "upstream" block. + + *) Feature: it is now possible to specify a weight for servers while + using the "ip_hash" directive. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "image_filter" directive was used; the bug had appeared in 1.3.0. + + *) Bugfix: nginx could not be built with ngx_cpp_test_module; the bug + had appeared in 1.1.12. + + *) Bugfix: access to variables from SSI and embedded perl module might + not work after reconfiguration. + Thanks to Yichun Zhang. + + *) Bugfix: in the ngx_http_xslt_filter_module. + Thanks to Kuramoto Eiji. + + *) Bugfix: memory leak if $geoip_org variable was used. + Thanks to Denis F. Latypoff. + + *) Bugfix: in the "proxy_cookie_domain" and "proxy_cookie_path" + directives. + + +Changes with nginx 1.3.0 15 May 2012 + + *) Feature: the "debug_connection" directive now supports IPv6 addresses + and the "unix:" parameter. + + *) Feature: the "set_real_ip_from" directive and the "proxy" parameter + of the "geo" directive now support IPv6 addresses. + + *) Feature: the "real_ip_recursive", "geoip_proxy", and + "geoip_proxy_recursive" directives. + + *) Feature: the "proxy_recursive" parameter of the "geo" directive. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "resolver" directive was used. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "fastcgi_pass", "scgi_pass", or "uwsgi_pass" directives were used and + backend returned incorrect response. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "rewrite" directive was used and new request arguments in a + replacement used variables. + + *) Bugfix: nginx might hog CPU if the open file resource limit was + reached. + + *) Bugfix: nginx might loop infinitely over backends if the + "proxy_next_upstream" directive with the "http_404" parameter was + used and there were backup servers specified in an upstream block. + + *) Bugfix: adding the "down" parameter of the "server" directive might + cause unneeded client redistribution among backend servers if the + "ip_hash" directive was used. + + *) Bugfix: socket leak. + Thanks to Yichun Zhang. + + *) Bugfix: in the ngx_http_fastcgi_module. + + +Changes with nginx 1.2.0 23 Apr 2012 + + *) Bugfix: a segmentation fault might occur in a worker process if the + "try_files" directive was used; the bug had appeared in 1.1.19. + + *) Bugfix: response might be truncated if there were more than IOV_MAX + buffers used. + + *) Bugfix: in the "crop" parameter of the "image_filter" directive. + Thanks to Maxim Bublis. + + +Changes with nginx 1.1.19 12 Apr 2012 + + *) Security: specially crafted mp4 file might allow to overwrite memory + locations in a worker process if the ngx_http_mp4_module was used, + potentially resulting in arbitrary code execution (CVE-2012-2089). + Thanks to Matthew Daley. + + *) Bugfix: nginx/Windows might be terminated abnormally. + Thanks to Vincent Lee. + + *) Bugfix: nginx hogged CPU if all servers in an upstream were marked as + "backup". + + *) Bugfix: the "allow" and "deny" directives might be inherited + incorrectly if they were used with IPv6 addresses. + + *) Bugfix: the "modern_browser" and "ancient_browser" directives might + be inherited incorrectly. + + *) Bugfix: timeouts might be handled incorrectly on Solaris/SPARC. + + *) Bugfix: in the ngx_http_mp4_module. + + +Changes with nginx 1.1.18 28 Mar 2012 + + *) Change: keepalive connections are no longer disabled for Safari by + default. + + *) Feature: the $connection_requests variable. + + *) Feature: $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd and + $tcpinfo_rcv_space variables. + + *) Feature: the "worker_cpu_affinity" directive now works on FreeBSD. + + *) Feature: the "xslt_param" and "xslt_string_param" directives. + Thanks to Samuel Behan. + + *) Bugfix: in configure tests. + Thanks to Piotr Sikora. + + *) Bugfix: in the ngx_http_xslt_filter_module. + + *) Bugfix: nginx could not be built on Debian GNU/Hurd. + + +Changes with nginx 1.1.17 15 Mar 2012 + + *) Security: content of previously freed memory might be sent to a + client if backend returned specially crafted response. + Thanks to Matthew Daley. + + *) Bugfix: in the embedded perl module if used from SSI. + Thanks to Matthew Daley. + + *) Bugfix: in the ngx_http_uwsgi_module. + + +Changes with nginx 1.1.16 29 Feb 2012 + + *) Change: the simultaneous subrequest limit has been raised to 200. + + *) Feature: the "from" parameter of the "disable_symlinks" directive. + + *) Feature: the "return" and "error_page" directives can now be used to + return 307 redirections. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "resolver" directive was used and there was no "error_log" directive + specified at global level. + Thanks to Roman Arutyunyan. + + *) Bugfix: a segmentation fault might occur in a worker process if the + "proxy_http_version 1.1" or "fastcgi_keep_conn on" directives were + used. + + *) Bugfix: memory leaks. + Thanks to Lanshun Zhou. + + *) Bugfix: in the "disable_symlinks" directive. + + *) Bugfix: on ZFS filesystem disk cache size might be calculated + incorrectly; the bug had appeared in 1.0.1. + + *) Bugfix: nginx could not be built by the icc 12.1 compiler. + + *) Bugfix: nginx could not be built by gcc on Solaris; the bug had + appeared in 1.1.15. + + +Changes with nginx 1.1.15 15 Feb 2012 + + *) Feature: the "disable_symlinks" directive. + + *) Feature: the "proxy_cookie_domain" and "proxy_cookie_path" + directives. + + *) Bugfix: nginx might log incorrect error "upstream prematurely closed + connection" instead of correct "upstream sent too big header" one. + Thanks to Feibo Li. + + *) Bugfix: nginx could not be built with the ngx_http_perl_module if the + --with-openssl option was used. + + *) Bugfix: the number of internal redirects to named locations was not + limited. + + *) Bugfix: calling $r->flush() multiple times might cause errors in the + ngx_http_gzip_filter_module. + + *) Bugfix: temporary files might be not removed if the "proxy_store" + directive was used with SSI includes. + + *) Bugfix: in some cases non-cacheable variables (such as the $args + variable) returned old empty cached value. + + *) Bugfix: a segmentation fault might occur in a worker process if too + many SSI subrequests were issued simultaneously; the bug had appeared + in 0.7.25. + + +Changes with nginx 1.1.14 30 Jan 2012 + + *) Feature: multiple "limit_req" limits may be used simultaneously. + + *) Bugfix: in error handling while connecting to a backend. + Thanks to Piotr Sikora. + + *) Bugfix: in AIO error handling on FreeBSD. + + *) Bugfix: in the OpenSSL library initialization. + + *) Bugfix: the "proxy_redirect" directives might be inherited + incorrectly. + + *) Bugfix: memory leak during reconfiguration if the "pcre_jit" + directive was used. + + +Changes with nginx 1.1.13 16 Jan 2012 + + *) Feature: the "TLSv1.1" and "TLSv1.2" parameters of the + "ssl_protocols" directive. + + *) Bugfix: the "limit_req" directive parameters were not inherited + correctly; the bug had appeared in 1.1.12. + + *) Bugfix: the "proxy_redirect" directive incorrectly processed + "Refresh" header if regular expression were used. + + *) Bugfix: the "proxy_cache_use_stale" directive with "error" parameter + did not return answer from cache if there were no live upstreams. + + *) Bugfix: the "worker_cpu_affinity" directive might not work. + + *) Bugfix: nginx could not be built on Solaris; the bug had appeared in + 1.1.12. + + *) Bugfix: in the ngx_http_mp4_module. + + +Changes with nginx 1.1.12 26 Dec 2011 + + *) Change: a "proxy_pass" directive without URI part now uses changed + URI after redirection with the "error_page" directive. + Thanks to Lanshun Zhou. + + *) Feature: the "proxy/fastcgi/scgi/uwsgi_cache_lock", + "proxy/fastcgi/scgi/uwsgi_cache_lock_timeout" directives. + + *) Feature: the "pcre_jit" directive. + + *) Feature: the "if" SSI command supports captures in regular + expressions. + + *) Bugfix: the "if" SSI command did not work inside the "block" command. + + *) Bugfix: the "limit_conn_log_level" and "limit_req_log_level" + directives might not work. + + *) Bugfix: the "limit_rate" directive did not allow to use full + throughput, even if limit value was very high. + + *) Bugfix: the "sendfile_max_chunk" directive did not work, if the + "limit_rate" directive was used. + + *) Bugfix: a "proxy_pass" directive without URI part always used + original request URI if variables were used. + + *) Bugfix: a "proxy_pass" directive without URI part might use original + request after redirection with the "try_files" directive. + Thanks to Lanshun Zhou. + + *) Bugfix: in the ngx_http_scgi_module. + + *) Bugfix: in the ngx_http_mp4_module. + + *) Bugfix: nginx could not be built on Solaris; the bug had appeared in + 1.1.9. + + +Changes with nginx 1.1.11 12 Dec 2011 + + *) Feature: the "so_keepalive" parameter of the "listen" directive. + Thanks to Vsevolod Stakhov. + + *) Feature: the "if_not_empty" parameter of the + "fastcgi/scgi/uwsgi_param" directives. + + *) Feature: the $https variable. + + *) Feature: the "proxy_redirect" directive supports variables in the + first parameter. + + *) Feature: the "proxy_redirect" directive supports regular expressions. + + *) Bugfix: the $sent_http_cache_control variable might contain a wrong + value if the "expires" directive was used. + Thanks to Yichun Zhang. + + *) Bugfix: the "read_ahead" directive might not work combined with + "try_files" and "open_file_cache". + + *) Bugfix: a segmentation fault might occur in a worker process if small + time was used in the "inactive" parameter of the "proxy_cache_path" + directive. + + *) Bugfix: responses from cache might hang. + + +Changes with nginx 1.1.10 30 Nov 2011 + + *) Bugfix: a segmentation fault occurred in a worker process if AIO was + used on Linux; the bug had appeared in 1.1.9. + + +Changes with nginx 1.1.9 28 Nov 2011 + + *) Change: now double quotes are encoded in an "echo" SSI-command + output. + Thanks to Zaur Abasmirzoev. + + *) Feature: the "valid" parameter of the "resolver" directive. By + default TTL returned by a DNS server is used. + Thanks to Kirill A. Korinskiy. + + *) Bugfix: nginx might hang after a worker process abnormal termination. + + *) Bugfix: a segmentation fault might occur in a worker process if SNI + was used; the bug had appeared in 1.1.2. + + *) Bugfix: in the "keepalive_disable" directive; the bug had appeared in + 1.1.8. + Thanks to Alexander Usov. + + *) Bugfix: SIGWINCH signal did not work after first binary upgrade; the + bug had appeared in 1.1.1. + + *) Bugfix: backend responses with length not matching "Content-Length" + header line are no longer cached. + + *) Bugfix: in the "scgi_param" directive, if complex parameters were + used. + + *) Bugfix: in the "epoll" event method. + Thanks to Yichun Zhang. + + *) Bugfix: in the ngx_http_flv_module. + Thanks to Piotr Sikora. + + *) Bugfix: in the ngx_http_mp4_module. + + *) Bugfix: IPv6 addresses are now handled properly in a request line and + in a "Host" request header line. + + *) Bugfix: "add_header" and "expires" directives did not work if a + request was proxied and response status code was 206. + + *) Bugfix: nginx could not be built on FreeBSD 10. + + *) Bugfix: nginx could not be built on AIX. + + +Changes with nginx 1.1.8 14 Nov 2011 + + *) Change: the ngx_http_limit_zone_module was renamed to the + ngx_http_limit_conn_module. + + *) Change: the "limit_zone" directive was superseded by the + "limit_conn_zone" directive with a new syntax. + + *) Feature: support for multiple "limit_conn" limits on the same level. + + *) Feature: the "image_filter_sharpen" directive. + + *) Bugfix: a segmentation fault might occur in a worker process if + resolver got a big DNS response. + Thanks to Ben Hawkes. + + *) Bugfix: in cache key calculation if internal MD5 implementation was + used; the bug had appeared in 1.0.4. + + *) Bugfix: the "If-Modified-Since", "If-Range", etc. client request + header lines might be passed to backend while caching; or not passed + without caching if caching was enabled in another part of the + configuration. + + *) Bugfix: the module ngx_http_mp4_module sent incorrect + "Content-Length" response header line if the "start" argument was + used. + Thanks to Piotr Sikora. + + +Changes with nginx 1.1.7 31 Oct 2011 + + *) Feature: support of several DNS servers in the "resolver" directive. + Thanks to Kirill A. Korinskiy. + + *) Bugfix: a segmentation fault occurred on start or during + reconfiguration if the "ssl" directive was used at http level and + there was no "ssl_certificate" defined. + + *) Bugfix: reduced memory consumption while proxying big files if they + were buffered to disk. + + *) Bugfix: a segmentation fault might occur in a worker process if + "proxy_http_version 1.1" directive was used. + + *) Bugfix: in the "expires @time" directive. + + +Changes with nginx 1.1.6 17 Oct 2011 + + *) Change in internal API: now module context data are cleared while + internal redirect to named location. + Requested by Yichun Zhang. + + *) Change: if a server in an upstream failed, only one request will be + sent to it after fail_timeout; the server will be considered alive if + it will successfully respond to the request. + + *) Change: now the 0x7F-0xFF characters are escaped as \xXX in an + access_log. + + *) Feature: "proxy/fastcgi/scgi/uwsgi_ignore_headers" directives support + the following additional values: X-Accel-Limit-Rate, + X-Accel-Buffering, X-Accel-Charset. + + *) Feature: decrease of memory consumption if SSL is used. + + *) Bugfix: some UTF-8 characters were processed incorrectly. + Thanks to Alexey Kuts. + + *) Bugfix: the ngx_http_rewrite_module directives specified at "server" + level were executed twice if no matching locations were defined. + + *) Bugfix: a socket leak might occurred if "aio sendfile" was used. + + *) Bugfix: connections with fast clients might be closed after + send_timeout if file AIO was used. + + *) Bugfix: in the ngx_http_autoindex_module. + + *) Bugfix: the module ngx_http_mp4_module did not support seeking on + 32-bit platforms. + + +Changes with nginx 1.1.5 05 Oct 2011 + + *) Feature: the "uwsgi_buffering" and "scgi_buffering" directives. + Thanks to Peter Smit. + + *) Bugfix: non-cacheable responses might be cached if + "proxy_cache_bypass" directive was used. + Thanks to John Ferlito. + + *) Bugfix: in HTTP/1.1 support in the ngx_http_proxy_module. + + *) Bugfix: cached responses with an empty body were returned + incorrectly; the bug had appeared in 0.8.31. + + *) Bugfix: 201 responses of the ngx_http_dav_module were incorrect; the + bug had appeared in 0.8.32. + + *) Bugfix: in the "return" directive. + + *) Bugfix: the "ssl_session_cache builtin" directive caused segmentation + fault; the bug had appeared in 1.1.1. + + +Changes with nginx 1.1.4 20 Sep 2011 + + *) Feature: the ngx_http_upstream_keepalive module. + + *) Feature: the "proxy_http_version" directive. + + *) Feature: the "fastcgi_keep_conn" directive. + + *) Feature: the "worker_aio_requests" directive. + + *) Bugfix: if nginx was built --with-file-aio it could not be run on + Linux kernel which did not support AIO. + + *) Bugfix: in Linux AIO error processing. + Thanks to Hagai Avrahami. + + *) Bugfix: reduced memory consumption for long-lived requests. + + *) Bugfix: the module ngx_http_mp4_module did not support 64-bit MP4 + "co64" atom. + + +Changes with nginx 1.1.3 14 Sep 2011 + + *) Feature: the module ngx_http_mp4_module. + + *) Bugfix: in Linux AIO combined with open_file_cache. + + *) Bugfix: open_file_cache did not update file info on retest if file + was not atomically changed. + + *) Bugfix: nginx could not be built on MacOSX 10.7. + + +Changes with nginx 1.1.2 05 Sep 2011 + + *) Change: now if total size of all ranges is greater than source + response size, then nginx disables ranges and returns just the source + response. + + *) Feature: the "max_ranges" directive. + + *) Bugfix: the "ssl_verify_client", "ssl_verify_depth", and + "ssl_prefer_server_ciphers" directives might work incorrectly if SNI + was used. + + *) Bugfix: in the "proxy/fastcgi/scgi/uwsgi_ignore_client_abort" + directives. + + +Changes with nginx 1.1.1 22 Aug 2011 + + *) Change: now cache loader processes either as many files as specified + by "loader_files" parameter or works no longer than time specified by + the "loader_threshold" parameter during each iteration. + + *) Change: now SIGWINCH signal works only in daemon mode. + + *) Feature: now shared zones and caches use POSIX semaphores on Solaris. + Thanks to Den Ivanov. + + *) Feature: accept filters are now supported on NetBSD. + + *) Bugfix: nginx could not be built on Linux 3.0. + + *) Bugfix: nginx did not use gzipping in some cases; the bug had + appeared in 1.1.0. + + *) Bugfix: request body might be processed incorrectly if client used + pipelining. + + *) Bugfix: in the "request_body_in_single_buf" directive. + + *) Bugfix: in "proxy_set_body" and "proxy_pass_request_body" directives + if SSL connection to backend was used. + + *) Bugfix: nginx hogged CPU if all servers in an upstream were marked as + "down". + + *) Bugfix: a segmentation fault might occur during reconfiguration if + ssl_session_cache was defined but not used in previous configuration. + + *) Bugfix: a segmentation fault might occur in a worker process if many + backup servers were used in an upstream. + + *) Bugfix: a segmentation fault might occur in a worker process if + "fastcgi/scgi/uwsgi_param" directives were used with values starting + with "HTTP_"; the bug had appeared in 0.8.40. + + +Changes with nginx 1.1.0 01 Aug 2011 + + *) Feature: cache loader run time decrease. + + *) Feature: "loader_files", "loader_sleep", and "loader_threshold" + options of the "proxy/fastcgi/scgi/uwsgi_cache_path" directives. + + *) Feature: loading time decrease of configuration with large number of + HTTPS sites. + + *) Feature: now nginx supports ECDHE key exchange ciphers. + Thanks to Adrian Kotelba. + + *) Feature: the "lingering_close" directive. + Thanks to Maxim Dounin. + + *) Bugfix: in closing connection for pipelined requests. + Thanks to Maxim Dounin. + + *) Bugfix: nginx did not disable gzipping if client sent "gzip;q=0" in + "Accept-Encoding" request header line. + + *) Bugfix: in timeout in unbuffered proxied mode. + Thanks to Maxim Dounin. + + *) Bugfix: memory leaks when a "proxy_pass" directive contains variables + and proxies to an HTTPS backend. + Thanks to Maxim Dounin. + + *) Bugfix: in parameter validation of a "proxy_pass" directive with + variables. + Thanks to Lanshun Zhou. + + *) Bugfix: SSL did not work on QNX. + Thanks to Maxim Dounin. + + *) Bugfix: SSL modules could not be built by gcc 4.6 without + --with-debug option. + + +Changes with nginx 1.0.5 19 Jul 2011 + + *) Change: now default SSL ciphers are "HIGH:!aNULL:!MD5". + Thanks to Rob Stradling. + + *) Feature: the "referer_hash_max_size" and "referer_hash_bucket_size" + directives. + Thanks to Witold Filipczyk. + + *) Feature: $uid_reset variable. + + *) Bugfix: a segmentation fault might occur in a worker process, if a + caching was used. + Thanks to Lanshun Zhou. + + *) Bugfix: worker processes may got caught in an endless loop during + reconfiguration, if a caching was used; the bug had appeared in + 0.8.48. + Thanks to Maxim Dounin. + + *) Bugfix: "stalled cache updating" alert. + Thanks to Maxim Dounin. + + +Changes with nginx 1.0.4 01 Jun 2011 + + *) Change: now regular expressions case sensitivity in the "map" + directive is given by prefixes "~" or "~*". + + *) Feature: now shared zones and caches use POSIX semaphores on Linux. + Thanks to Denis F. Latypoff. + + *) Bugfix: "stalled cache updating" alert. + + *) Bugfix: nginx could not be built --without-http_auth_basic_module; + the bug had appeared in 1.0.3. + + +Changes with nginx 1.0.3 25 May 2011 + + *) Feature: the "auth_basic_user_file" directive supports "$apr1", + "{PLAIN}", and "{SSHA}" password encryption methods. + Thanks to Maxim Dounin. + + *) Feature: the "geoip_org" directive and $geoip_org variable. + Thanks to Alexander Uskov, Arnaud Granal, and Denis F. Latypoff. + + *) Feature: ngx_http_geo_module and ngx_http_geoip_module support IPv4 + addresses mapped to IPv6 addresses. + + *) Bugfix: a segmentation fault occurred in a worker process during + testing IPv4 address mapped to IPv6 address, if access or deny rules + were defined only for IPv6; the bug had appeared in 0.8.22. + + *) Bugfix: a cached response may be broken if "proxy/fastcgi/scgi/ + uwsgi_cache_bypass" and "proxy/fastcgi/scgi/uwsgi_no_cache" directive + values were different; the bug had appeared in 0.8.46. + + +Changes with nginx 1.0.2 10 May 2011 + + *) Feature: now shared zones and caches use POSIX semaphores. + + *) Bugfix: in the "rotate" parameter of the "image_filter" directive. + Thanks to Adam Bocim. + + *) Bugfix: nginx could not be built on Solaris; the bug had appeared in + 1.0.1. + + +Changes with nginx 1.0.1 03 May 2011 + + *) Change: now the "split_clients" directive uses MurmurHash2 algorithm + because of better distribution. + Thanks to Oleg Mamontov. + + *) Change: now long strings starting with zero are not considered as + false values. + Thanks to Maxim Dounin. + + *) Change: now nginx uses a default listen backlog value 511 on Linux. + + *) Feature: the $upstream_... variables may be used in the SSI and perl + modules. + + *) Bugfix: now nginx limits better disk cache size. + Thanks to Oleg Mamontov. + + *) Bugfix: a segmentation fault might occur while parsing incorrect IPv4 + address; the bug had appeared in 0.9.3. + Thanks to Maxim Dounin. + + *) Bugfix: nginx could not be built by gcc 4.6 without --with-debug + option. + + *) Bugfix: nginx could not be built on Solaris 9 and earlier; the bug + had appeared in 0.9.3. + Thanks to Dagobert Michelsen. + + *) Bugfix: $request_time variable had invalid values if subrequests were + used; the bug had appeared in 0.8.47. + Thanks to Igor A. Valcov. + + +Changes with nginx 1.0.0 12 Apr 2011 + + *) Bugfix: a cache manager might hog CPU after reload. + Thanks to Maxim Dounin. + + *) Bugfix: an "image_filter crop" directive worked incorrectly coupled + with an "image_filter rotate 180" directive. + + *) Bugfix: a "satisfy any" directive disabled custom 401 error page. + + +Changes with nginx 0.9.7 04 Apr 2011 + + *) Feature: now keepalive connections may be closed premature, if there + are no free worker connections. + Thanks to Maxim Dounin. + + *) Feature: the "rotate" parameter of the "image_filter" directive. + Thanks to Adam Bocim. + + *) Bugfix: a case when a backend in "fastcgi_pass", "scgi_pass", or + "uwsgi_pass" directives is given by expression and refers to a + defined upstream. + + +Changes with nginx 0.9.6 21 Mar 2011 + + *) Feature: the "map" directive supports regular expressions as value of + the first parameter. + + *) Feature: $time_iso8601 access_log variable. + Thanks to Michael Lustfield. + + +Changes with nginx 0.9.5 21 Feb 2011 + + *) Change: now nginx uses a default listen backlog value -1 on Linux. + Thanks to Andrei Nigmatulin. + + *) Feature: the "utf8" parameter of "geoip_country" and "geoip_city" + directives. + Thanks to Denis F. Latypoff. + + *) Bugfix: in a default "proxy_redirect" directive if "proxy_pass" + directive has no URI part. + Thanks to Maxim Dounin. + + *) Bugfix: an "error_page" directive did not work with nonstandard error + codes; the bug had appeared in 0.8.53. + Thanks to Maxim Dounin. + + +Changes with nginx 0.9.4 21 Jan 2011 + + *) Feature: the "server_name" directive supports the $hostname variable. + + *) Feature: 494 code for "Request Header Too Large" error. + + +Changes with nginx 0.9.3 13 Dec 2010 + + *) Bugfix: if there was a single server for given IPv6 address:port + pair, then captures in regular expressions in a "server_name" + directive did not work. + + *) Bugfix: nginx could not be built on Solaris; the bug had appeared in + 0.9.0. + + +Changes with nginx 0.9.2 06 Dec 2010 + + *) Feature: the "If-Unmodified-Since" client request header line + support. + + *) Workaround: fallback to accept() syscall if accept4() was not + implemented; the issue had appeared in 0.9.0. + + *) Bugfix: nginx could not be built on Cygwin; the bug had appeared in + 0.9.0. + + *) Bugfix: for OpenSSL vulnerability CVE-2010-4180. + Thanks to Maxim Dounin. + + +Changes with nginx 0.9.1 30 Nov 2010 + + *) Bugfix: "return CODE message" directives did not work; the bug had + appeared in 0.9.0. + + +Changes with nginx 0.9.0 29 Nov 2010 + + *) Feature: the "keepalive_disable" directive. + + *) Feature: the "map" directive supports variables as value of a defined + variable. + + *) Feature: the "map" directive supports empty strings as value of the + first parameter. + + *) Feature: the "map" directive supports expressions as the first + parameter. + + *) Feature: nginx(8) manual page. + Thanks to Sergey Osokin. + + *) Feature: Linux accept4() support. + Thanks to Simon Liu. + + *) Workaround: elimination of Linux linker warning about "sys_errlist" + and "sys_nerr"; the warning had appeared in 0.8.35. + + *) Bugfix: a segmentation fault might occur in a worker process, if the + "auth_basic" directive was used. + Thanks to Michail Laletin. + + *) Bugfix: compatibility with ngx_http_eval_module; the bug had appeared + in 0.8.42. + + +Changes with nginx 0.8.53 18 Oct 2010 + + *) Feature: now the "error_page" directive allows to change a status + code in a redirect. + + *) Feature: the "gzip_disable" directive supports special "degradation" + mask. + + *) Bugfix: a socket leak might occurred if file AIO was used. + Thanks to Maxim Dounin. + + *) Bugfix: if the first server had no "listen" directive and there was + no explicit default server, then a next server with a "listen" + directive became the default server; the bug had appeared in 0.8.21. + + +Changes with nginx 0.8.52 28 Sep 2010 + + *) Bugfix: nginx used SSL mode for a listen socket if any listen option + was set; the bug had appeared in 0.8.51. + + +Changes with nginx 0.8.51 27 Sep 2010 + + *) Change: the "secure_link_expires" directive has been canceled. + + *) Change: a logging level of resolver errors has been lowered from + "alert" to "error". + + *) Feature: now a listen socket "ssl" parameter may be set several + times. + + +Changes with nginx 0.8.50 02 Sep 2010 + + *) Feature: the "secure_link", "secure_link_md5", and + "secure_link_expires" directives of the ngx_http_secure_link_module. + + *) Feature: the -q switch. + Thanks to Gena Makhomed. + + *) Bugfix: worker processes may got caught in an endless loop during + reconfiguration, if a caching was used; the bug had appeared in + 0.8.48. + + *) Bugfix: in the "gzip_disable" directive. + Thanks to Derrick Petzold. + + *) Bugfix: nginx/Windows could not send stop, quit, reopen, and reload + signals to a process run in other session. + + +Changes with nginx 0.8.49 09 Aug 2010 + + *) Feature: the "image_filter_jpeg_quality" directive supports + variables. + + *) Bugfix: a segmentation fault might occur in a worker process, if the + $geoip_region_name variables was used; the bug had appeared in + 0.8.48. + + *) Bugfix: errors intercepted by error_page were cached only for next + request; the bug had appeared in 0.8.48. + + +Changes with nginx 0.8.48 03 Aug 2010 + + *) Change: now the "server_name" directive default value is an empty + name "". + Thanks to Gena Makhomed. + + *) Change: now the "server_name_in_redirect" directive default value is + "off". + + *) Feature: the $geoip_dma_code, $geoip_area_code, and + $geoip_region_name variables. + Thanks to Christine McGonagle. + + *) Bugfix: the "proxy_pass", "fastcgi_pass", "uwsgi_pass", and + "scgi_pass" directives were not inherited inside "limit_except" + blocks. + + *) Bugfix: the "proxy_cache_min_uses", "fastcgi_cache_min_uses" + "uwsgi_cache_min_uses", and "scgi_cache_min_uses" directives did not + work; the bug had appeared in 0.8.46. + + *) Bugfix: the "fastcgi_split_path_info" directive used incorrectly + captures, if only parts of an URI were captured. + Thanks to Yuriy Taraday and Frank Enderle. + + *) Bugfix: the "rewrite" directive did not escape a ";" character during + copying from URI to query string. + Thanks to Daisuke Murase. + + *) Bugfix: the ngx_http_image_filter_module closed a connection, if an + image was larger than "image_filter_buffer" size. + + +Changes with nginx 0.8.47 28 Jul 2010 + + *) Bugfix: $request_time variable had invalid values for subrequests. + + *) Bugfix: errors intercepted by error_page could not be cached. + + *) Bugfix: a cache manager process may got caught in an endless loop, if + max_size parameter was used; the bug had appeared in 0.8.46. + + +Changes with nginx 0.8.46 19 Jul 2010 + + *) Change: now the "proxy_no_cache", "fastcgi_no_cache", + "uwsgi_no_cache", and "scgi_no_cache" directives affect on a cached + response saving only. + + *) Feature: the "proxy_cache_bypass", "fastcgi_cache_bypass", + "uwsgi_cache_bypass", and "scgi_cache_bypass" directives. + + *) Bugfix: nginx did not free memory in cache keys zones if there was an + error during working with backend: the memory was freed only after + inactivity time or on memory low condition. + + +Changes with nginx 0.8.45 13 Jul 2010 + + *) Feature: ngx_http_xslt_filter improvements. + Thanks to Laurence Rowe. + + *) Bugfix: SSI response might be truncated after include with + wait="yes"; the bug had appeared in 0.7.25. + Thanks to Maxim Dounin. + + *) Bugfix: the "listen" directive did not support the "setfib=0" + parameter. + + +Changes with nginx 0.8.44 05 Jul 2010 + + *) Change: now nginx does not cache by default backend responses, if + they have a "Set-Cookie" header line. + + *) Feature: the "listen" directive supports the "setfib" parameter. + Thanks to Andrew Filonov. + + *) Bugfix: the "sub_filter" directive might change character case on + partial match. + + *) Bugfix: compatibility with HP/UX. + + *) Bugfix: compatibility with AIX xlC_r compiler. + + *) Bugfix: nginx treated large SSLv2 packets as plain requests. + Thanks to Miroslaw Jaworski. + + +Changes with nginx 0.8.43 30 Jun 2010 + + *) Feature: large geo ranges base loading speed-up. + + *) Bugfix: an error_page redirection to "location /zero {return 204;}" + without changing status code kept the error body; the bug had + appeared in 0.8.42. + + *) Bugfix: nginx might close IPv6 listen socket during reconfiguration. + Thanks to Maxim Dounin. + + *) Bugfix: the $uid_set variable may be used at any request processing + stage. + + +Changes with nginx 0.8.42 21 Jun 2010 + + *) Change: now nginx tests locations given by regular expressions, if + request was matched exactly by a location given by a prefix string. + The previous behavior has been introduced in 0.7.1. + + *) Feature: the ngx_http_scgi_module. + Thanks to Manlio Perillo. + + *) Feature: a text answer may be added to a "return" directive. + + +Changes with nginx 0.8.41 15 Jun 2010 + + *) Security: nginx/Windows worker might be terminated abnormally if a + requested file name has invalid UTF-8 encoding. + + *) Change: now nginx allows to use spaces in a request line. + + *) Bugfix: the "proxy_redirect" directive changed incorrectly a backend + "Refresh" response header line. + Thanks to Andrey Andreew and Max Sogin. + + *) Bugfix: nginx did not support path without host name in "Destination" + request header line. + + +Changes with nginx 0.8.40 07 Jun 2010 + + *) Security: now nginx/Windows ignores default file stream name. + Thanks to Jose Antonio Vazquez Gonzalez. + + *) Feature: the ngx_http_uwsgi_module. + Thanks to Roberto De Ioris. + + *) Feature: a "fastcgi_param" directive with value starting with "HTTP_" + overrides a client request header line. + + *) Bugfix: the "If-Modified-Since", "If-Range", etc. client request + header lines were passed to FastCGI-server while caching. + + *) Bugfix: listen unix domain socket could not be changed during + reconfiguration. + Thanks to Maxim Dounin. + + +Changes with nginx 0.8.39 31 May 2010 + + *) Bugfix: an inherited "alias" directive worked incorrectly in + inclusive location. + + *) Bugfix: in "alias" with variables and "try_files" directives + combination. + + *) Bugfix: listen unix domain and IPv6 sockets did not inherit while + online upgrade. + Thanks to Maxim Dounin. + + +Changes with nginx 0.8.38 24 May 2010 + + *) Feature: the "proxy_no_cache" and "fastcgi_no_cache" directives. + + *) Feature: now the "rewrite" directive does a redirect automatically if + the $scheme variable is used. + Thanks to Piotr Sikora. + + *) Bugfix: now "limit_req" delay directive conforms to the described + algorithm. + Thanks to Maxim Dounin. + + *) Bugfix: the $uid_got variable might not be used in the SSI and perl + modules. + + +Changes with nginx 0.8.37 17 May 2010 + + *) Feature: the ngx_http_split_clients_module. + + *) Feature: the "map" directive supports keys more than 255 characters. + + *) Bugfix: nginx ignored the "private" and "no-store" values in the + "Cache-Control" backend response header line. + + *) Bugfix: a "stub" parameter of an "include" SSI directive was not + used, if empty response has 200 status code. + + *) Bugfix: if a proxied or FastCGI request was internally redirected to + another proxied or FastCGI location, then a segmentation fault might + occur in a worker process; the bug had appeared in 0.8.33. + Thanks to Yichun Zhang. + + *) Bugfix: IMAP connections may hang until they timed out while talking + to Zimbra server. + Thanks to Alan Batie. + + +Changes with nginx 0.8.36 22 Apr 2010 + + *) Bugfix: the ngx_http_dav_module handled incorrectly the DELETE, COPY, + and MOVE methods for symlinks. + + *) Bugfix: values of the $query_string, $arg_..., etc. variables cached + in main request were used by the SSI module in subrequests. + + *) Bugfix: a variable value was repeatedly encoded after each an "echo" + SSI-command output; the bug had appeared in 0.6.14. + + *) Bugfix: a worker process hung if a FIFO file was requested. + Thanks to Vicente Aguilar and Maxim Dounin. + + *) Bugfix: OpenSSL-1.0.0 compatibility on 64-bit Linux. + Thanks to Maxim Dounin. + + *) Bugfix: nginx could not be built --without-http-cache; the bug had + appeared in 0.8.35. + + +Changes with nginx 0.8.35 01 Apr 2010 + + *) Change: now the charset filter runs before the SSI filter. + + *) Feature: the "chunked_transfer_encoding" directive. + + *) Bugfix: an "&" character was not escaped when it was copied in + arguments part in a rewrite rule. + + *) Bugfix: nginx might be terminated abnormally while a signal + processing or if the directive "timer_resolution" was used on + platforms which do not support kqueue or eventport notification + methods. + Thanks to George Xie and Maxim Dounin. + + *) Bugfix: if temporary files and permanent storage area resided at + different file systems, then permanent file modification times were + incorrect. + Thanks to Maxim Dounin. + + *) Bugfix: ngx_http_memcached_module might issue the error message + "memcached sent invalid trailer". + Thanks to Maxim Dounin. + + *) Bugfix: nginx could not built zlib-1.2.4 library using the library + sources. + Thanks to Maxim Dounin. + + *) Bugfix: a segmentation fault occurred in a worker process, if there + was large stderr output before FastCGI response; the bug had appeared + in 0.8.34. + Thanks to Maxim Dounin. + + +Changes with nginx 0.8.34 03 Mar 2010 + + *) Bugfix: nginx did not support all ciphers and digests used in client + certificates. + Thanks to Innocenty Enikeew. + + *) Bugfix: nginx cached incorrectly FastCGI responses if there was large + stderr output before response. + + *) Bugfix: nginx did not support HTTPS referrers. + + *) Bugfix: nginx/Windows might not find file if path in configuration + was given in other character case; the bug had appeared in 0.8.33. + + *) Bugfix: the $date_local variable has an incorrect value, if the "%s" + format was used. + Thanks to Maxim Dounin. + + *) Bugfix: if ssl_session_cache was not set or was set to "none", then + during client certificate verify the error "session id context + uninitialized" might occur; the bug had appeared in 0.7.1. + + *) Bugfix: a geo range returned default value if the range included two + or more /16 networks and did not begin at /16 network boundary. + + *) Bugfix: a block used in a "stub" parameter of an "include" SSI + directive was output with "text/plain" MIME type. + + *) Bugfix: $r->sleep() did not work; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.33 01 Feb 2010 + + *) Security: now nginx/Windows ignores trailing spaces in URI. + Thanks to Dan Crowley, Core Security Technologies. + + *) Security: now nginx/Windows ignores short files names. + Thanks to Dan Crowley, Core Security Technologies. + + *) Change: now keepalive connections after POST requests are not + disabled for MSIE 7.0+. + Thanks to Adam Lounds. + + *) Workaround: now keepalive connections are disabled for Safari. + Thanks to Joshua Sierles. + + *) Bugfix: if a proxied or FastCGI request was internally redirected to + another proxied or FastCGI location, then $upstream_response_time + variable may have abnormally large value; the bug had appeared in + 0.8.7. + + *) Bugfix: a segmentation fault might occur in a worker process, while + discarding a request body; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.32 11 Jan 2010 + + *) Bugfix: UTF-8 encoding usage in the ngx_http_autoindex_module. + Thanks to Maxim Dounin. + + *) Bugfix: regular expression named captures worked for two names only. + Thanks to Maxim Dounin. + + *) Bugfix: now the "localhost" name is used in the "Host" request header + line, if an unix domain socket is defined in the "auth_http" + directive. + Thanks to Maxim Dounin. + + *) Bugfix: nginx did not support chunked transfer encoding for 201 + responses. + Thanks to Julian Reich. + + *) Bugfix: if the "expires modified" set date in the past, then a + negative number was set in the "Cache-Control" response header line. + Thanks to Alex Kapranoff. + + +Changes with nginx 0.8.31 23 Dec 2009 + + *) Feature: now the "error_page" directive may redirect the 301 and 302 + responses. + + *) Feature: the $geoip_city_continent_code, $geoip_latitude, and + $geoip_longitude variables. + Thanks to Arvind Sundararajan. + + *) Feature: now the ngx_http_image_filter_module deletes always EXIF and + other application specific data if the data consume more than 5% of a + JPEG file. + + *) Bugfix: nginx closed a connection if a cached response had an empty + body. + Thanks to Piotr Sikora. + + *) Bugfix: nginx might not be built by gcc 4.x if the -O2 or higher + optimization option was used. + Thanks to Maxim Dounin and Denis F. Latypoff. + + *) Bugfix: regular expressions in location were always tested in + case-sensitive mode; the bug had appeared in 0.8.25. + + *) Bugfix: nginx cached a 304 response if there was the "If-None-Match" + header line in a proxied request. + Thanks to Tim Dettrick and David Kostal. + + *) Bugfix: nginx/Windows tried to delete a temporary file twice if the + file should replace an already existent file. + + +Changes with nginx 0.8.30 15 Dec 2009 + + *) Change: now the default buffer size of the + "large_client_header_buffers" directive is 8K. + Thanks to Andrew Cholakian. + + *) Feature: the conf/fastcgi.conf for simple FastCGI configurations. + + *) Bugfix: nginx/Windows tried to rename a temporary file twice if the + file should replace an already existent file. + + *) Bugfix: of "double free or corruption" error issued if host could not + be resolved; the bug had appeared in 0.8.22. + Thanks to Konstantin Svist. + + *) Bugfix: in libatomic usage on some platforms. + Thanks to W-Mark Kubacki. + + +Changes with nginx 0.8.29 30 Nov 2009 + + *) Change: now the "009" status code is written to an access log for + proxied HTTP/0.9 responses. + + *) Feature: the "addition_types", "charset_types", "gzip_types", + "ssi_types", "sub_filter_types", and "xslt_types" directives support + an "*" parameter. + + *) Feature: GCC 4.1+ built-in atomic operations usage. + Thanks to W-Mark Kubacki. + + *) Feature: the --with-libatomic[=DIR] option in the configure. + Thanks to W-Mark Kubacki. + + *) Bugfix: listen unix domain socket had limited access rights. + + *) Bugfix: cached HTTP/0.9 responses were handled incorrectly. + + *) Bugfix: regular expression named captures given by "?P<...>" did not + work in a "server_name" directive. + Thanks to Maxim Dounin. + + +Changes with nginx 0.8.28 23 Nov 2009 + + *) Bugfix: nginx could not be built with the --without-pcre parameter; + the bug had appeared in 0.8.25. + + +Changes with nginx 0.8.27 17 Nov 2009 + + *) Bugfix: regular expressions did not work in nginx/Windows; the bug + had appeared in 0.8.25. + + +Changes with nginx 0.8.26 16 Nov 2009 + + *) Bugfix: in captures usage in "rewrite" directive; the bug had + appeared in 0.8.25. + + *) Bugfix: nginx could not be built without the --with-debug option; the + bug had appeared in 0.8.25. + + +Changes with nginx 0.8.25 16 Nov 2009 + + *) Change: now no message is written in an error log if a variable is + not found by $r->variable() method. + + *) Feature: the ngx_http_degradation_module. + + *) Feature: regular expression named captures. + + *) Feature: now URI part is not required a "proxy_pass" directive if + variables are used. + + *) Feature: now the "msie_padding" directive works for Chrome too. + + *) Bugfix: a segmentation fault occurred in a worker process on low + memory condition; the bug had appeared in 0.8.18. + + *) Bugfix: nginx sent gzipped responses to clients those do not support + gzip, if "gzip_static on" and "gzip_vary off"; the bug had appeared + in 0.8.16. + + +Changes with nginx 0.8.24 11 Nov 2009 + + *) Bugfix: nginx always added "Content-Encoding: gzip" response header + line in 304 responses sent by ngx_http_gzip_static_module. + + *) Bugfix: nginx could not be built without the --with-debug option; the + bug had appeared in 0.8.23. + + *) Bugfix: the "unix:" parameter of the "set_real_ip_from" directive + inherited incorrectly from previous level. + + *) Bugfix: in resolving empty name. + + +Changes with nginx 0.8.23 11 Nov 2009 + + *) Security: now SSL/TLS renegotiation is disabled. + Thanks to Maxim Dounin. + + *) Bugfix: listen unix domain socket did not inherit while online + upgrade. + + *) Bugfix: the "unix:" parameter of the "set_real_ip_from" directive did + not without yet another directive with any IP address. + + *) Bugfix: segmentation fault and infinite looping in resolver. + + *) Bugfix: in resolver. + Thanks to Artem Bokhan. + + +Changes with nginx 0.8.22 03 Nov 2009 + + *) Feature: the "proxy_bind", "fastcgi_bind", and "memcached_bind" + directives. + + *) Feature: the "access" and the "deny" directives support IPv6. + + *) Feature: the "set_real_ip_from" directive supports IPv6 addresses in + request headers. + + *) Feature: the "unix:" parameter of the "set_real_ip_from" directive. + + *) Bugfix: nginx did not delete unix domain socket after configuration + testing. + + *) Bugfix: nginx deleted unix domain socket while online upgrade. + + *) Bugfix: the "!-x" operator did not work. + Thanks to Maxim Dounin. + + *) Bugfix: a segmentation fault might occur in a worker process, if + limit_rate was used in HTTPS server. + Thanks to Maxim Dounin. + + *) Bugfix: a segmentation fault might occur in a worker process while + $limit_rate logging. + Thanks to Maxim Dounin. + + *) Bugfix: a segmentation fault might occur in a worker process, if + there was no "listen" directive in "server" block; the bug had + appeared in 0.8.21. + + +Changes with nginx 0.8.21 26 Oct 2009 + + *) Feature: now the "-V" switch shows TLS SNI support. + + *) Feature: the "listen" directive of the HTTP module supports unix + domain sockets. + Thanks to Hongli Lai. + + *) Feature: the "default_server" parameter of the "listen" directive. + + *) Feature: now a "default" parameter is not required to set listen + socket options. + + *) Bugfix: nginx did not support dates in 2038 year on 32-bit platforms; + + *) Bugfix: socket leak; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.20 14 Oct 2009 + + *) Change: now default SSL ciphers are "HIGH:!ADH:!MD5". + + *) Bugfix: the ngx_http_autoindex_module did not show the trailing slash + in links to a directory; the bug had appeared in 0.7.15. + + *) Bugfix: nginx did not close a log file set by the --error-log-path + configuration option; the bug had appeared in 0.7.53. + + *) Bugfix: nginx did not treat a comma as separator in the + "Cache-Control" backend response header line. + + *) Bugfix: nginx/Windows might not create temporary file, a cache file, + or "proxy/fastcgi_store"d file if a worker had no enough access + rights for top level directories. + + *) Bugfix: the "Set-Cookie" and "P3P" FastCGI response header lines were + not hidden while caching if no "fastcgi_hide_header" directives were + used with any parameters. + + *) Bugfix: nginx counted incorrectly disk cache size. + + +Changes with nginx 0.8.19 06 Oct 2009 + + *) Change: now SSLv2 protocol is disabled by default. + + *) Change: now default SSL ciphers are "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM". + + *) Bugfix: a "limit_req" directive did not work; the bug had appeared in + 0.8.18. + + +Changes with nginx 0.8.18 06 Oct 2009 + + *) Feature: the "read_ahead" directive. + + *) Feature: now several "perl_modules" directives may be used. + + *) Feature: the "limit_req_log_level" and "limit_conn_log_level" + directives. + + *) Bugfix: now "limit_req" directive conforms to the leaky bucket + algorithm. + Thanks to Maxim Dounin. + + *) Bugfix: nginx did not work on Linux/sparc. + Thanks to Marcus Ramberg. + + *) Bugfix: nginx sent '\0' in a "Location" response header line on MKCOL + request. + Thanks to Xie Zhenye. + + *) Bugfix: zero status code was logged instead of 499 status code; the + bug had appeared in 0.8.11. + + *) Bugfix: socket leak; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.17 28 Sep 2009 + + *) Security: now "/../" are disabled in "Destination" request header + line. + + *) Change: now $host variable value is always low case. + + *) Feature: the $ssl_session_id variable. + + *) Bugfix: socket leak; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.16 22 Sep 2009 + + *) Feature: the "image_filter_transparency" directive. + + *) Bugfix: "addition_types" directive was incorrectly named + "addtion_types". + + *) Bugfix: resolver cache poisoning. + Thanks to Matthew Dempsky. + + *) Bugfix: memory leak in resolver. + Thanks to Matthew Dempsky. + + *) Bugfix: invalid request line in $request variable was written in + access_log only if error_log was set to "info" or "debug" level. + + *) Bugfix: in PNG alpha-channel support in the + ngx_http_image_filter_module. + + *) Bugfix: nginx always added "Vary: Accept-Encoding" response header + line, if both "gzip_static" and "gzip_vary" were on. + + *) Bugfix: in UTF-8 encoding support by "try_files" directive in + nginx/Windows. + + *) Bugfix: in "post_action" directive usage; the bug had appeared in + 0.8.11. + Thanks to Igor Artemiev. + + +Changes with nginx 0.8.15 14 Sep 2009 + + *) Security: a segmentation fault might occur in worker process while + specially crafted request handling. + Thanks to Chris Ries. + + *) Bugfix: if names .domain.tld, .sub.domain.tld, and .domain-some.tld + were defined, then the name .sub.domain.tld was matched by + .domain.tld. + + *) Bugfix: in transparency support in the ngx_http_image_filter_module. + + *) Bugfix: in file AIO. + + *) Bugfix: in X-Accel-Redirect usage; the bug had appeared in 0.8.11. + + *) Bugfix: in embedded perl module; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.14 07 Sep 2009 + + *) Bugfix: an expired cached response might stick in the "UPDATING" + state. + + *) Bugfix: a segmentation fault might occur in worker process, if + error_log was set to info or debug level. + Thanks to Sergey Bochenkov. + + *) Bugfix: in embedded perl module; the bug had appeared in 0.8.11. + + *) Bugfix: an "error_page" directive did not redirect a 413 error; the + bug had appeared in 0.6.10. + + +Changes with nginx 0.8.13 31 Aug 2009 + + *) Bugfix: in the "aio sendfile" directive; the bug had appeared in + 0.8.12. + + *) Bugfix: nginx could not be built without the --with-file-aio option + on FreeBSD; the bug had appeared in 0.8.12. + + +Changes with nginx 0.8.12 31 Aug 2009 + + *) Feature: the "sendfile" parameter in the "aio" directive on FreeBSD. + + *) Bugfix: in try_files; the bug had appeared in 0.8.11. + + *) Bugfix: in memcached; the bug had appeared in 0.8.11. + + +Changes with nginx 0.8.11 28 Aug 2009 + + *) Change: now directive "gzip_disable msie6" does not disable gzipping + for MSIE 6.0 SV1. + + *) Feature: file AIO support on FreeBSD and Linux. + + *) Feature: the "directio_alignment" directive. + + +Changes with nginx 0.8.10 24 Aug 2009 + + *) Bugfix: memory leaks if GeoIP City database was used. + + *) Bugfix: in copying temporary files to permanent storage area; the bug + had appeared in 0.8.9. + + +Changes with nginx 0.8.9 17 Aug 2009 + + *) Feature: now the start cache loader runs in a separate process; this + should improve large caches handling. + + *) Feature: now temporary files and permanent storage area may reside at + different file systems. + + +Changes with nginx 0.8.8 10 Aug 2009 + + *) Bugfix: in handling FastCGI headers split in records. + + *) Bugfix: a segmentation fault occurred in worker process, if a request + was handled in two proxied or FastCGIed locations and a caching was + enabled in the first location; the bug had appeared in 0.8.7. + + +Changes with nginx 0.8.7 27 Jul 2009 + + *) Change: minimum supported OpenSSL version is 0.9.7. + + *) Change: the "ask" parameter of the "ssl_verify_client" directive was + changed to the "optional" parameter and now it checks a client + certificate if it was offered. + Thanks to Brice Figureau. + + *) Feature: the $ssl_client_verify variable. + Thanks to Brice Figureau. + + *) Feature: the "ssl_crl" directive. + Thanks to Brice Figureau. + + *) Feature: the "proxy" parameter of the "geo" directive. + + *) Feature: the "image_filter" directive supports variables for setting + size. + + *) Bugfix: the $ssl_client_cert variable usage corrupted memory; the bug + had appeared in 0.7.7. + Thanks to Sergey Zhuravlev. + + *) Bugfix: "proxy_pass_header" and "fastcgi_pass_header" directives did + not pass to a client the "X-Accel-Redirect", "X-Accel-Limit-Rate", + "X-Accel-Buffering", and "X-Accel-Charset" lines from backend + response header. + Thanks to Maxim Dounin. + + *) Bugfix: in handling "Last-Modified" and "Accept-Ranges" backend + response header lines; the bug had appeared in 0.7.44. + Thanks to Maxim Dounin. + + *) Bugfix: the "[alert] zero size buf" error if subrequest returns an + empty response; the bug had appeared in 0.8.5. + + +Changes with nginx 0.8.6 20 Jul 2009 + + *) Feature: the ngx_http_geoip_module. + + *) Bugfix: XSLT filter may fail with message "not well formed XML + document" for valid XML document. + Thanks to Kuramoto Eiji. + + *) Bugfix: now in MacOSX, Cygwin, and nginx/Windows locations given by a + regular expression are always tested in case insensitive mode. + + *) Bugfix: now nginx/Windows ignores trailing dots in URI. + Thanks to Hugo Leisink. + + *) Bugfix: name of file specified in --conf-path was not honored during + installation; the bug had appeared in 0.6.6. + Thanks to Maxim Dounin. + + +Changes with nginx 0.8.5 13 Jul 2009 + + *) Bugfix: now nginx allows underscores in a request method. + + *) Bugfix: a 500 error code was returned for invalid login/password + while HTTP Basic authentication on Windows. + + *) Bugfix: ngx_http_perl_module responses did not work in subrequests. + + *) Bugfix: in ngx_http_limit_req_module. + Thanks to Maxim Dounin. + + +Changes with nginx 0.8.4 22 Jun 2009 + + *) Bugfix: nginx could not be built --without-http-cache; the bug had + appeared in 0.8.3. + + +Changes with nginx 0.8.3 19 Jun 2009 + + *) Feature: the $upstream_cache_status variable. + + *) Bugfix: nginx could not be built on MacOSX 10.6. + + *) Bugfix: nginx could not be built --without-http-cache; the bug had + appeared in 0.8.2. + + *) Bugfix: a segmentation fault occurred in worker process, if a backend + 401 error was intercepted and the backend did not set the + "WWW-Authenticate" response header line. + Thanks to Eugene Mychlo. + + +Changes with nginx 0.8.2 15 Jun 2009 + + *) Bugfix: in open_file_cache and proxy/fastcgi cache interaction on + start up. + + *) Bugfix: open_file_cache might cache open file descriptors too long; + the bug had appeared in 0.7.4. + + +Changes with nginx 0.8.1 08 Jun 2009 + + *) Feature: the "updating" parameter in "proxy_cache_use_stale" and + "fastcgi_cache_use_stale" directives. + + *) Bugfix: the "If-Modified-Since", "If-Range", etc. client request + header lines were passed to backend while caching if no + "proxy_set_header" directive was used with any parameters. + + *) Bugfix: the "Set-Cookie" and "P3P" response header lines were not + hidden while caching if no "proxy_hide_header/fastcgi_hide_header" + directives were used with any parameters. + + *) Bugfix: the ngx_http_image_filter_module did not support GIF87a + format. + Thanks to Denis Ilyinyh. + + *) Bugfix: nginx could not be built modules on Solaris 10 and early; the + bug had appeared in 0.7.56. + + +Changes with nginx 0.8.0 02 Jun 2009 + + *) Feature: the "keepalive_requests" directive. + + *) Feature: the "limit_rate_after" directive. + Thanks to Ivan Debnar. + + *) Bugfix: XLST filter did not work in subrequests. + + *) Bugfix: in relative paths handling in nginx/Windows. + + *) Bugfix: in proxy_store, fastcgi_store, proxy_cache, and fastcgi_cache + in nginx/Windows. + + *) Bugfix: in memory allocation error handling. + Thanks to Maxim Dounin and Kirill A. Korinskiy. + + +Changes with nginx 0.7.59 25 May 2009 + + *) Feature: the "proxy_cache_methods" and "fastcgi_cache_methods" + directives. + + *) Bugfix: socket leak; the bug had appeared in 0.7.25. + Thanks to Maxim Dounin. + + *) Bugfix: a segmentation fault occurred in worker process, if a request + had no body and the $request_body variable was used; + the bug had appeared in 0.7.58. + + *) Bugfix: the SSL modules might not built on Solaris and Linux; + the bug had appeared in 0.7.56. + + *) Bugfix: ngx_http_xslt_filter_module responses were not handled by + SSI, charset, and gzip filters. + + *) Bugfix: a "charset" directive did not set a charset to + ngx_http_gzip_static_module responses. + + +Changes with nginx 0.7.58 18 May 2009 + + *) Feature: a "listen" directive of the mail proxy module supports IPv6. + + *) Feature: the "image_filter_jpeg_quality" directive. + + *) Feature: the "client_body_in_single_buffer" directive. + + *) Feature: the $request_body variable. + + *) Bugfix: in ngx_http_autoindex_module in file name links having a ":" + symbol in the name. + + *) Bugfix: "make upgrade" procedure did not work; the bug had appeared + in 0.7.53. + Thanks to Denis F. Latypoff. + + +Changes with nginx 0.7.57 12 May 2009 + + *) Bugfix: a floating-point fault occurred in worker process, if the + ngx_http_image_filter_module errors were redirected to named + location; the bug had appeared in 0.7.56. + + +Changes with nginx 0.7.56 11 May 2009 + + *) Feature: nginx/Windows supports IPv6 in a "listen" directive of the + HTTP module. + + *) Bugfix: in ngx_http_image_filter_module. + + +Changes with nginx 0.7.55 06 May 2009 + + *) Bugfix: the http_XXX parameters in "proxy_cache_use_stale" and + "fastcgi_cache_use_stale" directives did not work. + + *) Bugfix: fastcgi cache did not cache header only responses. + + *) Bugfix: of "select() failed (9: Bad file descriptor)" error in + nginx/Unix and "select() failed (10038: ...)" error in nginx/Windows. + + *) Bugfix: a segmentation fault might occur in worker process, if an + "debug_connection" directive was used; the bug had appeared in + 0.7.54. + + *) Bugfix: fix ngx_http_image_filter_module building errors. + + *) Bugfix: the files bigger than 2G could not be transferred using + $r->sendfile. + Thanks to Maxim Dounin. + + +Changes with nginx 0.7.54 01 May 2009 + + *) Feature: the ngx_http_image_filter_module. + + *) Feature: the "proxy_ignore_headers" and "fastcgi_ignore_headers" + directives. + + *) Bugfix: a segmentation fault might occur in worker process, if an + "open_file_cache_errors off" directive was used; the bug had appeared + in 0.7.53. + + *) Bugfix: the "port_in_redirect off" directive did not work; the bug + had appeared in 0.7.39. + + *) Bugfix: improve handling of "select" method errors. + + *) Bugfix: of "select() failed (10022: ...)" error in nginx/Windows. + + *) Bugfix: in error text descriptions in nginx/Windows; the bug had + appeared in 0.7.53. + + +Changes with nginx 0.7.53 27 Apr 2009 + + *) Change: now a log set by --error-log-path is created from the very + start-up. + + *) Feature: now the start up errors and warnings are outputted to an + error_log and stderr. + + *) Feature: the empty --prefix= configure parameter forces nginx to use + a directory where it was run as prefix. + + *) Feature: the -p switch. + + *) Feature: the -s switch on Unix platforms. + + *) Feature: the -? and -h switches. + Thanks to Jerome Loyet. + + *) Feature: now switches may be set in condensed form. + + *) Bugfix: nginx/Windows did not work if configuration file was given by + the -c switch. + + *) Bugfix: temporary files might be not removed if the "proxy_store", + "fastcgi_store", "proxy_cache", or "fastcgi_cache" were used. + Thanks to Maxim Dounin. + + *) Bugfix: an incorrect value was passed to mail proxy authentication + server in "Auth-Method" header line; the bug had appeared + in 0.7.34. + Thanks to Simon Lecaille. + + *) Bugfix: system error text descriptions were not logged on Linux; + the bug had appeared in 0.7.45. + + *) Bugfix: the "fastcgi_cache_min_uses" directive did not work. + Thanks to Andrew Vorobyoff. + + +Changes with nginx 0.7.52 20 Apr 2009 + + *) Feature: the first native Windows binary release. + + *) Bugfix: in processing HEAD method while caching. + + *) Bugfix: in processing the "If-Modified-Since", "If-Range", etc. + client request header lines while caching. + + *) Bugfix: now the "Set-Cookie" and "P3P" header lines are hidden in + cacheable responses. + + *) Bugfix: if nginx was built with the ngx_http_perl_module and with a + perl which supports threads, then during a master process exit the + message "panic: MUTEX_LOCK" might be issued. + + *) Bugfix: nginx could not be built --without-http-cache; the bug had + appeared in 0.7.48. + + *) Bugfix: nginx could not be built on platforms different from i386, + amd64, sparc, and ppc; the bug had appeared in 0.7.42. + + +Changes with nginx 0.7.51 12 Apr 2009 + + *) Feature: the "try_files" directive supports a response code in the + fallback parameter. + + *) Feature: now any response code can be used in the "return" directive. + + *) Bugfix: the "error_page" directive made an external redirect without + query string; the bug had appeared in 0.7.44. + + *) Bugfix: if servers listened on several defined explicitly addresses, + then virtual servers might not work; the bug had appeared in 0.7.39. + + +Changes with nginx 0.7.50 06 Apr 2009 + + *) Bugfix: the $arg_... variables did not work; the bug had appeared in + 0.7.49. + + +Changes with nginx 0.7.49 06 Apr 2009 + + *) Bugfix: a segmentation fault might occur in worker process, if the + $arg_... variables were used; the bug had appeared in 0.7.48. + + +Changes with nginx 0.7.48 06 Apr 2009 + + *) Feature: the "proxy_cache_key" directive. + + *) Bugfix: now nginx takes into account the "X-Accel-Expires", + "Expires", and "Cache-Control" header lines in a backend response. + + *) Bugfix: now nginx caches responses for the GET requests only. + + *) Bugfix: the "fastcgi_cache_key" directive was not inherited. + + *) Bugfix: the $arg_... variables did not work with SSI subrequests. + Thanks to Maxim Dounin. + + *) Bugfix: nginx could not be built with uclibc library. + Thanks to Timothy Redaelli. + + *) Bugfix: nginx could not be built on OpenBSD; the bug had + appeared in 0.7.46. + + +Changes with nginx 0.7.47 01 Apr 2009 + + *) Bugfix: nginx could not be built on FreeBSD 6 and early versions; the + bug had appeared in 0.7.46. + + *) Bugfix: nginx could not be built on MacOSX; the bug had + appeared in 0.7.46. + + *) Bugfix: if the "max_size" parameter was set, then the cache manager + might purge a whole cache; the bug had appeared in 0.7.46. + + *) Change: a segmentation fault might occur in worker process, if the + "proxy_cache"/"fastcgi_cache" and the "proxy_cache_valid"/ + "fastcgi_cache_valid" were set on different levels; the bug had + appeared in 0.7.46. + + *) Bugfix: a segmentation fault might occur in worker process, if a + request was redirected to a proxied or FastCGI server via error_page + or try_files; the bug had appeared in 0.7.44. + + +Changes with nginx 0.7.46 30 Mar 2009 + + *) Bugfix: the previous release tarball was incorrect. + + +Changes with nginx 0.7.45 30 Mar 2009 + + *) Change: now the "proxy_cache" and the "proxy_cache_valid" directives + can be set on different levels. + + *) Change: the "clean_time" parameter of the "proxy_cache_path" + directive is canceled. + + *) Feature: the "max_size" parameter of the "proxy_cache_path" + directive. + + *) Feature: the ngx_http_fastcgi_module preliminary cache support. + + *) Feature: now on shared memory allocation errors directive and zone + names are logged. + + *) Bugfix: the directive "add_header last-modified ''" did not delete a + "Last-Modified" response header line; the bug had appeared in 0.7.44. + + *) Bugfix: a relative path in the "auth_basic_user_file" directive given + without variables did not work; the bug had appeared in 0.7.44. + Thanks to Jerome Loyet. + + *) Bugfix: in an "alias" directive given using variables without + references to captures of regular expressions; the bug had appeared + in 0.7.42. + + +Changes with nginx 0.7.44 23 Mar 2009 + + *) Feature: the ngx_http_proxy_module preliminary cache support. + + *) Feature: the --with-pcre option in the configure. + + *) Feature: the "try_files" directive is now allowed on the server block + level. + + *) Bugfix: the "try_files" directive handled incorrectly a query string + in a fallback parameter. + + *) Bugfix: the "try_files" directive might test incorrectly directories. + + *) Bugfix: if there was a single server for given address:port pair, + then captures in regular expressions in a "server_name" directive did + not work. + + +Changes with nginx 0.7.43 18 Mar 2009 + + *) Bugfix: a request was handled incorrectly, if a "root" directive used + variables; the bug had appeared in 0.7.42. + + *) Bugfix: if a server listened on wildcard address, then the + $server_addr variable value was "0.0.0.0"; the bug had appeared in + 0.7.36. + + +Changes with nginx 0.7.42 16 Mar 2009 + + *) Change: now the "Invalid argument" error returned by + setsockopt(TCP_NODELAY) on Solaris, is ignored. + + *) Change: now if a file specified in a "auth_basic_user_file" directive + is absent, then the 403 error is returned instead of the 500 one. + + *) Feature: the "auth_basic_user_file" directive supports variables. + Thanks to Kirill A. Korinskiy. + + *) Feature: the "listen" directive supports the "ipv6only" parameter. + Thanks to Zhang Hua. + + *) Bugfix: in an "alias" directive with references to captures of + regular expressions; the bug had appeared in 0.7.40. + + *) Bugfix: compatibility with Tru64 UNIX. + Thanks to Dustin Marquess. + + *) Bugfix: nginx could not be built without PCRE library; the bug had + appeared in 0.7.41. + + +Changes with nginx 0.7.41 11 Mar 2009 + + *) Bugfix: a segmentation fault might occur in worker process, if a + "server_name" or a "location" directives had captures in regular + expressions; the issue had appeared in 0.7.40. + Thanks to Vladimir Sopot. + + +Changes with nginx 0.7.40 09 Mar 2009 + + *) Feature: the "location" directive supports captures in regular + expressions. + + *) Feature: an "alias" directive with capture references may be used + inside a location given by a regular expression with captures. + + *) Feature: the "server_name" directive supports captures in regular + expressions. + + *) Workaround: the ngx_http_autoindex_module did not show the trailing + slash in directories on XFS filesystem; the issue had appeared in + 0.7.15. + Thanks to Dmitry Kuzmenko. + + +Changes with nginx 0.7.39 02 Mar 2009 + + *) Bugfix: large response with SSI might hang, if gzipping was enabled; + the bug had appeared in 0.7.28. + Thanks to Artem Bokhan. + + *) Bugfix: a segmentation fault might occur in worker process, if short + static variants are used in a "try_files" directive. + + +Changes with nginx 0.7.38 23 Feb 2009 + + *) Feature: authentication failures logging. + + *) Bugfix: name/password in auth_basic_user_file were ignored after odd + number of empty lines. + Thanks to Alexander Zagrebin. + + *) Bugfix: a segmentation fault occurred in a master process, if long + path was used in unix domain socket; the bug had appeared in 0.7.36. + + +Changes with nginx 0.7.37 21 Feb 2009 + + *) Bugfix: directives using upstreams did not work; the bug had appeared + in 0.7.36. + + +Changes with nginx 0.7.36 21 Feb 2009 + + *) Feature: a preliminary IPv6 support; the "listen" directive of the + HTTP module supports IPv6. + + *) Bugfix: the $ancient_browser variable did not work for browsers + preset by a "modern_browser" directives. + + +Changes with nginx 0.7.35 16 Feb 2009 + + *) Bugfix: a "ssl_engine" directive did not use a SSL-accelerator for + asymmetric ciphers. + Thanks to Marcin Gozdalik. + + *) Bugfix: a "try_files" directive set MIME type depending on an + original request extension. + + *) Bugfix: "*domain.tld" names were handled incorrectly in + "server_name", "valid_referers", and "map" directives, if + ".domain.tld" and ".subdomain.domain.tld" wildcards were used; + the bug had appeared in 0.7.9. + + +Changes with nginx 0.7.34 10 Feb 2009 + + *) Feature: the "off" parameter of the "if_modified_since" directive. + + *) Feature: now nginx sends an HELO/EHLO command after a XCLIENT + command. + Thanks to Maxim Dounin. + + *) Feature: Microsoft specific "AUTH LOGIN with User Name" mode support + in mail proxy server. + Thanks to Maxim Dounin. + + *) Bugfix: in a redirect rewrite directive original arguments were + concatenated with new arguments by a "?" rather than an "&"; + the bug had appeared in 0.1.18. + Thanks to Maxim Dounin. + + *) Bugfix: nginx could not be built on AIX. + + +Changes with nginx 0.7.33 02 Feb 2009 + + *) Bugfix: a double response might be returned if the epoll or rtsig + methods are used and a redirect was returned to a request with body. + Thanks to Eden Li. + + *) Bugfix: the $sent_http_location variable was empty for some redirects + types. + + *) Bugfix: a segmentation fault might occur in worker process if + "resolver" directive was used in SMTP proxy. + + +Changes with nginx 0.7.32 26 Jan 2009 + + *) Feature: now a directory existence testing can be set explicitly in + the "try_files" directive. + + *) Bugfix: fastcgi_store stored files not always. + + *) Bugfix: in geo ranges. + + *) Bugfix: in shared memory allocations if nginx was built without + debugging. + Thanks to Andrey Kvasov. + + +Changes with nginx 0.7.31 19 Jan 2009 + + *) Change: now the "try_files" directive tests files only and ignores + directories. + + *) Feature: the "fastcgi_split_path_info" directive. + + *) Bugfixes in an "Expect" request header line support. + + *) Bugfixes in geo ranges. + + *) Bugfix: in a miss case ngx_http_memcached_module returned the "END" + line as response body instead of default 404 page body; the bug had + appeared in 0.7.18. + Thanks to Maxim Dounin. + + *) Bugfix: while SMTP proxying nginx issued message "250 2.0.0 OK" + instead of "235 2.0.0 OK"; the bug had appeared in 0.7.22. + Thanks to Maxim Dounin. + + +Changes with nginx 0.7.30 24 Dec 2008 + + *) Bugfix: a segmentation fault occurred in worker process, if variables + were used in the "fastcgi_pass" or "proxy_pass" directives and host + name must be resolved; the bug had appeared in 0.7.29. + + +Changes with nginx 0.7.29 24 Dec 2008 + + *) Bugfix: the "fastcgi_pass" and "proxy_pass" directives did not + support variables if unix domain sockets were used. + + *) Bugfixes in subrequest processing; the bugs had appeared in 0.7.25. + + *) Bugfix: a "100 Continue" response was issued for HTTP/1.0 requests; + Thanks to Maxim Dounin. + + *) Bugfix: in memory allocation in the ngx_http_gzip_filter_module on + Cygwin. + + +Changes with nginx 0.7.28 22 Dec 2008 + + *) Change: in memory allocation in the ngx_http_gzip_filter_module. + + *) Change: the default "gzip_buffers" directive values have been changed + to 32 4k or 16 8k from 4 4k/8k. + + +Changes with nginx 0.7.27 15 Dec 2008 + + *) Feature: the "try_files" directive. + + *) Feature: variables support in the "fastcgi_pass" directive. + + *) Feature: now the $geo variable may get an address from a variable. + Thanks to Andrei Nigmatulin. + + *) Feature: now a location's modifier may be used without space before + name. + + *) Feature: the $upstream_response_length variable. + + *) Bugfix: now a "add_header" directive does not add an empty value. + + *) Bugfix: if zero length static file was requested, then nginx just + closed connection; the bug had appeared in 0.7.25. + + *) Bugfix: a MOVE method could not move file in non-existent directory. + + *) Bugfix: a segmentation fault occurred in worker process, if no one + named location was defined in server, but some one was used in an + error_page directive. + Thanks to Sergey Bochenkov. + + +Changes with nginx 0.7.26 08 Dec 2008 + + *) Bugfix: in subrequest processing; the bug had appeared in 0.7.25. + + +Changes with nginx 0.7.25 08 Dec 2008 + + *) Change: in subrequest processing. + + *) Change: now POSTs without "Content-Length" header line are allowed. + + *) Bugfix: now the "limit_req" and "limit_conn" directives log a + prohibition reason. + + *) Bugfix: in the "delete" parameter of the "geo" directive. + + +Changes with nginx 0.7.24 01 Dec 2008 + + *) Feature: the "if_modified_since" directive. + + *) Bugfix: nginx did not process a FastCGI server response, if the + server send too many messages to stderr before response. + + *) Bugfix: the "$cookie_..." variables did not work in the SSI and the + perl module. + + +Changes with nginx 0.7.23 27 Nov 2008 + + *) Feature: the "delete" and "ranges" parameters in the "geo" directive. + + *) Feature: speeding up loading of geo base with large number of values. + + *) Feature: decrease of memory required for geo base load. + + +Changes with nginx 0.7.22 20 Nov 2008 + + *) Feature: the "none" parameter in the "smtp_auth" directive. + Thanks to Maxim Dounin. + + *) Feature: the "$cookie_..." variables. + + *) Bugfix: the "directio" directive did not work in XFS filesystem. + + *) Bugfix: the resolver did not understand big DNS responses. + Thanks to Zyb. + + +Changes with nginx 0.7.21 11 Nov 2008 + + *) Changes in the ngx_http_limit_req_module. + + *) Feature: the EXSLT support in the ngx_http_xslt_module. + Thanks to Denis F. Latypoff. + + *) Workaround: compatibility with glibc 2.3. + Thanks to Eric Benson and Maxim Dounin. + + *) Bugfix: nginx could not run on MacOSX 10.4 and earlier; the bug had + appeared in 0.7.6. + + +Changes with nginx 0.7.20 10 Nov 2008 + + *) Changes in the ngx_http_gzip_filter_module. + + *) Feature: the ngx_http_limit_req_module. + + *) Bugfix: worker processes might exit on a SIGBUS signal on sparc and + ppc platforms; the bug had appeared in 0.7.3. + Thanks to Maxim Dounin. + + *) Bugfix: the "proxy_pass http://host/some:uri" directives did not + work; the bug had appeared in 0.7.12. + + *) Bugfix: in HTTPS mode requests might fail with the "bad write retry" + error. + + *) Bugfix: the ngx_http_secure_link_module did not work inside + locations, whose names are less than 3 characters. + + *) Bugfix: $server_addr variable might have no value. + + +Changes with nginx 0.7.19 13 Oct 2008 + + *) Bugfix: version number update. + + +Changes with nginx 0.7.18 13 Oct 2008 + + *) Change: the "underscores_in_headers" directive; now nginx does not + allows underscores in a client request header line names. + + *) Feature: the ngx_http_secure_link_module. + + *) Feature: the "real_ip_header" directive supports any header. + + *) Feature: the "log_subrequest" directive. + + *) Feature: the $realpath_root variable. + + *) Feature: the "http_502" and "http_504" parameters of the + "proxy_next_upstream" directive. + + *) Bugfix: the "http_503" parameter of the "proxy_next_upstream" or + "fastcgi_next_upstream" directives did not work. + + *) Bugfix: nginx might send a "Transfer-Encoding: chunked" header line + for HEAD requests. + + *) Bugfix: now accept threshold depends on worker_connections. + + +Changes with nginx 0.7.17 15 Sep 2008 + + *) Feature: now the "directio" directive works on Linux. + + *) Feature: the $pid variable. + + *) Bugfix: the "directio" optimization that had appeared in 0.7.15 did + not work with open_file_cache. + + *) Bugfix: the "access_log" with variables did not work on Linux; the + bug had appeared in 0.7.7. + + *) Bugfix: the ngx_http_charset_module did not understand quoted charset + name received from backend. + + +Changes with nginx 0.7.16 08 Sep 2008 + + *) Bugfix: nginx could not be built on 64-bit platforms; the bug had + appeared in 0.7.15. + + +Changes with nginx 0.7.15 08 Sep 2008 + + *) Feature: the ngx_http_random_index_module. + + *) Feature: the "directio" directive has been optimized for file + requests starting from arbitrary position. + + *) Feature: the "directio" directive turns off sendfile if it is + necessary. + + *) Feature: now nginx allows underscores in a client request header line + names. + + +Changes with nginx 0.7.14 01 Sep 2008 + + *) Change: now the ssl_certificate and ssl_certificate_key directives + have no default values. + + *) Feature: the "listen" directive supports the "ssl" parameter. + + *) Feature: now nginx takes into account a time zone change while + reconfiguration on FreeBSD and Linux. + + *) Bugfix: the "listen" directive parameters such as "backlog", + "rcvbuf", etc. were not set, if a default server was not the first + one. + + *) Bugfix: if URI part captured by a "rewrite" directive was used as a + query string, then the query string was not escaped. + + *) Bugfix: configuration file validity test improvements. + + +Changes with nginx 0.7.13 26 Aug 2008 + + *) Bugfix: nginx could not be built on Linux and Solaris; the bug had + appeared in 0.7.12. + + +Changes with nginx 0.7.12 26 Aug 2008 + + *) Feature: the "server_name" directive supports empty name "". + + *) Feature: the "gzip_disable" directive supports special "msie6" mask. + + *) Bugfix: if the "max_fails=0" parameter was used in upstream with + several servers, then a worker process exited on a SIGFPE signal. + Thanks to Maxim Dounin. + + *) Bugfix: a request body was dropped while redirection via an + "error_page" directive. + + *) Bugfix: a full response was returned for request method HEAD while + redirection via an "error_page" directive. + + *) Bugfix: the $r->header_in() method did not return value of the + "Host", "User-Agent", and "Connection" request header lines; the bug + had appeared in 0.7.0. + + +Changes with nginx 0.7.11 18 Aug 2008 + + *) Change: now ngx_http_charset_module does not work by default with + text/css MIME type. + + *) Feature: now nginx returns the 405 status code for POST method + requesting a static file only if the file exists. + + *) Feature: the "proxy_ssl_session_reuse" directive. + + *) Bugfix: a "proxy_pass" directive without URI part might use original + request after the "X-Accel-Redirect" redirection was used. + + *) Bugfix: if a directory has search only rights and the first index + file was absent, then nginx returned the 500 status code. + + *) Bugfix: in inclusive locations; the bugs had appeared in 0.7.1. + + +Changes with nginx 0.7.10 13 Aug 2008 + + *) Bugfix: in the "addition_types", "charset_types", "gzip_types", + "ssi_types", "sub_filter_types", and "xslt_types" directives; the + bugs had appeared in 0.7.9. + + *) Bugfix: of recursive error_page for 500 status code. + + *) Bugfix: now the ngx_http_realip_module sets address not for whole + keepalive connection, but for each request passed via the connection. + + +Changes with nginx 0.7.9 12 Aug 2008 + + *) Change: now ngx_http_charset_module works by default with following + MIME types: text/html, text/css, text/xml, text/plain, + text/vnd.wap.wml, application/x-javascript, and application/rss+xml. + + *) Feature: the "charset_types" and "addition_types" directives. + + *) Feature: now the "gzip_types", "ssi_types", and "sub_filter_types" + directives use hash. + + *) Feature: the ngx_cpp_test_module. + + *) Feature: the "expires" directive supports daily time. + + *) Feature: the ngx_http_xslt_module improvements and bug fixing. + Thanks to Denis F. Latypoff and Maxim Dounin. + + *) Bugfix: the "log_not_found" directive did not work for index files + tests. + + *) Bugfix: HTTPS connections might hang, if kqueue, epoll, rtsig, or + eventport methods were used; the bug had appeared in 0.7.7. + + *) Bugfix: if the "server_name", "valid_referers", and "map" directives + used an "*.domain.tld" wildcard and exact name "domain.tld" was not + set, then the exact name was matched by the wildcard; the bug had + appeared in 0.3.18. + + +Changes with nginx 0.7.8 04 Aug 2008 + + *) Feature: the ngx_http_xslt_module. + + *) Feature: the "$arg_..." variables. + + *) Feature: Solaris directio support. + Thanks to Ivan Debnar. + + *) Bugfix: now if FastCGI server sends a "Location" header line without + status line, then nginx uses 302 status code. + Thanks to Maxim Dounin. + + +Changes with nginx 0.7.7 30 Jul 2008 + + *) Change: now the EAGAIN error returned by connect() is not considered + as temporary error. + + *) Change: now the $ssl_client_cert variable value is a certificate with + TAB character intended before each line except first one; an + unchanged certificate is available in the $ssl_client_raw_cert + variable. + + *) Feature: the "ask" parameter in the "ssl_verify_client" directive. + + *) Feature: byte-range processing improvements. + Thanks to Maxim Dounin. + + *) Feature: the "directio" directive. + Thanks to Jiang Hong. + + *) Feature: MacOSX 10.5 sendfile() support. + + *) Bugfix: now in MacOSX and Cygwin locations are tested in case + insensitive mode; however, the compare is provided by single-byte + locales only. + + *) Bugfix: mail proxy SSL connections hanged, if select, poll, or + /dev/poll methods were used. + + *) Bugfix: UTF-8 encoding usage in the ngx_http_autoindex_module. + + +Changes with nginx 0.7.6 07 Jul 2008 + + *) Bugfix: now if variables are used in the "access_log" directive a + request root existence is always tested. + + *) Bugfix: the ngx_http_flv_module did not support several values in a + query string. + + +Changes with nginx 0.7.5 01 Jul 2008 + + *) Bugfixes in variables support in the "access_log" directive; the bugs + had appeared in 0.7.4. + + *) Bugfix: nginx could not be built --without-http_gzip_module; the bug + had appeared in 0.7.3. + Thanks to Kirill A. Korinskiy. + + *) Bugfix: if sub_filter and SSI were used together, then responses + might were transferred incorrectly. + + +Changes with nginx 0.7.4 30 Jun 2008 + + *) Feature: variables support in the "access_log" directive. + + *) Feature: the "open_log_file_cache" directive. + + *) Feature: the -g switch. + + *) Feature: the "Expect" request header line support. + + *) Bugfix: large SSI inclusions might be truncated. + + +Changes with nginx 0.7.3 23 Jun 2008 + + *) Change: the "rss" extension MIME type has been changed to + "application/rss+xml". + + *) Change: now the "gzip_vary" directive turned on issues a + "Vary: Accept-Encoding" header line for uncompressed responses too. + + *) Feature: now the "rewrite" directive does a redirect automatically if + the "https://" protocol is used. + + *) Bugfix: the "proxy_pass" directive did not work with the HTTPS + protocol; the bug had appeared in 0.6.9. + + +Changes with nginx 0.7.2 16 Jun 2008 + + *) Feature: now nginx supports EDH key exchange ciphers. + + *) Feature: the "ssl_dhparam" directive. + + *) Feature: the $ssl_client_cert variable. + Thanks to Manlio Perillo. + + *) Bugfix: after changing URI via a "rewrite" directive nginx did not + search a new location; the bug had appeared in 0.7.1. + Thanks to Maxim Dounin. + + *) Bugfix: nginx could not be built without PCRE library; the bug had + appeared in 0.7.1. + + *) Bugfix: when a request to a directory was redirected with the slash + added, nginx dropped a query string from the original request. + + +Changes with nginx 0.7.1 26 May 2008 + + *) Change: now locations are searched in a tree. + + *) Change: the "optimize_server_names" directive was canceled due to the + "server_name_in_redirect" directive introduction. + + *) Change: some long deprecated directives are not supported anymore. + + *) Change: the "none" parameter in the "ssl_session_cache" directive; + now this is default parameter. + Thanks to Rob Mueller. + + *) Bugfix: worker processes might not catch reconfiguration and log + rotation signals. + + *) Bugfix: nginx could not be built on latest Fedora 9 Linux. + Thanks to Roxis. + + +Changes with nginx 0.7.0 19 May 2008 + + *) Change: now the 0x00-0x1F, '"' and '\' characters are escaped as \xXX + in an access_log. + Thanks to Maxim Dounin. + + *) Change: now nginx allows several "Host" request header line. + + *) Feature: the "modified" flag in the "expires" directive. + + *) Feature: the $uid_got and $uid_set variables may be used at any + request processing stage. + + *) Feature: the $hostname variable. + Thanks to Andrei Nigmatulin. + + *) Feature: DESTDIR support. + Thanks to Todd A. Fisher and Andras Voroskoi. + + *) Bugfix: a segmentation fault might occur in worker process on Linux, + if keepalive was enabled. + + +Changes with nginx 0.6.31 12 May 2008 + + *) Bugfix: nginx did not process FastCGI response if header was at the + end of FastCGI record; the bug had appeared in 0.6.2. + Thanks to Sergey Serov. + + *) Bugfix: a segmentation fault might occur in worker process if a file + was deleted and the "open_file_cache_errors" directive was off. + + +Changes with nginx 0.6.30 29 Apr 2008 + + *) Change: now if an "include" directive pattern does not match any + file, then nginx does not issue an error. + + *) Feature: now the time in directives may be specified without spaces, + for example, "1h50m". + + *) Bugfix: memory leaks if the "ssl_verify_client" directive was on. + Thanks to Chavelle Vincent. + + *) Bugfix: the "sub_filter" directive might set text to change into + output. + + *) Bugfix: the "error_page" directive did not take into account + arguments in redirected URI. + + *) Bugfix: now nginx always opens files in binary mode under Cygwin. + + *) Bugfix: nginx could not be built on OpenBSD; the bug had appeared in + 0.6.15. + + +Changes with nginx 0.6.29 18 Mar 2008 + + *) Feature: the ngx_google_perftools_module. + + *) Bugfix: the ngx_http_perl_module could not be built on 64-bit + platforms; the bug had appeared in 0.6.27. + + +Changes with nginx 0.6.28 13 Mar 2008 + + *) Bugfix: the rtsig method could not be built; the bug had appeared in + 0.6.27. + + +Changes with nginx 0.6.27 12 Mar 2008 + + *) Change: now by default the rtsig method is not built on + Linux 2.6.18+. + + *) Change: now a request method is not changed while redirection to a + named location via an "error_page" directive. + + *) Feature: the "resolver" and "resolver_timeout" directives in SMTP + proxy. + + *) Feature: the "post_action" directive supports named locations. + + *) Bugfix: a segmentation fault occurred in worker process, if a request + was redirected from proxy, FastCGI, or memcached location to static + named locations. + + *) Bugfix: browsers did not repeat SSL handshake if there is no valid + client certificate in first handshake. + Thanks to Alexander V. Inyukhin. + + *) Bugfix: if response code 495-497 was redirected via an "error_page" + directive without code change, then nginx tried to allocate too many + memory. + + *) Bugfix: memory leak in long-lived non buffered connections. + + *) Bugfix: memory leak in resolver. + + *) Bugfix: a segmentation fault occurred in worker process, if a request + was redirected from proxy, FastCGI, or memcached location to static + named locations. + + *) Bugfix: in the $proxy_host and $proxy_port variables caching. + Thanks to Sergey Bochenkov. + + *) Bugfix: a "proxy_pass" directive with variables used incorrectly the + same port as in another "proxy_pass" directive with the same host + name and without variables. + Thanks to Sergey Bochenkov. + + *) Bugfix: an alert "sendmsg() failed (9: Bad file descriptor)" on some + 64-bit platforms while reconfiguration. + + *) Bugfix: a segmentation fault occurred in worker process, if empty + stub block was used second time in SSI. + + *) Bugfix: in copying URI part contained escaped symbols into arguments. + + +Changes with nginx 0.6.26 11 Feb 2008 + + *) Bugfix: the "proxy_store" and "fastcgi_store" directives did not + check a response length. + + *) Bugfix: a segmentation fault occurred in worker process, if big value + was used in a "expires" directive. + Thanks to Joaquin Cuenca Abela. + + *) Bugfix: nginx incorrectly detected cache line size on Pentium 4. + Thanks to Gena Makhomed. + + *) Bugfix: in proxied or FastCGI subrequests a client original method + was used instead of the GET method. + + *) Bugfix: socket leak in HTTPS mode if deferred accept was used. + Thanks to Ben Maurer. + + *) Bugfix: nginx issued the bogus error message "SSL_shutdown() failed + (SSL: )"; the bug had appeared in 0.6.23. + + *) Bugfix: in HTTPS mode requests might fail with the "bad write retry" + error; the bug had appeared in 0.6.23. + + +Changes with nginx 0.6.25 08 Jan 2008 + + *) Change: now the "server_name_in_redirect" directive is used instead + of the "server_name" directive's special "*" parameter. + + *) Change: now wildcard and regex names can be used as main name in a + "server_name" directive. + + *) Change: the "satisfy_any" directive was replaced by the "satisfy" + directive. + + *) Workaround: old worker processes might hog CPU after reconfiguration + if they was run under Linux OpenVZ. + + *) Feature: the "min_delete_depth" directive. + + *) Bugfix: the COPY and MOVE methods did not work with single files. + + *) Bugfix: the ngx_http_gzip_static_module did not allow the + ngx_http_dav_module to work; the bug had appeared in 0.6.23. + + *) Bugfix: socket leak in HTTPS mode if deferred accept was used. + Thanks to Ben Maurer. + + *) Bugfix: nginx could not be built without PCRE library; the bug had + appeared in 0.6.23. + + +Changes with nginx 0.6.24 27 Dec 2007 + + *) Bugfix: a segmentation fault might occur in worker process if HTTPS + was used; the bug had appeared in 0.6.23. + + +Changes with nginx 0.6.23 27 Dec 2007 + + *) Change: the "off" parameter in the "ssl_session_cache" directive; now + this is default parameter. + + *) Change: the "open_file_cache_retest" directive was renamed to the + "open_file_cache_valid". + + *) Feature: the "open_file_cache_min_uses" directive. + + *) Feature: the ngx_http_gzip_static_module. + + *) Feature: the "gzip_disable" directive. + + *) Feature: the "memcached_pass" directive may be used inside the "if" + block. + + *) Bugfix: a segmentation fault occurred in worker process, if the + "memcached_pass" and "if" directives were used in the same location. + + *) Bugfix: if a "satisfy_any on" directive was used and not all access + and auth modules directives were set, then other given access and + auth directives were not tested; + + *) Bugfix: regex parameters in a "valid_referers" directive were not + inherited from previous level. + + *) Bugfix: a "post_action" directive did run if a request was completed + with 499 status code. + + *) Bugfix: optimization of 16K buffer usage in a SSL connection. + Thanks to Ben Maurer. + + *) Bugfix: the STARTTLS in SMTP mode did not work. + Thanks to Oleg Motienko. + + *) Bugfix: in HTTPS mode requests might fail with the "bad write retry" + error; the bug had appeared in 0.5.13. + + +Changes with nginx 0.6.22 19 Dec 2007 + + *) Change: now all ngx_http_perl_module methods return values copied to + perl's allocated memory. + + *) Bugfix: if nginx was built with ngx_http_perl_module, the perl before + 5.8.6 was used, and perl supported threads, then during + reconfiguration the master process aborted; the bug had appeared in + 0.5.9. + Thanks to Boris Zhmurov. + + *) Bugfix: the ngx_http_perl_module methods may get invalid values of + the regex captures. + + *) Bugfix: a segmentation fault occurred in worker process, if the + $r->has_request_body() method was called for a request whose small + request body was already received. + + *) Bugfix: large_client_header_buffers did not freed before going to + keep-alive state. + Thanks to Olexander Shtepa. + + *) Bugfix: the last address was missed in the $upstream_addr variable; + the bug had appeared in 0.6.18. + + *) Bugfix: the "fastcgi_catch_stderr" directive did return error code; + now it returns 502 code, that can be rerouted to a next server using + the "fastcgi_next_upstream invalid_header" directive. + + *) Bugfix: a segmentation fault occurred in master process if the + "fastcgi_catch_stderr" directive was used; the bug had appeared in + 0.6.10. + Thanks to Manlio Perillo. + + +Changes with nginx 0.6.21 03 Dec 2007 + + *) Change: if variable values used in a "proxy_pass" directive contain + IP-addresses only, then a "resolver" directive is not mandatory. + + *) Bugfix: a segmentation fault might occur in worker process if a + "proxy_pass" directive with URI-part was used; the bug had appeared + in 0.6.19. + + *) Bugfix: if resolver was used on platform that does not support + kqueue, then nginx issued an alert "name is out of response". + Thanks to Andrei Nigmatulin. + + *) Bugfix: if the $server_protocol was used in FastCGI parameters and a + request line length was near to the "client_header_buffer_size" + directive value, then nginx issued an alert "fastcgi: the request + record is too big". + + *) Bugfix: if a plain text HTTP/0.9 version request was made to HTTPS + server, then nginx returned usual response. + + +Changes with nginx 0.6.20 28 Nov 2007 + + *) Bugfix: a segmentation fault might occur in worker process if a + "proxy_pass" directive with URI-part was used; the bug had appeared + in 0.6.19. + + +Changes with nginx 0.6.19 27 Nov 2007 + + *) Bugfix: the 0.6.18 version could not be built. + + +Changes with nginx 0.6.18 27 Nov 2007 + + *) Change: now the ngx_http_userid_module adds start time microseconds + to the cookie field contains a pid value. + + *) Change: now the full request line instead of URI only is written to + error_log. + + *) Feature: variables support in the "proxy_pass" directive. + + *) Feature: the "resolver" and "resolver_timeout" directives. + + *) Feature: now the directive "add_header last-modified ''" deletes a + "Last-Modified" response header line. + + *) Bugfix: the "limit_rate" directive did not allow to use full + throughput, even if limit value was very high. + + +Changes with nginx 0.6.17 15 Nov 2007 + + *) Feature: the "If-Range" request header line support. + Thanks to Alexander V. Inyukhin. + + *) Bugfix: URL double escaping in a redirect of the "msie_refresh" + directive; the bug had appeared in 0.6.4. + + *) Bugfix: the "autoindex" directive did not work with the "alias /" + directive. + + *) Bugfix: a segmentation fault might occur in worker process if + subrequests were used. + + *) Bugfix: the big responses may be transferred truncated if SSL and + gzip were used. + + *) Bugfix: the $status variable was equal to 0 if a proxied server + returned response in HTTP/0.9 version. + + +Changes with nginx 0.6.16 29 Oct 2007 + + *) Change: now the uname(2) is used on Linux instead of procfs. + Thanks to Ilya Novikov. + + *) Bugfix: if the "?" character was in a "error_page" directive, then it + was escaped in a proxied request; the bug had appeared in 0.6.11. + + *) Bugfix: compatibility with mget. + + +Changes with nginx 0.6.15 22 Oct 2007 + + *) Feature: Cygwin compatibility. + Thanks to Vladimir Kutakov. + + *) Feature: the "merge_slashes" directive. + + *) Feature: the "gzip_vary" directive. + + *) Feature: the "server_tokens" directive. + + *) Bugfix: nginx did not unescape URI in the "include" SSI command. + + *) Bugfix: the segmentation fault was occurred on start or while + reconfiguration if variable was used in the "charset" or + "source_charset" directives. + + *) Bugfix: nginx returned the 400 response on requests like + "GET http://www.domain.com HTTP/1.0". + Thanks to James Oakley. + + *) Bugfix: if request with request body was redirected using the + "error_page" directive, then nginx tried to read the request body + again; the bug had appeared in 0.6.7. + + *) Bugfix: a segmentation fault occurred in worker process if no + server_name was explicitly defined for server processing request; the + bug had appeared in 0.6.7. + + +Changes with nginx 0.6.14 15 Oct 2007 + + *) Change: now by default the "echo" SSI command uses entity encoding. + + *) Feature: the "encoding" parameter in the "echo" SSI command. + + *) Feature: the "access_log" directive may be used inside the + "limit_except" block. + + *) Bugfix: if all upstream servers were failed, then all servers had got + weight the was equal one until servers became alive; the bug had + appeared in 0.6.6. + + *) Bugfix: a segmentation fault occurred in worker process if + $date_local and $date_gmt were used outside the + ngx_http_ssi_filter_module. + + *) Bugfix: a segmentation fault might occur in worker process if debug + log was enabled. + Thanks to Andrei Nigmatulin. + + *) Bugfix: ngx_http_memcached_module did not set + $upstream_response_time. + Thanks to Maxim Dounin. + + *) Bugfix: a worker process may got caught in an endless loop, if the + memcached was used. + + *) Bugfix: nginx supported low case only "close" and "keep-alive" values + in the "Connection" request header line; the bug had appeared in + 0.6.11. + + *) Bugfix: sub_filter did not work with empty substitution. + + *) Bugfix: in sub_filter parsing. + + +Changes with nginx 0.6.13 24 Sep 2007 + + *) Bugfix: nginx did not close directory file on HEAD request if + autoindex was used. + Thanks to Arkadiusz Patyk. + + +Changes with nginx 0.6.12 21 Sep 2007 + + *) Change: mail proxy was split on three modules: pop3, imap and smtp. + + *) Feature: the --without-mail_pop3_module, --without-mail_imap_module, + and --without-mail_smtp_module configuration parameters. + + *) Feature: the "smtp_greeting_delay" and "smtp_client_buffer" + directives of the ngx_mail_smtp_module. + + *) Bugfix: the trailing wildcards did not work; the bug had appeared in + 0.6.9. + + *) Bugfix: nginx could not start on Solaris if the shared PCRE library + located in non-standard place was used. + + *) Bugfix: the "proxy_hide_header" and "fastcgi_hide_header" directives + did not hide response header lines whose name was longer than 32 + characters. + Thanks to Manlio Perillo. + + +Changes with nginx 0.6.11 11 Sep 2007 + + *) Bugfix: active connection counter always increased if mail proxy was + used. + + *) Bugfix: if backend returned response header only using non-buffered + proxy, then nginx closed backend connection on timeout. + + *) Bugfix: nginx did not support several "Connection" request header + lines. + + *) Bugfix: if the "max_fails" was set for upstream server, then after + first failure server weight was always one; the bug had appeared in + 0.6.6. + + +Changes with nginx 0.6.10 03 Sep 2007 + + *) Feature: the "open_file_cache", "open_file_cache_retest", and + "open_file_cache_errors" directives. + + *) Bugfix: socket leak; the bug had appeared in 0.6.7. + + *) Bugfix: a charset set by the "charset" directive was not appended to + the "Content-Type" header set by $r->send_http_header(). + + *) Bugfix: a segmentation fault might occur in worker process if + /dev/poll method was used. + + +Changes with nginx 0.6.9 28 Aug 2007 + + *) Bugfix: a worker process may got caught in an endless loop, if the + HTTPS protocol was used; the bug had appeared in 0.6.7. + + *) Bugfix: if server listened on two addresses or ports and trailing + wildcard was used, then nginx did not run. + + *) Bugfix: the "ip_hash" directive might incorrectly mark servers as + down. + + *) Bugfix: nginx could not be built on amd64; the bug had appeared in + 0.6.8. + + +Changes with nginx 0.6.8 20 Aug 2007 + + *) Change: now nginx tries to set the "worker_priority", + "worker_rlimit_nofile", "worker_rlimit_core", and + "worker_rlimit_sigpending" without super-user privileges. + + *) Change: now nginx escapes space and "%" in request to a mail proxy + authentication server. + + *) Change: now nginx escapes "%" in $memcached_key variable. + + *) Bugfix: nginx used path relative to configuration prefix for + non-absolute configuration file path specified in the "-c" key; the + bug had appeared in 0.6.6. + + *) Bugfix: nginx did not work on FreeBSD/sparc64. + + +Changes with nginx 0.6.7 15 Aug 2007 + + *) Change: now the paths specified in the "include", + "auth_basic_user_file", "perl_modules", "ssl_certificate", + "ssl_certificate_key", and "ssl_client_certificate" directives are + relative to directory of nginx configuration file nginx.conf, but not + to nginx prefix directory. + + *) Change: the --sysconfdir=PATH option in configure was canceled. + + *) Change: the special make target "upgrade1" was defined for online + upgrade of 0.1.x versions. + + *) Feature: the "server_name" and "valid_referers" directives support + regular expressions. + + *) Feature: the "server" directive in the "upstream" context supports + the "backup" parameter. + + *) Feature: the ngx_http_perl_module supports the + $r->discard_request_body. + + *) Feature: the "add_header Last-Modified ..." directive changes the + "Last-Modified" response header line. + + *) Bugfix: if a response different than 200 was returned to a request + with body and connection went to the keep-alive state after the + request, then nginx returned 400 for the next request. + + *) Bugfix: a segmentation fault occurred in worker process if invalid + address was set in the "auth_http" directive. + + *) Bugfix: now nginx uses default listen backlog value 511 on all + platforms except FreeBSD. + Thanks to Jiang Hong. + + *) Bugfix: a worker process may got caught in an endless loop, if a + "server" inside "upstream" block was marked as "down"; the bug had + appeared in 0.6.6. + + *) Bugfix: now Solaris sendfilev() is not used to transfer the client + request body to FastCGI-server via the unix domain socket. + + +Changes with nginx 0.6.6 30 Jul 2007 + + *) Feature: the --sysconfdir=PATH option in configure. + + *) Feature: named locations. + + *) Feature: the $args variable can be set with the "set" directive. + + *) Feature: the $is_args variable. + + *) Bugfix: fair big weight upstream balancer. + + *) Bugfix: if a client has closed connection to mail proxy then nginx + might not close connection to backend. + + *) Bugfix: if the same host without specified port was used as backend + for HTTP and HTTPS, then nginx used only one port - 80 or 443. + + *) Bugfix: fix building on Solaris/amd64 by Sun Studio 11 and early + versions; the bug had appeared in 0.6.4. + + +Changes with nginx 0.6.5 23 Jul 2007 + + *) Feature: $nginx_version variable. + Thanks to Nick S. Grechukh. + + *) Feature: the mail proxy supports AUTHENTICATE in IMAP mode. + Thanks to Maxim Dounin. + + *) Feature: the mail proxy supports STARTTLS in SMTP mode. + Thanks to Maxim Dounin. + + *) Bugfix: now nginx escapes space in $memcached_key variable. + + *) Bugfix: nginx was incorrectly built by Sun Studio on Solaris/amd64. + Thanks to Jiang Hong. + + *) Bugfix: of minor potential bugs. + Thanks to Coverity's Scan. + + +Changes with nginx 0.6.4 17 Jul 2007 + + *) Security: the "msie_refresh" directive allowed XSS. + Thanks to Maxim Boguk. + + *) Change: the "proxy_store" and "fastcgi_store" directives were + changed. + + *) Feature: the "proxy_store_access" and "fastcgi_store_access" + directives. + + *) Bugfix: nginx did not work on Solaris/sparc64 if it was built by Sun + Studio. + Thanks to Andrei Nigmatulin. + + *) Workaround: for Sun Studio 12. + Thanks to Jiang Hong. + + +Changes with nginx 0.6.3 12 Jul 2007 + + *) Feature: the "proxy_store" and "fastcgi_store" directives. + + *) Bugfix: a segmentation fault might occur in worker process if the + "auth_http_header" directive was used. + Thanks to Maxim Dounin. + + *) Bugfix: a segmentation fault occurred in worker process if the + CRAM-MD5 authentication method was used, but it was not enabled. + + *) Bugfix: a segmentation fault might occur in worker process when the + HTTPS protocol was used in the "proxy_pass" directive. + + *) Bugfix: a segmentation fault might occur in worker process if the + eventport method was used. + + *) Bugfix: the "proxy_ignore_client_abort" and + "fastcgi_ignore_client_abort" directives did not work; the bug had + appeared in 0.5.13. + + +Changes with nginx 0.6.2 09 Jul 2007 + + *) Bugfix: if the FastCGI header was split in records, then nginx passed + garbage in the header to a client. + + +Changes with nginx 0.6.1 17 Jun 2007 + + *) Bugfix: in SSI parsing. + + *) Bugfix: if remote SSI subrequest was used, then posterior local file + subrequest might transferred to client in wrong order. + + *) Bugfix: large SSI inclusions buffered in temporary files were + truncated. + + *) Bugfix: the perl $$ variable value in ngx_http_perl_module was equal + to the master process identification number. + + +Changes with nginx 0.6.0 14 Jun 2007 + + *) Feature: the "server_name", "map", and "valid_referers" directives + support the "www.example.*" wildcards. + + +Changes with nginx 0.5.25 11 Jun 2007 + + *) Bugfix: nginx could not be built with the + --without-http_rewrite_module parameter; the bug had appeared in + 0.5.24. + + +Changes with nginx 0.5.24 06 Jun 2007 + + *) Security: the "ssl_verify_client" directive did not work if request + was made using HTTP/0.9. + + *) Bugfix: a part of response body might be passed uncompressed if gzip + was used; the bug had appeared in 0.5.23. + + +Changes with nginx 0.5.23 04 Jun 2007 + + *) Feature: the ngx_http_ssl_module supports Server Name Indication TLS + extension. + + *) Feature: the "fastcgi_catch_stderr" directive. + Thanks to Nick S. Grechukh, OWOX project. + + *) Bugfix: a segmentation fault occurred in master process if two + virtual servers should bind() to the overlapping ports. + + *) Bugfix: if nginx was built with ngx_http_perl_module and perl + supported threads, then during second reconfiguration the error + messages "panic: MUTEX_LOCK" and "perl_parse() failed" were issued. + + *) Bugfix: in the HTTPS protocol in the "proxy_pass" directive. + + +Changes with nginx 0.5.22 29 May 2007 + + *) Bugfix: a big request body might not be passed to backend; the bug + had appeared in 0.5.21. + + +Changes with nginx 0.5.21 28 May 2007 + + *) Bugfix: if server has more than about ten locations, then regex + locations might be chosen not in that order as they were specified. + + *) Bugfix: a worker process may got caught in an endless loop on 64-bit + platform, if the 33-rd or next in succession backend has failed. + Thanks to Anton Povarov. + + *) Bugfix: a bus error might occur on Solaris/sparc64 if the PCRE + library was used. + Thanks to Andrei Nigmatulin. + + *) Bugfix: in the HTTPS protocol in the "proxy_pass" directive. + + +Changes with nginx 0.5.20 07 May 2007 + + *) Feature: the "sendfile_max_chunk" directive. + + *) Feature: the "$http_...", "$sent_http_...", and "$upstream_http_..." + variables may be changed using the "set" directive. + + *) Bugfix: a segmentation fault might occur in worker process if the SSI + command 'if expr="$var = /"' was used. + + *) Bugfix: trailing boundary of multipart range response was transferred + incorrectly. + Thanks to Evan Miller. + + *) Bugfix: nginx did not work on Solaris/sparc64 if it was built by Sun + Studio. + Thanks to Andrei Nigmatulin. + + *) Bugfix: the ngx_http_perl_module could not be built by Solaris make. + Thanks to Andrei Nigmatulin. + + +Changes with nginx 0.5.19 24 Apr 2007 + + *) Change: now the $request_time variable has millisecond precision. + + *) Change: the method $r->rflush of ngx_http_perl_module was renamed to + the $r->flush. + + *) Feature: the $upstream_addr variable. + + *) Feature: the "proxy_headers_hash_max_size" and + "proxy_headers_hash_bucket_size" directives. + Thanks to Volodymyr Kostyrko. + + *) Bugfix: the files more than 2G could not be transferred using + sendfile and limit_rate on 64-bit platforms. + + *) Bugfix: the files more than 2G could not be transferred using + sendfile on 64-bit Linux. + + +Changes with nginx 0.5.18 19 Apr 2007 + + *) Feature: the ngx_http_sub_filter_module. + + *) Feature: the "$upstream_http_..." variables. + + *) Feature: now the $upstream_status and $upstream_response_time + variables keep data about all upstreams before X-Accel-Redirect. + + *) Bugfix: a segmentation fault occurred in master process after first + reconfiguration and receiving any signal if nginx was built with + ngx_http_perl_module and perl did not support multiplicity; the bug + had appeared in 0.5.9. + + *) Bugfix: if perl did not support multiplicity, then after + reconfiguration perl code did not work; the bug had appeared in + 0.3.38. + + +Changes with nginx 0.5.17 02 Apr 2007 + + *) Change: now nginx always returns the 405 status for the TRACE method. + + *) Feature: now nginx supports the "include" directive inside the + "types" block. + + *) Bugfix: the $document_root variable usage in the "root" and "alias" + directives is disabled: this caused recursive stack overflow. + + *) Bugfix: in the HTTPS protocol in the "proxy_pass" directive. + + *) Bugfix: in some cases non-cacheable variables (such as $uri variable) + returned old cached value. + + +Changes with nginx 0.5.16 26 Mar 2007 + + *) Bugfix: the C-class network was not used as hash key in the "ip_hash" + directive. + Thanks to Pavel Yarkovoy. + + *) Bugfix: a segmentation fault might occur in worker process if a + charset was set in the "Content-Type" header line and the line has + trailing ";"; the bug had appeared in 0.3.50. + + *) Bugfix: the "[alert] zero size buf" error when FastCGI server was + used and a request body written in a temporary file was multiple of + 32K. + + *) Bugfix: nginx could not be built on Solaris without the --with-debug + option; the bug had appeared in 0.5.15. + + +Changes with nginx 0.5.15 19 Mar 2007 + + *) Feature: the mail proxy supports authenticated SMTP proxying and the + "smtp_auth", "smtp_capabilities", and "xclient" directives. + Thanks to Anton Yuzhaninov and Maxim Dounin. + + *) Feature: now the keep-alive connections are closed just after + receiving the reconfiguration signal. + + *) Change: the "imap" and "auth" directives were renamed to the "mail" + and "pop3_auth" directives. + + *) Bugfix: a segmentation fault occurred in worker process if the + CRAM-MD5 authentication method was used and the APOP method was + disabled. + + *) Bugfix: if the "starttls only" directive was used in POP3 protocol, + then nginx allowed authentication without switching to the SSL mode. + + *) Bugfix: worker processes did not exit after reconfiguration and did + not rotate logs if the eventport method was used. + + *) Bugfix: a worker process may got caught in an endless loop, if the + "ip_hash" directive was used. + + *) Bugfix: now nginx does not log some alerts if eventport or /dev/poll + methods are used. + + +Changes with nginx 0.5.14 23 Feb 2007 + + *) Bugfix: nginx ignored superfluous closing "}" in the end of + configuration file. + + +Changes with nginx 0.5.13 19 Feb 2007 + + *) Feature: the COPY and MOVE methods. + + *) Bugfix: the ngx_http_realip_module set garbage for requests passed + via keep-alive connection. + + *) Bugfix: nginx did not work on big-endian 64-bit Linux. + Thanks to Andrei Nigmatulin. + + *) Bugfix: now when IMAP/POP3 proxy receives too long command it closes + the connection right away, but not after timeout. + + *) Bugfix: if the "epoll" method was used and a client closed a + connection prematurely, then nginx closed the connection after a send + timeout only. + + *) Bugfix: nginx could not be built on platforms different from i386, + amd64, sparc, and ppc; the bug had appeared in 0.5.8. + + +Changes with nginx 0.5.12 12 Feb 2007 + + *) Bugfix: nginx could not be built on platforms different from i386, + amd64, sparc, and ppc; the bug had appeared in 0.5.8. + + *) Bugfix: a segmentation fault might occur in worker process if the + temporary files were used while working with FastCGI server; the bug + had appeared in 0.5.8. + + *) Bugfix: a segmentation fault might occur in worker process if the + $fastcgi_script_name variable was logged. + + *) Bugfix: ngx_http_perl_module could not be built on Solaris. + + +Changes with nginx 0.5.11 05 Feb 2007 + + *) Feature: now configure detects system PCRE library in MacPorts. + Thanks to Chris McGrath. + + *) Bugfix: the response was incorrect if several ranges were requested; + the bug had appeared in 0.5.6. + + *) Bugfix: the "create_full_put_path" directive could not create the + intermediate directories if no "dav_access" directive was set. + Thanks to Evan Miller. + + *) Bugfix: the "0" response code might be logged in the access_log + instead of the "400" and "408" error codes. + + *) Bugfix: a segmentation fault might occur in worker process if nginx + was built with -O2 optimization. + + +Changes with nginx 0.5.10 26 Jan 2007 + + *) Bugfix: while online executable file upgrade the new master process + did not inherit the listening sockets; the bug had appeared in 0.5.9. + + *) Bugfix: a segmentation fault might occur in worker process if nginx + was built with -O2 optimization; the bug had appeared in 0.5.1. + + +Changes with nginx 0.5.9 25 Jan 2007 + + *) Change: now the ngx_http_memcached_module uses the $memcached_key + variable value as a key. + + *) Feature: the $memcached_key variable. + + *) Feature: the "clean" parameter in the "client_body_in_file_only" + directive. + + *) Feature: the "env" directive. + + *) Feature: the "sendfile" directive is available inside the "if" block. + + *) Feature: now on failure of the writing to access nginx logs a message + to error_log, but not more often than once a minute. + + *) Bugfix: the "access_log off" directive did not always turn off the + logging. + + +Changes with nginx 0.5.8 19 Jan 2007 + + *) Bugfix: a segmentation fault might occur if + "client_body_in_file_only on" was used and a request body was small. + + *) Bugfix: a segmentation fault occurred if + "client_body_in_file_only on" and "proxy_pass_request_body off" or + "fastcgi_pass_request_body off" directives were used, and nginx + switched to a next upstream. + + *) Bugfix: if the "proxy_buffering off" directive was used and a client + connection was non-active, then the connection was closed after send + timeout; the bug had appeared in 0.4.7. + + *) Bugfix: if the "epoll" method was used and a client closed a + connection prematurely, then nginx closed the connection after a send + timeout only. + + *) Bugfix: the "[alert] zero size buf" error when FastCGI server was + used. + + *) Bugfixes in the "limit_zone" directive. + + +Changes with nginx 0.5.7 15 Jan 2007 + + *) Feature: the ssl_session_cache storage optimization. + + *) Bugfixes in the "ssl_session_cache" and "limit_zone" directives. + + *) Bugfix: the segmentation fault was occurred on start or while + reconfiguration if the "ssl_session_cache" or "limit_zone" directives + were used on 64-bit platforms. + + *) Bugfix: a segmentation fault occurred if the "add_before_body" or + "add_after_body" directives were used and there was no "Content-Type" + header line in response. + + *) Bugfix: the OpenSSL library was always built with the threads + support. + Thanks to Den Ivanov. + + *) Bugfix: the PCRE-6.5+ library and the icc compiler compatibility. + + +Changes with nginx 0.5.6 09 Jan 2007 + + *) Change: now the ngx_http_index_module ignores all methods except the + GET, HEAD, and POST methods. + + *) Feature: the ngx_http_limit_zone_module. + + *) Feature: the $binary_remote_addr variable. + + *) Feature: the "ssl_session_cache" directives of the + ngx_http_ssl_module and ngx_imap_ssl_module. + + *) Feature: the DELETE method supports recursive removal. + + *) Bugfix: the byte-ranges were transferred incorrectly if the + $r->sendfile() was used. + + +Changes with nginx 0.5.5 24 Dec 2006 + + *) Change: the -v switch does not show compiler information any more. + + *) Feature: the -V switch. + + *) Feature: the "worker_rlimit_core" directive supports size in K, M, + and G. + + *) Bugfix: the nginx.pm module now could be installed by an unprivileged + user. + + *) Bugfix: a segmentation fault might occur if the $r->request_body or + $r->request_body_file methods were used. + + *) Bugfix: the ppc platform specific bugs. + + +Changes with nginx 0.5.4 15 Dec 2006 + + *) Feature: the "perl" directive may be used inside the "limit_except" + block. + + *) Bugfix: the ngx_http_dav_module required the "Date" request header + line for the DELETE method. + + *) Bugfix: if one only parameter was used in the "dav_access" directive, + then nginx might report about configuration error. + + *) Bugfix: a segmentation fault might occur if the $host variable was + used; the bug had appeared in 0.4.14. + + +Changes with nginx 0.5.3 13 Dec 2006 + + *) Feature: the ngx_http_perl_module supports the $r->status, + $r->log_error, and $r->sleep methods. + + *) Feature: the $r->variable method supports variables that do not exist + in nginx configuration. + + *) Bugfix: the $r->has_request_body method did not work. + + +Changes with nginx 0.5.2 11 Dec 2006 + + *) Bugfix: if the "proxy_pass" directive used the name of the "upstream" + block, then nginx tried to resolve the name; the bug had appeared in + 0.5.1. + + +Changes with nginx 0.5.1 11 Dec 2006 + + *) Bugfix: the "post_action" directive might not run after a + unsuccessful completion of a request. + + *) Workaround: for Eudora for Mac; the bug had appeared in 0.4.11. + Thanks to Bron Gondwana. + + *) Bugfix: if the "upstream" name was used in the "fastcgi_pass", then + the message "no port in upstream" was issued; the bug had appeared in + 0.5.0. + + *) Bugfix: if the "proxy_pass" and "fastcgi_pass" directives used the + same servers but different ports, then these directives uses the + first described port; the bug had appeared in 0.5.0. + + *) Bugfix: if the "proxy_pass" and "fastcgi_pass" directives used the + unix domain sockets, then these directives used first described + socket; the bug had appeared in 0.5.0. + + *) Bugfix: ngx_http_auth_basic_module ignored the user if it was in the + last line in the password file and there was no the carriage return, + the line feed, or the ":" symbol after the password. + + *) Bugfix: the $upstream_response_time variable might be equal to + "0.000", although response time was more than 1 millisecond. + + +Changes with nginx 0.5.0 04 Dec 2006 + + *) Change: the parameters in the "%name" form in the "log_format" + directive are not supported anymore. + + *) Change: the "proxy_upstream_max_fails", + "proxy_upstream_fail_timeout", "fastcgi_upstream_max_fails", + "fastcgi_upstream_fail_timeout", "memcached_upstream_max_fails", and + "memcached_upstream_fail_timeout" directives are not supported + anymore. + + *) Feature: the "server" directive in the "upstream" context supports + the "max_fails", "fail_timeout", and "down" parameters. + + *) Feature: the "ip_hash" directive inside the "upstream" block. + + *) Feature: the WAIT status in the "Auth-Status" header line of the + IMAP/POP3 proxy authentication server response. + + *) Bugfix: nginx could not be built on 64-bit platforms; the bug had + appeared in 0.4.14. + + +Changes with nginx 0.4.14 27 Nov 2006 + + *) Feature: the "proxy_pass_error_message" directive in IMAP/POP3 proxy. + + *) Feature: now configure detects system PCRE library on FreeBSD, Linux, + and NetBSD. + + *) Bugfix: ngx_http_perl_module did not work with perl built with the + threads support; the bug had appeared in 0.3.38. + + *) Bugfix: ngx_http_perl_module did not work if perl was called + recursively. + + *) Bugfix: nginx ignored a host name in a request line. + + *) Bugfix: a worker process may got caught in an endless loop, if a + FastCGI server sent too many data to the stderr. + + *) Bugfix: the $upstream_response_time variable may be negative if the + system time was changed backward. + + *) Bugfix: the "Auth-Login-Attempt" parameter was not sent to IMAP/POP3 + proxy authentication server when POP3 was used. + + *) Bugfix: a segmentation fault might occur if connect to IMAP/POP3 + proxy authentication server failed. + + +Changes with nginx 0.4.13 15 Nov 2006 + + *) Feature: the "proxy_pass" directive may be used inside the + "limit_except" block. + + *) Feature: the "limit_except" directive supports all WebDAV methods. + + *) Bugfix: if the "add_before_body" directive was used without the + "add_after_body" directive, then a response did not transferred + complete. + + *) Bugfix: a large request body did not receive if the epoll method and + the deferred accept() were used. + + *) Bugfix: a charset could not be set for ngx_http_autoindex_module + responses; the bug had appeared in 0.3.50. + + *) Bugfix: the "[alert] zero size buf" error when FastCGI server was + used; + + *) Bugfix: the --group= configuration parameter was ignored. + Thanks to Thomas Moschny. + + *) Bugfix: the 50th subrequest in SSI response did not work; the bug had + appeared in 0.3.50. + + +Changes with nginx 0.4.12 31 Oct 2006 + + *) Feature: the ngx_http_perl_module supports the $r->variable method. + + *) Bugfix: if a big static file was included using SSI in a response, + then the response may be transferred incomplete. + + *) Bugfix: nginx did not omit the "#fragment" part in URI. + + +Changes with nginx 0.4.11 25 Oct 2006 + + *) Feature: the POP3 proxy supports the AUTH LOGIN PLAIN and CRAM-MD5. + + *) Feature: the ngx_http_perl_module supports the $r->allow_ranges + method. + + *) Bugfix: if the APOP was enabled in the POP3 proxy, then the USER/PASS + commands might not work; the bug had appeared in 0.4.10. + + +Changes with nginx 0.4.10 23 Oct 2006 + + *) Feature: the POP3 proxy supports the APOP command. + + *) Bugfix: if the select, poll or /dev/poll methods were used, then + while waiting authentication server response the IMAP/POP3 proxy + hogged CPU. + + *) Bugfix: a segmentation fault might occur if the $server_addr variable + was used in the "map" directive. + + *) Bugfix: the ngx_http_flv_module did not support the byte ranges for + full responses; the bug had appeared in 0.4.7. + + *) Bugfix: nginx could not be built on Debian amd64; the bug had + appeared in 0.4.9. + + +Changes with nginx 0.4.9 13 Oct 2006 + + *) Feature: the "set" parameter in the "include" SSI command. + + *) Feature: the ngx_http_perl_module now tests the nginx.pm module + version. + + +Changes with nginx 0.4.8 11 Oct 2006 + + *) Bugfix: if an "include" SSI command were before another "include" SSI + command with a "wait" parameter, then the "wait" parameter might not + work. + + *) Bugfix: the ngx_http_flv_module added the FLV header to the full + responses. + Thanks to Alexey Kovyrin. + + +Changes with nginx 0.4.7 10 Oct 2006 + + *) Feature: the ngx_http_flv_module. + + *) Feature: the $request_body_file variable. + + *) Feature: the "charset" and "source_charset" directives support the + variables. + + *) Bugfix: if an "include" SSI command were before another "include" SSI + command with a "wait" parameter, then the "wait" parameter might not + work. + + *) Bugfix: if the "proxy_buffering off" directive was used or while + working with memcached the connections might not be closed on + timeout. + + *) Bugfix: nginx did not run on 64-bit platforms except amd64, sparc64, + and ppc64. + + +Changes with nginx 0.4.6 06 Oct 2006 + + *) Bugfix: nginx did not run on 64-bit platforms except amd64, sparc64, + and ppc64. + + *) Bugfix: nginx sent the chunked response for HTTP/1.1 request, + if its length was set by text string in the + $r->headers_out("Content-Length", ...) method. + + *) Bugfix: after redirecting error by an "error_page" directive any + ngx_http_rewrite_module directive returned this error code; the bug + had appeared in 0.4.4. + + +Changes with nginx 0.4.5 02 Oct 2006 + + *) Bugfix: nginx could not be built on Linux and Solaris; the bug had + appeared in 0.4.4. + + +Changes with nginx 0.4.4 02 Oct 2006 + + *) Feature: the $scheme variable. + + *) Feature: the "expires" directive supports the "max" parameter. + + *) Feature: the "include" directive supports the "*" mask. + Thanks to Jonathan Dance. + + *) Bugfix: the "return" directive always overrode the "error_page" + response code redirected by the "error_page" directive. + + *) Bugfix: a segmentation fault occurred if zero-length body was in PUT + method. + + *) Bugfix: the redirect was changed incorrectly if the variables were + used in the "proxy_redirect" directive. + + +Changes with nginx 0.4.3 26 Sep 2006 + + *) Change: now the 499 error could not be redirected using an + "error_page" directive. + + *) Feature: the Solaris 10 event ports support. + + *) Feature: the ngx_http_browser_module. + + *) Bugfix: a segmentation fault may occur while redirecting the 400 + error to the proxied server using a "proxy_pass" directive. + + *) Bugfix: a segmentation fault occurred if an unix domain socket was + used in a "proxy_pass" directive; the bug had appeared in 0.3.47. + + *) Bugfix: SSI did work with memcached and nonbuffered responses. + + *) Workaround: of the Sun Studio PAUSE hardware capability bug. + + +Changes with nginx 0.4.2 14 Sep 2006 + + *) Bugfix: the O_NOATIME flag support on Linux was canceled; the bug had + appeared in 0.4.1. + + +Changes with nginx 0.4.1 14 Sep 2006 + + *) Bugfix: the DragonFlyBSD compatibility. + Thanks to Pavel Nazarov. + + *) Workaround: of bug in 64-bit Linux sendfile(), when file is more than + 2G. + + *) Feature: now on Linux nginx uses O_NOATIME flag for static requests. + Thanks to Yusuf Goolamabbas. + + +Changes with nginx 0.4.0 30 Aug 2006 + + *) Change in internal API: the HTTP modules initialization was moved + from the init module phase to the HTTP postconfiguration phase. + + *) Change: now the request body is not read beforehand for the + ngx_http_perl_module: it's required to start the reading using the + $r->has_request_body method. + + *) Feature: the ngx_http_perl_module supports the DECLINED return code. + + *) Feature: the ngx_http_dav_module supports the incoming "Date" header + line for the PUT method. + + *) Feature: the "ssi" directive is available inside the "if" block. + + *) Bugfix: a segmentation fault occurred if there was an "index" + directive with variables and the first index name was without + variables; the bug had appeared in 0.1.29. + + +Changes with nginx 0.3.61 28 Aug 2006 + + *) Change: now the "tcp_nodelay" directive is turned on by default. + + *) Feature: the "msie_refresh" directive. + + *) Feature: the "recursive_error_pages" directive. + + *) Bugfix: the "rewrite" directive returned incorrect redirect, if the + redirect had the captured escaped symbols from original URI. + + +Changes with nginx 0.3.60 18 Aug 2006 + + *) Bugfix: a worker process may got caught in an endless loop while an + error redirection; the bug had appeared in 0.3.59. + + +Changes with nginx 0.3.59 16 Aug 2006 + + *) Feature: now is possible to do several redirection using the + "error_page" directive. + + *) Bugfix: the "dav_access" directive did not support three parameters. + + *) Bugfix: the "error_page" directive did not changes the "Content-Type" + header line after the "X-Accel-Redirect" was used; the bug had + appeared in 0.3.58. + + +Changes with nginx 0.3.58 14 Aug 2006 + + *) Feature: the "error_page" directive supports the variables. + + *) Change: now the procfs interface instead of sysctl is used on Linux. + + *) Change: now the "Content-Type" header line is inherited from first + response when the "X-Accel-Redirect" was used. + + *) Bugfix: the "error_page" directive did not redirect the 413 error. + + *) Bugfix: the trailing "?" did not remove old arguments if no new + arguments were added to a rewritten URI. + + *) Bugfix: nginx could not run on 64-bit FreeBSD 7.0-CURRENT. + + +Changes with nginx 0.3.57 09 Aug 2006 + + *) Feature: the $ssl_client_serial variable. + + *) Bugfix: in the "!-e" operator of the "if" directive. + Thanks to Andrian Budanstov. + + *) Bugfix: while a client certificate verification nginx did not send to + a client the required certificates information. + + *) Bugfix: the $document_root variable did not support the variables in + the "root" directive. + + +Changes with nginx 0.3.56 04 Aug 2006 + + *) Feature: the "dav_access" directive. + + *) Feature: the "if" directive supports the "-d", "!-d", "-e", "!-e", + "-x", and "!-x" operators. + + *) Bugfix: a segmentation fault occurred if a request returned a + redirect and some sent to client header lines were logged in the + access log. + + +Changes with nginx 0.3.55 28 Jul 2006 + + *) Feature: the "stub" parameter in the "include" SSI command. + + *) Feature: the "block" SSI command. + + *) Feature: the unicode2nginx script was added to contrib. + + *) Bugfix: if a "root" was specified by variable only, then the root was + relative to a server prefix. + + *) Bugfix: if the request contained "//" or "/./" and escaped symbols + after them, then the proxied request was sent unescaped. + + *) Bugfix: the $r->header_in("Cookie") of the ngx_http_perl_module now + returns all "Cookie" header lines. + + *) Bugfix: a segmentation fault occurred if + "client_body_in_file_only on" was used and nginx switched to a next + upstream. + + *) Bugfix: on some condition while reconfiguration character codes + inside the "charset_map" may be treated invalid; the bug had appeared + in 0.3.50. + + +Changes with nginx 0.3.54 11 Jul 2006 + + *) Feature: nginx now logs the subrequest information to the error log. + + *) Feature: the "proxy_next_upstream", "fastcgi_next_upstream", and + "memcached_next_upstream" directives support the "off" parameter. + + *) Feature: the "debug_connection" directive supports the CIDR address + form. + + *) Bugfix: if a response of proxied server or FastCGI server was + converted from UTF-8 or back, then it may be transferred incomplete. + + *) Bugfix: the $upstream_response_time variable had the time of the + first request to a backend only. + + *) Bugfix: nginx could not be built on amd64 platform; the bug had + appeared in 0.3.53. + + +Changes with nginx 0.3.53 07 Jul 2006 + + *) Change: the "add_header" directive adds the string to 204, 301, and + 302 responses. + + *) Feature: the "server" directive in the "upstream" context supports + the "weight" parameter. + + *) Feature: the "server_name" directive supports the "*" wildcard. + + *) Feature: nginx supports the request body size more than 2G. + + *) Bugfix: if a client was successfully authorized using "satisfy_any + on", then anyway the message "access forbidden by rule" was written + in the log. + + *) Bugfix: the "PUT" method may erroneously not create a file and return + the 409 code. + + *) Bugfix: if the IMAP/POP3 backend returned an error, then nginx + continued proxying anyway. + + +Changes with nginx 0.3.52 03 Jul 2006 + + *) Change: the ngx_http_index_module behavior for the "POST /" requests + is reverted to the 0.3.40 version state: the module now does not + return the 405 error. + + *) Bugfix: the worker process may got caught in an endless loop if the + limit rate was used; the bug had appeared in 0.3.37. + + *) Bugfix: ngx_http_charset_module logged "unknown charset" alert, even + if the recoding was not needed; the bug had appeared in 0.3.50. + + *) Bugfix: if a code response of the PUT request was 409, then a + temporary file was not removed. + + +Changes with nginx 0.3.51 30 Jun 2006 + + *) Bugfix: the "<" symbols might disappeared some conditions in the SSI; + the bug had appeared in 0.3.50. + + +Changes with nginx 0.3.50 28 Jun 2006 + + *) Change: the "proxy_redirect_errors" and "fastcgi_redirect_errors" + directives was renamed to the "proxy_intercept_errors" and + "fastcgi_intercept_errors" directives. + + *) Feature: the ngx_http_charset_module supports the recoding from the + single byte encodings to the UTF-8 encoding and back. + + *) Feature: the "X-Accel-Charset" response header line is supported in + proxy and FastCGI mode. + + *) Bugfix: the "\" escape symbol in the "\"" and "\'" pairs in the SSI + command was removed only if the command also has the "$" symbol. + + *) Bugfix: the "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

t+nLtkWJLI%e$mxC|r~4tRUrtW8@jkdfY(sq{h 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 zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F z0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+ zA|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H 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%0DP`wmO!iRJo56~)KJ*$uip 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�sZSp88J#t_7pzH6Y5Q=uK#A=ctxmrWnZkXL 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¨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

*$Wv4~)*-H+F@ z92`@*jg%Fc^owpaGkjY>m1n5VrMxk*mU;|dfbiGcnTYvmZB&)Z<%M^X3daw z#97wWbeMum-=}Y9de1;`_?vov+@E>z!|pdK;d&BL<9{(%2Av*cxx(45u~xILv<`*4 zooDA>q&Q2h#Zb8N6xil?dc`QzA@15r_*Pb-O<0M>{~`+2+Mv~KQ7J4Sg>OBRlqYGi z&0%jvR*gX_b%V&2i!?8z_iKkf`7+4)9K2r65;va$cbHBxX8{}(`PG+Elt1U0eXsA0 z;$gSpi(v)GPbJo)vwKl=U@vVm*;D{ms6sd_Bh{{(F!97$d})AL_DTP1i8W^cTs;|1}wJA;ICv|4hYQKo&>hgCp@o9CGrU z$u2cBca)y^DUPbTlkqB8r7k$(EO^Tg;TLX6Pf-M}<_$c+9aK7ndBR4+(S0yivMjPJ zvg%=w-r0glm|iAyRxU0Q2dzVO^~d3qU#(~A>4I{*IO^{qe2Xut5YCoi z>e|U9%zx4j;bf}-w`js=w9n{cY7c*OjclJ(IIx^xuB|wk{{oBX zW<6`I52kz3)(W3XhCLi4NTGCGpPKlp7pb|{R02H9d|=r`kMBrX>OA=HIH-EMdC}*Jm2o{xPxGxuaU>> zst!`Op%<2tqm2q|c2BMw>CcEqV4wF;=(5DIib)8jga zyU6pRC0eREu=j6Oo7C6P`&_|Q@f+IpnY_=paI3#EG^KxNj{4#;xYap0w$*64yOMg- zlzzE7i5@5&qg~{zG6H@1HdRe(m^ZVeU{8Ca*c-2(&QGcVI+lk@UIo2oUsN3%jmO}h z{ZL9YrJ7E}6LlN6a5SCy6>z41D>F*b0kuMjHwC7647mJ$o1%x~^Pke>(vH+mhGksK z>^0SJ0UvNpdYxH#&2pO?m^0BV-GzNEZ`;6|;l;L;0VvBnaa!zx?RhLz0$^G$Y^PNy z{#F`)Lim237khA>`-8^E)6I_6O=Rj#MBg_byn8uYGSzS#7ZOk6*df03g$jEG&yzzgFkNnVYe$zgz_^M-bku^P3xj<*u z-!k~Z`rF8@tWV9$8C)EExVG%GCy_OIn4Vf{3>Uk|nsu2}=)6pOuhfy+WTuT|m}WQq zOePmA=|`b_Ug394Lv1Yb*|p?>_P~idjSBJ@1;i-S4>L%l*kT(b>yeABS(TLya0vW` ze zuH8k})pMYE&0yAVs7s;S+DY2*YfW9yjPkI+DQIL;(V#?;Xz(XkaxvpT6h-C9Wu9v) zL<;R{bo7m_<9K3R?KbMxGn}thGN9&*DK*PQdbf+?NZCO8$OpC{)Iw9RgHtrOx+q$S zB=q^u@eX&OH;Sao97S%;d8%R!`m|AaAV28qF)J?sYuZAN-e{8smtsG>&<)^PR#*c0 z%|7VTGH^4m!$J19eg0QI$W`(z7f1y5#ATZkuX=k_O!G7wnJzPNY<0u;JCbyqiR9lW z>Sv>~eXgHwXl^VIFEoyyywX}2P104{WVi`lL>E`N>!kr|!VqT51$4+q>Fb2Lt`_Rr z?Wj7uK|Z>m+X)~YxE<<^^)SnI!E_(6Im^rzFHf{B24;d-D(G%9exGt01i~FfkOBH% ztil6&>hu2}h-g3S2HQmYY;_HQJvUw~!5lX|?@OP`Y%J-)dxf+|5v8vXjC_K^((xw?>segJZcO+9?A+%n} z_@aXCig3q$ny0#)zbguIj>+~~WQug7S2Xj_x?ahFtHo1qb|xkDtul|>Jz zBpu3Vv`UxsH-4r0*Br`fVE4~Vo6HfMN{`T$4h2PD0d7AEbu64uysLaS9;p0rXw@XE z$QK{_0M2C#b7v;_P&;td{q$bdsYm@xM!ALT+nLuGr9vyJQ#+KfUH%VG(0o{f<*0+# zvpHxRSnNtzJ5qTPTqUoYOX-YaydPO7@pOSSU%xRFz;QAQJggY5_B>`2*KsMFeJ^y1PjM7|guDNfoit&=v0^$;cYJn> z@&x<+f_X3U!)|S4;>ZJv?n`FPQtq@nwWu#xNuZ?${;GX+Vfje3`W+|W0bD>s;D8OJ zpCrI?DsDR7*Ad{k=g1o=PYO4A@ao5ST3gdYJq1;}fcpOgng2nCA@oWonNv%0b{wKA zwY99VKCm_*Tl26`ZDl!rmJdpVE-=8Wl!KTF?x3b=2QvFXJyUyJ*Pr)iz2OS|ju8*s z5b%nIcr~}cX2zhY8_mx;VB1Evu|nY{&k=8s*5#^j=C)Q`!@~4-ubEsEb$4{`Oz;sf z|5uFJr53qAKCn#lD$6P|BHB_Rce0@+6Ggr_Gu>o{ScYyf$jW(Ylnco?ZF!du;BFIM zvHA9L!3L&V{@DOG$!}C(4~l{G;cCiSROu!#y3sr>9r<28@S+8(#;bawX6nthfd_gW ziqrL^B5Bx__$%|tTTa;OrWZKUT-cE}kh&x?(GTG(&yYKNa$5^qec+H{VDb{ITgZ;c zj@l*&g-;VwDY~*NX)@jN7kpR6NWoSz@rsQ}G4`HJVk^0KJD3Un0ONgtpD7z&gV8*P zOG%@@0{$m;DoQt5BYa^*)zp5W@tlY2V+)AnWon-N|10iUW^23ILdW@MK-DzT56Rhgk4#2)UL58qZZ?bAWUCLCRdes#catYmb3(m1&pfS7gBHpv)0+UH)J6#)k#NBYT zZfv|52_o|dF56A&m3+{~yiuM)(G|iTiOIOmy*b(cz{8irIGRkHeJGZi;_94>&TfKv zu;rjlk4~T#z2IxHnGn9&O>vGtN-4|pB(%iYIUdD!Yp!2^y#62HTy}s0T!+gq$hMN| z_#Rv02Jei@cN@Fb+_Zrp$aPVTHV9~sL!iGB(8qv^nYe1&(cR_vwPUZQ(ToTF`e;Xk7r(AiDW_-x&??#PqQv~qW z27}w2Gp48Bg_1rWeg1 zYfAxUVqxn=BrJKjF&3sffq5bgydsknkvg1`J&Z0v;d_mxMoz$yoP?fh zvvrAWGg`uY1pg7Y}zw&u*y2)PHi`jd+Y6*!fHF&0mQ$c)T@VbIpCCa@fVVq&< zBnec+i=Rb>s> z#W~7#Jc~7XzqW%XU515t0!Hu|B-#!C>j{#K>w};kME&(Qh|C7I!p=gW<4i;szcDYsIy7DJ;*PVfbd2Xf~7Hf0l~>f}NYL@;wdFM&K}t(+<;4 z#d)_GJ+vEY#1^pBFTgl*ah3m_=sH#=oqsXKp<8p2O^$o$UZ*dh1ldlj#vQQi++*BCQ6Bd`BQgYAY{~9iy5oKZ7Cx(#I z8>5~feKjtmsn$igzX*hUKOIaaII%C2`FK3XyLqSY>(sCdxA0W1`%1aCpC981~8=)qyWs2??`Ug?I4n4XM#rN0}D*xy{>B>#q9q>A<_zM_71BD z8LeGW&=#j+XMvtaqDNHpD6AL@H|I(%(W6G}&fbnGWXQfyDJ9aCjstc&T~2o1^oe>k zi8bxXsGdrHaoiBi$ruaIBh=R;NL`vjjTFhUtI*PImD^k#J4`OhP0f$^?yq?}#GcxM zYJ;FtJl3QJ!`Be24mY;xEy zlgM(Z{K$xD2&>u;Ms*D-G0#EZ^Qpb@X0&Gek1N|8!gyD4&cloj*KXx)Jx4;BFZzHs z_;^>6xbzfW%K%>>GLnwr5dDa!-9ld(!|(3T?6`nCbU-HAiLG)4&EEJq8<6}FPq%QC zE9YUU$bOX=wvBs|GhGpfYB)IIX|NZ6o0`o>^~l%gz}}-N;A?ByL~|Xdc?g|mEc<81 zla!Kz!n^`qu???IS2j&;M+x~CHM_9Pna;biQ?0h8D=c#PMWx%NsjY22*1HBSd))v^Mc^2 z8_~%wlAq}Vn}kZRMW{Q@{2gq+$$$ZI(H`cVb|%%k2s~;XI>A@Q-u(XE;E;LEIqfQADg&efIUpZgXu=4n@tj*v!x+8<3rTtZEYuDsZ8WauOZ`wpL?^g;y8cU z(8Zrujfd07g!8GVJwRQ^gQ9c_p3X}+dIs|yj?i}&WYP^m6A}kPu?Cj;Jl$JCX44Qh zbj7hZY7NZtd49i0*a_k6h@%5o!})NYGohfl9Gd?osE;SH3p*8u#0wk%<)~&&sAZEZ zYf$c=M=>aN(}gg<$5|)A*{71Q`~u%yIj&I?wwF#KOEZ;(7Ln3fj;FB+N?*P}mgC+I zMpL{G-t98F+MLYRf$T17i_c*yTJW=4JGz2&lqNxRFpc%U^2Sc18+@pL4eDQ&Q?x(* z=sxsFH1;h>GeS!y@d^QFPI}^nRv|Xof^P!0J?}f_spOe2Pu#kMR?Qf-eol;TVPgS)60RU>DEL!St`sQN{J; z8+Nv}L+v;LzWo?eZ-L;#sA7hrx7do#;<_UfyNbK)DcqRZXQ9PX^Sg(m=y}CkUr!T> zo@bC|0w>W$dajD>_t>Gk0}?k1oy2oaR!{0;L$>FP1Bp0|5Bw=xI&)Fol+=<4JR!yD zVoq5@VdmTfJx7Xege6 zeugO|@*F4cR$(j-+R%|_WemB#tHDzB)P-qO?7Q&p9(XZZq6)uHuIUkr!sd_vc(B|J zyq3L?C&>l!XMcM`_@0@d)tkx7U|OaZay-*cN)LLI2tIurtkoJk7w1X#aaUF48DCF7 zeuCu0Eo3V^R{Lu#nlsFMI`nPtLCZ97-hDaIOQP5;!MV{9E^D8W=^ezdE^|*P`@Y72 z(Y{075QO@qCusd*>n_fKeE1W*(Uy(lO1`$|;dHFe48N1Ri{iV7WIVCwcO*#DUEZ~dAP(1!{_ME#NzeV96o#tih3s~dx$X(> z5)W0A7BLxarUW?XP`=j@@|mJ=1N^R;2uAWd$aD{Q!wve;oE;|&PmHb5(v%aQb+O~K zZUc>|2v$~>&()oZI~yi60L5Bgy6Co?_Jv8Ji{SkEjqNL&4M#{+$;$@S`rvxm(F=uf zqTdFGY`~VRJmf;m0<+4G zF1SH@lbSLCC%q9Iz+K|kEqN;5D;uHtx?C`srbw;9QMwgx{E;zCwP)Dku#N7x0-WO$*rO8UopmKm(U+%pkHH6&s`r1W-YPQP z45LHd{k1cRA*o^x*YqjuYzUhg2Y|?)#xWmAXW4=(x&b|!ldTvzd5#`LaFgDkX+ryw zieLSmU4;s>ll(rLx$|codR>KwVm{v|uQE`nj zZf;AGmLJ+Ap?;if-OA2}SWfs_b`P9y%$Y78l6Nc(^1Gef5qGfOIUskg;JA%o;8EfB!Yo|#z|X-IlVhG z$t+MZMX)bEu9={ix8Zc}D8uXp=<9ugaZO@0s*-v3IBhJICuYCB~Y0L*)}a879HYK99NM0xGU| zu;LAa2f`UFAYFf}#DpL6JaaXxcqrEMJZEQTun*64MY&(JITg1Di1!Q_ggr0_=h?R) zHmX-ti41}$+z0c>UPA!l@du?Ec*+tSjoVcDP z*vQa^=Wjk()fGH$o}`s3=_5jLtT%_X?oIB=Se>i>yPDOUAD!F?JVMj#C=k);cu4%q z5B>iipwTTkE#gRQD$W+j9-u@0zq<|`yn3oWFNuaiLp#Y3!}KwXw|)ugl2o)$x9C5d z*vT4bQ!$4`Fc&+pyd`A+wnUw}-F}aps3mB5JfsI88&_hDsvzG~U~h4#>($~}(b~va z9mZW>qH`i&LP1sS`dyFv3stqDd9%4Hlc9ohGl}0A4fcDVM4k{%nlw6&Lp;}t9z4%{ zy-@hy-pWs~vH!&!gc&w4o&AE6Y?t|eQ4?Q_#r8t>E*_FUcjA5q(mRDHRWKkC@=6WE zy*)^~UAqT2X?`-OVwl{9nZJGSWSb(v@plDx@o!A@EIj@PolPI6A4K+2O}?X($(2pX zj&BlUS1k6B9@w3z%*)`jU4&+=0T^p;_>UU8>^Nu68EP=u+%TD_v)8F|b*L)CNd#1r z3bIC^49xS6`&%9cZm@ENaukT%ui7bKn*~r$x?6%!*mSb2WTy1AwkN@529Av*)|1TJ z?>Py}GflQ+-^6&FG<$6K*yQPfPdCgi{2T*ezSpu*;0kHN`RFsv!R^`FFhi*KQ#@pS zI>&_RPUb`yRlN_Ne+4Y-d8ysVhu_c4c9G7U9&<^Q8vw(zTXPR5q&OkMnEd+C|K!x= z<4HE7?e7d`I9J!6UUUW-_D9&m^qTivix0LpdgB#_wcN!kXpZxd_G12t?P_9b2^u$^ zetr+A+hZ!R52>D;nXG@z)l``n+=_Zl14g#}&s?n^{t12w1| zXj&t%&RBB|%K|#+2jm&sNO^C}?$=f5;bQ4Ar?7uw8|sWpcro6A8#=>isQ5&lvQHn4 zn=O&_)Rmw?*TK8|G#y~HH^O&aC7aa1H|@h6O9RPr1)pp|CpW?Jo(&fY7f;D~gu^E% zkO?%K89hUA0a}Y>p3=2Gx|T3aJ9Pp2*38XWC_UnFzum++wwMmUodk!iCKovVkszie zz*e$Q>uN|4&0=#_GuuR49}u7ueCA9z7(Q=+=hrhO1}3;4{N*lslq<}1Zfw*IWoy|! zJT+l3zAIr89%_n_qA`?w#6e5|+s$3^6MrDztbrgo>$vBVK z#_Fq~GVMT*at6lD7j#ObN|eM=(Fz~tSTaivph0LtTGV{&cDy;+VZ4fqdt1d*o~e_W z>eA>2pDEMGdYhoh&kXz)q@*9nmpJF<)B6-J{kgbmR-YFn1vNC<*t|kA$i_ zD1xp3aAg_=Ruk?i`?PFuoyC=+Q-~(>Xd*b_LYdI}g=*%34)p1Q*tT=@lzULmq((D-KSh8d9RPE=}Z!0 zD_aNd{{^xu@)=7S?ex4oxyqURo@7fQxL*(Pb9#76O<`}9a8@?|p1Yb!Lgpa+`e_2g zjQ3O&;E!>7{w={%;ldviINKu09aAKEO5CUf6MRn`iyP=mZgE<&Y7>CTzVUwJIHP{}S}Q`~#fr`4pM z4MsOI)}%=Hls!uby><*p^e_~0yXo}qQJ>3Ep_|A~dowfiQ#h+YjZPB;yEhOG`cmyn zw99U|A?+Y^&+vp)q%WJSH_?F!XIv}xwkEI@YCf~k0kTKM&blv5ivc7>wc~kQ3|hS! zJT^%>P4^n>nBG&9o!_lY1che=9N(^q9_jC7*iIpGqS9Fnx@+FKxdUSthf z=$^XcP#wff*Ub2U6kvCYqb@hG$I;0&pw8_P8w~hY5s6Xt#uK)I^WZ8otQ{w1G|F-v z&;3!l)-T|dW$9!lqa92l=jj?wiT*!1bGI;;d}g<^n5d?rRZL~q$2%s&QeeEI9!&)` zNabvOC!JZxpkNInOQ^4Xs{OgW2I;mk(WZ&kHPXo^-(BCR5gj`ki}ma!UV*n;_dwrsjeaNzOa*tyU*1i+#;qpG!} zYfB@gYy*35e8GSNxC)u}T8>>MRf@=ST>+DyL1N1UjfS6%6y~;IVidLESfpiXJ%Ss;d z%ThsJzSZamn7wgKV%x2k@xHs-DpDh2P{4_2`Vo84J(w!$@tKCviEWm?ODDE+MZido zV#FML(ne%5EJtW}srY1-tESRj^W44&VNC*x{QfQ0?UV6oxT_qPV}XuVn3rY zHpexxlzvtXZtI7Jaxm`g$2`@I;D?TotoEKWe;v zn%WOF@_uS)bEe)c^lO1^92!I2K8><9H+@62VIrqRDsOjjQVloo{67Wf41`xrMIZQ% zuDBE~!>LT*Z{Vb>z(gOxgLIF*h@-i;mmT_`^dhn^0fGWun~Zz8oOC2@k!qk~Y?T{? zdSpGH?gM#K73IlV1E;TGyI!H9=!i-)1D%#i&Ry-ndqe3`Rj3KKqG8Z+(rh9Nx)z+; zOiMlPY&-DXO>}F+VVV>-i%1`}7dy#H=(DW`Pgx2jytSUa9eH30)0$^$B-uDYTONcw)0SRSWUNw%~~! zL}z*mK8PtitBAzb%EEexGc||Gl|H$w%0v=SL$VONpl%qcnt|eZ6D-VeX5^bP0U9*<~zDH5spaX7jrg0Jn?93i9ZFQ%TnOwKJh-MWBB%%dyYh)?_m zSLdbdY0A*kh}4a)x&h!ptHIM!VR;3bmJ?TA8NCrzPy-Yb^XX8IQ~3)U%Fw?F>}(MZ z0{@2eF%m zRwWRO^Bmn_X`ar`@a$9AF_wkDwJeNeeP*@cXa%<6;oplc@ei;e57T_}0Lyl!(@$1! zG*Q3Vc7UaM$(b|)j&UG4XVbpc?Goscd*Js-#np0Nm5Ypq*1X}f)V^#4`U@RdH?HVL za{9B;>$HTsJS1zam&7>+qZ!Oav3x zu8T5zlSNM^=3=UMG-%NV-up~jb9$#WxG^4}kr)056xH!wvY&G%k7yq=YKEpNy-Y{# z9I(qXWVya&Uav%&bZ6Xw?#xdUWxsq79`p&h21WQ3iFoCIq}5zv&%{mGz&@Z=zBUa? zoM?1nX`Fn8?4eYX;plH>kv+T~%F?P4bZ%S7KFlB;;{`lm3()E%p+(OIaKP6n0vlGi<`mfAJIpy0YeVwqbrh)jZ*P`yfBEOT) zU}h`OE<-q|!7I9sT9&5tswGJ5-AJ;F8;PI;c{}&QFjNBPS&q+k7B$*S;xc*YCzVv2 z1u!R(oM;-(_2xfmMW>S7zM0dzzAhI`>M6rB!&EeQC+N9eqa{$IrYi|U^9yKiWpXJV zT1(mj(NT%hbrh9tAGJ;Pohe>YpOX`0HVQ;yDmdpE-h%?FQZVhS$WbXvUD2v*z*Z~; z3Aj#zZ~}Tn1=}^wk+7BzHq6H9*NGg1Oj264%sQ(<_KHv+S~BCjLfMcD)n7P!euKC_ z!|~K_WM_suX_^|+R@#7{?j-Z_200qJVe`tPDXGi(^#b0Yv`vpbx($q;$SoHMFb~*` z5k&uxNEem`LoX6fCeZ7Dh6nYMxT!n5UKp5GSE_U}$vm$~2Utk*(-Sa^d?>-}nud~F zdBv&kOa(llT|qXFQm;qHxrNMLJN?)c=KRBGIA77xdKx1+rKf?>oiLpt@8$+PX+Bcn zTW~@zrH?I7o_Aw#wfO(YDZh*ES$ro8dx%GH+GWuPDQ%&AqXGZnCe_ftEw(42zQ*~? zobIK##25J+E*s58Uy_!nB7Uh38y1HfL0-YyCAvYB)oKrq0 zyJ#Zec1q!*?1?Jvq^UaEsxb1tCy>#;lIQtvwl^<9KXKA}k!?>QJk?EbqOG(2&AX+e zvVSB)ZyhR%eU4oOSzgkw@62h@T_*l-geyBjhEonzJ~R!{bbG77a8pTqX{4S^iqB4F z!Pj(F&fK}?nl73dxIWf$vSgv1%LiK7Lt+rC!NbZ>pA)IczI>miq#fKtv9gl6Lw;k`Z{;6!g|iv;kv%)CzjHY9pVJY--m;#y;Q2pABJy3jKRY<_FK~S$;Irq!XeV$M zSBBSn44W5*mZ=v>SEoQQeq@Us*WEyGVlzvn|n)d@?Ab-HkE(06!Cj4Kj`YZbrY z5&q0E%;_mI;dG_uFgw0`p^Uo0mb3M^&#v*#WaoXchxmkm?*@K);}Q zp3QuIUT*l!1JhzeJ=KL8mJbg>2*^(>_67`Oo5m?7*Id>T;LA~zF*kB3GWK zhMG2-UrGE~hNt)#Rp+y&Gab)9IF*O^VN_^S$B_}f6WsI{iB9)pi{BV?8)oDTQYFG| zwMngN&C?Vwx3DbaY!#l5tHM>k*jrH+&fbw*tj3{UojcT?GwB4$YS&PA2H-=~(vJ@1 zX`2qB`-H@G1^Q`sy1TMcSy&5Y)Hu>27Rdc-kMUl8M(O8<=D0L7bSg;w9T2uRJe^~t zJ~RoY^RTuF3Ofh0JWW@L*&&STxtC5TovxuaUf0%O%{#$U(%|JvqQ*2DtD?o6O$W5e zScLv31W!*BcEt##;7rqE(-x*!H>znWdpDeUDk6A8CdUyfUVpChE8~g&oUwTlE^y;6#F%qf9=3R7sCXeMFFNT=U`K80kaF6SiHbP!q6Lc zCUJIwIgU4B6q?@IARZdD|*8o zT!CZMEMKy1s>nHX0<-6Rp5TJ0>vf>P^~gl&PliAO4#rKSiHN;>&(%56es^J0?nKn+ zo6yo_z;wOjq^XD!p^>%&st#B7rAAPtf5S182;Pzk&;1l#V-AuYEO<}qp`M#ek9nCS z_1w%C{suL5r7pSF6Q~5sIEnVs)jvh4k<;i!?N-B$H{~>+giB)uDbjDjbAwD~PUME1 zIepnovJ|h3a8Q-t`da80dw`Km$H#gSgwD^R!^2e%#npN;eNVw0I+Hotf~u7PQ~4fu zNdU8yk*6zy4tt*M8Z-S{HZPS&CAY%9mFoWoNaQ>GdpdH;gqHH5(59w4o~hDwoDQvw zP*k5+K7@J8fo?2_>0V&MozW{50)q_1`Po#{iNx(;JW*%ZSTCNaT0Bu5$N`&(u5CZ( z{slBJ&p}(1WMigr?iZjdFNr_b2BRWWE-5hIS@>k@@P<_fLlxT%GH}RgnI<~%Hcev! zABI9}6?|!aOA%(X7R=g%NqPH(f7Bn%xDA!lXz-bZXf}4D#QS8;g)hpFJwTmMy?-DP zy*ey%M~M+{2KW9G*5w7?T?0-y6I6a9DBQ8&YYv^|O>ad>o+%^BmcAt7tw7guoI3Y~ zz3fG(_$^eTO0R;0%K~Leps%=s(lwZTot7XNV^NtT(*b!f1MX(3x}hzFGjNJ-4cNp% zSQBS`Me0_z`1)X61YYM zsn6GVHr}(jsto;5C`{CJ)pC5@Y4pQ)@U{3ep@gA?i6sYlBwg5HPNS=+zVmY$2g)8{ zAn5-ro}OgfRF^b`Q2&(Hs!7XgMS{Zs@PxzUINV~I$_a;69Q98dT@SKk7Lh2rowQ1Y zz7YEhf>0AQf{PNU_Zm8YqhO3#ban+LQ`a3O{Y>Wk^<3vC%nmtlfN4O;YEkKD^Ste5 z8oEi2@!zB_RNxeEXll(AI~K?93ezKWj`__+(0rOmacRhmG=)@;)nKWo$aKAL9?DZV zgS?1+U_O7sZ#_r9Q;_`|(hhkzro%nVXkr$Zk zpW^~6CwZ+X_7DpuV=j1cl6?=1$x9~u{OlZ2llEAPT=LGmuOskC?qeFc01hYdS%r_{ zl&l5rpb$El={OXR{S0R1eWbdFPD&vm;u`(>ZdpU7&Y5WnrfmrDf@!bZDdQ)G4w4@nAmcX=~!B;1DWp3 zT^kD$l%(BBo;W_uv-B7|%k(7n{hA5I29Cvars*&5=&A-u66~=|4G*%&FuqiWyNd8I$ z+e$)Hb%yOub+~IW_-ZGBaxG#)I!s@5jjan_B=JB)=Y0xdZ$v}tStr>6%_kk~4BqR<0#|kMkr@MS%*$nQ z=+|Z5_=VGWKK`-or0QOw;}*Pc5zy9(C}TUSx}z>0D^of5f{R@vS6}o)L1>X`F{#B- z?Z$x6uOqoQmACJm+<#V-Nhm}U&Y9JXu5!F4kvn;Y9I^-KunK8?wWYX|)p-lskZd{& z2Tc-K)_K&7&%mUe*_KpZ*Hjlp7Vu#3qNViVJLJ851nw|FU&o{f@R7T5l0jXMf~r3= zyf@^c>J=x6q>8Zy_(MBme_S2Y$k);_iBt!L=!ni}26X3I31UpcHO$IgOZmZ80H>zJSr&~AcaMWHK;FT}2aU};;U?Lg4LhJH| zG)5n;yFp(07|ya$^ioSmO65FL`be%YFI%Nb;Nhx*wyOo~>~CDxIm{l%zMf`V)qAA# z^9i#^PK~q1m-=VbRHFj+MnN@Iqp0E|b6rxD?Pc~@78v$h`mFy-Q2L;6fJR|HjM7x{ zWqc%-d)Qd#>rVTda)a7`C5=nJS+tKLl=nSN)1CKa68QEyPQAl$0Z%}=^BKHhw+-NS z^}&PtGabxCO}359fHd&C*PMTaxf3ds3N?*wQHu;?+F67$X_q_)pM!-LWM^;?6M0qA zle%ygjt322jr-*QILjk6@VU*N;Kr5lZ8QTD?}O54I+)9P*sycx;$NDbn2h}Kcj=iW zqhU{m&=1b%?b=FmQjG>sVWYIQNHzn8|s$fek1ZQIx&r&J{*+UEWq3 z#Z_An!eKZ7=Avv*Cj_h>(Cv2o0_OBJ5#DOTWr-RY#!}oWYzUGZR7uzq3QL}2` zE^m*MZUkK0To}Q_>^HmZz}I^Cu&6=Y`+UkGyk{Xy8Ex3g@Edq@B53J;bYxfQB;QMB zqk_sJpNWpJ8pGgq){td*3@5=oTwR~h8I-2C4CQV6h4*a`nSRUU+m=pm`Ham1IblL8 zgK*W;v_fmwhYoxJD1oSWmt~*%g`IWf;DBndm8?D5jluBhE13}wlhk(`2hazc+Qpfw zs^K<|VUt}?w!ziJ|I-0vQ)IZ!!v%Cie-6g?rQQj3gO@>vt1SYKt-E0e&bArg5C=Fh zuW@3E{?iSoi4}&uC3t*)5cw%!xVuqwU&Nd7+W5s-z*Gho7{qNghw$6_a&2bp?L#Z(=?d#M<^o{xB<$8A=YHN?Las38`HolQcjNW zbl(AcdvEa|DPLo)Drch3pzPB?s*;$D&M-L(t)1xJD&h*MgHp4dZ36dx4SN8OQ7y#= z?>uxSrNOX5>FT0LwHU(*yNn#tRQ7ya0h`Z8UP1t(G}Dd`kaPvBZH}&bJ=LW3r*_pxS-xKc@|;r)X^i>WdiHVNs-9hyoJod z6Lie4&|SKcDp8rV&Fb{cJ+wo?%@#-=@CfP(arg7#6fCP#(@DNJPKUb<_20r}PJy z)0$-VWRas)+@@v5?Tsd73cR9`%`L5EP22#7QJwqKUurf^f_&d&{`ZkML{Bt$B9-P6 zT=)k(lvXO;QqEza>6wP2X9?5WF7+TytRW5_>4HiK2m%X0sN6i*UZ%We>QQDJ)Q0&d98DNtEyDSv*-E|?nuN~-bdNCz_ zAOkEI)nE_m<29p}uI35(3(@8Q`ai)ow-~#yV|5KPZ%#HzZ38zD+U0J1TQ5{!+u2PO z3|=%6>|N?ujS}zi= zKIl~7Q@2Q-YekJup&KsC@7_U9bCBrGLlAA z1y4#%kdAOLvgUl64%8YqGB!q_c-4}vQQq2}zW9yp4hewk1j>N^$yfSuT~L}u!U=6f zGtox%6eU14t=RV~b^^U7OU50R_>eI-c@*1FfBkK$#wn9z&PC@}jil3D%>A>OWfyJhy2RW#nZ7`+CK=M96FYS|A@_<7@G(=txCL+pkXF4eVkDz2O}i%8~df;NJm zm*9A2@}nm{iFUXiNZd7e0WZ+U0F4%=>*s9z4s-!INq-xPDkXqjd4K9!QpYu@|L5W1 znaHX9idv&D$WBh&XU_%SyVzIuo>$1neWon;rNT z%&Frzht`87JjKCXP~%SGV}PbHj>_riC;w!F!ZZ5rs-(q4$^6VgIPO>Rt{%Z3+Z4Us zV`h})Y+AcQy7ztkNBU)7o@N^w`n9}A9%y*As6jjPHsv&#NHK6{f{cS7oeB1K6%Exx zYFj>h%EA>?%2prbWFqOUS++9vY4%NMD$g=;JhuB%%_Od#?s(7a;7M`H_TWa@)p^;O zV8&T_ec4aRnXwHB>5|#uD6x2Gp6+D2w-!Oi+XQ z_5(a}45(`yiDyN4_A{)_!4)>xgz_!Rk$-;ESJnt$r3npWqB0u4$_zB!A?PN$fDNaD zUA;j;zK$obFZ!C#IR2XJlgSq7kFGQwRo*gY<-g(KI>QMilhSGewcSjQHo}qlljS(y zUB2(w+D}C*OOI5TZm0}9^J38QT+y5dTVKvjhn8%GHSoQT<7^#?BK{fLw9e)XK7CV= zC^GI~{10+UWr+8P4Nx8VcR%#_$>fE4gZZ~+8XJh}aX+)_dhHjIsjOc&b+;i~_%G5O z+K|cF4K2DIXSvHiHV#{v{%hl|`qL6ZKEW6=P25n6eh|uQm!eX?xQ{A46dw1ZsvY|N zF6fe~!D{y7M2bRnl%Xx8^I%8L0P?-|!a5a#T{n?FE;Qf;adIVm-7NG?_uZJDIUBg0 z!8~7ja*n{q=KWXSwi#~rAQR6$vP+6G;f$w4nL|giA9raJ68+*xviF7?EGqeIq1_DV+g=g7)}1#K)kKjVCt)YbHtjyX-8+^QE4c(V%M079$9{9UC*Ks z6PTDcU2Hvw?7@u1{|xO)P31f`9f2P z>G2lbLT&Qs0`Zkb@#&_bgGmD?c#PxGpInivoN<2WtIPAeW>RaS$QVpm%8GwsUYzpXQtGF%%`8UHJL}}gXw?7jhRZ-szwgnembG+hWz-)#*sVG z5w}lE&Z&jqH$PHDjBIfF$ZznomSK~?SoDYQ$VI;ja~(wTM0YAn;wdOcKu_GtMV%!F~cpet(BiZC+fw8ZHO651Rfu3xYRrp97<7O7> znGAf)1KI4bi@7xm2Xjq$y`oYJFcx(7w5pW40QV_`uBsmjtYmPsV3eKnQ19e0n^FTZ9i{2omsGO+;*WE?gLEV@B<{4QSp>Q?l zxfXBfD9eJ)jt9RJZ)P3d%nUrLZp zRVX3Kg42HCbf1ihXTNQheFLd-ikpsesw5d)2@($%DIG4Lr)K8)f#9ZI=%>>0Bj4sN zud8XouHhSS^h&LP9%>F-D73H+BjIlHlPDWQ=E^YMqFW>)IpN3-gnbv2TMS;3C35?Y z3Z1=Ub$>Xt!gwZ^=^nD#wGF-X7ef`EC_S5Ur^66crLyHB+pGoE?F4yVCh!vts;uHn zv%ix%vkqQMp(rMwDPNLX2Ez&*V4@C!JzqpBMG>}HSBIV1jY7HwIA(uX(0EN(NCT$n~J@9Jr5Ezvi+6qCNJTqGpFRGHBS98*_d8^d3`Zy8jnmgto4 z>#pm&7>a@YU9niKRnf$+wKG+bLsU%So!&6l!eO`&EJa{w^VP}t=uV-1Nk%uGrt4^k zgoD{{Rw#=}Ph~XkTBb5tWl`rRQ$XY}Pe3D9$B>B@EX`!0Gb@MsX@?~bD$@KYB^SdV z=MA<{tBT24aUQ3|3uT~chHi;5gio}diL5d8?xTH>!&e+$OzLnOg94sM+oy;xCOvV< z%zui6Vv3@CbYBp>2D-fH(t4wt6UiGBI17r&xxbFuqKgDeducR)nx&#TsgEmXokfx4 z_&Jf9K^8@d<3ES9k5UofCw0Ab41?H*lxcm)r&cKar1vTYg#Q59?Zr6J64j-d9L8#0 zU{4N`g1a1U#LUxngM_3vBy$v`XEo5Jcc#`%HXcCNR~(g3Gt!|hGd1OaqxV6<9L@AJ zk8b3x`2Y@pZ`krcIQYe+4BuowxtmOhm_u6mCKBK7aNd2gRlso-fwFHbe%CpiQn%Qi zoDY;_7`l;pC}7Wmr^$O-#ZO{RMcK0&!dy28^yVO%jd%3CeLze%(_2N!DSb2D+apZ@ zwg@aGBSGMsZgf^v*=gMqK0&Yvf3OWNo4x>9T~^8JO#|UR2qW~8ZoN3YdPB~`;cS20 z!h|ANAU9)C`s2D_*@Kyx)`JIKWezTY*3t@>-i2OhKIr8s6oMadCsiY(sZN!WSuTVrlXlzcL@E)Ip!7@`ic57`(Po}`XtP`AE(|5)W0w3 z_qE_ZO<}=@z=d2!xnIs)(GrfDCqHiX>wNNFY@B`0ChQnTpWnkzYEuKz>u))ibmHqk_me|)4qqX47_Z8RE+~jz@NjJbDRm` zJ!!wiL9HS{!HS@!QPR#LExpw#PHh+fO)>ES!P^Ax(Vt&o~?5p}Am|c0B(AS?q zHK<_f^e0o^Pwt`ak5X+aXyOTWkKP9BXo@?dJNJ4OsC^0=C-JEUfI}=}BHY2WqA=!$ zGYLSm5lU9cFJw>-x#3s~BD1}_c@W(3 zTsV?laL0mk>;&gHmaMjwbQurW0+O9Avc+Mss!&Y@d%OT_VJ~?26*^r%xJCn9V{^LQ z-t2PRPe*u`H#7^Sdm)^4&C$!m()W%ht9&(BnPRb@;w`tSEgHR{5=TwKEqaEnLj_4L zC=F9z8;43qaO_oV?@2+qdKWcAHkr>+52s%jG{xiT`Od-qK7jqr1$t4EY?!Xphj{Aa zBJ|GtcxGGTPwYx3IFW5gYw3(LK}d76O;k8mLYcKElW?#E#3+R~`a1QyxV|!4nVS0c zF!lY>v>rqQabAC$e3M-C8YQJ_uN!RrB%aK5=(DY+&M<;6;Q&3EWh&#d2t#Ri(Nddi zut{jO+mb4j1nU1gdJZxT=$-r|W~l_dzr!5bTy-1XIviy18Mx?7G{yb#58p<$W1xnY z<;*Am!*SV^Xer5T@zy$4;DRZB68AktIz=chL1#QFm(`uvGSY(QxgnmqS|qL(#>0;; zz*Yf;$vXCO`AJ;Ym%iqAWm7x~qNB-%!XZr4i!E};$(=sL%$~^Ge4aC?9DXbn+SUZy z5|q;=IaS}20NXV9m3X&q`pJ1OKX}YkWoN4NWOW@~DA(q&VUYQ`bu(4;KKSHR&Mrlk zpPcVq!3kG`6g~tiEQK~_CeQFKCIKgnE1zK=UYblzHxzjauD(d6_v3tN$!Xb-_bdm` zZa>sU0m^|2T#Z`zKMs+br9^dJMY948*+URlC#`Vl z6h}d6!39!PKh1EICtq*oySVtv@6w1<=Yhd!Or*z|O0U|H3Uh*81I6f3_M!Z{DSHBc zIq!$!)qJINQaRHXHrD)tBWMDfs|ukVoeqMKCN$DGjb|9@@%g9VAG?NH#+B^ai{zYo zn=dgfez6qdeTlL)!xgxU&iW{+5x3b1R~r2)iS0^%iIe%_*P4MZA_X_W1~Ndepi23h z4yFo7QZLOBb4hU03QSx;!|aKvLl5CEapVuG;>I|xS6}iq)2O71aDT_WXCp8Ol+J~1 zPiOF0S>d);^PXOYvHD1&fiEfSW-zxFXac(bV>j~w^5g_JU0Ga%Xn$FUqTrn@s!M8L z-m)8-f*@JF;NhKhzmfqP#txn8oZZvt$DbNk!pSYgg=EK}mJGXAm#4Tn`wdj~#?0=4 zOu#LIH#sySJskJK2lv8p-i|sG z;Jg{s?Jso>Hqu9+qaLDJi6e0dUiWWld4dZXEH}@8u^c27QEaYLB=}1&!&uIVWL&-? z_b7#pz^6DDE^#v4rMG<|x5B^GRY3_7ffA%ES%G3_*naB%A9UMqaBq22H-!6M%tF(d zOZ2dqHH`I86LbY_o=@#h0s+4a?ktjxJ!O`08}f^VCncE^+2P#`!!0xkML`lgWjNpW zfW?&r+*)j05c=tFsE7v}xGRCtx1{dfKr5dtHn%MHm*?sXIFS)tzqRncwc+dr!q_d< z*23fSj+{dklV4Xp`)9dP%m=5D5}Z63jJzJ5i`W)9950Q?_FPH_vj^?haS{X`fVHZq z`t^7-JIYO8OYrWcvaRzPuHt8sm(68zF$twdws7RCa&6ybe zj8*wO#Yt_RMUC?!7c>@x>k0gA0n}yg(%ByiUtcn~N^mH%Z(XL=#v(l?#b3^e9&oc^ zcz*ie0$ahmS^{jQ2(@V^`!buLwR56liqwt+iO3ETGnH9DL$2#)G($F$2r>*6@F>k; zkE<(4<~dONM;15g=SmcAfnW?N_F`mAbO+N)7w1B{zpNd#scWUQ$-32`BzDgF(cs|q zIcxqjCUSM3GG#=wY4)<&1N6eh8fkw8r&5tCbyVa%-}IL=LVjEa$uKnQ*pV}j9J)YK z{}oyOiUMdhir{^;Fmc6zFb*aoW*wT6qv{JdDRO8$=?R1B3Wbtz99r+?=;Holujyat ztBW!57&!?JXhT~Mda#fz~6P4ivUR0@0wmC(l3mdb#Upqg9R;ChZe=M%Nk zizlxEDyv^m1xytRXVYF&2Ht_cQ3RAC<+}=8MR)TMW}dm=C&%${+$9;%joMv_6sH#S zZT&2NSqE{_1xWo$4&{F(#wnFr_;|6IEJ))EW*mcFawebr2ztruQr}REGa%N`7e~-e z-ke+H2fZ>>Ci|oo8*U4>opirjuy0gt_t_ywe*ds+{OpD$u(Lzh?|}ZwP(6NYvg8s`o_BSNZI&@S8#{ z7HLm_f80Soa~y`sBiJ8(z7~CcM-a>@yobxtFPz|6y~vaH4%|9G;m-4<7XzkCcPGXfi*-nY&T5n}M1Ojo4Info-RHpP^&FNzz?5bwPCr_PMBJ4t7`2&Pi}8 zTX_~Qf(_*d>(qna*FhaN3BAH{RP)E-d#}++2v@EP(_0nvD)rHbwFTK7N`2Z1^Lhe= z_b&5XF;HqNdX<5=zZ1az*P#%5&IWiVeIC6tyNJqyGSx)0*%EKl093#;afz;%{a`xE zO$ENgA_hM=#b#)NyK~mBfD=4PBJgMC1RvCX4M~R>h;nHPc+>*2R)mxMxKR-hAThbS z>R8x-x1f>=eGYzO0lf?9dR{;IszS(VFKu~FZl<$T3U>yPn*g5{AvNbhN3@9vPIwZ; zH4ad8-+muw(aLiyU0S}A5_p+2sJ*QKtxDJb6*wlr@bNvsT>xiEHk z%pmb}E8KyT&BInwDzrwzA8eJ{;X8Dwh3R%gHbWay!G5EHt|b*#q}aVD*T*;5L_gIM z?c*rYTUNqW2~C#Fb*mB}@%ik^5>mz52*xZP_wN!^tf#W1=frG!xKa zCF8)l%mkVPuAvnA{)W`0UU)xNkTQ6PE;x%m+!gP?m2)*pY8~gpccsBf3EiqUIk;v} z(DvHi_+V$Cb37n5S0#9Uh1zO5E|zWVKl#kn7An<~#ub(d=+?BL*56Vp>XMz`nElnQ zsHg3in0NEk@XUkHjH;rC<39)K_~+vT6^Z=OimB`o zXqa$!M)FPigUeMwE#!j_VHP>Dcga+6V&hB|(2}j_0G#xKdr*<4c?-2{UrxjKFj7V7 zCG;r#N}5KXLDng~Y8{cr)%;PFRbhuM6i~+65a{3ugQad{Y$YMK5%b zD?ttw34yY2TLWVFRvE5pg0k&6dBd($DqrTodMF=<;dtB3rjJKdV-J}J7=;2@cwkd; z13d*l4J7X_0-j(H%-I7_#df4t2jI?{g)2^vhd2?$>Tjbn>_{8VUrcT3A!nl` zx+)#1F`Tzf^wSfWQTBj8I@7O|B-gwGu1%31JleJpW!N*ggAh*975H^e(^b4gThv;( zhsiz;lv)P^7_dk*dIbh(LDx9}oMbn>f1!VI@@us7shvO0jb!$CDPW1)Qg2Rkg|ksz zj*%FUMhe;kwsp4W2Xl<)`pLa0Nr8$0K0+Dv1)20igG^cEn>52^ ze}(sl|05+(Vxc|IgI&}lz%0Gi_R_y+L)}SSAx`9suP_UB_#ED$6s8zOdZ3&`nz3EF z1U$VDv+#2k zfmd(i`cDFD^)R;w{|P`@dxb2zQatH8=IrCvAZC^a_6RV)+4N_7PzcfOFy9rI*R?dc z>W%U93Y_mC8m-$Z8&h{QZqRd}!GCK<(D7UJt=Q{U!#D`8bR+u$&(NW}vn#-g!^4Yy ze5-k>C6n206B`dx$s&COJL`g0+6#YsKyXQ}Xm6D76TsExJM?=2#pRitU+GK!Mpd%E z+v3((P6FWn)86?v+C;S8AhKE_ zS_j0b2?7i;pa!*3z=yg-p@xVeKn-dmiVK38qJWo*BEW48sI6&5D>h2-f=RtWv<3tS z*w4N1YmetwG6|ECQu9aCLk=_c_x*nFeeQFg``i_}LjQ!?{mB}gpNEoHwsF0Jc(DNE z{UJQc{~wd%zfEuNKI*+Upxb>v@!-cJ0kYXOM1tSu?%oynE=@!fF!#>8WBaDO@oBL=qpZF1PHAlxM?&%d46z}xcCN6#e| zixbt=a6~tu1iFn3_Yu`8+)K~tTzm_C=r5kfrutVh4|5wx<0EuT{|=ndmEMv6fcktq z0pIsSAhYMAM!!L~(!396uupQ*U!hv<`+t!c;Q&3A7jV*J!yz)DD8>@-YOfhC84JgoxX;9l13Hz7N*x_Z`{YIc{?LtWBRH$^7FcP=^25efe7;; zzkxRLwV?f5P%PG&Em#Bn-a`-a(W4jerGhxMMe(7!4t?x9$dk9@2lAJ&JzpV4{)pH7 zMDqVHGf{mx8B;d4Jd~=fMH46^;ecZVIgqW}bR&KI2Y2nBh;nF{dkN)*2>i!*{#TTNv zT7^S6p#Av+=v%G@k-ZQ8^g^aC{+TUPT^ObwvE3N8joL>YqXX29SD>eIvO_un_c=`` zb%u>$A3oB+lVpJSI8N8+dYI5BgA|XTb$tO}@Ut+q-?;of%|8c}cRt7OU~|Zu{NJQI z|9BALi*XNlKUnZ{Y*l+IGjY#?%Soa{xg7Vg-{TwH&DonjffFXr1^V!ezMdJ*H-RJG zMz8)ohwlWRehEf}_n$nVvFKLR=YKus=Jror_CxycM*4ti>mI|T$SotcA2|e9`$yw1 zfU*AGME>Y|xqo-UF&t2yO;pzZ0B7}*kt@l)|AfMFaP;j*z77-d&hgKO&Y>oK`NU03 z{k>0^?)(AeN1o+R4gB?Z!>MzXWGYh#7>vM zNgU#LDIL%_{kkJ>WKQG*mwjkFflA_A^b_9>UgzIe52#P1;6L$U{7rP+Z)TFRhIZlk zOaXm@S;sFBHSa@p=%6Y%!i$Z93T9BuyakV)55ung4gA`@OkCMPO{2WnD^WLJ&)nw% zRq?0M$lVR=c0L~V??M^%L6jFwPWe9K;8SqJJVXSH;hTOv9z1VHq546pfhM@=K4Ew2 z2XubnDbxZ1x-VD5+syLS-;Z+UbMRZ=_P=@PX{e8l!%xOX;f}*e?$T?Sws!4G`G=orliQj8{~Lc3x7!YGsvp7~dmC-c6Hs4Wq!nzKxBU_juIMV4 zz*-GZ?!TaO`z5U!uH(z!20y$&5BCF1an%B{bNw4|SeMXGJ*L}m2@jSeCxchp!Pcq3A;*C@s zUt%BT75p3*aK;}Uxsz;k1v7;2ByL?xjQRrVnb)B>dJolWhsyOkaDwMC56B;498@gu zgW#{RP1!>w%YWrOsQilP0pxFZ75vK0;OzJMmx$>NzIz*O@;CisprmIrXPpCS-#YXH znD7=|OZI0_3EsokeF>f3uQNCN5;(kj!F6eLCEpqQEwW-HcqPiT-)CFF6`@-uUM_db zb5MV$#|=9IW5nrc`uhLKwwW7Yie5yVeFr+XUtoLDyI@$JNmt|&F!t3<(m#p0IUfq8 z8zx54+4SeB*DpHi#fx&7s{Pr_>20!U^%-!*BQV96!(;uLZl3uo`JKZD71O_w>iQF8 zKLa+~4T^u9PPyGN_CZvZW%M$ir#AZA3$Lcup!1nF8~|IbB1~_9iBx?}X3&0)5-_(cnFkJn?Zd=3UHwb?H!_AG`ns z7blGktdX$JARTNgAA%-^TM0^!w`h65JPq4JDV<4qJ=EZ$)E04U6s=fer_&jrU zZS@TQ-VqNTz1P5nf1JG+&&QuN#l1O?w|0bitIyyzb;r>gPj%-=itZx9$yd}({$rQ*WhQH#;xhi;O}?BlvMGD zY|wGMZ|IkXm*JIO%-yQMXMTxjayP21?~o-fplUocItGXIEaJp1XsRlxl0OEb`y75K zU&h_(TcEnf!0Wj1{lycvVO zkA|WGW?6$z?2bL-a2&PzOWB%m16RBSbZA0$ zyu3`XPwAj)D9r+>L>LfMAyU>1LJU$Ey zDZUDK3C;kM98@mh?L++kb@O-oSK{`+qh$X9Z~DHeWjQZK)NT2h~USa(SpM|4i8XETuN@V2c2z#}c ze2)Ja{vR;uaW%Q{-OLbu5-*m=>Q>Vi^Rk~cb{RS1$LP6!>&O&7x)*aRp2i#?|NEF% zvHuJG#i6gUH{^v>?y=F&kYzrPQ^}X`@cRnP%zcMHz}#@3U3@n(pYUl|d>i%l(ebOu z`oBr7bTe7=+f>yKl*9MH(>xP}Fs{r=ui}ZvFbP^j8+ZXPIgG2M~xXah&Ci-!N`DaqgrZf}o4Q~SGgq%T6d^9s1E zKc%bi#minsw*DSm(c{?hei7_S5d1lbzf~L@o}%8!uzTb!I9a?Gc4(Vu?8JTHsW>mZ z9Imv%{tvJAu5SVf+Nj+I*%5Tx=qs78y$uz~x5h7o890Zj*`sX4dlh`%JX5iEuw%){ zdNqc>b9jP?^E--_CPr@@|1wejG8i)>Z~nP2hc&$w&Bi-nJ^yI*kLl$7+2|Z##D(lH6)0DmVe-lyd4RK3dO%YNj?3^|BQ zi|mp4E_-CY%peFk|v&Of9 zw6B}^*wLcg!@7AEk0M*$4B|yMargq}OW(@2yXVNiZ<_bihce)^Y#@I5&>O(qhnNZY z*WtUEk1yate?ITQ>`bR{M!fUz4}z~{X6-%WuQ}R7Z)%?9N2#yP>e-97_L%ck7-h`! z+30>3E-@D{L3K0g+Fy~sw`;!1PY-{1^hbx!9rqp;-R9G^$8$Y1eid+ehdd)nbuSJ` z%p=od_%UwmmZFF6nWKTEUK_8v=04|APv<6YS)`HQenNCd8b<5DdoYbHK{||X!16BiQ6#I2HP|p%o~g2jhAmD%t;8{%_KUnDLUQ4pv=%+ zodfOWP^0AO=LjaOfP9xxSk>|2T0_s*q64{s)~ZYF`ftiPI7XbHBiD#0z$BV@rg|>X zSla+~M5tIAypRaDvO!-pGLpkL%m$jxF;i{hymF%rIH3qEP=nt)f(EU@TzrI|p@AYM zLT9~!ZZg7*WP=D28PDPGVZ%WsN5y7CiIrpKz{V6)?q~z8b%eP@UMGd~B}Si_avKgD zIlkAae-bxJGCvBO2&WKdrblK5W&714ZX~iZK%7y9v)CXf2u~plh3vKv*EaEM6E-N# zhV>jCB?U6j60<;ceqPZQZxWGv?B_dKjWK`1POSYm_2FA_Si(=3htT>Skkpn6J)=4BCtzr?ZLws6SfKagaa?G0g%3% zu7Y$ELZ{qCn3|ZGNW-wsov??j0A8t{FiG5G*09AiLx)JYNuRenv5osu9~GjF`8NmJ zhrQbjb{yHF>>TVN> z`Y7TCcKLJP9yQZmwM87(FbS4VT|R^3_bjv6$8S}rfMlwdFT)70;H%$&#ax4TT4x5R zO+~qZZ`2kw4|hL&i4l9W-2MCS=|}vNc$&nHo8`#R<;$UAJ2r`0f?=z`MpR*;YB2hB zUehW)z$R=~OJ}FIA8@ukxM%xMjO`V1JgL(|vqN)q0_6B-9l6aGg#Iq;<75ueHSA`N&r7FnkdAMFK6+?4Ow5_I)G_81*(@Er4BFD; z^JB^4i>feZH7dV4*|LQ*QU`wJn4+c+V<1YaomeLmq}~x9{Xmmpiqd77VoEImhdw=$ zf^$pnD)@8gV;10Z7eTK(?9&omp9X#WH8zs1gO1xU?Hdp1RN`YJWSH1FdCF~LvvmJ6 z?D)yy`m+$oqslMfUQr4xTby5mshBl-+3P3F-W<<%JC$obK1)u*=f_|e;y6kt;fqrE z&7@Hh&cQfjiQw~W(GzV!1;u!ks<=jfu})lHMOW4&6SiO@I>%|tcJu&K#N8ySF^Rl$ zXvT|7RZ8St4(2ag1gjO{SIW3NRW&*`PO){qi#DWBX0VSt@H!b7ca6KPee-@ig+eE7 znwR*P*4Su9M$zaM=)1Nig1mT{SgY}Zdq-VxNO9gE?9hp;SOzz( zfIikNUbi>q0CNnWNHWrwDBjy~V=!ZAN8_g%J^i}-WhYw3G*V78vp<7J^DJk$6DRYW zX3>h2oMZhGqeo7Ta57VLk*1Z&%5Y!hY>M#HOPtIKxL}Pt+NQt0MJJ{YN}vZr_rnWz z3&2A}xQ$cX#A$BfEH^O6?OWtD%G|zXZeD})Sm(xVz{+f+Jh7oV89+1O6PacIU=Cci$Xr92b6Mt08l1^GJog41_cn75w!;q2#f>U@5F{1?qePjnPk_Q^ zz`Gd`%K`|j2!FVQx6carWsS{wZJ3`ekXIix<6wT?4eA;MYlJ`>Q4m)`Z~ZKHKF6-j zMQ(ms@BIq6XAR8J26b$~!Sz8w4*DW)aK|9XBLpUjqHs^phnfL&aa!6D0FkOq!w z>-76Km=fI9x8>knxyQXs`v>$zMe(*1uhkh)Mh1kj0Jw9@168y^6k9lq z_Cae7P=p(G)*uXE2<#R`rIA3PF#~GIfaDgavx;~JEQOXsDUbt_XG zI2r;gM#=68x;r!6)(jba0S}ZS_jHMDzCtEnBa6400NWya_d%5ovbUSg_aG{;5EwIx zHZnn`p3zQtjy%0cFT6~CUM4p;$jj^GoQ*#W`-wlDSqvX;A9rYP< zX@)$ypp4hj&@y?mLC#zsYLhj$v|nVSLoz^~^pYb3%6F6X2I;AUK=M&CUV>~lL#E4s>lesyMS3essHs-S zZfj(=Hd$?pIN1mDJBX2P)M|r)0C_C39|eA9q5!eIbBW=kmr((;t>Pswo2u;KG9Oqh z3=WH-R8CU4r@>(J@DdfU)+#t_6HhL?W>v|lagfs-XsJMdt_CvdkYf#UtB0%_rvH&7 zn`S{aC30vTB-4STHprMBD_aKDg}}_0CRQ<#iiuOq%y}$tnkdE0o^30Cno31G8N;O- zMaiLlvSz`9p zU1S!o%Ij``pOn%A0NO z!LKGlad3WK)O9hkZrs9$CI;z{V>g*)96((Vf?-IL&&up3Xpy}fcyoryRkPqSL1b-u zyH4^@gvxi0tg}R|+abpc;EOs*M#;b>OBK6;)?F}I6h*&TeHN_Ek84(iX=pteP_15y z=s!>FuMzi~#QQGM-b19HV!~>kxGtVhQnN{wX6}_w6Rq>a>#|jIwcyMS89wSAIh6|0 zs|JQ|a1Jf?H|-L=3`OoR6htq-`o2smUQa4gpJS3L2R<(ly(-}HWp-BxGH)p+@2YR0 zT@jv#QxxsDVDK1cnZT`C@Lg6BcY%9Z=4RHwFsq8QJ38IoQzeO06&yaicLOK}<&MS` zOADsUfa>yKn35toLC#IZ%w6z{c^5sP7rBKokc)Zuvf!4y-aWx`bwzS5?alYVEOy0m z9@wKnCLY3ImY6yMrSuzTVT~5(43_xXRT!fc<{p}0mJV#u7TsSXD9)@dFpE$5kx5n9 zh*M-nH6A8LufdKq;73H!u?ZivjgCW994_TZ{OW8!iJ#;YEJ+HiG6zeYqnA?vt5mo> z%Wx&DV3n5Mqb_VoAHKv1R`G#Uf@s(ysMzBml@yBbS?mZaC_+*p*TDpwH)m!y=P$m;!-%3@_=6;F(H zI0#`Ngn4j*MkYZaaVC(a!OU}@ka@k;C1n+AdbgX(By1{&V6Yj`0fXQHh4^(2YEmaO zlFAm$p>Y&H@&YKNq8ve8*@2ew0^Q4drcSSP$gtV)MDshrAs!SegQ)w%;1GQG!67L; zyJxBY=fNQb;*==(YT%Gnt@S(Vkk;FcR&F*-`H5IzjahMG)-+LT4jdv;YY~M;1${-Q!Zp-oQcfw6Ipvaq`ME?|6l< z5?#N>&wE}Kw?b}rq zyj}J09;-GBQ;Wp3HcM%3mbLOpiCUy;)n`p=k&fzZdMICQylWS=h)+Gg!s_-FXLfg* zcRfcfGLH|=BJa9FEmG5MMoo?8oAgDtdDnJo5f`kdmvm+-Dx{ zvq;3RQiIo3wbdf>Z}7f_0kx|}%fs}^An!X&Hi)4NNbtVX)FN4U&;{OiiCUz})~*%a zcavJAW3izIUiD7((e~k5DN`zvIpWOmO!LC$$RYD6H5Yl|6`jwmQ;RgwYqojeU1||S zt9+N%_hxlJNtT)7m8Ymh<}}~rmFKL`nO)|kuTqP&l-=y2Md-5y%tf|k*4yGo0`Q8G+Onu=I9)g{r;eHemSWbz_NH8P1K`xH?i zMKv;~tX^J~S`}0V%S3@y>X8=nE*nIF9{ins*hxL&QO+)?Y@J}lgkr>5;=nxhNC7=Y z89hdgdSq3RO-DJo9vR(69B@&O_>_SQgC3*AfjKIXdF9$lDnZlI|d=!AGpZ;IH%kH{m0C%HBJbxA!Sy z9|i|RwMLw#MieAp`kBD;HRZvZismgK1@#N&PyYuae!uqS9uCZ3P+fO*AN8Ll)GwI-p(FlHdJhI@-$ma+ zkiOvjEgNm%V7E*-39wkhUhzoj1A4_w*O>!z6nqHKxjTmcOm_s9MeB^M8AXQ z9}1e^!SaISYv`CB`8YmKM^P}mAb7#=4-UQ0(MJ^I{&3-TCmlo|lO{hE%-%g@l+QY5 z7sM`jJx!-!p3b2lb;0R^(gmX%OjWt)7y9WIn&>=9uQ06|n)$Pe&{yHwJM;;AbP1jG z2z_wuVHkGd*VC};^XLPFS+50FlvUqE7ho`(=|U6WhfNnQJ-^GIpAK=~AA^2&k+yK? z1`N6j{@hQ;U+{I3ZvTHZbS+$Z3?@AVk1i~Ffj&PGld^^aH&h_+KWP%j*40RB__GUN+o_(mr8QB}3( zI=sgQoQLQ#U8pYxVLZcVFJiErX>=DkxXwjt9NFArvK*VraEPYTO{5fcPz;?#5@sWd z#$pj(ql~^nbdoL96{3yoA9bjwfFE5&gjzHPMWuoL3 zS~4%(WP!MM*5Zv=F>{8f8zJ*WO}|Pku+aIilDVUVNK- zBI;W+pN3$+lByibb4P^vk{co_S`!^RR4p5V>rSG$5te(AK35rrODbHs8QcnH<1RJo zoSVUnz0+c}BlO)<%3+CG)u78BfT1h0E1)S@MUB>h^)b+(`O%+E((6gl=@C>|h1+ey z?3&po1e+`0ZBaWoHAQ`E@V8s^Zu-jIdeD&hRlPn%*JfI~vS!Do2xpssLlFcfy2wRE zU~90a9dumV^iJf^H5hXm`S>UusP8{Ra0HdS^wUH!U-X%}dqKrg}tTZv}N*jhAJokL)JX4Z=$bE%Qz8`$862jGPR@WPYY6-sGGXaPpJh&F8nHn@p0twSfM&or%PNHR@^ zOtXM~Y>9qNUG*0obt4qj^Z>exfU0JtMCzOyee!;?+A9&oa1-6;29avpid8;U zuuhJ(iNt3A(y6`60G*2nQEHmLP3xXH8g{wu&1_q+Zb#{ECx}<(oJ>$NLyAsumN-+OOI+o|<-9wb zb&uY#L$x11&Rb49uJI*9S2#~ks7z0&Mn|}bW@uBj9u9iJ9?hUZ<%be5L^G;LU7!n8 zLXTR-{ZBH@2L0b2N>n@C(4eJ2-5ae6s88iP)=_py7Ltf%L)YOVV(omvy*Ot9B)S9= zt!sZr;#FU>l!u5FAYx5wE>6cMe79;{GHoN)~-)k&b9pJEH4!L^rt;lDnkl5`9>Z zUTBnFXoAd@;a22PWtUMxNZqwc2UO~=K9!e)x=UsN=2W*-;MK~Tl?>)U-5_;t z)Zse1hYt6CfLre;Zq+!K4zb1#V)TQj;@nR&o32c((;+m%e#JoYGfFhh9XAJR;u^Ut z%a%fJCsJ$-&uE=3`j_l+(<4jz?K`RxG{3z~6);X!47ybZ<5Lw(bax(PL9tB%J$~u9 zi4d7lXloC=t37Z*J8r!#66O8m{h+EW1)C@TlXbW7%$%;{|6BAT2s@pqXB+(47V-<9<140wb(VhSEe zZo1rZ^Y4`SQy~J?GzP7s+t`2;+UBRQftUy2g^ax4@bkxnweObNojCNWf-XwkZ|eI6 z87@)r8zsMb`nKtVi~enp>Trs#cLvp48C<*w8Og3TMKV51RcYqd zEMK>vbEnIyq-=Bdw@^{;WL7_KAf~lxioBY;%msE2?pFMBAQ_{>-wob~QUN8&DiS+# zbl=Nb1Ffi@SfZQc6`SHXpXz5NuOv|ZOLWUq6_v;9ddZWnCUWgDfu(6Fj8l1GiM zU-!NbSaoF7(nLrlUIX(=7V&AmNa~v@C`vQu6YYx6!s^UzC$BOS&HajKR!yl=SSrFY zFI95tI;d+)F_)8^>QiN~=z^!Ye;IDzBKL0z4N-#}E3tE%$mu{kBpEiuscxeOu%iZY zlQ*O`j1V8E$htfdW5|dwbJ9QoDd=w#cGZsV$*n(;ndg&Ksk7XDsZu3|Eb%j~!5v7v zH+A(U5)AMz;##$4HG>sYrF=YI@1KC!GT- zSYaMrauNOF5}M>SYTFLg?KZk4yXqEwysZ#yYD{Of<&EX3cFU+0mr)|GqeR|Rosu1e zlGM2o-rJN;O3k89GAmsZg|2}^JKU%)%*KE<86`YU97HmM7BQ<#PCLCq{TagwR01WF@eMx=&V)QP9% zkXc2v$?RQ=Z5ucNg-Qm=fhN={iIt_qj3tTo@7Zny0c zVGX*C9!onAV~Qz7l+B_Y-m4mr$tC4foI{G)L^I%3KRcOOnu2YUd4?Pc!9_H}@+MY^ z!7Z?spezUY%A=~lu+B2%QL6g`VmF}VjZ8F#uF zwbM(M zTW35aSv>8G|R`CO;o{(fcsYGoJeWY@;7Od-s3) ztjzdIMdH1m3Ezi0clwa0PMOIYGO~Oo8=UySadW4Mhdg^7J>$u1{^G8AKcZ)S%JtN@ z;{N7br{T$dx>K$zXJIaT{VYyp^L>nA#kptiC7s!1@Y$OS=2vhIYu})~KdpYYrq%Ip z8a6`2^^@bq)LEWZfAH_POC4&^QIMUDKAHT0eTtm1AH=r0L9`!~vqJGf_$qK8{li9_ zvupg!dno*eIw(Li4I8tkyps=qb~$r=xOkRbG}>p;L*v2uR%rbf8`iq)`&y|@o^j#9JT>3h~2BvV#SfHCDY+zky z8rPM-v@y@E|SLnm?slCgI?+uyCThknZs6{dxmRx7bu=cy+SZue(ks)n{nhn(du~rQ7iX1ZR|n zRR=dfN4JgwY*V$fUbyC{Dv#32>}F2r=M}X}WcG(v_jticXSd6IyN&Li+1vA~vNot4 zkSdex4f-Hv|E@P0(5cg~s^rX0NJ2G9GjuM5!_6>-x~Tf3lKM+5tGX;o=Oc;cD2*Oq zM*(2pqoCW%ysolmenfj=YiNWzOi!AcG4tG|j}}E+nBb)4l=Gaibl>HSJGeG&qa2g- zba9qJ)E4*0bM}Pk43Fpz22qZAbRIHn%|fQFImnV<6w>+K?vixJgsYSenedqnoo;UH zbo1t}N1>=S2Go^M^cq2RT#9LDfbSO@(LEtORd&f6a9HkZ!sYLrs&vqIPE`~vF`cxR zIeVG1FKZufM0-a&oNrnBh}jX{eJQ_tSap?AJ%cz}A0t1a-py-xE4v<`2kw0keqVX` zY@;+{)cEUrIw$MYIawc_>LBVrnUjsv6HV!yd{*b=3ozO;CtE`awyJaT9UL-bPS!vj zC^K?0C+kwNnriop(D@UG6u%2bW$d1X#E$SKI2 zoXp9lP!P`PoO~Y6Tjpe|_#2O?ce~ti!#S#+wx;)Aff?Ec9Y}OJo>8N~?H`Ss5Ra7?4$RXqF-C#CTya_^`Xv5(SI+~M{A(X*rbEzL>&;IdnQxr1$3J&dNM9v zY@8lUfxc~vzKcOmJ&Z;$OXsJKZ-haI93=&PaEY27df*=VW=UR{bV>Mu{G&#jf5`OD zAc`%S;uSx!EbM#{cD}|>C>~;)^sRbu^8<9QWK&{PC-pP*du2v)#|yMI*CELco8~xg+2O*y2j5<{0I|#OUZ<3bz+>?j98^N<|PA4 z_RDHdxuUcB20bso_LJlEyTr>}lx-WFZ%}*5qIM96jde0zkBuB|R5fAs(@3k6MoB$1 znlK|>x>hdy`~2j&N%hN^+2h(*LpQZfzp9JMQ@S8NG;bkw>66L$lsfbkn28r}z9x!Z zQFq$WK8PQmyzB&8H<^7G4?cO#YvfOP$KtyuFIbq*IJr^0_T<&dSC?qrREIr-+$Y|8 z@=C>3Pu}MO_ds5zIO%opt{_IoScaf@(8(R}sDECJ?=8-G^XL-Gx-Un*u-x_y{mui# zH@WRW^~saD^qkJQRJiR8^`a0SS*Fm%5pR+XxUhtxn4hNuUgYi8)D55N?svjC zM9@?v(J*H4jFOqtW%}Mt-trcj0z0okZb(q?$kcJSq-1F{RyFUsc;`NHY-kUAF~_SH z)q&ic3Yu-1WLc&2+mbkt9Mv5QW|zwRI#YW*6c?<1qG&Bv)Io7O6xidHI71IHV>u<3 zMJJUWH9DNCqG*5wEhf=KRnN$WbBq449qoW{?=s7t z04L7T8D3O-2u5YVR>+F@XBePvnlziyW=`+zCMtMh~n#pPQ6Sqpqds|>0 z$#~K$NT8DE`({UtGT&EpF@`GM+)NF~TbR_>AbOv)stp%ZFH=z@)1WWg0>#KQNq73K3K3D;|FGLYDQ7G}S3`OW%oIeImX3R>JyPBzBsb-<;~_MJpn&M)dQo z5%Goepu>^ZlC)y#26)r}i@H&wio?njD%3Rkxdq~?yo?5#9Pv}>!zqZ9LV#NnH zFW69rgaPv8piXkgZtc3xKeo`RZlVizgQKR1oL%~UIrTm*@9{m|I?3}iM5jM`oa1Tv z1YX9gZbA`NJ&D#Nt1d!O^#j>LIqJ}fnB>uEBA$zAmr{owBR^`a@{MFuT#(Lsl-!ll zsSk19C|NF`t2+C!aoqGr+?v}n5ou>AqKdx_G{3@)ibrQqCl(SqJ!?91)-AtjQG=NI zJEn6Avnc*V=h;AwvZ3l<$zRhbJ<6){sHvB;>Empwptg6X6`YoW&#zTp1Vu{Jdc8R^ zTZuPZ-s6eeM$6FyDM+WxuL^GI_2E&BeR)X!o^_ zCycQDU38H?5b7k~CZ>+Fn`AIkYY|tag-vH`e3py6c*dIeGl%X+kmoXQtYP8KZN8F; zIR&>!C6`sF_kx8hB{NNkPeU1k zo~pt{!6}nVGGDQd(#EVo#4}i`4^#Io`kIo&W#^dg$`!{g@!QJbwO0b8F00>f3+1QG zcS$u7#ZTwNin6a$xpw025*q)m))WJ1y=Atop*k<~WzVAI&4W!>anbG&Nu{pO@S>N& z6M{m!YzUm8rkF=}yoMgHt4z!c)%!f|QFWXkTgtl_@TVD7F|Mi((a=4e8I)Aw@wBWR z%??aUAD+cYEibCu0P`!NyA=hMX!t9<)ZS%2uxAjJennl`)-`?_DD>UTAxe%6Tb|JK znj_1q%wN^)D4Ef$9M|_`L#Z#~ywf>l0EBszQ;)5LJ=X!p9rOkuyp^Gg`$xYhv~6yOEoDfYbwF z)O^CM%qgED(_S@o7T=^guu&U$@bH>K11(c9qJt}FU#rWcm!0?FX6{AQqG9lkMAf9m z)r=~l3YPz7LudQs3yNyg2Kte2=+$p1%F(#0;b!5@=GB+4Ohq9x8LMC+iNP|JVW6fS zP)%HPT&jd6ovCQ+RE(i+Szb7R5C~@qd^4vGSw*6+#9raq4Bf<$AUDnta~EODq@v&X zqT;>n;T?tGF{FN%_$!tBk~-YT%#65f^RE13#-P@Uc2znAd0*14Of$K(fKE+ZtQyqn z9V+2I3QiXqwE!BPUOIw@Gx7%uEwo7tP*h(q{E$O&?>R0byMk-M~U8ejV`+JcsUw963Q$MJc=O`fo>l%w>PTUJ+Muc)%EkeZmC5%+ zlsQdNOG>UTQA@5+OSY&bx0UZ3Gd770PAW;^Ou}ctn(Qzp1=x}b%%9wo_0zbkH#JTe z>M|%Zq2e$&#n+xuXF=g$#Z|DaoU2nODW*}^O6|9(TMSMgHIi@#J27J!r|Ab1G2|(%DP}B( z-n^o;nnnqU5fULJK1lo*6rDmXn^TXEitY;7-rW!&C^}#<4|{7{nIWGcI^IN(M!ioFY4ADNWa&nXX#W7Lx!SaLTjig5+%zoU& zRmm|U#+#P!T!Ia%@J+p-?=VOzLB5}()?HGb-ef%XexVJx8v|ERVfSLYbK80K{FDlG z4(ycGm}_Ug&C9e>niy-&CAIki8|u#6J&ws27T-%>>sYTul=*Sx_@>pVGi`Bw3+mWg zP(HV;zP(jz9)A$-FRisv3C_>0-IJ7l0m;!mbsA`C{g~hFh~vNhC6(r-l!8kzz4<( ztEZwcNyjpxiL`_xXseH+p;KgDPC2X&h-rAEd5}~|=US!eXefImoNJG$DBr-R69sYg zI?WzAmJe-oqTMj8=2U=Gq;cv9$%=E!j48j*o>Nbx#(90r`s!IJSO1(|6i_PL_Lf{rbEDo}ku$K{(S4l9h)E2^8 z%D32I^LE~fAl+%@yiK+{zy_TdFG1pz+;_R{O|3W7$Gu$%ybn0qP zm^-u9YtvEOIz#qOaEps-FK`Czo$v^A>WormPDr{`^2H3DxbUBrgAvO~-?B~KF?2)O zl=dppI%6+&q3qHSzOA8rTgRIEweg-@@NQn+#S$j&#dYp?R_B4FvmrUCYPlb`VTLxD zQ<6$@09MY!w-3Tyr$%$y(XZ&vqz-YgKPGcME}~zQuY9bd(WIgjme#e4I%Lmy%j)9K z!o}8gGBKh)fhqbIIW~TEw8og`6;*YIgdl{JdUWS?FHqQ;vRtP!^k`3h5rojP-jA>~ zHSj=P>Vwjlk)%F2Ro^J4Gc9{NN3-g8kkuKN1@*x$oYYNPp|jS|IM@V3v>uju;~aI# z!f}1)6MN1wNz*zlPaq8LfVy~jv=2RK_4YzmY>ui=P#h$ar1y~`N~d)KF!KP@!z=3W zuzJF_kxlr=u1*T}t-I(@uYMPdq=y*eBg!<1D8fK?_H4V8E~3f)7O8`Tv5*^}8vk@~d_Gw;UXIlmMB9&M@$?pJlpu=Cd4L}a;1MWS(=YSRs>OwemBQa7|=*4<=AIc@1H%A1vwNx+X6 zVHxC9+`LKQ!T-~qM19O~JmSv5{jlDK3T%Y1PEup8DIcL#Ci5|4h8wT_)9ELtwR@RS z4p8cm@@e*dN!Q*DD=0ZavU~KTtzV0pEu>ai0pqTprY;TO9wA6TDi=XyvzBkjqIPnY zKn0RX*7aU)4-2p87KJsvgs8IADe4$u#O9R~D=RBjw|GZk#)Ny6yy76UxaorW)eR}6 zY}uqbOH65&F`2Vt)9kt9=GW_VB33PJ(l$A#58CiqTu5wpI$Ic#<9nse``t4s&J+Xc zy6*wO`%ZEki0x%LXJP2IO+xkKFQPt_pp?8uwaC2_;cm!Wp z1>2g1ZzNJ}=!TuH&b0QAQ%$(k(ZH*|{ASlbq?6E-I`1kxpF}v}`evvKX0>l3zBdx{ zmMp}246kl!H7CePP^(ufx)4lYR4e)!?SAI8s+Y=6kd#^3OMNF;YFqh0sq);`bZp4l z8z?Tm8D)3p)wN^M+R`alcnx+)bak7$Ij~2s)TPXzC=UX3YGPD}!mvw57pH}+G68v= z+b)BTCCjf^TRYa3dEbB?5T4jUH`PUy76c%CaR^>%Qm4CTn5Y$uCNs67LXsF>QO|*z zvdC+&O&$2AO&BM$8tTJ5*-qFt?A_xc5>mG^;hm*pG!5%-x;SKX3U`qy+=}{oukF#M z^(`LLp}Hl>7hVe`26Q%8P=1Vx%hbS>*iAmBdUik9@Wgy5@5mSQsj@L(X+0vkX+ipy zrq)s19cEx=X01vjr_;@O^%W?R^~$g{OX`PFxzR7Ofytq*1v*4Lq1m&_iU zRF;G4*&Kw~39GwZR9ysw4VJGj?0#C^?so2h@WA5D3vHkE~}?iRcD-6bYs%${i!TT()<6} zKY{%d*gt{&6WBk2{S(+ff&CNMKY{%d*gt{&6WBk2{S(+ff&CNMKY{%d*gt{&6WBk2 z{S(+ff&CNMKY{%d*gt{&6WBk2{S(+ff&CNMKY{%d*gt{&6WBk2{S(+ff&CNMKY{%d d*gt{&6WBk2{S(+ff&CNMKY{%dc%+@c{|76N$&>&9 literal 0 HcmV?d00001