Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Backport release-3_40] Misc coverity fixes #59930

Merged
merged 11 commits into from
Dec 17, 2024
2 changes: 1 addition & 1 deletion src/3d/mesh/qgsmesh3dgeometry_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ class QgsMesh3DGeometry : public Qt3DCore::QGeometry
Qt3DCore::QAttribute *mIndexAttribute = nullptr;
#endif

QgsMesh3DGeometryBuilder *mBuilder;
QgsMesh3DGeometryBuilder *mBuilder = nullptr;

protected slots:
virtual void getData();
Expand Down
4 changes: 2 additions & 2 deletions src/app/3d/qgs3danimationwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ class Qgs3DAnimationWidget : public QWidget, private Ui::Animation3DWidget

private:
std::unique_ptr<Qgs3DAnimationSettings> mAnimationSettings;
QgsCameraController *mCameraController;
Qgs3DMapSettings *mMap;
QgsCameraController *mCameraController = nullptr;
Qgs3DMapSettings *mMap = nullptr;
QTimer *mAnimationTimer = nullptr;
};

Expand Down
8 changes: 4 additions & 4 deletions src/app/mesh/qgsmaptooleditmeshframe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2754,12 +2754,12 @@ void QgsMapToolEditMeshFrame::selectByExpression( const QString &textExpression,
return;
QgsExpression expression( textExpression );

std::unique_ptr<QgsDistanceArea> distArea = std::make_unique<QgsDistanceArea>();
distArea->setSourceCrs( mCurrentLayer->crs(), QgsProject::instance()->transformContext() );
distArea->setEllipsoid( QgsProject::instance()->ellipsoid() );
QgsDistanceArea distArea;
distArea.setSourceCrs( mCurrentLayer->crs(), QgsProject::instance()->transformContext() );
distArea.setEllipsoid( QgsProject::instance()->ellipsoid() );
expression.setAreaUnits( QgsProject::instance()->areaUnits() );
expression.setDistanceUnits( QgsProject::instance()->distanceUnits() );
expression.setGeomCalculator( distArea.release() );
expression.setGeomCalculator( &distArea );

switch ( elementType )
{
Expand Down
2 changes: 1 addition & 1 deletion src/app/mesh/qgsmeshtransformcoordinatesdockwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class APP_EXPORT QgsMeshTransformCoordinatesDockWidget : public QgsDockWidget, p

private:
QgsMeshTransformVerticesByExpression mTransformVertices;
QgsMeshLayer *mInputLayer;
QgsMeshLayer *mInputLayer = nullptr;
QList<int> mInputVertices;
bool mIsCalculated = false;
bool mIsResultValid = false;
Expand Down
8 changes: 4 additions & 4 deletions src/app/pluginmanager/qgspluginmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1650,10 +1650,10 @@ void QgsPluginManager::ckbDeprecated_toggled( bool state )
// PRIVATE METHODS ///////////////////////////////////////////////////////////////////


bool QgsPluginManager::isPluginEnabled( QString key )
bool QgsPluginManager::isPluginEnabled( const QString &key )
{
const QMap<QString, QString> *plugin = pluginMetadata( key );
if ( plugin->isEmpty() )
if ( !plugin || plugin->isEmpty() )
{
// No such plugin in the metadata registry
return false;
Expand All @@ -1663,8 +1663,8 @@ bool QgsPluginManager::isPluginEnabled( QString key )
if ( plugin->value( QStringLiteral( "pythonic" ) ) != QLatin1String( "true" ) )
{
// Trim "cpp:" prefix from cpp plugin id
key = key.mid( 4 );
return ( mySettings.value( "/Plugins/" + key, QVariant( false ) ).toBool() );
const QString trimmedKey = key.mid( 4 );
return ( mySettings.value( "/Plugins/" + trimmedKey, QVariant( false ) ).toBool() );
}
else
{
Expand Down
2 changes: 1 addition & 1 deletion src/app/pluginmanager/qgspluginmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ class QgsPluginManager : public QgsOptionsDialogBase, private Ui::QgsPluginManag
void initTabDescriptions();

//! Returns true if given plugin is enabled in QgsSettings
bool isPluginEnabled( QString key );
bool isPluginEnabled( const QString &key );

//! Returns true if there are plugins available for download in the metadata registry
bool hasAvailablePlugins();
Expand Down
6 changes: 4 additions & 2 deletions src/core/classification/qgsclassificationmethodregistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@ bool QgsClassificationMethodRegistry::addMethod( QgsClassificationMethod *method

QgsClassificationMethod *QgsClassificationMethodRegistry::method( const QString &id )
{
QgsClassificationMethod *method = mMethods.value( id, new QgsClassificationCustom() );
return method->clone();
auto it = mMethods.constFind( id );
if ( it == mMethods.constEnd() )
return new QgsClassificationCustom();
return it.value()->clone();
}

QMap<QString, QString> QgsClassificationMethodRegistry::methodNames() const
Expand Down
1 change: 0 additions & 1 deletion src/core/layertree/qgslayertreemodellegendnode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -835,7 +835,6 @@ QJsonObject QgsSymbolLegendNode::exportSymbolToJson( const QgsLegendSettings &se
{
json[ QStringLiteral( "scaleMinDenom" ) ] = mItem.scaleMinDenom();
}
mItem.scaleMaxDenom();

const QgsSymbol *s = mCustomSymbol ? mCustomSymbol.get() : mItem.symbol();
if ( !s )
Expand Down
6 changes: 5 additions & 1 deletion src/core/pointcloud/qgspointcloudlayerexporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ QString QgsPointCloudLayerExporter::getOgrDriverName( ExportFormat format )

QgsPointCloudLayerExporter::QgsPointCloudLayerExporter( QgsPointCloudLayer *layer )
: mLayerAttributeCollection( layer->attributes() )
, mIndex( layer->dataProvider()->index()->clone().release() )
, mIndex( layer->dataProvider()->index()->clone() )
, mSourceCrs( QgsCoordinateReferenceSystem( layer->crs() ) )
, mTargetCrs( QgsCoordinateReferenceSystem( layer->crs() ) )
{
Expand Down Expand Up @@ -195,8 +195,12 @@ void QgsPointCloudLayerExporter::prepareExport()

if ( mFormat == ExportFormat::Memory )
{
#ifdef QGISDEBUG
if ( QApplication::instance()->thread() != QThread::currentThread() )
{
QgsDebugMsgLevel( QStringLiteral( "prepareExport() should better be called from the main thread!" ), 2 );
}
#endif

mMemoryLayer = QgsMemoryProviderUtils::createMemoryLayer( mName, outputFields(), Qgis::WkbType::PointZ, mTargetCrs );
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/pointcloud/qgspointcloudlayerexporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ class CORE_EXPORT QgsPointCloudLayerExporter SIP_NODEFAULTCTORS

const QgsPointCloudAttributeCollection mLayerAttributeCollection;

QgsPointCloudIndex *mIndex = nullptr;
std::unique_ptr< QgsPointCloudIndex > mIndex;
QString mName = QObject::tr( "Exported" );
ExportFormat mFormat = ExportFormat::Memory;
QString mFilename;
Expand Down
4 changes: 4 additions & 0 deletions src/core/proj/qgscoordinatereferencesystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1724,9 +1724,13 @@ bool QgsCoordinateReferenceSystem::setWktString( const QString &wkt )
QgsDebugMsgLevel( QStringLiteral( "This CRS could *** NOT *** be set from the supplied Wkt " ), 2 );
QgsDebugMsgLevel( "INPUT: " + wkt, 2 );
for ( auto iter = warnings; iter && *iter; ++iter )
{
QgsDebugMsgLevel( *iter, 2 );
}
for ( auto iter = grammarErrors; iter && *iter; ++iter )
{
QgsDebugMsgLevel( *iter, 2 );
}
QgsDebugMsgLevel( QStringLiteral( "---------------------------------------------------------------\n" ), 2 );
}
proj_string_list_destroy( warnings );
Expand Down
2 changes: 2 additions & 0 deletions src/core/proj/qgscoordinatetransform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -782,7 +782,9 @@ void QgsCoordinateTransform::transformCoords( int numPoints, double *x, double *

#ifdef QGISDEBUG
if ( !mHasContext )
{
QgsDebugMsgLevel( QStringLiteral( "No QgsCoordinateTransformContext context set for transform" ), 4 );
}
#endif

// use proj4 to do the transform
Expand Down
2 changes: 2 additions & 0 deletions src/core/providers/ogr/qgsogrprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,8 @@ QString QgsOgrProvider::subsetStringHelpUrl() const
uint QgsOgrProvider::subLayerCount() const
{
uint count = layerCount();
if ( count == 0 )
return 0;

QString errCause;
QgsOgrLayerUniquePtr layerStyles = QgsOgrProviderUtils::getLayer( mFilePath, QStringLiteral( "layer_styles" ), errCause );
Expand Down
4 changes: 4 additions & 0 deletions src/core/vector/qgsvectorlayerprofilegenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1443,8 +1443,12 @@ bool QgsVectorLayerProfileGenerator::generateProfileForPolygons()
intersection.reset( mProfileBufferedCurveEngine->intersection( shiftedPoly.get(), &error ) );
if ( intersection.get() )
processTriangleLineIntersect( clampedPolygon.get(), intersection.get(), transformedParts, crossSectionParts );
#ifdef QGISDEBUG
else
{
QgsDebugMsgLevel( QStringLiteral( "processPolygon after shift bad geom! error: %1" ).arg( error ), 0 );
}
#endif
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/gui/attributetable/qgsattributetablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,15 @@ bool QgsAttributeTableModel::removeRows( int row, int count, const QModelIndex &
QgsDebugMsgLevel( QStringLiteral( "after removal rows %1, ids %2" ).arg( mRowIdMap.size() ).arg( mIdRowMap.size() ), 4 );
QgsDebugMsgLevel( QStringLiteral( "id->row" ), 4 );
for ( QHash<QgsFeatureId, int>::const_iterator it = mIdRowMap.constBegin(); it != mIdRowMap.constEnd(); ++it )
{
QgsDebugMsgLevel( QStringLiteral( "%1->%2" ).arg( FID_TO_STRING( it.key() ) ).arg( *it ), 4 );
}

QgsDebugMsgLevel( QStringLiteral( "row->id" ), 4 );
for ( QHash<int, QgsFeatureId>::const_iterator it = mRowIdMap.constBegin(); it != mRowIdMap.constEnd(); ++it )
{
QgsDebugMsgLevel( QStringLiteral( "%1->%2" ).arg( it.key() ).arg( FID_TO_STRING( *it ) ), 4 );
}
}
#endif

Expand Down
28 changes: 14 additions & 14 deletions src/gui/attributetable/qgsdualview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ QgsDualView::QgsDualView( QWidget *parent )
connect( mFirstFeatureButton, &QToolButton::clicked, mFeatureListView, &QgsFeatureListView::editFirstFeature );
connect( mLastFeatureButton, &QToolButton::clicked, mFeatureListView, &QgsFeatureListView::editLastFeature );

auto createShortcuts = [=]( const QString &objectName, void ( QgsFeatureListView::*slot )() ) {
auto createShortcuts = [this]( const QString &objectName, void ( QgsFeatureListView::*slot )() ) {
QShortcut *sc = QgsGui::shortcutsManager()->shortcutByName( objectName );
// do not assert for sc as it would lead to crashes in testing
// or when using custom widgets lib if built with Debug
Expand Down Expand Up @@ -129,7 +129,7 @@ void QgsDualView::init( QgsVectorLayer *layer, QgsMapCanvas *mapCanvas, const Qg
mLayer = layer;

// Keep fields order in sync: force config reset
connect( mLayer, &QgsVectorLayer::updatedFields, this, [=] {
connect( mLayer, &QgsVectorLayer::updatedFields, this, [this] {
mFilterModel->setAttributeTableConfig( attributeTableConfig(), /* force */ true );
} );

Expand All @@ -154,7 +154,7 @@ void QgsDualView::init( QgsVectorLayer *layer, QgsMapCanvas *mapCanvas, const Qg
mFeatureListView->setModel( mFeatureListModel );

connect( mFilterModel, &QgsAttributeTableFilterModel::sortColumnChanged, this, &QgsDualView::onSortColumnChanged );
connect( mLayer, &QgsVectorLayer::afterCommitChanges, this, [=] { mFeatureListView->setCurrentFeatureEdited( false ); } );
connect( mLayer, &QgsVectorLayer::afterCommitChanges, this, [this] { mFeatureListView->setCurrentFeatureEdited( false ); } );

if ( mFeatureListPreviewButton->defaultAction() )
mFeatureListView->setDisplayExpression( mDisplayExpression );
Expand Down Expand Up @@ -194,13 +194,13 @@ void QgsDualView::initAttributeForm( const QgsFeature &feature )
connect( mAttributeForm, &QgsAttributeForm::widgetValueChanged, this, &QgsDualView::featureFormAttributeChanged );
connect( mAttributeForm, &QgsAttributeForm::modeChanged, this, &QgsDualView::formModeChanged );
connect( mAttributeForm, &QgsAttributeForm::filterExpressionSet, this, &QgsDualView::filterExpressionSet );
connect( mAttributeForm, &QgsAttributeForm::flashFeatures, this, [=]( const QString &filter ) {
connect( mAttributeForm, &QgsAttributeForm::flashFeatures, this, [this]( const QString &filter ) {
if ( QgsMapCanvas *canvas = mFilterModel->mapCanvas() )
{
QgsMapCanvasUtils::flashMatchingFeatures( canvas, mLayer, filter );
}
} );
connect( mAttributeForm, &QgsAttributeForm::zoomToFeatures, this, [=]( const QString &filter ) {
connect( mAttributeForm, &QgsAttributeForm::zoomToFeatures, this, [this]( const QString &filter ) {
if ( QgsMapCanvas *canvas = mFilterModel->mapCanvas() )
{
QgsMapCanvasUtils::zoomToMatchingFeatures( canvas, mLayer, filter );
Expand Down Expand Up @@ -235,7 +235,7 @@ void QgsDualView::columnBoxInit()

// Generate action for the preview popup button of the feature list
QAction *previewAction = new QAction( icon, text, mFeatureListPreviewButton );
connect( previewAction, &QAction::triggered, this, [=] { previewColumnChanged( previewAction, fieldName ); } );
connect( previewAction, &QAction::triggered, this, [this, previewAction, fieldName] { previewColumnChanged( previewAction, fieldName ); } );
mPreviewColumnsMenu->addAction( previewAction );

if ( text == defaultField )
Expand All @@ -250,17 +250,17 @@ void QgsDualView::columnBoxInit()
sortMenuAction->setMenu( sortMenu );

QAction *sortByPreviewExpressionAsc = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "sort.svg" ) ), tr( "By Preview Expression (ascending)" ), this );
connect( sortByPreviewExpressionAsc, &QAction::triggered, this, [=]() {
connect( sortByPreviewExpressionAsc, &QAction::triggered, this, [this]() {
mFeatureListModel->setSortByDisplayExpression( true, Qt::AscendingOrder );
} );
sortMenu->addAction( sortByPreviewExpressionAsc );
QAction *sortByPreviewExpressionDesc = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "sort-reverse.svg" ) ), tr( "By Preview Expression (descending)" ), this );
connect( sortByPreviewExpressionDesc, &QAction::triggered, this, [=]() {
connect( sortByPreviewExpressionDesc, &QAction::triggered, this, [this]() {
mFeatureListModel->setSortByDisplayExpression( true, Qt::DescendingOrder );
} );
sortMenu->addAction( sortByPreviewExpressionDesc );
QAction *sortByPreviewExpressionCustom = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mIconExpressionPreview.svg" ) ), tr( "By Custom Expression" ), this );
connect( sortByPreviewExpressionCustom, &QAction::triggered, this, [=]() {
connect( sortByPreviewExpressionCustom, &QAction::triggered, this, [this]() {
if ( modifySort() )
mFeatureListModel->setSortByDisplayExpression( false );
} );
Expand Down Expand Up @@ -584,16 +584,16 @@ void QgsDualView::panOrZoomToFeature( const QgsFeatureIds &featureset )
if ( mBrowsingAutoPanScaleAllowed )
{
if ( mAutoPanButton->isChecked() )
QTimer::singleShot( 0, this, [=]() {
QTimer::singleShot( 0, this, [this, featureset, canvas]() {
canvas->panToFeatureIds( mLayer, featureset, false );
} );
else if ( mAutoZoomButton->isChecked() )
QTimer::singleShot( 0, this, [=]() {
QTimer::singleShot( 0, this, [this, featureset, canvas]() {
canvas->zoomToFeatureIds( mLayer, featureset );
} );
}
if ( mFlashButton->isChecked() )
QTimer::singleShot( 0, this, [=]() {
QTimer::singleShot( 0, this, [this, featureset, canvas]() {
canvas->flashFeatureIds( mLayer, featureset );
} );
mLastFeatureSet = featureset;
Expand Down Expand Up @@ -900,7 +900,7 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &maste
QgsMapLayerActionContext context;
for ( QgsMapLayerAction *action : registeredActions )
{
menu->addAction( action->text(), action, [=]() {
menu->addAction( action->text(), action, [this, action, context]() {
Q_NOWARN_DEPRECATED_PUSH
action->triggerForFeatures( mLayer, mLayer->selectedFeatures() );
Q_NOWARN_DEPRECATED_POP
Expand Down Expand Up @@ -958,7 +958,7 @@ void QgsDualView::showViewHeaderMenu( QPoint point )
connect( organize, &QAction::triggered, this, &QgsDualView::organizeColumns );
mHorizontalHeaderMenu->addAction( organize );
QAction *sort = new QAction( tr( "&Sort…" ), mHorizontalHeaderMenu );
connect( sort, &QAction::triggered, this, [=]() { modifySort(); } );
connect( sort, &QAction::triggered, this, [this]() { modifySort(); } );
mHorizontalHeaderMenu->addAction( sort );

mHorizontalHeaderMenu->popup( mTableView->horizontalHeader()->mapToGlobal( point ) );
Expand Down
1 change: 0 additions & 1 deletion src/gui/qgsattributeform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,6 @@ bool QgsAttributeForm::saveMultiEdits()
//find changed attributes
QgsAttributeMap newAttributeValues;
const QList<int> fieldIndexes = mFormEditorWidgets.uniqueKeys();
mFormEditorWidgets.constBegin();
for ( int fieldIndex : fieldIndexes )
{
const QList<QgsAttributeFormEditorWidget *> widgets = mFormEditorWidgets.values( fieldIndex );
Expand Down
2 changes: 1 addition & 1 deletion src/gui/qgsdatasourcemanagerdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ void QgsDataSourceManagerDialog::configureFromUri( const QString &pageName, cons
const int pageIdx = mPageProviderNames.indexOf( pageName );
if ( pageIdx != -1 )
{
QTimer::singleShot( 0, this, [=] {
QTimer::singleShot( 0, this, [this, pageIdx, uri] {
setCurrentPage( pageIdx );
if ( QgsAbstractDataSourceWidget *dataSourceWidget = qobject_cast<QgsAbstractDataSourceWidget *>( ui->mOptionsStackedWidget->currentWidget() ) )
{
Expand Down
2 changes: 1 addition & 1 deletion src/gui/qgsextentwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ void QgsExtentWidget::bookmarkMenuAboutToShow()
}
QAction *action = new QAction( mBookmarkModel->data( mBookmarkModel->index( i, 0 ), static_cast<int>( QgsBookmarkManagerModel::CustomRole::Name ) ).toString(), mBookmarkMenu );
const QgsReferencedRectangle extent = mBookmarkModel->data( mBookmarkModel->index( i, 0 ), static_cast<int>( QgsBookmarkManagerModel::CustomRole::Extent ) ).value<QgsReferencedRectangle>();
connect( action, &QAction::triggered, this, [=] { setOutputExtentFromUser( extent, extent.crs() ); } );
connect( action, &QAction::triggered, this, [this, extent] { setOutputExtentFromUser( extent, extent.crs() ); } );
destMenu->addAction( action );
}

Expand Down
2 changes: 1 addition & 1 deletion src/gui/qgsexternalstoragefilewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ void QgsExternalStorageFileWidget::storeExternalFiles( QStringList fileNames, QS
connect( storedContent, &QgsExternalStorageStoredContent::progressChanged, mProgressBar, &QProgressBar::setValue );
connect( mCancelButton, &QToolButton::clicked, storedContent, &QgsExternalStorageStoredContent::cancel );

auto onStoreFinished = [=] {
auto onStoreFinished = [this, storedContent, fileNames, storedUrls, filePath, url] {
mStoreInProgress = false;
updateLayout();
storedContent->deleteLater();
Expand Down
6 changes: 6 additions & 0 deletions src/providers/postgres/qgspostgresconn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1592,8 +1592,12 @@ int QgsPostgresConn::PQCancel()
{
char errbuf[255];
result = ::PQcancel( cancel, errbuf, 255 );
#ifdef QGISDEBUG
if ( !result )
{
QgsDebugMsgLevel( QStringLiteral( "Error canceling the query:" ).arg( errbuf ), 3 );
}
#endif
}
::PQfreeCancel( cancel );
return result;
Expand Down Expand Up @@ -2028,7 +2032,9 @@ void QgsPostgresConn::deduceEndian()
"FETCH FORWARD 1 FROM oidcursor;"
"CLOSE oidcursor;"
"COMMIT;" ) ) )
{
QgsDebugMsgLevel( QStringLiteral( "PQsendQuery(...) error %1" ).arg( PQerrorMessage() ), 2 );
}

for ( ;; )
{
Expand Down
2 changes: 1 addition & 1 deletion src/providers/virtual/qgsvirtuallayerprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ bool QgsVirtualLayerProvider::loadSourceLayers()
connect( vl, &QgsVectorLayer::featureAdded, this, &QgsVirtualLayerProvider::invalidateStatistics );
connect( vl, &QgsVectorLayer::featureDeleted, this, &QgsVirtualLayerProvider::invalidateStatistics );
connect( vl, &QgsVectorLayer::geometryChanged, this, &QgsVirtualLayerProvider::invalidateStatistics );
connect( vl, &QgsVectorLayer::updatedFields, this, [=] { createVirtualTable( vl, layer.name() ); } );
connect( vl, &QgsVectorLayer::updatedFields, this, [this, vl, layer] { createVirtualTable( vl, layer.name() ); } );
}
else
{
Expand Down
Loading
Loading