aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MSSQL
diff options
context:
space:
mode:
authorJeff Ames2008-05-16 01:22:11 +0000
committerJeff Ames2008-05-16 01:22:11 +0000
commit65c5efe43b68700bad94076d4cd421160203c5de (patch)
tree589b56649ed02f4942671fd6e51c6dc43f682e0d /OpenSim/Data/MSSQL
parentThank you very much, mjm for : (diff)
downloadopensim-SC-65c5efe43b68700bad94076d4cd421160203c5de.zip
opensim-SC-65c5efe43b68700bad94076d4cd421160203c5de.tar.gz
opensim-SC-65c5efe43b68700bad94076d4cd421160203c5de.tar.bz2
opensim-SC-65c5efe43b68700bad94076d4cd421160203c5de.tar.xz
Formatting cleanup.
Diffstat (limited to 'OpenSim/Data/MSSQL')
-rw-r--r--OpenSim/Data/MSSQL/MSSQLAssetData.cs2
-rw-r--r--OpenSim/Data/MSSQL/MSSQLDataStore.cs26
-rw-r--r--OpenSim/Data/MSSQL/MSSQLGridData.cs18
-rw-r--r--OpenSim/Data/MSSQL/MSSQLInventoryData.cs16
-rw-r--r--OpenSim/Data/MSSQL/MSSQLManager.cs4
-rw-r--r--OpenSim/Data/MSSQL/MSSQLUserData.cs8
-rw-r--r--OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs10
7 files changed, 42 insertions, 42 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
index 5ae60a1..12a03eb 100644
--- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
@@ -216,7 +216,7 @@ namespace OpenSim.Data.MSSQL
216 216
217 override public string Version 217 override public string Version
218 { 218 {
219// get { return database.getVersion(); } 219// get { return database.getVersion(); }
220 get { return database.getVersion(); } 220 get { return database.getVersion(); }
221 } 221 }
222 222
diff --git a/OpenSim/Data/MSSQL/MSSQLDataStore.cs b/OpenSim/Data/MSSQL/MSSQLDataStore.cs
index 08217dc..8bb15c8 100644
--- a/OpenSim/Data/MSSQL/MSSQLDataStore.cs
+++ b/OpenSim/Data/MSSQL/MSSQLDataStore.cs
@@ -140,7 +140,7 @@ namespace OpenSim.Data.MSSQL
140 m_landAccessListTable = createLandAccessListTable(); 140 m_landAccessListTable = createLandAccessListTable();
141 m_dataSet.Tables.Add(m_landAccessListTable); 141 m_dataSet.Tables.Add(m_landAccessListTable);
142 setupLandAccessCommands(m_landAccessListDataAdapter, m_connection); 142 setupLandAccessCommands(m_landAccessListDataAdapter, m_connection);
143 m_landAccessListDataAdapter.Fill(m_landAccessListTable); 143 m_landAccessListDataAdapter.Fill(m_landAccessListTable);
144 } 144 }
145 } 145 }
146 146
@@ -172,7 +172,7 @@ namespace OpenSim.Data.MSSQL
172 public void RemoveObject(LLUUID obj, LLUUID regionUUID) 172 public void RemoveObject(LLUUID obj, LLUUID regionUUID)
173 { 173 {
174 // Instance.RemoveObject(obj, regionUUID); 174 // Instance.RemoveObject(obj, regionUUID);
175 175
176 m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); 176 m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID);
177 177
178 DataTable prims = m_primTable; 178 DataTable prims = m_primTable;
@@ -222,7 +222,7 @@ namespace OpenSim.Data.MSSQL
222 222
223 /// <summary> 223 /// <summary>
224 /// Load persisted objects from region storage. 224 /// Load persisted objects from region storage.
225 /// </summary> 225 /// </summary>
226 public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID) 226 public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID)
227 { 227 {
228 // return Instance.LoadObjects(regionUUID); 228 // return Instance.LoadObjects(regionUUID);
@@ -328,12 +328,12 @@ namespace OpenSim.Data.MSSQL
328 TaskInventoryItem item = buildItem(row); 328 TaskInventoryItem item = buildItem(row);
329 inventory.Add(item); 329 inventory.Add(item);
330 330
331 //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID); 331 //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID);
332 } 332 }
333 333
334 prim.RestoreInventoryItems(inventory); 334 prim.RestoreInventoryItems(inventory);
335 335
336 // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in 336 // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in
337 // every item). This data should really be stored in the prim table itself. 337 // every item). This data should really be stored in the prim table itself.
338 if (dbItemRows.Length > 0) 338 if (dbItemRows.Length > 0)
339 { 339 {
@@ -527,7 +527,7 @@ namespace OpenSim.Data.MSSQL
527 /*********************************************************************** 527 /***********************************************************************
528 * 528 *
529 * Database Definition Functions 529 * Database Definition Functions
530 * 530 *
531 * This should be db agnostic as we define them in ADO.NET terms 531 * This should be db agnostic as we define them in ADO.NET terms
532 * 532 *
533 **********************************************************************/ 533 **********************************************************************/
@@ -742,7 +742,7 @@ namespace OpenSim.Data.MSSQL
742 } 742 }
743 743
744 /*********************************************************************** 744 /***********************************************************************
745 * 745 *
746 * Convert between ADO.NET <=> OpenSim Objects 746 * Convert between ADO.NET <=> OpenSim Objects
747 * 747 *
748 * These should be database independant 748 * These should be database independant
@@ -1198,7 +1198,7 @@ namespace OpenSim.Data.MSSQL
1198 1198
1199 m_log.InfoFormat("[REGION DB]: Persisting Prim Inventory with prim ID {0}", primID); 1199 m_log.InfoFormat("[REGION DB]: Persisting Prim Inventory with prim ID {0}", primID);
1200 1200
1201 // For now, we're just going to crudely remove all the previous inventory items 1201 // For now, we're just going to crudely remove all the previous inventory items
1202 // no matter whether they have changed or not, and replace them with the current set. 1202 // no matter whether they have changed or not, and replace them with the current set.
1203 lock (m_dataSet) 1203 lock (m_dataSet)
1204 { 1204 {
@@ -1209,7 +1209,7 @@ namespace OpenSim.Data.MSSQL
1209 { 1209 {
1210 // m_log.InfoFormat( 1210 // m_log.InfoFormat(
1211 // "[REGION DB]: " + 1211 // "[REGION DB]: " +
1212 // "Adding item {0}, {1} to prim ID {2}", 1212 // "Adding item {0}, {1} to prim ID {2}",
1213 // newItem.Name, newItem.ItemID, newItem.ParentPartID); 1213 // newItem.Name, newItem.ItemID, newItem.ParentPartID);
1214 1214
1215 DataRow newItemRow = m_itemsTable.NewRow(); 1215 DataRow newItemRow = m_itemsTable.NewRow();
@@ -1282,7 +1282,7 @@ namespace OpenSim.Data.MSSQL
1282 sql += subsql; 1282 sql += subsql;
1283 sql += " where " + pk; 1283 sql += " where " + pk;
1284 SqlCommand cmd = new SqlCommand(sql); 1284 SqlCommand cmd = new SqlCommand(sql);
1285 1285
1286 // this provides the binding for all our parameters, so 1286 // this provides the binding for all our parameters, so
1287 // much less code than it used to be 1287 // much less code than it used to be
1288 1288
@@ -1329,7 +1329,7 @@ namespace OpenSim.Data.MSSQL
1329 /// This is a convenience function that collapses 5 repetitive 1329 /// This is a convenience function that collapses 5 repetitive
1330 /// lines for defining SqlParameters to 2 parameters: 1330 /// lines for defining SqlParameters to 2 parameters:
1331 /// column name and database type. 1331 /// column name and database type.
1332 /// 1332 ///
1333 /// It assumes certain conventions like :param as the param 1333 /// It assumes certain conventions like :param as the param
1334 /// name to replace in parametrized queries, and that source 1334 /// name to replace in parametrized queries, and that source
1335 /// version is always current version, both of which are fine 1335 /// version is always current version, both of which are fine
@@ -1424,7 +1424,7 @@ namespace OpenSim.Data.MSSQL
1424 SqlCommand tcmd = new SqlCommand(createTerrain, conn); 1424 SqlCommand tcmd = new SqlCommand(createTerrain, conn);
1425 SqlCommand lcmd = new SqlCommand(createLand, conn); 1425 SqlCommand lcmd = new SqlCommand(createLand, conn);
1426 SqlCommand lalcmd = new SqlCommand(createLandAccessList, conn); 1426 SqlCommand lalcmd = new SqlCommand(createLandAccessList, conn);
1427 1427
1428 conn.Open(); 1428 conn.Open();
1429 try 1429 try
1430 { 1430 {
@@ -1604,6 +1604,6 @@ namespace OpenSim.Data.MSSQL
1604 { 1604 {
1605 return DbType.String; 1605 return DbType.String;
1606 } 1606 }
1607 } 1607 }
1608 } 1608 }
1609} 1609}
diff --git a/OpenSim/Data/MSSQL/MSSQLGridData.cs b/OpenSim/Data/MSSQL/MSSQLGridData.cs
index cf81bee..0bdd460 100644
--- a/OpenSim/Data/MSSQL/MSSQLGridData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLGridData.cs
@@ -79,7 +79,7 @@ namespace OpenSim.Data.MSSQL
79 private void TestTables() 79 private void TestTables()
80 { 80 {
81 IDbCommand cmd = database.Query("SELECT TOP 1 * FROM "+m_regionsTableName, new Dictionary<string, string>()); 81 IDbCommand cmd = database.Query("SELECT TOP 1 * FROM "+m_regionsTableName, new Dictionary<string, string>());
82 82
83 try 83 try
84 { 84 {
85 cmd.ExecuteNonQuery(); 85 cmd.ExecuteNonQuery();
@@ -88,7 +88,7 @@ namespace OpenSim.Data.MSSQL
88 catch (Exception) 88 catch (Exception)
89 { 89 {
90 m_log.Info("[GRID DB]: MSSQL Database doesn't exist... creating"); 90 m_log.Info("[GRID DB]: MSSQL Database doesn't exist... creating");
91 database.ExecuteResourceSql("Mssql-regions.sql"); 91 database.ExecuteResourceSql("Mssql-regions.sql");
92 } 92 }
93 } 93 }
94 94
@@ -161,7 +161,7 @@ namespace OpenSim.Data.MSSQL
161 } 161 }
162 return null; 162 return null;
163 } 163 }
164 164
165 /// <summary> 165 /// <summary>
166 /// Returns a sim profile from its UUID 166 /// Returns a sim profile from its UUID
167 /// </summary> 167 /// </summary>
@@ -255,17 +255,17 @@ namespace OpenSim.Data.MSSQL
255 { 255 {
256 //Insert new region 256 //Insert new region
257 string sql = 257 string sql =
258 "UPDATE " + m_regionsTableName + @" SET 258 "UPDATE " + m_regionsTableName + @" SET
259 [regionHandle]=@regionHandle, [regionName]=@regionName, 259 [regionHandle]=@regionHandle, [regionName]=@regionName,
260 [regionRecvKey]=@regionRecvKey, [regionSecret]=@regionSecret, [regionSendKey]=@regionSendKey, 260 [regionRecvKey]=@regionRecvKey, [regionSecret]=@regionSecret, [regionSendKey]=@regionSendKey,
261 [regionDataURI]=@regionDataURI, [serverIP]=@serverIP, [serverPort]=@serverPort, [serverURI]=@serverURI, 261 [regionDataURI]=@regionDataURI, [serverIP]=@serverIP, [serverPort]=@serverPort, [serverURI]=@serverURI,
262 [locX]=@locX, [locY]=@locY, [locZ]=@locZ, [eastOverrideHandle]=@eastOverrideHandle, 262 [locX]=@locX, [locY]=@locY, [locZ]=@locZ, [eastOverrideHandle]=@eastOverrideHandle,
263 [westOverrideHandle]=@westOverrideHandle, [southOverrideHandle]=@southOverrideHandle, 263 [westOverrideHandle]=@westOverrideHandle, [southOverrideHandle]=@southOverrideHandle,
264 [northOverrideHandle]=@northOverrideHandle, [regionAssetURI]=@regionAssetURI, 264 [northOverrideHandle]=@northOverrideHandle, [regionAssetURI]=@regionAssetURI,
265 [regionAssetRecvKey]=@regionAssetRecvKey, [regionAssetSendKey]=@regionAssetSendKey, 265 [regionAssetRecvKey]=@regionAssetRecvKey, [regionAssetSendKey]=@regionAssetSendKey,
266 [regionUserURI]=@regionUserURI, [regionUserRecvKey]=@regionUserRecvKey, [regionUserSendKey]=@regionUserSendKey, 266 [regionUserURI]=@regionUserURI, [regionUserRecvKey]=@regionUserRecvKey, [regionUserSendKey]=@regionUserSendKey,
267 [regionMapTexture]=@regionMapTexture, [serverHttpPort]=@serverHttpPort, 267 [regionMapTexture]=@regionMapTexture, [serverHttpPort]=@serverHttpPort,
268 [serverRemotingPort]=@serverRemotingPort, [owner_uuid]=@owner_uuid 268 [serverRemotingPort]=@serverRemotingPort, [owner_uuid]=@owner_uuid
269 where [uuid]=@uuid"; 269 where [uuid]=@uuid";
270 270
271 Dictionary<string, string> parameters = new Dictionary<string, string>(); 271 Dictionary<string, string> parameters = new Dictionary<string, string>();
diff --git a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs
index 611a559..69d45f7 100644
--- a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs
@@ -80,7 +80,7 @@ namespace OpenSim.Data.MSSQL
80 if (tableName == null) 80 if (tableName == null)
81 { 81 {
82 database.ExecuteResourceSql("CreateFoldersTable.sql"); 82 database.ExecuteResourceSql("CreateFoldersTable.sql");
83 //database.ExecuteResourceSql("UpgradeFoldersTableToVersion2.sql"); 83 //database.ExecuteResourceSql("UpgradeFoldersTableToVersion2.sql");
84 return; 84 return;
85 } 85 }
86 } 86 }
@@ -236,9 +236,9 @@ namespace OpenSim.Data.MSSQL
236 236
237 // There should only ever be one root folder for a user. However, if there's more 237 // There should only ever be one root folder for a user. However, if there's more
238 // than one we'll simply use the first one rather than failing. It would be even 238 // than one we'll simply use the first one rather than failing. It would be even
239 // nicer to print some message to this effect, but this feels like it's too low a 239 // nicer to print some message to this effect, but this feels like it's too low a
240 // to put such a message out, and it's too minor right now to spare the time to 240 // to put such a message out, and it's too minor right now to spare the time to
241 // suitably refactor. 241 // suitably refactor.
242 if (items.Count > 0) 242 if (items.Count > 0)
243 { 243 {
244 rootFolder = items[0]; 244 rootFolder = items[0];
@@ -326,7 +326,7 @@ namespace OpenSim.Data.MSSQL
326 item.GroupID = new LLUUID(reader["groupID"].ToString()); 326 item.GroupID = new LLUUID(reader["groupID"].ToString());
327 item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]); 327 item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]);
328 item.Flags = (uint) reader["flags"]; 328 item.Flags = (uint) reader["flags"];
329 329
330 return item; 330 return item;
331 } 331 }
332 catch (SqlException e) 332 catch (SqlException e)
@@ -455,7 +455,7 @@ namespace OpenSim.Data.MSSQL
455 + ", @inventoryNextPermissions, @inventoryCurrentPermissions, @invType, @creatorID" 455 + ", @inventoryNextPermissions, @inventoryCurrentPermissions, @invType, @creatorID"
456 + ", @inventoryBasePermissions, @inventoryEveryOnePermissions, @salePrice, @saleType" 456 + ", @inventoryBasePermissions, @inventoryEveryOnePermissions, @salePrice, @saleType"
457 + ", @creationDate, @groupID, @groupOwned, @flags);"; 457 + ", @creationDate, @groupID, @groupOwned, @flags);";
458 458
459 try 459 try
460 { 460 {
461 Dictionary<string, string> param = new Dictionary<string, string>(); 461 Dictionary<string, string> param = new Dictionary<string, string>();
@@ -472,7 +472,7 @@ namespace OpenSim.Data.MSSQL
472 param["creatorID"] = item.Creator.ToString(); 472 param["creatorID"] = item.Creator.ToString();
473 param["inventoryBasePermissions"] = Convert.ToString(item.BasePermissions); 473 param["inventoryBasePermissions"] = Convert.ToString(item.BasePermissions);
474 param["inventoryEveryOnePermissions"] = Convert.ToString(item.EveryOnePermissions); 474 param["inventoryEveryOnePermissions"] = Convert.ToString(item.EveryOnePermissions);
475 475
476 param["salePrice"] = Convert.ToString(item.SalePrice); 476 param["salePrice"] = Convert.ToString(item.SalePrice);
477 param["saleType"] = Convert.ToString(item.SaleType); 477 param["saleType"] = Convert.ToString(item.SaleType);
478 param["creationDate"] = Convert.ToString(item.CreationDate); 478 param["creationDate"] = Convert.ToString(item.CreationDate);
@@ -550,7 +550,7 @@ namespace OpenSim.Data.MSSQL
550 } 550 }
551 551
552 /// <summary> 552 /// <summary>
553 /// 553 ///
554 /// </summary> 554 /// </summary>
555 /// <param name="item"></param> 555 /// <param name="item"></param>
556 public void deleteInventoryItem(LLUUID itemID) 556 public void deleteInventoryItem(LLUUID itemID)
@@ -667,7 +667,7 @@ namespace OpenSim.Data.MSSQL
667 } 667 }
668 668
669 /// <summary> 669 /// <summary>
670 /// Append a list of all the child folders of a parent folder 670 /// Append a list of all the child folders of a parent folder
671 /// </summary> 671 /// </summary>
672 /// <param name="folders">list where folders will be appended</param> 672 /// <param name="folders">list where folders will be appended</param>
673 /// <param name="parentID">ID of parent</param> 673 /// <param name="parentID">ID of parent</param>
diff --git a/OpenSim/Data/MSSQL/MSSQLManager.cs b/OpenSim/Data/MSSQL/MSSQLManager.cs
index 2aea641..3221b3a 100644
--- a/OpenSim/Data/MSSQL/MSSQLManager.cs
+++ b/OpenSim/Data/MSSQL/MSSQLManager.cs
@@ -442,7 +442,7 @@ namespace OpenSim.Data.MSSQL
442 442
443 return returnval; 443 return returnval;
444 } 444 }
445 445
446 /// <summary> 446 /// <summary>
447 /// Execute a SQL statement stored in a resource, as a string 447 /// Execute a SQL statement stored in a resource, as a string
448 /// </summary> 448 /// </summary>
@@ -509,7 +509,7 @@ namespace OpenSim.Data.MSSQL
509 throw new Exception(string.Format("Resource '{0}' was not found", name)); 509 throw new Exception(string.Format("Resource '{0}' was not found", name));
510 } 510 }
511 511
512 /// <summary> 512 /// <summary>
513 /// Returns the version of this DB provider 513 /// Returns the version of this DB provider
514 /// </summary> 514 /// </summary>
515 /// <returns>A string containing the DB provider</returns> 515 /// <returns>A string containing the DB provider</returns>
diff --git a/OpenSim/Data/MSSQL/MSSQLUserData.cs b/OpenSim/Data/MSSQL/MSSQLUserData.cs
index 844b7fa..9dc6812 100644
--- a/OpenSim/Data/MSSQL/MSSQLUserData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLUserData.cs
@@ -105,7 +105,7 @@ namespace OpenSim.Data.MSSQL
105 { 105 {
106 database.ExecuteResourceSql("Mssql-users.sql"); 106 database.ExecuteResourceSql("Mssql-users.sql");
107 } 107 }
108 108
109 cmd = database.Query("select top 1 * from " + m_agentsTableName, new Dictionary<string, string>()); 109 cmd = database.Query("select top 1 * from " + m_agentsTableName, new Dictionary<string, string>());
110 try 110 try
111 { 111 {
@@ -747,7 +747,7 @@ namespace OpenSim.Data.MSSQL
747 747
748 /// Appearance 748 /// Appearance
749 /// TODO: stubs for now to get us to a compiling state gently 749 /// TODO: stubs for now to get us to a compiling state gently
750 // override public AvatarAppearance GetUserAppearance(LLUUID user) 750 // override public AvatarAppearance GetUserAppearance(LLUUID user)
751 // { 751 // {
752 // return new AvatarAppearance(); 752 // return new AvatarAppearance();
753 // } 753 // }
@@ -761,12 +761,12 @@ namespace OpenSim.Data.MSSQL
761 { 761 {
762 return; 762 return;
763 } 763 }
764 764
765 override public void RemoveAttachment(LLUUID user, LLUUID item) 765 override public void RemoveAttachment(LLUUID user, LLUUID item)
766 { 766 {
767 return; 767 return;
768 } 768 }
769 769
770 override public List<LLUUID> GetAttachments(LLUUID user) 770 override public List<LLUUID> GetAttachments(LLUUID user)
771 { 771 {
772 return new List<LLUUID>(); 772 return new List<LLUUID>();
diff --git a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs b/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs
index 6b2c214..279e1a9 100644
--- a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs
+++ b/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs
@@ -28,7 +28,7 @@
28using System.Reflection; 28using System.Reflection;
29using System.Runtime.InteropServices; 29using System.Runtime.InteropServices;
30 30
31// General Information about an assembly is controlled through the following 31// General information about an assembly is controlled through the following
32// set of attributes. Change these attribute values to modify the information 32// set of attributes. Change these attribute values to modify the information
33// associated with an assembly. 33// associated with an assembly.
34 34
@@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
41[assembly : AssemblyTrademark("")] 41[assembly : AssemblyTrademark("")]
42[assembly : AssemblyCulture("")] 42[assembly : AssemblyCulture("")]
43 43
44// Setting ComVisible to false makes the types in this assembly not visible 44// Setting ComVisible to false makes the types in this assembly not visible
45// to COM components. If you need to access a type in this assembly from 45// to COM components. If you need to access a type in this assembly from
46// COM, set the ComVisible attribute to true on that type. 46// COM, set the ComVisible attribute to true on that type.
47 47
48[assembly : ComVisible(false)] 48[assembly : ComVisible(false)]
@@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
54// Version information for an assembly consists of the following four values: 54// Version information for an assembly consists of the following four values:
55// 55//
56// Major Version 56// Major Version
57// Minor Version 57// Minor Version
58// Build Number 58// Build Number
59// Revision 59// Revision
60// 60//
61// You can specify all the values or you can default the Revision and Build Numbers 61// You can specify all the values or you can default the Revision and Build Numbers
62// by using the '*' as shown below: 62// by using the '*' as shown below:
63 63
64[assembly : AssemblyVersion("1.0.0.0")] 64[assembly : AssemblyVersion("1.0.0.0")]