Janus Graph performing OLAP with Spark/Yarn
John Helmsen <john....@...>
Gentlemen and Ladies,
Currently our group is trying to stand up an instance of JanusGraph/Titan that performs OLAP operations using SparkGraphComputer in TinkerPop. To do OLAP,.we wish to use Spark with Yarn. So far, however, we have not been able to successfully launch any distributed queries, such as count(), using this approach. While we can post stack traces, etc, I'd like to ask a different question first.
Has anyone gotten the system to perform Spark operations using YARN? If so, how?
|
|
Re: JanusGraph configuration for scala
Misha Brukman <mbru...@...>
Would it make sense to add Scala and Spark versions to the compatibility chart for clarity, even though they're tied to TinkerPop version?
toggle quoted message
Show quoted text
On Wed, May 31, 2017 at 11:15 AM, Jason Plurad <plu...@...> wrote: I'll note that those product versions are a bit ahead of what is listed in the version compatibility matrix.
On Tuesday, May 30, 2017 at 8:18:20 AM UTC-4, Prabin acharya wrote: I am trying to configure JanusGraph with Apache Cassandra 3.1 and Solr 6.1.0 . I cannot connect to the Storage backend from the code , though all of my configuration are correct ..
|
|
Re: JanusGraph configuration for scala
Jason Plurad <plu...@...>
toggle quoted message
Show quoted text
On Tuesday, May 30, 2017 at 8:18:20 AM UTC-4, Prabin acharya wrote: I am trying to configure JanusGraph with Apache Cassandra 3.1 and Solr 6.1.0 . I cannot connect to the Storage backend from the code , though all of my configuration are correct ..
|
|
JanusGraph configuration for scala
Prabin acharya <pra5...@...>
I am trying to configure JanusGraph with Apache Cassandra 3.1 and Solr 6.1.0 . I cannot connect to the Storage backend from the code , though all of my configuration are correct ..
|
|
Re: Who is using JanusGraph in production?
Liu-Cheng Xu <xuliuc...@...>
Great! Thank you for your work!
toggle quoted message
Show quoted text
Hi Jimmy,
They appear to be happy with JanusGraph, but I'll let them chime in if they want to provide any additional details.
BTW, if anyone else is a production user of JanusGraph, please get in touch with me and let's get you added on the list as well!
|
|
Re: Who is using JanusGraph in production?
Misha Brukman <mbru...@...>
Hi Jimmy,
They appear to be happy with JanusGraph, but I'll let them chime in if they want to provide any additional details.
BTW, if anyone else is a production user of JanusGraph, please get in touch with me and let's get you added on the list as well!
Misha
toggle quoted message
Show quoted text
On Fri, Apr 7, 2017 at 4:03 AM, Jimmy <xuliuc...@...> wrote: Lovely and promising project! I want to know if anyone is using JanusGraph in production at present?Thanks!
--
You received this message because you are subscribed to the Google Groups "JanusGraph users list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to janusgraph-users+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
|
|
Re: Production users of JanusGraph
Misha Brukman <mbru...@...>
Hi Anurag,
They appear to be happy with JanusGraph, but I'll let them chime in if they want to provide any additional details.
BTW, if anyone else is a production user of JanusGraph, please get in touch with me and let's get you added as well!
Misha
toggle quoted message
Show quoted text
On Wed, Apr 5, 2017 at 12:28 PM, anurag <anurag...@...> wrote: All, Many Thanks to the folks who were involved in setting up JanusGraph project . We are using Titan as GraphDB for a Beta feature , the reason our feature is in Beta is we were not sure where Titan is headed. Now that we have JanusGraph we would like to move to it, are they are any users of JanusGraph in production if so can you please share your experiences with it. Many thanks. Best, Anurag
--
You received this message because you are subscribed to the Google Groups "JanusGraph users list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to janusgraph-users+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
|
|
Re: Bulk loading CPU busy
Rafael Fernandes <luizr...@...>
Can u try setting this property and compare?
query.fast-property=true
Thanks Rafa
|
|
Re: Bulk loading CPU busy
I put Vertices in Map. This was the reason for frequent equals calls. I removed this.
Now hot spots is:
java.lang.Object.hashCode[native] () (6,1%)
org.janusgraph.graphdb.internal.AbstractElement.equals (Object) (5,3%)
java.security.AccessController.doPrivileged[native] (java.security.PrivilegedExceptionAction) (4,9%)
вторник, 23 мая 2017 г., 10:41:15 UTC+3 пользователь CGen написал:
toggle quoted message
Show quoted text
Hello!
I need to load CSV files into JanusGraph with a size of 1.7 gigabytes.
How can I increase the load speed?
I added to the config:
storage.batch-loading=true schema.default=none
I have almost no access to the disk, but the CPU is always busy.
In the profiler, the hot spot is: org.janusgraph.graphdb.internal.AbstractElement equals (8%).
|
|
Hello!
I need to load CSV files into JanusGraph with a size of 1.7 gigabytes.
How can I increase the load speed?
I added to the config:
storage.batch-loading=true schema.default=none
I have almost no access to the disk, but the CPU is always busy.
In the profiler, the hot spot is: org.janusgraph.graphdb.internal.AbstractElement equals (8%).
|
|
Re: Query requires iterating over all vertices
Thanks to all. It works as it should.
пятница, 19 мая 2017 г., 21:44:46 UTC+3 пользователь Jason Plurad написал:
toggle quoted message
Show quoted text
Ah, you used indexOnly() to restrict the index by vertex label, so in order to utilize the index, your query must include the vertex label. Either of these would work since ultimately they are optimized to the same traversal: g.V().hasLabel("ip4address").has("ip4addressString", "192.168.155.212") g.V().has("ip4address", "ip4addressString", "192.168.155.212")
On Friday, May 19, 2017 at 1:57:25 PM UTC-4, CGen wrote: PropertyKey ip4addressStringPropertyKey = mgmt.makePropertyKey("ip4addressString").dataType(String.class).make();
VertexLabel ip4addressVertexLabel = mgmt.makeVertexLabel("ip4address").make();
JanusGraphIndex ip4addressStringIndex = mgmt.buildIndex("compositeIp4addressString", Vertex.class).addKey(ip4addressStringPropertyKey).indexOnly(ip4addressVertexLabel).unique().buildCompositeIndex(); mgmt.setConsistency(ip4addressStringIndex, ConsistencyModifier.LOCK);
пятница, 19 мая 2017 г., 17:36:46 UTC+3 пользователь Jason Plurad написал:Can you share your property and index definition? On Friday, May 19, 2017 at 6:37:09 AM UTC-4, CGen wrote: And one more thing. My index exists and works because
Adding this property for key [ip4addressString] and value [192.168.155.212] violates a uniqueness constraint [compositeIp4addressString]
пятница, 19 мая 2017 г., 12:53:16 UTC+3 пользователь CGen написал: Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал: No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
|
|
Re: Query requires iterating over all vertices
Jason Plurad <plu...@...>
Ah, you used indexOnly() to restrict the index by vertex label, so in order to utilize the index, your query must include the vertex label. Either of these would work since ultimately they are optimized to the same traversal: g.V().hasLabel("ip4address").has("ip4addressString", "192.168.155.212") g.V().has("ip4address", "ip4addressString", "192.168.155.212")
toggle quoted message
Show quoted text
On Friday, May 19, 2017 at 1:57:25 PM UTC-4, CGen wrote: PropertyKey ip4addressStringPropertyKey = mgmt.makePropertyKey("ip4addressString").dataType(String.class).make();
VertexLabel ip4addressVertexLabel = mgmt.makeVertexLabel("ip4address").make();
JanusGraphIndex ip4addressStringIndex = mgmt.buildIndex("compositeIp4addressString", Vertex.class).addKey(ip4addressStringPropertyKey).indexOnly(ip4addressVertexLabel).unique().buildCompositeIndex(); mgmt.setConsistency(ip4addressStringIndex, ConsistencyModifier.LOCK);
пятница, 19 мая 2017 г., 17:36:46 UTC+3 пользователь Jason Plurad написал:Can you share your property and index definition? On Friday, May 19, 2017 at 6:37:09 AM UTC-4, CGen wrote: And one more thing. My index exists and works because
Adding this property for key [ip4addressString] and value [192.168.155.212] violates a uniqueness constraint [compositeIp4addressString]
пятница, 19 мая 2017 г., 12:53:16 UTC+3 пользователь CGen написал: Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал: No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
|
|
Re: Query requires iterating over all vertices
Kevin Schmidt <ktsc...@...>
So the "indexOnly(ip4addressVertexLabel)" is a label constraint and means this index only applies to traversals that specify that vertex label.
If you simply change your traversal to this, the index should be used:
traversalSource.V().hasLabel("ip4address").has("ip4addressString", addressString);
toggle quoted message
Show quoted text
On Fri, May 19, 2017 at 10:57 AM, CGen <new...@...> wrote: PropertyKey ip4addressStringPropertyKey = mgmt.makePropertyKey("ip4addressString").dataType(String.class).make();
VertexLabel ip4addressVertexLabel = mgmt.makeVertexLabel("ip4address").make();
JanusGraphIndex ip4addressStringIndex = mgmt.buildIndex("compositeIp4addressString", Vertex.class).addKey(ip4addressStringPropertyKey).indexOnly(ip4addressVertexLabel).unique().buildCompositeIndex(); mgmt.setConsistency(ip4addressStringIndex, ConsistencyModifier.LOCK);
пятница, 19 мая 2017 г., 17:36:46 UTC+3 пользователь Jason Plurad написал:Can you share your property and index definition? On Friday, May 19, 2017 at 6:37:09 AM UTC-4, CGen wrote: And one more thing. My index exists and works because
Adding this property for key [ip4addressString] and value [192.168.155.212] violates a uniqueness constraint [compositeIp4addressString]
пятница, 19 мая 2017 г., 12:53:16 UTC+3 пользователь CGen написал: Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал: No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
--
You received this message because you are subscribed to the Google Groups "JanusGraph users list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to janusgraph-users+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
|
|
Re: Query requires iterating over all vertices
PropertyKey ip4addressStringPropertyKey = mgmt.makePropertyKey("ip4addressString").dataType(String.class).make();
VertexLabel ip4addressVertexLabel = mgmt.makeVertexLabel("ip4address").make();
JanusGraphIndex ip4addressStringIndex = mgmt.buildIndex("compositeIp4addressString", Vertex.class).addKey(ip4addressStringPropertyKey).indexOnly(ip4addressVertexLabel).unique().buildCompositeIndex(); mgmt.setConsistency(ip4addressStringIndex, ConsistencyModifier.LOCK);
пятница, 19 мая 2017 г., 17:36:46 UTC+3 пользователь Jason Plurad написал:
toggle quoted message
Show quoted text
Can you share your property and index definition? On Friday, May 19, 2017 at 6:37:09 AM UTC-4, CGen wrote: And one more thing. My index exists and works because
Adding this property for key [ip4addressString] and value [192.168.155.212] violates a uniqueness constraint [compositeIp4addressString]
пятница, 19 мая 2017 г., 12:53:16 UTC+3 пользователь CGen написал: Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал: No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
|
|
Re: Query requires iterating over all vertices
Jason Plurad <plu...@...>
Can you share your property and index definition?
toggle quoted message
Show quoted text
On Friday, May 19, 2017 at 6:37:09 AM UTC-4, CGen wrote: And one more thing. My index exists and works because
Adding this property for key [ip4addressString] and value [192.168.155.212] violates a uniqueness constraint [compositeIp4addressString]
пятница, 19 мая 2017 г., 12:53:16 UTC+3 пользователь CGen написал: Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал: No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
|
|
Re: Installation of JanusGraph
Jason Plurad <plu...@...>
You shouldn't need to load the JanusGraph imports if you're using a JanusGraph release zip. Which JanusGraph release zip file are you using? What operating system? What Java version? https://github.com/JanusGraph/janusgraph/releases
toggle quoted message
Show quoted text
On Friday, May 19, 2017 at 10:05:35 AM UTC-4, Snigdha Batra wrote: Going by the getting started documentation, how do I load janusgraph methods in the gremlin terminal? When I try to run the JanusGraphFactory's open method it obviously says NameError: name 'JanusGraphFactory' is not defined. What am I missing? On Wednesday, February 22, 2017 at 10:43:24 PM UTC+5:30, Manoj Waikar wrote: We were able to build it on Mac / Linux using the instructions mentioned, however the build fails on Windows (because of a few Linux commands used therein). On Wednesday, February 22, 2017 at 3:52:35 AM UTC+5:30, lo...@... wrote: Hi Misha,
What exactly is involved in building locally? I can't seem to find any documentation.
Thanks On Wednesday, February 8, 2017 at 10:07:39 PM UTC+1, Misha Brukman wrote: Yes, that's correct. For now, please clone and build locally.
On Wed, Feb 8, 2017 at 2:15 PM, e2t2 <gha...@...> wrote: Hi All,
I am new to graph world and have done basic Titan tutorials, etc. Happy to hear that JanusGraph will continue where titan guys left.
Just a quick question, in the Getting started guide for JanusGraph it says to download zip file and unzip it to get started. However, in download link there is no release available.
Do I need to clone the repository and build it myself or I am missing something here?
Thanks
--
You received this message because you are subscribed to the Google Groups "JanusGraph users list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to janusgraph-use...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
|
|
Re: Query requires iterating over all vertices
And one more thing. My index exists and works because
Adding this property for key [ip4addressString] and value [192.168.155.212] violates a uniqueness constraint [compositeIp4addressString]
пятница, 19 мая 2017 г., 12:53:16 UTC+3 пользователь CGen написал:
toggle quoted message
Show quoted text
Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал: No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
|
|
Re: Query requires iterating over all vertices
Thanks for the answer. I do not understand a little.
In my case I'm looking for a Vertex: traversalSource.V().has("ip4addressString", addressString); And I get a warning: Query requires iterating over all vertices [(ip4addressString = 192.168.155.212)]. For better performance, use indexes ip4addressString is a unique CompositeIndex. Why is my index not used?
четверг, 18 мая 2017 г., 21:11:03 UTC+3 пользователь Jason Plurad написал:
toggle quoted message
Show quoted text
No, it is not a bug. It is a warning letting you know that there is a query that is doing a global scan of all vertices. In this case, the specific call is `g.V().count().next()` which is trying to determine whether there is any data in the graph. Something like `g.V().hasNext()` would be a less expensive check, although it would still issue the warning. This small example can get away a call like this because there are only 12 vertices in the loaded graph, but it would be an expensive operation if there were 1 billion vertices. Thanks for the feedback. -- Jason On Thursday, May 18, 2017 at 12:36:05 PM UTC-4, Ярослав Станко wrote: Hello!
Why is there a warning in the log?
"WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes"
In my project the same thing.
Is this a bug? How to fix it?
|
|
Re: Installation of JanusGraph
Going by the getting started documentation, how do I load janusgraph methods in the gremlin terminal? When I try to run the JanusGraphFactory's open method it obviously says NameError: name 'JanusGraphFactory' is not defined. What am I missing?
toggle quoted message
Show quoted text
On Wednesday, February 22, 2017 at 10:43:24 PM UTC+5:30, Manoj Waikar wrote: We were able to build it on Mac / Linux using the instructions mentioned, however the build fails on Windows (because of a few Linux commands used therein). On Wednesday, February 22, 2017 at 3:52:35 AM UTC+5:30, lo...@... wrote: Hi Misha,
What exactly is involved in building locally? I can't seem to find any documentation.
Thanks On Wednesday, February 8, 2017 at 10:07:39 PM UTC+1, Misha Brukman wrote: Yes, that's correct. For now, please clone and build locally.
On Wed, Feb 8, 2017 at 2:15 PM, e2t2 <gha...@...> wrote: Hi All,
I am new to graph world and have done basic Titan tutorials, etc. Happy to hear that JanusGraph will continue where titan guys left.
Just a quick question, in the Getting started guide for JanusGraph it says to download zip file and unzip it to get started. However, in download link there is no release available.
Do I need to clone the repository and build it myself or I am missing something here?
Thanks
--
You received this message because you are subscribed to the Google Groups "JanusGraph users list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to janusgraph-use...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
|
|
[WARNING] 0.1.0 to 0.1.1 upgrade
Hello, A step was missed during the release prep and the 0.1.1 release was not marked as compatible with JanusGraph 0.1.0. Consequently, if you point 0.1.1 at a previously loaded 0.1.0 backend (not Titan), JanusGraph will not start and you'll get:
"StorageBackend version is incompatible with current JanusGraph version: storage [0.1.0] vs. runtime [0.1.1]"
The backend format is not really incompatible and an issue has been entered to address this [1].
The 0.1.1 release mainly fixes a serious Titan compatibility issue [2] and if you are upgrading from Titan, you will not be affected by this incompatibility error and can upgrade because Janus is correctly marked as compatible with Titan 1.0 and Titan 1.1-SNAPSHOT.
If you are running 0.1.0 right now from a brand new JanusGraph load (not an upgrade from Titan), hold off on upgrading until this issues is taken care of. If you planned on rebuilding your data from scratch when upgrading to 0.1.1, you can go ahead and upgrade as this only affects a previously loaded system.
Thanks, Ted
|
|