summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools
Commit message (Collapse)AuthorAgeFilesLines
* Rename QLibraryInfo::location() to path()Lars Knoll2020-09-126-7/+7
| | | | | | | | As per ### Qt6 comment. Also rename the LibraryLocation enum to LibraryPath. Change-Id: I556025a19c5bcdf2ff52598eaba32269522d4128 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove most compiler warnings about missing overridesLars Knoll2020-09-112-6/+6
| | | | | | | | | | | | Remove around 1000 compiler warnings about missing overrides in our auto tests. This significantly reduce the compiler warning noise in our auto tests, so that one can actually better see the real problems inbetween. Change-Id: Id0c04dba43fcaf55d8cd2b5c6697358857c31bf9 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* tst_qdbuscpp2xml: stop doing math on enumerationsGiuseppe D'Angelo2020-09-051-1/+1
| | | | | | | Cast it to int to do math. Change-Id: Ia553cccb7e160df50e77fba63d66d0ed45c246c2 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Ignore weight in .ui files instead of converting itEskil Abrahamsen Blomfeldt2020-09-031-1/+0
| | | | | | | | | | | | | | | | | | | | | | | In 3558704ed5c3d2c6dc6d024dfa454997469ca75f, we added code to support old .ui files which used the old integer scale for font weights by checking for a special attribute which would help separate new and old files. Since then, it has become apparent that the weight element in .ui is not actually used for anything, since it is only emitted when the bold flag is set and always has to match QFont::Bold in these cases. So instead of converting, we simply ignore it now, and respect the bold flag instead. This also reverts the changes to ui4.* in uic, since the scale attribute is no longer needed. Task-number: QTBUG-42248 Change-Id: I1898868b58004099590f4eaf01f24c57bd34d779 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Make bindings introspectable through mocLars Knoll2020-09-022-141/+101
| | | | | | | | | | | | | | | Add a new BINDABLE declaration to the Q_PROPERTY() macro that tells moc where to find the QBindable for the property. Add a QUntypedBindable base class to QBindable<T> that gives access to generic functionality and checks argument compatibility at runtime. QBindable<T> will still do static checking at compile time. Add QMetaProperty::isBindable() and QMetaProperty::bindable() to be able to dynamically access the binding functionality. Change-Id: Ic7b08ae2cde83fd43e627d813a886e1de01fa3dc Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Remove QNotifiedProperty and Q_PRIVATE_QPROPERTYLars Knoll2020-09-021-100/+96
| | | | | | | | | | | | | And all related functionality. This is being replaced by Q_BINDABLE_PROPERTY and Q_OBJECT_BINDABLE_PROPERTY in the next few commits. The new infrastructure coming will play nicer along with the existing property system. Commented out some autotests, that will get reimplemented with the updated infrastructure. Change-Id: I50c30bd4d5c6c6b6471f8eb93870e27d86f5a009 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Use OpenType font weightsJonas Karlsson2020-08-281-1/+1
| | | | | | | Task-number: QTBUG-42248 Change-Id: Icdb301b27d6699c2b842c4563fbef9df73c23cbc Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Fix warnings in tst_mocTor Arne Vestbø2020-08-235-5/+34
| | | | | Change-Id: I4cbc851e59febdc533c02fb4b95d2924348086b4 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Move QStringRef and remains to Qt5CompatKarsten Heimrich2020-08-202-3/+4
| | | | | | | | | Export some private functions from QUtf8 to resolve undefined symbols in Qt5Compat after moving QStringRef. Task-number: QTBUG-84437 Change-Id: I9046dcb14ed520d8868a511d79da6e721e26f72b Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* cmake support for tst_mocFabian Kosmale2020-08-103-6/+155
| | | | | | | | | | | | | We use qt_wrap_cpp instead of AUTOMOC so that we can easily find the json files. Getting autorcc to run only after json file has been generated was deemed too tricky. Therefore the test is slightly modified to check for the json files in its directory instead of the resource, if the qrc file does not exist. Change-Id: Id1aabb117c8bab3ff81156da1f66d64e796bf18b Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* moc: allow wrapper generation for QProperty in pimpl classFabian Kosmale2020-07-141-0/+7
| | | | | | | | | | | Previously, only QNotifiedProperty was supported. As moc cannot determine by itself whether the backing property is a QProperty or a QNotifiedProperty, allow NOTIFY false to indicate that it is a plain QProperty. For symmetry, NOTIFY true is also allowed and means that the backing property is a QNotifiedProperty. Change-Id: I66f3105c976ef084198ce8658bc07499a3cb1cd8 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* moc: For non-STORED QProperties, expect a pointerUlf Hermann2020-07-091-8/+8
| | | | | | | | | | | This way we can return a nullptr for cases where the class does not want to provide a property at all. For example outside of bindings when reading the default value. The moc-generated code can check for such nullptrs and handle them. Change-Id: I7ff478cb254012147bb7aed3feb160e3e679cb6d Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* CMake: Regenerate subdir test projectsAlexandru Croitor2020-07-092-1/+14
| | | | | | | | And generate a few more test projects that were missing. Change-Id: I5df51106549aa5ae09bc3c42360e14b143719547 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* CMake: Regenerate tests with new qt_ prefixed APIsAlexandru Croitor2020-07-095-7/+7
| | | | | | | | Use pro2cmake with '--api-version 2' to force regenerate projects to use the new prefixed qt_foo APIs. Change-Id: I055c4837860319e93aaa6b09d646dda4fc2a4069 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* moc: Allow out-of-line storage for Q_PRIVATE_QPROPERTYUlf Hermann2020-07-081-0/+38
| | | | | | | | | | If you pass "STORED false" the name is interpreted as function to be invoked in order to access the property. This allows storage of a property in a lazily allocated data type. Change-Id: I4d3a9cac6985c6419ce687868cb74b91921595a6 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Don't set the environment variable QT_RCC_TEST anymore in tst_rccJoerg Bornemann2020-07-081-3/+0
| | | | | | | | The reason for setting this variable was removed in commit 300bd7fff8b. Task-number: QTBUG-25078 Change-Id: Id06072c099481a258cb65b4603efe010e306b7b2 Reviewed-by: hjk <hjk@qt.io>
* Add ; to Q_UNUSEDLars Schmertmann2020-07-071-1/+1
| | | | | | | | This is required to remove the ; from the macro with Qt 6. Task-number: QTBUG-82978 Change-Id: I3f0b6717956ca8fa486bed9817b89dfa19f5e0e1 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Use QList instead of QVector in other qtbase testsJarek Kobus2020-07-071-2/+2
| | | | | | Task-number: QTBUG-84469 Change-Id: Ie0455c890c048c52eacad1badd6d21df999badf9 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Get rid of shared null for QByteArray, QString and QVectorLars Knoll2020-07-061-1/+1
| | | | | | | | | | | | | | As a side effect, data() can now return a nullptr. This has the potential to cause crashes in existig code. To work around this, return an empty string from QString::data() and QByteArray::data() for now. For Qt 6 (and once all our internal issues are fixed), data() will by default return a nullptr for a null QString, but we'll offer a #define to enable backwards compatible behavior. Change-Id: I4f66d97ff1dce3eb99a239f1eab9106fa9b1741a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove unnecessary ; after function implementationsLars Schmertmann2020-07-062-4/+4
| | | | | | Task-number: QTBUG-82978 Change-Id: Iea3bcaec1ef9f4bd0f73e5dccca33354650f5bf4 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Avoid use of Q_UNUSED by eliminating the parameter namesLars Schmertmann2020-07-031-8/+6
| | | | | | | | | This change only happens to files touched by the commit to add missing ; to Q_UNUSED. Task-number: QTBUG-82978 Change-Id: I10e6993a2bb3952cf9a262708b8573550e0dbe63 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* CMake: Skip / ignore failing tests on CMake platformsAlexandru Croitor2020-07-012-0/+4
| | | | | | | | | | | | | Skip crashing tests and ignore failing tests on CMake platforms. Add missing QTEST_ENVIRONMENT=ci env var assignment to Coin test instructions. This was hardcoded by the Coin code for qmake configurations. Task-number: QTBUG-85364 Change-Id: Id2312e504a0d36b8f8596d4cebaa49c63731406e Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* CMake: Fix tst_qmake not to hang and re-enable itAlexandru Croitor2020-06-261-5/+1
| | | | | | | | | | | | | We don't really know why, but using the ctest --force-new-ctest-process flag stops the test from hanging. Also re-enable the test. Task-number: QTBUG-78449 Task-number: QTBUG-81365 Change-Id: I33094696dfe3f610dc257089074b1c2a9926f651 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Cristian Adam <cristian.adam@qt.io>
* Remove superfluous define from tst_qmakeJoerg Bornemann2020-06-263-23/+0
| | | | | | | The QMAKE_CROSS_COMPILED define isn't used since 2011. Change-Id: I9f03791e9f7c0ef439db5e65d930c0b7cb928974 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* CMake: Fix tst_qmake::resources() on WindowsJoerg Bornemann2020-06-264-30/+4
| | | | | | | | | | | | | | | | | | | | | | | | This test calls qmake on a project that generates a .qrc file. On Windows, where debug_and_release is on by default, the generated qrc file ends up in a "debug" or "release" subdirectory. On other platforms the file is generated directly in the build dir. To guess the right location, the preprocessor defines RELEASE_BUILD and DEBUG_BUILD were passed to tst_qmake.cpp by the test's .pro file. While the mapping from debug_and_release was fine for the .pro file, it was commented out in the automatically converted CMakeLists.txt. Instead of trying to fix the condition, we're going the easier route that's used in all other .pro files of tst_qmake: make sure that debug_and_release doesn't get in the way. In other tests this is done by setting DESTDIR = ./ which doesn't work for the generated qrc file. That's why we simply do CONFIG -= debug_and_release to make sure that everything is generated directly in the build dir. Change-Id: I557ac4e21d7b385004d369fae8a3f727d76d4d88 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Remove QByteArray's methods taking QString and their usesSona Kurazyan2020-06-251-1/+1
| | | | | | | | | | [ChangeLog][QtCore][QByteArray] Remove method overloads taking QString as argument, all of which were equivalent to passing the toUtf8() of the string instead. Change-Id: I9251733a9b3711153b2faddbbc907672a7cba190 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Use QList instead of QVector in uic testsJarek Kobus2020-06-231-2/+2
| | | | | | Task-number: QTBUG-84469 Change-Id: I2d3a8e7eb7094844544e841145fa5d2de8c66adb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Use QList instead of QVector in moc testsJarek Kobus2020-06-221-90/+58
| | | | | | Task-number: QTBUG-84469 Change-Id: I6a775b32a82658485216a4827a43503b395161c6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Move implementation of QVector/List back to qlist.hLars Knoll2020-06-202-25/+9
| | | | | | | | | | | | | And name the main class QList. That's also the one we document. This gives less porting pain for our users, and a lot less churn in our API, as we use QList in Qt 5 in 95% of our API. In addition, it gives more consistent naming with QStringList and QByteArrayList and disambiguates QList vs QVector(2|3|4)D. Fixes: QTBUG-84468 Change-Id: I3cba9d1d3179969d8bf9320b31be2230d021d1a9 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Add support for QNotifiedProperty to the mocSimon Hausmann2020-06-181-10/+10
| | | | | | | | | | | Change the meaning of Q_PRIVATE_QPROPERTY to imply that the property is implemented using a QNotifiedProperty. That requires passing the owner object instance to the value and binding setters. Similarly, detect QNotifiedProperty members like QProperty. Change-Id: If49bbb04c8ccd4a661973888c50d2d556c25034f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Cleanups in QMetaPropertyFabian Kosmale2020-06-111-38/+38
| | | | | | | | | This changes the layout of the meta object data, so also bump the meta object revision. Original-patch-by: Lars Knoll <lars.knoll@qt.io> Change-Id: I176fb16c207e8ebe59e358e69554be813406232f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Qt6: remove support for property flags being functionsLars Knoll2020-06-111-7/+0
| | | | | | | | | | | | | | | Property flags should be compile time booleans, not something to be determined at runtime. We've been using this to dynamically disable some properties in QWidget based classes dependent on the state of a different property, but this should better get implemented on top of our widgets. Change-Id: I6296e8761303ecdf24d9e842142e8596304c015d Reviewed-by: Simon Hausmann <hausmann@gmail.com> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* metatype: Do not try analyze T in Q*Pointer<T> if T is incompleteFabian Kosmale2020-06-094-0/+67
| | | | | Change-Id: I41737ce470f6d2b071ad5e85f8cad1da3869241c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Port qmake from QStringRef to QStringViewLars Knoll2020-06-052-5/+2
| | | | | | Change-Id: Ie07a976cd3c634e04c8b9b1e0a6cacd4c2d94939 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* MetaObject: Store the QMetaType of the methodsFabian Kosmale2020-06-025-9/+23
| | | | | | | | | | | | | | | | | | | | | | | | This does the analog of 46f407126ef3e94d59254012cdc34d6a4ad2faf2 for the methods we care about (signals, slots, Q_INVOKABLEs). In addition to the actual QMetaType, we store an array with offsets so that we later can do a mapping from methodIndex to metatype. The newly added QMetaMethod::{return,parameter}MetaType methods can then be used to retrieve the metatypes. This does however require that all involved types are complete. This is unfortunately not a feasible requirement. Thus, we only populate the metatype array on a best effort basis. For any incomplete type, we store QMetaType::Unknown. Then, when accessing the metatype, we fall back to the old string based code base if it's Unknown. Squashes "moc: support incomplete types" and "Fix compile failures after QMetaMethod change" Fixes: QTBUG-82932 Change-Id: I6b7a587cc364b7cad0c158d6de54e8a204289ad4 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* moc: handle include directives in enumsFabian Kosmale2020-05-274-0/+59
| | | | | | | | | | | | When including files, moc inserts a MOC_INCLUDE_BEGIN and MOC_INCLUDE_END token into the token stream. Those are already handled in the toplevel Moc::parse function, but parseEnum lacked support so far. Pick-to: 5.15 Fixes: QTBUG-80578 Change-Id: I35c8fd959347d94af20090b3a505dd9e6bfaff88 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* uic/Python: import all the classes for QtCore and QtGuiCristian Maureira-Fredes2020-05-051-5/+2
| | | | | | | | | | | We already had this approach for QtWidgets, so to avoid adding the specific cases every time, we import all the classes from QtCore and QtGui. Change-Id: I38dd2eec3bbdfb83f156a48f35a2f4fda44528c7 Pick-to: 5.15 Fixes: PYSIDE-1287 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Build qmake with QT_USE_STRINGBUILDERLars Knoll2020-05-052-1/+2
| | | | | | | | Should improve performance and is going to be required in the future anyway. Change-Id: I89d7c50441d2491da1ab0a4d564dcc91f52ade85 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* uic: Generate string-based connections for custom slotsFriedemann Kleint2020-05-052-0/+415
| | | | | | | | | | | Qt Designer let's you add custom slots and signals to the main form; they should use string-based connection syntax since the class is not known in setupUI(). Amends da3cb1deb6c752f8e4c05434e3451432e5d787ba. Task-number: QTBUG-76375 Change-Id: I5a3a5630f77c812d48db1cdb7a8658a4d2718228 Reviewed-by: Liang Qi <liang.qi@qt.io>
* uic: Generate Qt 5 connection syntaxFriedemann Kleint2020-05-0456-92/+131
| | | | | | | | | | | | | | | Add a enum and formatting for member function pointer based connections. Now preferably use member function pointer for Qt classes or parameterless connections. This should not require qOverload() within Qt classes after the Signal/Slot disambiguation. Add command line option to force either syntax for all connections. Task-number: QTBUG-76375 Change-Id: Icdb4051e1173172a71cd536bdbc7d1ab1edf267d Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Provide a way of exposing private QProperties with a fake APISimon Hausmann2020-04-301-0/+60
| | | | | | | | | | | | The API reduces the amount of manual plumbing required to offer a conceptual property through the traditional setter/getter API as well as through QProperty<T> API. Since the latter would require inlining the type and thus making it impossible to add new properties without breaking binary compatibility, this patch introduces a fake API that behaves similar but does not contain the property by value. Change-Id: Ib9bccd867f0e4e36a520e5583ba348e728284253 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Allow for private properties to be implemented using QPropertySimon Hausmann2020-04-301-0/+5
| | | | | | | | | | | | | | | | | | | | | | Recently the moc learned that Q_PROPERTY(int x ...) can mean that "x" is implemented as QProperty and then allows installing bindings, etc. - this works by scanning the same class' members. For our own use of QProperty, we need to place the QProperty member itself into the d-pointer to be able to maintain the ability to add new properties without breaking binary compatibility. That however means that moc can't know that a certain property is backed by QProperty - we don't scan the members of the private class. As a workaround, this change enables the syntax where the property type used in Q_PRIVATE_PROPERTY may be wrapped with QProperty<T>. In addition this patch fixes the compilation of such declared properties by ensuring the accessor prefix (t->$accessor) is applied also for the QProperty related meta call variants. Change-Id: I8fbdc49319048b57f4eb0b65b56daba0459e9598 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* uic tests: Update version in baselineFriedemann Kleint2020-04-29104-104/+104
| | | | | Change-Id: I74334587727097a59fdeccd2fc58d18096cfed0a Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
* Fix autotests after the QHash changesLars Knoll2020-04-099-52/+400
| | | | | | | | | | | | | Some test cases are sensitive to the exact ordering inside QHash, and need adjustments when we change QHash or the hashing functions. Some rcc tests now also need 32bit specific data, as the hashing functions for 32 and 64 bit are different now (as we use size_t). Change-Id: Ieab01cd55b1288336493b13c41d27e42a008bdd9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Allow declaring QProperty<> based Q_PROPERTYies with a notify signalSimon Hausmann2020-04-081-3/+9
| | | | | | | | | | | | | | | | | This requires mostly making moc a bit more permissive, which has the advantage that it also simplifies the code a little bit. The newly added test case demonstrates how to connect such a property with a change signal. One test case needed to be changed regarding the callback as the publicProperty member now has a (permanent) observer and therefore re-assigning the binding will re-evaluate it as the value might have changed. Change-Id: Ia7edcec432de830bdd4e07d943c5d4550c175ca4 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* Port test to QRegularExpressionLars Knoll2020-03-311-2/+2
| | | | | Change-Id: I4026fa2fa5da34974cdc37353e7ea5a8e8806033 Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
* Remove QGuiAction again and split QAction implementation up insteadVolker Hilsheimer2020-03-298-8/+8
| | | | | | | | | | | | | | | | | | | | | | Duplicating the number of classes is a high price to pay to be able to have some QAction functionality behave differently, or be only available in widgets applications. Instead, declare the entire API in QtGui in QAction* classes, and delegate the implementation of QtWidgets specific functionality to the private. The creation of the private is then delegated to the Q(Gui)ApplicationPrivate instance through a virtual factory function. Change some public APIs that are primarily useful for specialized tools such as Designer to operate on QObject* rather than QWidget*. APIs that depend on QtWidgets types have been turned into inline template functions, so that they are instantiated only at the caller side, where we can expect the respective types to be fully defined. This way, we only need to forward declare a few classes in the header, and don't need to generate any additional code for e.g. language bindings. Change-Id: Id0b27f9187652ec531a2e8b1b9837e82dc81625c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Get rid of QRegExp usage in rccLars Knoll2020-03-252-1/+67
| | | | | | | | As a drive-by, enable testing of rcc in the cmake build. Change-Id: I4150ff3ffe7404bab0cbc72f80b23b47a60cf33d Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
* Add support for exposing public QProperty members in the meta-object systemSimon Hausmann2020-03-182-3/+120
| | | | | | | | | | At the moment this makes the type as well as the setter/getter available through the meta-call as well as the ability to register observers and bindings. Only QProperty members that are annotated with Q_PROPERTY(type name) are made public through the meta-object. Change-Id: I16b98fd318122c722b85ce61e39975284e0c2404 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Merge remote-tracking branch 'origin/5.15' into devQt Forward Merge Bot2020-03-033-8/+8
|\ | | | | | | Change-Id: If36d96c0fef3de5ab6503977501c55c62a2ecc97