]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge trunk into jni branch for the newly-relocated version-info tool.
authorstephan <stephan@noemail.net>
Thu, 10 Aug 2023 17:39:26 +0000 (17:39 +0000)
committerstephan <stephan@noemail.net>
Thu, 10 Aug 2023 17:39:26 +0000 (17:39 +0000)
FossilOrigin-Name: cc8e8cba67c0dcfb9b416041a19456cf5248d909f3efb6fee707a5950be4f374

1  2 
ext/jni/GNUmakefile
manifest
manifest.uuid

index 0c522ec8b0e2a7815c9468652019afebe055b975,0000000000000000000000000000000000000000..0d978fc99a1e7e693227cf2e1180e3b6a8afc3dd
mode 100644,000000..100644
--- /dev/null
@@@ -1,258 -1,0 +1,265 @@@
 +# Quick-and-dirty makefile to bootstrap the sqlite3-jni project.  This
 +# build assumes a Linux-like system.
 +default: all
 +
 +JDK_HOME ?= $(HOME)/jdk/current
 +# /usr/lib/jvm/default-javajava-19-openjdk-amd64
 +bin.javac := $(JDK_HOME)/bin/javac
 +bin.java  := $(JDK_HOME)/bin/java
 +bin.jar   := $(JDK_HOME)/bin/jar
 +ifeq (,$(wildcard $(JDK_HOME)))
 +$(error set JDK_HOME to the top-most dir of your JDK installation.)
 +endif
 +MAKEFILE := $(lastword $(MAKEFILE_LIST))
 +$(MAKEFILE):
 +
 +package.version := 0.0.1
 +package.jar := sqlite3-jni-$(package.version).jar
 +
 +dir.top := ../..
 +dir.jni := $(patsubst %/,%,$(dir $(MAKEFILE)))
 +
 +dir.src     := $(dir.jni)/src
 +dir.src.c   := $(dir.src)/c
 +dir.bld     := $(dir.jni)/bld
 +dir.bld.c   := $(dir.bld)
 +dir.src.jni := $(dir.src)/org/sqlite/jni
 +dir.src.jni.tester := $(dir.src.jni)/tester
 +$(dir.bld.c):
 +      mkdir -p $@
 +
 +classpath := $(dir.src)
 +CLEAN_FILES := $(package.jar)
 +DISTCLEAN_FILES := $(dir.jni)/*~ $(dir.src.c)/*~ $(dir.src.jni)/*~
 +
 +sqlite3-jni.h := $(dir.src.c)/sqlite3-jni.h
 +.NOTPARALLEL: $(sqlite3-jni.h)
 +SQLite3Jni.java := src/org/sqlite/jni/SQLite3Jni.java
 +SQLTester.java := src/org/sqlite/jni/tester/SQLTester.java
 +SQLite3Jni.class := $(SQLite3Jni.java:.java=.class)
 +SQLTester.class := $(SQLTester.java:.java=.class)
 +
 +########################################################################
 +# The future of FTS5 customization in this API is as yet unclear.
 +# It would be a real doozy to bind to JNI.
 +enable.fts5 ?= 1
 +# If enable.tester is 0, the org/sqlite/jni/tester/* bits are elided.
 +enable.tester ?= 1
 +
++# bin.version-info = binary to output various sqlite3 version info
++# building the distribution zip file.
++bin.version-info := $(dir.top)/version-info
++.NOTPARALLEL: $(bin.version-info)
++$(bin.version-info): $(dir.tool)/version-info.c $(sqlite3.h) $(dir.top)/Makefile
++      $(MAKE) -C $(dir.top) version-info
++
 +# Be explicit about which Java files to compile so that we can work on
 +# in-progress files without requiring them to be in a compilable statae.
 +JAVA_FILES.main := $(patsubst %,$(dir.src.jni)/%,\
 +  BusyHandler.java \
 +  Collation.java \
 +  CollationNeeded.java \
 +  CommitHook.java \
 +  NativePointerHolder.java \
 +  OutputPointer.java \
 +  ProgressHandler.java \
 +  ResultCode.java \
 +  RollbackHook.java \
 +  SQLFunction.java \
 +  sqlite3_context.java \
 +  sqlite3.java \
 +  SQLite3Jni.java \
 +  sqlite3_stmt.java \
 +  sqlite3_value.java \
 +  Tester1.java \
 +  Tracer.java \
 +  UpdateHook.java \
 +  ValueHolder.java \
 +)
 +ifeq (1,$(enable.fts5))
 +  JAVA_FILES.main += $(patsubst %,$(dir.src.jni)/%,\
 +    fts5_api.java \
 +    fts5_extension_function.java \
 +    fts5_tokenizer.java \
 +    Fts5.java \
 +    Fts5Context.java \
 +    Fts5ExtensionApi.java \
 +    Fts5Function.java \
 +    Fts5PhraseIter.java \
 +    Fts5Tokenizer.java \
 +    TesterFts5.java \
 +  )
 +endif
 +JAVA_FILES.tester := $(dir.src.jni.tester)/SQLTester.java
 +
 +CLASS_FILES.main := $(JAVA_FILES.main:.java=.class)
 +CLASS_FILES.tester := $(JAVA_FILES.tester:.java=.class)
 +
 +JAVA_FILES += $(JAVA_FILES.main)
 +ifeq (1,$(enable.tester))
 +  JAVA_FILES += $(JAVA_FILES.tester)
 +endif
 +
 +CLASS_FILES :=
 +define DOTCLASS_DEPS
 +$(1).class: $(1).java $(MAKEFILE)
 +all: $(1).class
 +CLASS_FILES += $(1).class
 +endef
 +$(foreach B,$(basename $(JAVA_FILES)),$(eval $(call DOTCLASS_DEPS,$(B))))
 +$(CLASS_FILES.tester): $(CLASS_FILES.main)
 +javac.flags ?= -Xlint:unchecked -Xlint:deprecation
 +java.flags ?=
 +jnicheck ?= 1
 +ifeq (1,$(jnicheck))
 +  java.flags += -Xcheck:jni
 +endif
 +$(SQLite3Jni.class): $(JAVA_FILES)
 +      $(bin.javac) $(javac.flags) -h $(dir.bld.c) -cp $(classpath) $(JAVA_FILES)
 +all: $(SQLite3Jni.class)
 +#.PHONY: classfiles
 +
 +########################################################################
 +# Set up sqlite3.c and sqlite3.h...
 +#
 +# To build with SEE (https://sqlite.org/see), either put sqlite3-see.c
 +# in the top of this build tree or pass
 +# sqlite3.c=PATH_TO_sqlite3-see.c to the build. Note that only
 +# encryption modules with no 3rd-party dependencies will currently
 +# work here: AES256-OFB, AES128-OFB, and AES128-CCM. Not
 +# coincidentally, those 3 modules are included in the sqlite3-see.c
 +# bundle.
 +#
 +# A custom sqlite3.c must not have any spaces in its name.
 +# $(sqlite3.canonical.c) must point to the sqlite3.c in
 +# the sqlite3 canonical source tree, as that source file
 +# is required for certain utility and test code.
 +sqlite3.canonical.c := $(dir.top)/sqlite3.c
 +sqlite3.c ?= $(firstword $(wildcard $(dir.top)/sqlite3-see.c) $(sqlite3.canonical.c))
 +sqlite3.h := $(dir.top)/sqlite3.h
 +#ifeq (,$(shell grep sqlite3_activate_see $(sqlite3.c) 2>/dev/null))
 +#  SQLITE_C_IS_SEE := 0
 +#else
 +#  SQLITE_C_IS_SEE := 1
 +#  $(info This is an SEE build.)
 +#endif
 +
 +.NOTPARALLEL: $(sqlite3.h)
 +$(sqlite3.h):
 +      $(MAKE) -C $(dir.top) sqlite3.c
 +$(sqlite3.c): $(sqlite3.h)
 +
 +SQLITE_OPT := \
 +  -DSQLITE_ENABLE_RTREE \
 +  -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
 +  -DSQLITE_ENABLE_STMTVTAB \
 +  -DSQLITE_ENABLE_DBPAGE_VTAB \
 +  -DSQLITE_ENABLE_DBSTAT_VTAB \
 +  -DSQLITE_ENABLE_BYTECODE_VTAB \
 +  -DSQLITE_ENABLE_OFFSET_SQL_FUNC \
 +  -DSQLITE_OMIT_LOAD_EXTENSION \
 +  -DSQLITE_OMIT_DEPRECATED \
 +  -DSQLITE_OMIT_SHARED_CACHE \
 +  -DSQLITE_THREADSAFE=0 \
 +  -DSQLITE_TEMP_STORE=2 \
 +  -DSQLITE_USE_URI=1 \
 +  -DSQLITE_C=$(sqlite3.c) \
 +  -DSQLITE_DEBUG
 +# -DSQLITE_DEBUG is just to work around a -Wall warning
 +# for a var which gets set in all builds but only read
 +# via assert().
 +
 +SQLITE_OPT += -g -DDEBUG -UNDEBUG
 +
 +ifeq (1,$(enable.fts5))
 +  SQLITE_OPT += -DSQLITE_ENABLE_FTS5
 +endif
 +
 +sqlite3-jni.c := $(dir.src.c)/sqlite3-jni.c
 +sqlite3-jni.o := $(dir.bld.c)/sqlite3-jni.o
 +sqlite3-jni.h   := $(dir.src.c)/sqlite3-jni.h
 +sqlite3-jni.dll := $(dir.bld.c)/libsqlite3-jni.so
 +# All javac-generated .h files must be listed in $(sqlite3-jni.h.in):
 +sqlite3-jni.h.in :=
 +define ADD_JNI_H
 +sqlite3-jni.h.in += $$(dir.bld.c)/org_sqlite_jni_$(1).h
 +$$(dir.bld.c)/org_sqlite_jni_$(1).h: $$(dir.src.jni)/$(1).java
 +endef
 +$(eval $(call ADD_JNI_H,SQLite3Jni))
 +ifeq (1,$(enable.fts5))
 +  $(eval $(call ADD_JNI_H,Fts5ExtensionApi))
 +  $(eval $(call ADD_JNI_H,fts5_api))
 +  $(eval $(call ADD_JNI_H,fts5_tokenizer))
 +endif
 +ifeq (1,$(enable.tester))
 +  sqlite3-jni.h.in += $(dir.bld.c)/org_sqlite_jni_tester_SQLTester.h
 +  $(dir.bld.c)/org_sqlite_jni_tester_SQLTester.h: $(dir.src.jni.tester)/SQLTester.java
 +endif
 +#sqlite3-jni.dll.cfiles := $(dir.src.c)
 +sqlite3-jni.dll.cflags := \
 +  -fPIC \
 +  -I. \
 +  -I$(dir $(sqlite3.h)) \
 +  -I$(dir.src.c) \
 +  -I$(JDK_HOME)/include \
 +  $(patsubst %,-I%,$(patsubst %.h,,$(wildcard $(JDK_HOME)/include/*))) \
 +  -Wall
 +# Using (-Wall -Wextra) triggers an untennable number of
 +# gcc warnings from sqlite3.c for mundane things like
 +# unused parameters.
 +#
 +# The gross $(patsubst...) above is to include the platform-specific
 +# subdir which lives under $(JDK_HOME)/include and is a required
 +# include path for client-level code.
 +########################################################################
 +ifeq (1,$(enable.tester))
 +  sqlite3-jni.dll.cflags += -DS3JNI_ENABLE_SQLTester
 +endif
 +$(sqlite3-jni.h): $(sqlite3-jni.h.in) $(MAKEFILE)
 +      cat $(sqlite3-jni.h.in) > $@
 +$(sqlite3-jni.dll): $(sqlite3-jni.h) $(sqlite3.c) $(sqlite3.h)
 +$(sqlite3-jni.dll): $(dir.bld.c) $(sqlite3-jni.c) $(SQLite3Jni.java) $(MAKEFILE)
 +      $(CC) $(sqlite3-jni.dll.cflags) $(SQLITE_OPT) \
 +      $(sqlite3-jni.c) -shared -o $@
 +all: $(sqlite3-jni.dll)
 +
 +.PHONY: test
 +test.flags ?= -v
 +test: $(SQLite3Jni.class) $(sqlite3-jni.dll)
 +      $(bin.java) -ea -Djava.library.path=$(dir.bld.c) \
 +              $(java.flags) -cp $(classpath) \
 +              org.sqlite.jni.Tester1 $(if $(test.flags),-- $(test.flags),)
 +
 +tester.scripts := $(sort $(wildcard $(dir.src)/tests/*.test))
 +tester.flags ?= # --verbose
 +.PHONY: tester
 +ifeq (1,$(enable.tester))
 +tester: $(CLASS_FILES.tester) $(sqlite3-jni.dll)
 +      $(bin.java) -ea -Djava.library.path=$(dir.bld.c) \
 +              $(java.flags) -cp $(classpath) \
 +              org.sqlite.jni.tester.SQLTester $(tester.flags) $(tester.scripts)
 +else
 +tester:
 +      @echo "SQLTester support is disabled. Build with enable.tester=1 to enable it."
 +endif
 +
 +tests: test tester
 +
 +$(package.jar): $(CLASS_FILES) $(MAKEFILE)
 +      rm -f $(dir.src)/c/*~ $(dir.src.jni)/*~
 +      $(bin.jar) -cfe $@ org.sqlite.Tester1 -C src org -C src c
 +
 +jar: $(package.jar)
 +
 +CLEAN_FILES += $(dir.bld.c)/* \
 +  $(dir.src.jni)/*.class \
 +  $(dir.src.jni.tester)/*.class \
 +  $(sqlite3-jni.dll) \
 +  hs_err_pid*.log
 +
 +.PHONY: clean distclean
 +clean:
 +      -rm -f $(CLEAN_FILES)
 +distclean: clean
 +      -rm -f $(DISTCLEAN_FILES)
 +      -rm -fr $(dir.bld.c)
diff --cc manifest
index 859585aa31b35769984c8951f6b82264deec2cab,60b7cd6a544ff12e51beffe7d2d28e3902b9d53d..1a36810b2902a0033b8745443d5c38cd3a8bbb08
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Add\sSQLTester\s--keep-going\sflag\sto\sallow\sit\sto\scontinue\sto\sthe\snext\sscript\safter\san\serror.
- D 2023-08-10T16:42:22.602
 -C Move\sext/wasm/version-info.c\sto\stool/\sfor\sre-use\sin\sbuild\sother\sdist\sbundles.
 -D 2023-08-10T17:32:37.469
++C Merge\strunk\sinto\sjni\sbranch\sfor\sthe\snewly-relocated\sversion-info\stool.
++D 2023-08-10T17:39:26.960
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@@ -231,45 -231,6 +231,45 @@@ F ext/fts5/tool/showfts5.tcl d54da0e067
  F ext/icu/README.txt 7ab7ced8ae78e3a645b57e78570ff589d4c672b71370f5aa9e1cd7024f400fc9
  F ext/icu/icu.c c074519b46baa484bb5396c7e01e051034da8884bad1a1cb7f09bbe6be3f0282
  F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a32075a8
- F ext/jni/GNUmakefile d69b26fb294b7a86a2f838012f4161311c06d607680b86ecdb1334f6f78c165c
++F ext/jni/GNUmakefile b579d1c9a55e54ca66859d77218226544402896602b39432070f6a3cbdba0cc7
 +F ext/jni/README.md e965674505e105626127ad45e628e4d19fcd379cdafc4d23c814c1ac2c55681d
 +F ext/jni/src/c/sqlite3-jni.c fa251d2033d2210a88ac6190db923f76681be609b97f840360318ab366f3cbdd
 +F ext/jni/src/c/sqlite3-jni.h b19a104e0566440af566366cea72188bd994a96ba85c3f196acaa6f4a4609a55
 +F ext/jni/src/org/sqlite/jni/Authorizer.java 1308988f7f40579ea0e4deeaec3c6be971630566bd021c31367fe3f5140db892
 +F ext/jni/src/org/sqlite/jni/AutoExtension.java 18e83f6f463e306df60b2dceb65247d32af1f78af4bbbae9155411a8c6cdb093
 +F ext/jni/src/org/sqlite/jni/BusyHandler.java 1b1d3e5c86cd796a0580c81b6af6550ad943baa25e47ada0dcca3aff3ebe978c
 +F ext/jni/src/org/sqlite/jni/Collation.java 8dffbb00938007ad0967b2ab424d3c908413af1bbd3d212b9c9899910f1218d1
 +F ext/jni/src/org/sqlite/jni/CollationNeeded.java ad67843b6dd1c06b6b0a1dc72887b7c48e2a98042fcf6cacf14d42444037eab8
 +F ext/jni/src/org/sqlite/jni/CommitHook.java 87c6a8e5138c61a8eeff018fe16d23f29219150239746032687f245938baca1a
 +F ext/jni/src/org/sqlite/jni/Fts5.java 13844685231e8b4840a706db3bed84d5dfcf15be0ae7e809eac40420dba24901
 +F ext/jni/src/org/sqlite/jni/Fts5Context.java 0a5a02047a6a1dd3e4a38b0e542a8dd2de365033ba30e6ae019a676305959890
 +F ext/jni/src/org/sqlite/jni/Fts5ExtensionApi.java c908e5fdf6f5d15e388144fcd8160a3f46c18dade749f1b747122d2d37f2e726
 +F ext/jni/src/org/sqlite/jni/Fts5Function.java 65cde7151e441fee012250a5e03277de7babcd11a0c308a832b7940574259bcc
 +F ext/jni/src/org/sqlite/jni/Fts5PhraseIter.java 6642beda341c0b1b46af4e2d7f6f9ab03a7aede43277b2c92859176d6bce3be9
 +F ext/jni/src/org/sqlite/jni/Fts5Tokenizer.java 91489893596b6528c0df5cd7180bd5b55809c26e2b797fb321dfcdbc1298c060
 +F ext/jni/src/org/sqlite/jni/NativePointerHolder.java 9c5d901cce4f7e57c3d623f4e2476f9f79a8eed6e51b2a603f37866018e040ee
 +F ext/jni/src/org/sqlite/jni/OutputPointer.java ebdd33d48064c3302d0d4a6dd345562a967f8420edad7c7509403be277d076a0
 +F ext/jni/src/org/sqlite/jni/ProgressHandler.java 6f62053a828a572de809828b1ee495380677e87daa29a1c57a0e2c06b0a131dc
 +F ext/jni/src/org/sqlite/jni/ResultCode.java 7cdf993f2037ab7bd244c9a34dbaef2ace3beb5da5d7e7fda5c6f67634ceb647
 +F ext/jni/src/org/sqlite/jni/RollbackHook.java b04c8abcc6ade44a8a57129e33765793f69df0ba909e49ba18d73f4268d92564
 +F ext/jni/src/org/sqlite/jni/SQLFunction.java 09ce81c1c637e31c3a830d4c859cce95d65f5e02ff45f8bd1985b3479381bc46
 +F ext/jni/src/org/sqlite/jni/SQLite3Jni.java ca91d7fdd334989ce0514a612878e329cdced5d3697d2357f938c3cf1a68e54d
 +F ext/jni/src/org/sqlite/jni/Tester1.java 22dca3ab0d93951382230f71e3cfb65898b80f12704a018c8ab9062df609b4fe
 +F ext/jni/src/org/sqlite/jni/TesterFts5.java cf2d687baafffdeba219b77cf611fd47a0556248820ea794ae3e8259bfbdc5ee
 +F ext/jni/src/org/sqlite/jni/Tracer.java a5cece9f947b0af27669b8baec300b6dd7ff859c3e6a6e4a1bd8b50f9714775d
 +F ext/jni/src/org/sqlite/jni/UpdateHook.java e58645a1727f8a9bbe72dc072ec5b40d9f9362cb0aa24acfe93f49ff56a9016d
 +F ext/jni/src/org/sqlite/jni/ValueHolder.java f022873abaabf64f3dd71ab0d6037c6e71cece3b8819fa10bf26a5461dc973ee
 +F ext/jni/src/org/sqlite/jni/fts5_api.java 8c6b32455d7f85ee3f7f3e71c148bb3c2106f1d5484017daddfd560dd69d4f66
 +F ext/jni/src/org/sqlite/jni/fts5_extension_function.java ac825035d7d83fc7fd960347abfa6803e1614334a21533302041823ad5fc894c
 +F ext/jni/src/org/sqlite/jni/fts5_tokenizer.java e530b36e6437fcc500e95d5d75fbffe272bdea20d2fac6be2e1336c578fba98b
 +F ext/jni/src/org/sqlite/jni/sqlite3.java 62b1b81935ccf3393472d17cb883dc5ff39c388ec3bc1de547f098a0217158fc
 +F ext/jni/src/org/sqlite/jni/sqlite3_context.java d26573fc7b309228cb49786e9078597d96232257defa955a3425d10897bca810
 +F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java 78e6d1b95ac600a9475e9db4623f69449322b0c93d1bd4e1616e76ed547ed9fc
 +F ext/jni/src/org/sqlite/jni/sqlite3_value.java 3d1d4903e267bc0bc81d57d21f5e85978eff389a1a6ed46726dbe75f85e6914a
 +F ext/jni/src/org/sqlite/jni/tester/SQLTester.java ecb989115a421088e2772d6125cd872cd345d0c422c50aa1ce1221c61fcd1f88
 +F ext/jni/src/org/sqlite/jni/tester/test-script-interpreter.md f9f25126127045d051e918fe59004a1485311c50a13edbf18c79a6ff9160030e
 +F ext/jni/src/tests/000-000-sanity.test cfe6dc1b950751d6096e3f5695becaadcdaa048bfe9567209d6eb676e693366d
 +F ext/jni/src/tests/000-001-ignored.test e17e874c6ab3c437f1293d88093cf06286083b65bf162317f91bbfd92f961b70
  F ext/lsm1/Makefile a553b728bba6c11201b795188c5708915cc4290f02b7df6ba7e8c4c943fd5cd9
  F ext/lsm1/Makefile.msc f8c878b467232226de288da320e1ac71c131f5ec91e08b21f502303347260013
  F ext/lsm1/lsm-test/README 87ea529d2abe615e856d4714bfe8bb185e6c2771b8612aa6298588b7b43e6f86
@@@ -2089,8 -2050,8 +2089,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P 99c0941f1c006622932a9cca12661f354f363a6c8a2b5675ea66149e0a9eb927
- R 9c64466da06e190239e7e69c9a826d4b
 -P aa6de539c09faa320b68c63659e602107145c4263fa680d5b40fe4d7d7ac4534
 -R e8c10ce35c97a4689d66203c4b77aa02
++P 4d635f781b55ed9011bdf07ee6bed2d004b1c2ebba76aa110e26d8fe3152a733 4b0871fd367b6d9706e892aa13f64604967f5e3ba92381960f73aeabd3d23f84
++R 30af3e66dbd0b2532a573f872e33a7d9
  U stephan
- Z f63f0a2b4c4b5ac0034a79c60a02bab8
 -Z e2d880944a873fb45826adfc8f1da470
++Z 514337a044b3ac61c7ad0f7afbdbd01a
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index 32af44f10e284c675c12fa46e5bb30464b4b2206,636bc42bb12979dad2ceaa313af72fe657091089..b4d9b8bfebb34dc311ae4b85ba871127852a74ac
@@@ -1,1 -1,1 +1,1 @@@
- 4d635f781b55ed9011bdf07ee6bed2d004b1c2ebba76aa110e26d8fe3152a733
 -4b0871fd367b6d9706e892aa13f64604967f5e3ba92381960f73aeabd3d23f84
++cc8e8cba67c0dcfb9b416041a19456cf5248d909f3efb6fee707a5950be4f374