aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/.settings
Commit message (Collapse)AuthorAgeFilesLines
* Remove unused API warning filtersMatthias Sohn2024-11-271-67/+0
| | | | Change-Id: I4ec17bb532cf1fb2634ef7f5fc93b624bad7f8f0
* Merge branch 'stable-7.0'Matthias Sohn2024-11-211-0/+67
|\ | | | | | | | | | | | | | | | | | | | | | | * stable-7.0: DiffDriver: fix doc for rust built-in DiffDriver: fix formatting of javadoc Add numberOfObjectsSinceBitmap to RepoStatistics Support built-in diff drivers for hunk header function names Don't fail when trying to prune pack which is already gone Rename numberOfPackFilesAfterBitmap to numberOfPackFilesSinceBitmap Change-Id: I98beec1186132e749a749706f399237de7d7e45e
* | Remove unused API problem filtersMatthias Sohn2024-11-191-53/+0
| | | | | | | | Change-Id: I8f5d2f6f1c6244f1b49fee713f7a06c0e9ec549b
* | Configure JDT to not raise error on deprecated class linked in javadocMatthias Sohn2024-11-191-1/+1
| | | | | | | | Change-Id: I4f8cdaa3147c03b455ed0656622c6b69b474577a
* | SystemReader: Offer methods with java.time APIIvan Frade2024-11-081-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Error prone explains: The Date API is full of major design flaws and pitfalls and should be avoided at all costs. Prefer the java.time APIs, specifically, java.time.Instant (for physical time) and java.time.LocalDate[Time] (for civil time). Add to SystemReader methods to get the time and timezone in the new java.time classes (Instant/ZoneId) and mark as deprecated their old counterparts. The mapping of methods is: * #getCurrentTime -> #now (returns Instant instead of int) * #getTimezone -> #getTimeZoneAt (returns ZoneOffset intead of int) * #getTimeZone -> #getTimeZoneId (return ZoneId instead of TimeZone) Change-Id: Ic55b2f442a40046ff0ed24f61f566fc7416471be
* | Merge branch 'stable-7.0' into stable-7.1Matthias Sohn2024-11-051-0/+39
|/ | | | | | | | * stable-7.0: ResolveMerger: Allow setting the TreeWalk AttributesNodeProvider Add Union merge strategy support Change-Id: I15674134f4c73ac2de514d4fac4a36fca7ed7b07
* Remove unused API warning filtersMatthias Sohn2024-08-281-19/+0
| | | | Change-Id: If5cfd8963db0699669be3594e844e14d38f97943
* Merge branch 'stable-6.10'Matthias Sohn2024-08-201-0/+19
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-6.10: Update tycho to 4.0.8 Update org.eclipse.dash:license-tool-plugin to 1.1.0 Fix "Comparison of narrow type with wide type in loop condition" RepoProject: read the 'dest-branch' attribute of a project Make RepoProject#setUpstream public RepoCommand: Add error to ManifestErrorException RepoCommand: Copy manifest upstream into .gitmodules ref field RepoProject: read the "upstream" attribute of a project JGit v5.13.3.202401111512-r Change-Id: If67534f8954703e107e8477456325af3d868612c
| * RepoProject: read the 'dest-branch' attribute of a projectKaushik Lingarkar2024-07-081-0/+19
| | | | | | | | | | | | | | | | | | | | | | The manifest spec [1] defines a "dest-branch" attribute. Parse its value and store it in the RepoProject. Also, create a getter/setter for dest-branch. [1] https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md#Element-project Change-Id: I8ad83b0fec59d2b0967864e4de4fefde4ab971ff (cherry picked from commit 47fd412affd8d7578606ae9b3015a911b71b13ed)
* | Merge branch 'next'Matthias Sohn2024-06-041-3/+3
|\ \ | |/ |/| | | | | | | | | | | | | | | * next: Bump jetty version to 12.0.9 and servlet-api to 6.0 Bump jetty version to 11.0.20 Update minimum Java version to 17 Prepare 7.0.0-SNAPSHOT builds Change-Id: I99c02f19a580101d34a5b4f9ab4daac33c755b89
| * Bump jetty version to 11.0.20David Ostrovsky2024-05-021-8/+0
| | | | | | | | | | | | and switch servlet-api to use jakarta.servlet 5.0. Change-Id: Ia0ae6efc11806389b7303bc985a08f7822c366f6
| * Update minimum Java version to 17Matthias Sohn2024-05-021-3/+3
| | | | | | | | | | Bug: jgit-52 Change-Id: I27e85b3ab4c2e21c86d69d8707eeb9547d788287
* | Remove unused API problem filtersMatthias Sohn2024-05-141-19/+0
|/ | | | Change-Id: I12e4d0fd48b5b7420d421874c8d63caed9628266
* Remove unused API problem filtersMatthias Sohn2024-02-251-30/+0
| | | | Change-Id: I0d81fda5edde5348e765eebc39bd9293fba51e91
* [gpg] Refactor the GpgSignatureVerifierThomas Wolf2024-02-011-0/+8
| | | | | | | | | | | | | | | | Add a new method verify(GpgConfig, byte[], byte[]) and deprecate the existing verify(byte[], byte[]). Some implementations of the interface may need the GpgConfig. Factor out extracting the raw armored signature from commits or tags into an abstract AbstractGpgSignatureVerifier class so that different implementations don't have to re-implement that bit. Call the new verify method, passing along the GpgConfig. This makes the GPG interfaces more versatile and facilitates implementing an alternate GpgSignatureVerifier. Change-Id: I9cf093caa9fdebede801d665f2591cd9b275e1fd
* Silence API warning for new constantMatthias Sohn2024-01-231-19/+1
| | | | | | and remove unused API problem filters. Change-Id: Ia6f4fcc98b786e3e4b65f9e42cc60bbf6ca7c289
* PackWriter/Statistics: Remove the bitmapt hit statsIvan Frade2023-12-131-8/+0
| | | | | | | | | | | | | | The request uses bitmaps for reachability and to decide what to pack. Setting the listener in the PackWriter only covers the second case. Remove the listener from the PackWriter. It makes more sense to set it in the reader and at the moment the BitmapIndex only supports a single listener. This was introduced after the 6.8 tag, so it should be safe to remove. Change-Id: Ib4c0a805c70e54b6a9e7f78ccdb8e0a465d238f1
* API filter for PackStatistics.objectsWithBitmapsFoundThomas Wolf2023-12-051-0/+8
| | | | | | The field was introduced in commit 5e563e1b. Change-Id: Ic2f495e79319ac6044bcabf253b63b8b631eec84
* Silence API error for new method BitmapIndex#addBitmapLookupListenerMatthias Sohn2023-11-291-0/+8
| | | | | | it has an empty default implementation. Change-Id: I56b16c48992652a4ddaaf4c0435e08452c65749e
* Silence API warnings for API added in 5.13.3Matthias Sohn2023-10-171-0/+51
| | | | | | | | | This was added in - f103a1d5c605 "Add support for git config repack.packKeptObjects" - f5f4bf0ad97f "Do not exclude objects in locked packs from bitmap processing" Change-Id: Id6af9fe549535c4e92de9080a41ef9f72a6646dd
* Remove unused API problem filtersMatthias Sohn2023-09-051-33/+0
| | | | Change-Id: If37ac92711cef94a835cfd303997a3d129d212ac
* Merge branch 'stable-6.6' into stable-6.7Matthias Sohn2023-09-031-0/+16
|\ | | | | | | | | | | | | | | | | * stable-6.6: Prepare 6.6.2-SNAPSHOT builds JGit v6.6.1.202309021850-r Checkout: better directory handling Change-Id: Ice82d68b2d343a5fac214807cdb369e486481aab
| * Checkout: better directory handlingThomas Wolf2023-09-031-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When checking out a file into the working tree ensure that all parent directories of the file below the working tree root are actually directories and do exist before we try to create the file. When multiple files are to be checked out (or even a whole tree), this may check the same directories over and over again. Asking the file system every time for file attributes is a potentially expensive operation. As a remedy, introduce an in-memory cache of directory states for a particular check-out operation. Apply the same fix also in the ResolveMerger, which may also check out files, and also in the PatchApplier. In PatchApplier, also validate paths. Change-Id: Ie12864c54c9f901a2ccee7caddec73027f353111 Signed-off-by: Thomas Wolf <twolf@apache.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Remove unused API problem filtersMatthias Sohn2023-07-161-38/+0
| | | | | | | | Change-Id: Iea5fb0bf7b2c6a14d7d8b55558f6e78d3fd523f1
* | Fix all Javadoc warnings and fail on themAntoine Musso2023-06-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes all the javadoc warnings, stops ignoring doclint 'missing' category and fails the build on javadoc warnings for public and protected classes and class members. Since javadoc doesn't allow access specifiers when specifying doclint configuration we cannot set `-Xdoclint:all,-missing/private` hence there is no simple way to skip private elements from doclint. Therefore we check javadoc using the Eclipse Java compiler (which is used by default) and javadoc configuration in `.settings/org.eclipse.jdt.core.prefs` files. This allows more fine grained configuration. We can reconsider this when javadoc starts supporting access specifiers in the doclint configuration. Below are detailled explanations for most modifications. @inheritDoc =========== doclint complains about explicits `{@inheritDoc}` when the parent does not have any documentation. As far as I can tell, javadoc defaults to inherit comments and should only be used when one wants to append extra documentation from the parent. Given the parent has no documentation, remove those usages which doclint complains about. In some case I have moved up the documentation from the concrete class up to the abstract class. Remove `{@inheritDoc}` on overriden methods which don't add additional documentation since javadoc defaults to inherit javadoc of overridden methods. @value to @link =============== In PackConfig, DEFAULT_SEARCH_FOR_REUSE_TIMEOUT and similar are forged from Integer.MAX_VALUE and are thus not considered constants (I guess cause the value would depends on the platform). Replace it with a link to `Integer.MAX_VALUE`. In `StringUtils.toBoolean`, @value was used to refer to the `stringValue` parameter. I have replaced it with `{@code stringValue}`. {@link <url>} to <a> ==================== @link does not support being given an external URL. Replaces them with HTML `<a>`. @since: being invalid ===================== org.eclipse.jgit/src/org/eclipse/jgit/util/Equality.java has an invalid tag `@since: ` due to the extra `:`. Javadoc does not complain about it with version 11.0.18+10 but does with 11.0.19.7. It is invalid regardless. invalid HTML syntax =================== - javadoc doesn't allow <br/>, <p/> and </p> anymore, use <br> and <p> instead - replace <tt>code</tt> by {@code code} - <table> tags don't allow summary attribute, specify caption as <caption>caption</caption> to fix this doclint visibility issue ======================== In the private abstract classes `BaseDirCacheEditor` and `BasePackConnection` links to other methods in the abstract class are inherited in the public subclasses but doclint gets confused and considers them unreachable. The HTML documentation for the sub classes shows the relative links in the sub classes, so it is all correct. It must be a bug somewhere in javadoc. Mute those warnings with: @SuppressWarnings("doclint:missing") Misc ==== Replace `<` and `>` with HTML encoded entities (`&lt; and `&gt;`). In `SshConstants` I went enclosing a serie of -> arrows in @literal. Additional tags =============== Configure maven-javad0c-plugin to allow the following additional tags defined in https://openjdk.org/jeps/8068562: - apiNote - implSpec - implNote Missing javadoc =============== Add missing @params and descriptions Change-Id: I840056389aa59135cfb360da0d5e40463ce35bd0 Also-By: Matthias Sohn <matthias.sohn@sap.com>
* | Mark COMMIT_GENERATION_* constants finalAntoine Musso2023-06-091-0/+14
|/ | | | | | | | | | | | | | | | In org.eclipse.jgit.lib.Constants the constants are all marked final with the exception of: - COMMIT_GENERATION_UNKOWN - COMMIT_GENERATION_NOT_COMPUTED They were introduced by cf70e7cbe4f without the `final` keyword while other constants have it which certainly has been forgotten. The javadoc `{@value}` tag causes raises a warning about the fields not being constants which is how I have discovered the ommission. Change-Id: I0ad87f42355440c7d50158e773a280a0526e9671
* Remove unused API filtersMatthias Sohn2023-05-171-148/+0
| | | | Change-Id: I1971b31753fd4c3568016e7db955cce8e391a1e0
* [releng] API filter for PackIndex.DEFAULT_WRITE_REVERSE_INDEXThomas Wolf2023-05-151-25/+1
| | | | | | | | | | | New static final constant is a (very minor) API break that needs to be suppressed explicitly despite @since 6.6. Remove a number of no longer needed API filters, and fix a broken $NON-NLS-1$. Change-Id: Ie4b0c45e8bd1f3067b6ff81c07d4b21b50bb8685 Signed-off-by: Thomas Wolf <twolf@apache.org>
* Merge branch 'stable-6.4' into stable-6.5Matthias Sohn2023-04-211-0/+28
|\ | | | | | | | | | | | | | | | | | | | | | | * stable-6.4: Add missing since tag for SshBasicTestBase Add missing since tag for SshTestHarness#publicKey2 Silence API errors Prevent infinite loop rescanning the pack list on PackMismatchException Remove blank in maven.config Change-Id: I89af76946014fb44bd64c20e2b01a53397768d90
* | Silence API error raised for removed BranchRebaseMode#PRESERVEMatthias Sohn2023-03-061-0/+8
| | | | | | | | | | | | It was replaced by MERGES to match C git which did that in 2.34. Change-Id: Ib6a33b4a3650345bf0f9d3726dd9e14c5797e836
* | BatchingProgressMonitor: expose time spent per taskMatthias Sohn2023-02-271-0/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Display elapsed time per task if enabled via ProgressMonitor#showDuration or if system property or environment variable GIT_TRACE_PERFORMANCE is set to "true". If both the system property and the environment variable are set the system property takes precedence. E.g. using jgit CLI: $ GIT_TRACE_PERFORMANCE=true jgit clone https://foo.bar/foobar Cloning into 'foobar'... remote: Counting objects: 1 [0.002s] remote: Finding sources: 100% (15531/15531) [0.006s] Receiving objects: 100% (169737/169737) [13.045s] Resolving deltas: 100% (67579/67579) [1.842s] Change-Id: I4d624e7858b286aeddbe7d4e557589986d73659e
* | Silence API error introduced by 596c445aMatthias Sohn2023-02-201-0/+6
| | | | | | | | Change-Id: I961ba2d89c11373ccb81e6450d7d951204ffca36
* | Merge branch 'stable-6.4'Matthias Sohn2023-02-201-0/+12
|\| | | | | | | | | | | | | | | | | | | * stable-6.4: Fix getPackedRefs to not throw NoSuchFileException Add pack options to preserve and prune old pack files Allow to perform PackedBatchRefUpdate without locking loose refs Document option "core.sha1Implementation" introduced in 59029aec Change-Id: I36051c623fcd480aa80ed32b4e89f9bdd1b798e0
* | Merge branch 'stable-6.4'Matthias Sohn2023-02-011-0/+40
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-6.4: Shortcut during git fetch for avoiding looping through all local refs FetchCommand: fix fetchSubmodules to work on a Ref to a blob Silence API warnings introduced by I466dcde6 Allow the exclusions of refs prefixes from bitmap PackWriterBitmapPreparer: do not include annotated tags in bitmap BatchingProgressMonitor: avoid int overflow when computing percentage Speedup GC listing objects referenced from reflogs FileSnapshotTest: Add more MISSING_FILE coverage Change-Id: Id0ebfbd85eb815716383b9495eb7dd1f54cf4d74
* | Merge branch 'stable-6.4'Matthias Sohn2023-01-061-0/+16
|\| | | | | | | | | | | | | | | * stable-6.4: Introduce core.trustPackedRefsStat config Fix documentation for core.trustFolderStat Change-Id: I93ad0c49b70113134026364c9f647de89d948693
* | Pull up additionalRefsNames from RefDirectory to RefDatabaseMatthias Sohn2023-01-041-0/+8
| | | | | | | | | | | | This enables to reuse this constant in all RefDatabase implementations. Change-Id: I13d8fb780de24f71e005b698965fb5bcdbf3c728
* | Fix API warnings for the new CommitGraphThomas Wolf2022-12-171-0/+11
|/ | | | | | | Mark the internal package as internal, visible only to the test bundle. Add an API filter for CoreConfig.DEFAULT_COMMIT_GRAPH_ENABLE. Change-Id: Ib62a93b873c93daf638b6c57e62fd267e16801bb Signed-off-by: Thomas Wolf <twolf@apache.org>
* Merge branch 'stable-6.3'Matthias Sohn2022-11-161-11/+0
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-6.3: [benchmarks] Remove profiler configuration Add SHA1 benchmark [benchmarks] Set version of maven-compiler-plugin to 3.8.1 Fix running JMH benchmarks Add option to allow using JDK's SHA1 implementation Fix API breakage caused by extracting WorkTreeUpdater Extract Exception -> HTTP status code mapping for reuse Don't handle internal git errors as an HTTP error Ignore IllegalStateException if JVM is already shutting down Allow to perform PackedBatchRefUpdate without locking loose refs Change-Id: Ib58879be292c54a2a7f4936ac0986997985c822b
| * Fix API breakage caused by extracting WorkTreeUpdaterMatthias Sohn2022-11-151-50/+0
| | | | | | | | | | | | | | | | | | | | | | 448052dc2e made WorkTreeUpdater package visible which breaks API for subclasses of ResolveMerger since they cannot access WorkTreeUpdater. Fix this by moving WorkTreeUpdater into ResolveMerger as a nested class and mark it protected so that subclasses can use it. Bug: 581049 Change-Id: I5a2c4953f8514dc0a1b8041c8e069d28370bb2eb
* | PushCommand: allow users to disable use of bitmaps for pushkylezhao2022-10-211-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reachability bitmaps are designed to speed up the "counting objects" phase of generating a pack during a clone or fetch. They are not optimized for Git clients sending a small topic branch via "git push". In some cases (see [1]), using reachability bitmaps during "git push" can cause significant performance regressions. Add PushCommand#setUseBitmaps(boolean) to allow users to tell "git push" not to use bitmaps. [1]: https://lore.kernel.org/git/87zhoz8b9o.fsf@evledraar.gmail.com/ Change-Id: I7fb7d26084ec63ddfa7249cf58abb85929b30e56 Signed-off-by: kylezhao <kylezhao@tencent.com>
* | Remove unused API filtersMatthias Sohn2022-09-221-78/+0
|/ | | | Change-Id: Ief32f935c701842f03b173ee48465d7dcf7dfabd
* Remove unused API problem filtersMatthias Sohn2022-08-121-31/+0
| | | | Change-Id: Ib6689f545585bd59b8fc06ca3a104080021424d6
* Fix API errors caused by 23a71696cdMatthias Sohn2022-08-121-4/+34
| | | | | | | | | | | | - add missing @since 6.3 for new protected field workTreeUpdater and new class WorkTreeUpdater - suppress API errors caused by removing/adding protected fields and methods We follow OSGi semantic versioning which allows breaking implementers in minor versions which are e.g. subclassing a public class. Change-Id: I28f0d7b4fdd9a1f0fbc6b137d6c68dda9fe3c11e
* Provide default shallowCommits getter and setter in ObjectDatabaseRonald Bhuleskar2022-08-081-14/+0
| | | | | | | | | | | | | | I649db9ae679ec2606cf7c530b040f8b6b93eb81a added a default implementation for getShallowCommits and setShallowCommits to DfsObjDatabase, for the convenience of any implementers that define subclasses. But we forgot that some implementers inherit from ObjectDatabase directly instead. Move the default getter and setter to the base class so that such callers do not need source changes to unbreak their build. This also lets us update the api_filters to reflect that this is no longer an API-breaking change. Change-Id: I5dcca462eb306e511e57907b7d9264d51b3f3014
* CleanCommand: fix prefix matchingThomas Wolf2022-08-031-0/+7
| | | | | | | | | | String.startsWith() is not a valid test for file path prefixes: directory "a" is _not_ a prefix of a file "ab", only of "a/b". Add a proper Paths.isEqualOrPrefix() method and use it in CleanCommand. Bug: 580478 Change-Id: I6863e6ba94a8ffba6561835cc57044a0945d2770 Signed-off-by: Thomas Wolf <twolf@apache.org>
* Fetch: add support for shallowRobin Müller2022-07-311-9/+7
| | | | | | | | | | This adds support for shallow cloning. The CloneCommand and the FetchCommand now have the new methods setDepth, setShallowSince and addShallowExclude to tell the server that the client doesn't want to download the complete history. Bug: 475615 Change-Id: Ic80fb6efb5474543ae59be590ebe385bec21cc0d
* Suppress API errors raised for new API introduced in 5.13.1Matthias Sohn2022-06-171-14/+24
| | | | Change-Id: I55ec887c3192468d7773e8cf0236c7ed48af3ade
* [checkout] Use .gitattributes from the commit to be checked outThomas Wolf2022-03-071-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JGit used only one set of attributes constructed from the global and info attributes, plus the attributes from working tree, index, and HEAD. These attributes must be used to determine whether the working tree is dirty. But for actually checking out a file, one must use the attributes from global, info, and *the commit to be checked out*. Otherwise one may not pick up definitions that are only in the .gitattributes of the commit to be checked out or that are changed in that commit with respect to the attributes currently in HEAD, the index, or the working tree. Maintain in TreeWalk different Attributes per tree, and add operations to determine EOL handling and smudge filters per tree. Use the new methods in DirCacheCheckout and ResolveMerger. Note that merging in JGit actually used the attributes from the base, not those from ours, which looks dubious at least. It now uses those from ours, and for checking out the ones from theirs. The canBeContentMerged() determination was also done from the base attributes, and is newly done from the ours attributes. Possibly this should take into account all three attributes, and only if all three agree the item can be content merged, a content merge should be attempted? (What if the binary/text setting changes between base, ours, or theirs?) Also note that JGit attempts to perform content merges on non-binary LFS files; there it used the filter attribute from base, too, even for the ours and theirs versions. Newly it takes the filter attribute from the correct tree. I'm not convinced doing content merges on potentially huge files like LFS files is really a good idea. Add tests in FilterCommandsTest and LfsGitTest to verify the behavior. Open question: using index and working tree as fallback for the attributes of ours (assuming it is HEAD) is OK. But does it also make sense for base and theirs in merging? Bug: 578707 Change-Id: I0bf433e9e3eb28479b6272e17c0666e175e67d08 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Describe: add support for core.abbrev config optionMatthias Sohn2022-03-021-0/+16
| | | | | | | | | | | | | | | | | | | | | If core.abbrev is unset or "auto" estimate abbreviation length like C git does: - Estimate repository's object count by only considering packed objects, round up to next power of 2 - With the order of 2^len objects, we expect a collision at 2^(len/2). But we also care about hex chars, not bits, and there are 4 bits per hex. So all together we need to divide by 2; but we also want to round odd numbers up, hence adding one before dividing. - For small repos use at least 7 hexdigits - If object database fails to determine object count use 7 hexdigits as fallback If it is set to "no" do not abbreviate object-ids. Otherwise set it to the configured value capped to the range between 4 and length of an unabbreviated object-id. Change-Id: I425f9724b69813dbb57872466bf2d2e1d6dc72c6
* Add a typed config getter for integers confined to a rangeMatthias Sohn2022-03-021-0/+14
| | | | | | Use Integer#MIN_VALUE to denote unset option. Change-Id: I4d65f2434013111f25520c0ed2b9a9dc8123c6cf