jdev - 2021-07-18

  1. Kiwi has joined

  2. alexbay218 has joined

  3. gutuning has joined

  4. alexbay218 has left

  5. marc0s has left

  6. marc0s has joined

  7. gutuning has left

  8. gutuning has joined

  9. Kiwi has left

  10. pasdesushi has left

  11. gutuning has left

  12. gutuning has joined

  13. alacer has joined

  14. alacer has left

  15. alacer has joined

  16. alexbay218 has joined

  17. idk has left

  18. idk has joined

  19. kikuchiyo has left

  20. kikuchiyo has joined

  21. gutuning has left

  22. gutuning has joined

  23. idk has left

  24. scorch has joined

  25. alexbay218 has left

  26. gutuning has left

  27. gutuning has joined

  28. DebXWoody has joined

  29. alexbay218 has joined

  30. kikuchiyo has left

  31. kikuchiyo has joined

  32. lovetox has left

  33. wurstsalat has left

  34. scorch has left

  35. wancat has left

  36. scorch has joined

  37. kikuchiyo has left

  38. lovetox has joined

  39. gutuning has left

  40. gutuning has joined

  41. sonny has left

  42. sonny has joined

  43. kikuchiyo has joined

  44. wancat has joined

  45. kikuchiyo has left

  46. gutuning has left

  47. Squeaky Latex Folf has left

  48. idk has joined

  49. Squeaky Latex Folf has joined

  50. rom1dep has left

  51. idk has left

  52. wancat has left

  53. rom1dep has joined

  54. marc0s has left

  55. marc0s has joined

  56. mikeye has joined

  57. nephele has joined

  58. pulkomandy has left

  59. pulkomandy has joined

  60. debacle has joined

  61. mikeye has left

  62. wancat has joined

  63. kikuchiyo has joined

  64. paul has joined

  65. raghavgururajan has left

  66. gutuning has joined

  67. raghavgururajan has joined

  68. goffi has joined

  69. pulkomandy has left

  70. pulkomandy has joined

  71. kikuchiyo has left

  72. wurstsalat has joined

  73. kikuchiyo has joined

  74. idk has joined

  75. Alex has left

  76. Alex has joined

  77. goffi has left

  78. Alex has left

  79. Alex has joined

  80. goffi has joined

  81. emus has joined

  82. mikeye has joined

  83. Kiwi has joined

  84. idk has left

  85. idk has joined

  86. sonny has left

  87. paul has left

  88. gutuning has left

  89. gutuning has joined

  90. nephele has left

  91. nephele has joined

  92. nephele has left

  93. xecks has left

  94. xecks has joined

  95. pulkomandy has left

  96. pulkomandy has joined

  97. nephele has joined

  98. pulkomandy has left

  99. pulkomandy has joined

  100. pasdesushi has joined

  101. mikeye has left

  102. gutuning has left

  103. hiran has joined

  104. sonny has joined

  105. hiran

    Hi there. I'm quite new to XMPP and stumble over things that I am not sure how to solve. So I created a java application using the Smack API that can join a MUC and send messages. It can also display the other participants through the presence messages it receives. Now I want to send a message directly to one of the other participants. But if the presence messages are all like <room jid>/<nickname>, how can a message be sent to that participant directly?

  106. flow

    hiran, for non-anonymous rooms you lookup the actual JID of the MUC participant, otherwise you send a private message: https://xmpp.org/extensions/xep-0045.html#privatemessage

  107. goffi has left

  108. idk has left

  109. hiran

    I think the lookup is the problem. So far the server sends presence messages with these alternative JIDs. How could my client lookup the real user's jid?

  110. hiran

    Ah, what you referred to means I can send a message stanza to the occupant id (which is the <room jid>/<nickname> but it needs to be marked as chat, not as groupchat?

  111. hiran

    And then I guess that message would be send using the MUC rather than the XMPP connection? At least something I have not tried so far...

  112. jgart has left

  113. gutuning has joined

  114. hiran

    This is a bit strange for me. Here is how my code looke like, and I am alternating the last two lines: MessageBuilder builder = StanzaBuilder.buildMessage(); builder.setBody("Private message..."); builder.to(recipient); builder.ofType(Message.Type.chat); //muc.sendMessage(builder); connection.sendStanza(builder.build()); Now if I use the code as-is (and send the message via the XMPP connection), the message seems to get swallowed. At least I do not see anything on the recipient side. If I use the line before (to send the line via the group chat), another XMPP client (GAIM on Ubuntu 20) displays the message as if it were part of the group chat. I am still confused if I maybe have the right code but interprete the result wrongly?

  115. paul has joined

  116. gutuning has left

  117. marc0s has left

  118. marc0s has joined

  119. MattJ

    Is the recipient address a user or a MUC JID?

  120. pep.

    > Ah, what you referred to means I can send a message stanza to the occupant id (which is the <room jid>/<nickname> but it needs to be marked as chat, not as groupchat? If you do that over a MUC don't forget to include <x/> to indicate it's through MUC. Same tag as in the join presence

  121. pep.

    I don't know how to do that in smacks, or if there are helpers

  122. hiran

    Thank you, @pep. I will try to find something

  123. flow

    hiran, what pep said, you need to "builder.addExtension(new MUCUser())"

  124. pep.

    hiran: otherwise you can get the real jid of a participant in their presence, the one sent by the muc during join, or after when they join

  125. hiran

    The x element is not mandatory. According to https://xmpp.org/extensions/xep-0045.html#privatemessage: Note: because this requirement was only added in revision 1.28 of this XEP, receiving entities MUST NOT rely on the existence of the <x/> element on private messages for proper processing.

  126. pep.


  127. pep.

    hiran: it just makes it easier on everybody to distinguish

  128. pep.

    Please do :)

  129. hiran

    No, the presence messages to not contain the real JIDs, only the room JIDs

  130. flow

    hiran, well it explicitly mentions just receiving entities, not sending ones :)

  131. hiran

    I agree I should send the x and I will if I see a chance. Right now I am still seaching how to get Smack to show me what is going on underneath...

  132. flow

    but yes, it may work well without the <x/>. I would still recommend it

  133. flow

    hiran, SmackConfiguration.Debug=true

  134. flow

    hiran, SmackConfiguration.DEBUG=true

  135. hiran


  136. wancat has left

  137. Sam has left

  138. wancat has joined

  139. kikuchiyo has left

  140. kikuchiyo has joined

  141. dezant has left

  142. Sam has joined

  143. debacle has left

  144. nephele has left

  145. paul has left

  146. paul has joined

  147. dezant has joined

  148. nephele has joined

  149. wancat has left

  150. gutuning has joined

  151. marc0s has left

  152. marc0s has joined

  153. marc0s has left

  154. marc0s has joined

  155. Sam

    "For each extended service discovery information form" does that mean there can be multiple XEP-0128 forms in a single disco#info response? The spec makes it seem like there's only one and I've been operating under that assumption for ages.

  156. gutuning has left

  157. Sam

    There's a thing in the revision history that says "now incorrect information" about multiple forms was removed, but not what that is, so maybe there used to be able to be multiple but I still can't tell (or maybe it used to say you only had one and they removed it thinking that would make it clear that there could be multiple, but there aren't)

  158. Link Mauve

    Yes, there can be more than one.

  159. Link Mauve

    For instance, if you want to support both older and newer XEP-0363 clients.

  160. Sam

    Ooh, no, there it is. It's tucked away in the implementation details at the very end. Doesn't mention it anywhere else in the document and definitely nowhere normative where it would make sense.

  161. Sam throws things

  162. Sam


  163. Martin has left

  164. Martin has joined

  165. wurstsalat has left

  166. wurstsalat has joined

  167. goffi has joined

  168. scorch has left

  169. hiran has left

  170. mikeye has joined

  171. wurstsalat has left

  172. wurstsalat has joined

  173. hiran has joined

  174. marc0s has left

  175. marc0s has joined

  176. hiran

    Ha! Now, by looking at the debug output I found out that the private message my code is sending does indeed look similar to the message in XEP-045. The x element is still missing. And I was able to see that the server is actually delivering a message where the recipient jid was correctly resolved, and the x was even contained. So now it is more a matter of correctly processing that private message on recipient side, which I should be able to do. And I still need to figure out how to add an x...

  177. gutuning has joined

  178. Link Mauve

    hiran, flow told you how earlier: 12:36:47 flow> hiran, what pep said, you need to "builder.addExtension(new MUCUser())"

  179. gutuning has left

  180. hiran

    Ack. I missed that one before.

  181. hiran

    Confirmed: I do have the x added, just as suggested in the XEP. :-)

  182. alexbay218 has left

  183. hiran

    I also verified if I send the correctly constructed message via the MUC the type gets translated into 'groupchat' which I do not want. So it is important to send private messages via the connection directly. Which kind of makes sense but I was not sure of.

  184. Kiwi has left

  185. wancat has joined

  186. scorch has joined

  187. mikeye has left

  188. pasdesushi has left

  189. gutuning has joined

  190. pasdesushi has joined

  191. scorch has left

  192. gutuning has left

  193. hiran

    So my next goal is to send structured data - not just data that is serialized to a string and sent as message body. How do I best accomplish this via the Smack API? Do I have to introduce a new stanza type (other than Message)? Do I have to go via Extensions, or ...

  194. pep.

    <message> is by design extensible. You don't have to add another stanza type, you can put stuff inside it. <message><foo xmlns='domain.tld:my:ns'>MyData</foo></message>

  195. pep.

    If you need a query/response mechanism you can do the same with IQs

  196. pep.

    (note that you can serialize to XML directly and include it into your private container :))

  197. hiran

    Sounds good. I'd prefer to stick with Messages. So then it is about the content. I guess I do not need to fill the body. But how do I add the custom content?

  198. hiran

    Is the keyword 'Extension'? Then I investigate in that respect...

  199. pep.

    With Smacks I don't know sorry. flow ^

  200. nephele has left

  201. nephele has joined

  202. pep.

    Protocol-wise, just see how XEPs are defined, they're just saying "This TAG with this NS can be used to convey X", there's nothing to "declare" in XMPP. Also you only need a XEP (or any kind of public document) if you want other people to use it in the wild

  203. gutuning has joined

  204. pep.

    Protocol-wise, just see how XEPs are defined, they're just saying "This TAG with this NS can be used to convey X inside a (message|iq|presence)", there's nothing to "declare" in XMPP. Also you only need a XEP (or any kind of public document) if you want other people to use it in the wild

  205. pep.

    If you do want to tell other entities that you support this feature, you may also define a disco feature (to be added to your list of features on your client)

  206. hiran

    Well for now I am creating an XMPP client application that shall be capable of sending message to other clients of that type. It will be a closed system (a game indeed) so I do not think I need to open up the communication and get it standardized. But I need to send structured data - which I theoretically could accomplish by serializing to XML or JSON and put that string into the message body. This would look awkward but for sure work.

  207. pep.

    (say you used 'domain.tld:my:ns' as NS, you can reuse this as a disco feature)

  208. pep.

    Yeah that's not exactly what body is for. It will work for sure but that's not the meaning of this element :)

  209. hiran

    Ah yes, I probably reached the moment where to define that namespace. But even if I had that string (I can make up something) I would not yet know where to put it on Smack

  210. pep.

    I guess the same way as earlier with build.addExtension(new YourExtension())

  211. pep.

    See how MucUser is defined

  212. pep.


  213. hiran

    Ok, then Extension it is. Hmmm, That might be an idea.

  214. hiran

    Strange. I am surfing https://github.com/igniterealtime/Smack/tree/master/smack-core/src/main/java/org/jivesoftware/smack/packet but there is no MUCUser although I am making use of it?

  215. pep.


  216. Alex has left

  217. hiran

    Thanks. smackx indeed

  218. pep.

    (dunno why this is pointing to a specific commit..)

  219. Alex has joined

  220. pep.


  221. sonny has left

  222. sonny has joined

  223. hiran

    I think that is good enough. i will try to implement a similar pattern. Although the toXML code looks, well it may be normal in the Smack world.

  224. pep.


  225. sonny has left

  226. sonny has joined

  227. sonny has left

  228. scorch has joined

  229. sonny has joined

  230. wancat has left

  231. mac has joined

  232. flow

    toXML() is one of the parts in Smack that has a long history. There may be very well 2 or 3 styles of implementation in XML (if you curious, the older 10-15 year old styles are probably in smack-legacy). These days you want to use the XmlStringBuilder in Smack, which I find very effective in serializing something back to XML (in absence of something like JAXB).

  233. flow

    hiran, ↑

  234. flow

    let me know if you have questions, I am usually around here. but I am probably not for long right now, as we just uncovered our inflatable pool :)

  235. sonny has left

  236. sonny has joined

  237. Alex has left

  238. wuuko has left

  239. wuuko has joined

  240. Alex has joined

  241. stuart.j.mackintosh has left

  242. wuuko has left

  243. wuuko has joined

  244. wancat has joined

  245. pasdesushi has left

  246. hiran has left

  247. gutuning has left

  248. pasdesushi has joined

  249. scorch has left

  250. asdgfdgx has joined

  251. scorch has joined

  252. asdgfdgx has left

  253. marc0s has left

  254. marc0s has joined

  255. gutuning has joined

  256. marc0s has left

  257. wuuko has left

  258. jgart has joined

  259. marc0s has joined

  260. wuuko has joined

  261. nephele has left

  262. gutuning has left

  263. gutuning has joined

  264. gutuning has left

  265. mac has left

  266. debacle has joined

  267. nephele has joined

  268. nephele has left

  269. scorch has left

  270. Alex has left

  271. Alex has joined

  272. marc has left

  273. scorch has joined

  274. wuuko has left

  275. goffi has left

  276. pulkomandy has left

  277. sonny has left

  278. pulkomandy has joined

  279. wuuko has joined

  280. sonny has joined

  281. marc has joined

  282. gutuning has joined

  283. sonny has left

  284. sonny has joined

  285. nephele has joined

  286. marc has left

  287. marc has joined

  288. scorch has left

  289. goffi has joined

  290. sonny has left

  291. sonny has joined

  292. marc has left

  293. scorch has joined

  294. marc has joined

  295. emus has left

  296. hiran has joined

  297. gutuning has left

  298. gutuning has joined

  299. hiran

    Ok, so I managed to get my structured data (so far very simple just a float) into the stanza to be sent. Now, when I receive such a message, on the debug output I can see the correct message is coming in but I fail to parse it. I am trying to call message.getExtension(extensionclass) and message.getExtension(namespace) but for both I get the IllegalStateException: Extension element is not of expected class "XXX", because there is no according extension element provider registered with ProviderManager It seems I am missing one step still. Will try to find the ProviderManager...

  300. marc has left

  301. hiran

    Ok, seems now I understand where the parsing happens: https://github.com/igniterealtime/Smack/blob/master/smack-core/src/main/java/org/jivesoftware/smack/provider/Provider.java

  302. marmistrz has left

  303. marmistrz has joined

  304. gutuning has left

  305. nephele has left

  306. marc has joined

  307. scorch has left

  308. hiran

    I am impressed. This really seems to work... Now the only thing I am missing is GAIM tells me that sooo many private messages are still unread, although my custom application already processed them. Is there a way to mark a message as 'read' or 'consumed'?

  309. scorch has joined

  310. marc has left

  311. Martin

    GAIM? 😯

  312. Martin

    When did they rename that to pidgin? 2006?

  313. pep.

    hiran, see chat markers or read receipts, the XEPs

  314. pep.

    What do you mean "consume"?

  315. Martin

    I'd also recommend to use a client from within the last decade.

  316. gutuning has joined

  317. marc has joined

  318. hiran

    Smack is outdated? Maybe that explains why I am struggling to find up to date documentation. But which client would be more up to date? I am still on Java...

  319. hiran

    With 'consume' I mean to indicate to the server that this message is processed and does not longer have to be queued. It is quite a standard pattern in JMS. Seems like XMPP does not have such components?

  320. gutuning has left

  321. Martin

    > Smack is outdated? Maybe that explains why I am struggling to find up to date documentation. I'm talking about GAIM.

  322. Kiwi has joined

  323. sonny has left

  324. sonny has joined

  325. sonny has left

  326. sonny has joined

  327. hiran

    @pep: I will check read receipts, thank you

  328. hiran

    @Martin: In Ubuntu 20 it is nowhere visible that GAIM should be outdated. Hang on: The windows says Gajim. Is that still outdated=

  329. mac has joined

  330. hiran

    So I am running Gajim 1.1.3 ( https://gajim.org/ )

  331. wurstsalat

    On Ubuntu 20 you'll have an outdated version of Gajim, yes ;) current version is 1.3, and it's actively developed

  332. wurstsalat

    Gajim 1.3 also makes use of read markers, fyi

  333. wuuko has left

  334. wuuko has joined

  335. Alex has left

  336. marc has left

  337. kikuchiyo has left

  338. scorch has left

  339. DebXWoody has left

  340. scorch has joined

  341. nephele has joined

  342. pep.

    hiran, gajim and gaim are two différent projects, one of which (gaim) renamed (pidgin) around 2006 as Martin said, and is far to be a recommended client nowadays :P

  343. Martin

    > So I am running Gajim 1.1.3 ( https://gajim.org/ ) I'm relieved. 😃

  344. pep.


  345. emus has joined

  346. kikuchiyo has joined

  347. gutuning has joined

  348. hiran

    sorry for being sooo nooby. But it seems you guys are having fun! Nevertheless you helped me really quickly. :-)

  349. hiran

    Thank you so much for that

  350. pep.


  351. hiran

    Regarding message receipts: I am having a look at https://xmpp.org/extensions/xep-0184.html It is what I intended, but it also says the sender of a message needs to actively ask for a receipt message. I think this is not my case.

  352. hiran

    I was simply wondering why one XMPP tells me there are 185 unread messages while they were at the same time received and processed by the other client (logged in on the same JID obviously). Is that maybe the normal behaviour and I should completely ignore Gajim?

  353. mac has left

  354. kikuchiyo has left

  355. gutuning has left

  356. pep.

    This is not your case as in, you don't want to ask for them?

  357. marc has joined

  358. marc has left

  359. marc has joined

  360. marc has left

  361. marc has joined

  362. hiran

    Exactly. The messages sent out by my application do not ask for a receipt. The messages are also received by my application. In parallel they are received by Gajim, and that one tells me to read them all.

  363. marc has left

  364. marc has joined

  365. marc has left

  366. hiran

    Would it help to remove the text body so Gajim knows there is nothing for it to display? I will give that a try...

  367. marc has joined

  368. marc has left

  369. marc has joined

  370. pep.

    Sure yes, if you don't need body, remove it

  371. pep.

    it's not mandatory

  372. marc has left

  373. marc has joined

  374. kikuchiyo has joined

  375. nephele has left

  376. mac has joined

  377. wurstsalat has left

  378. emus has left

  379. emus has joined

  380. hiran

    Looks like removing the message body did silence Gajim. Now that stuff works to my taste. XMPP is really easy to customize. Whoever worked on the design and standardization: Well done!

  381. hiran has left

  382. pep.

    If you ever want to have a peak into the future btw, gajim provides repositories for Debian/Ubuntu :)

  383. mac has left

  384. pep.


  385. pep.

    Ah they're gone

  386. marc0s has left

  387. marc0s has joined

  388. marc has left

  389. marc has joined

  390. marc has left

  391. marc has joined

  392. marc has left

  393. marc has joined

  394. marc has left

  395. marc has joined

  396. marc has left

  397. marc has joined

  398. marc has left

  399. marc has joined

  400. marc has left

  401. marc has joined

  402. marc has left

  403. marc has joined

  404. marc has left

  405. marc has joined

  406. scorch has left

  407. marc has left

  408. marc has joined

  409. marc has left

  410. marc has joined

  411. marc has left

  412. marc has joined

  413. marc has left

  414. gutuning has joined

  415. marc has joined

  416. marc has left

  417. marc has joined

  418. marc has left

  419. marc has joined

  420. marc has left

  421. marc has joined

  422. marc has left

  423. marc has joined

  424. jgart has left

  425. marc has left

  426. marc has joined

  427. marc has left

  428. scorch has joined

  429. marc has joined

  430. marc has left

  431. jgart has joined

  432. marc has joined

  433. marc has left

  434. marc has joined

  435. marc has left

  436. marc has joined

  437. marc has left

  438. scorch has left

  439. marc has joined

  440. marc has left

  441. marc0s has left

  442. marc0s has joined

  443. marc has joined

  444. marc has left

  445. marc has joined

  446. marc has left

  447. marc has joined

  448. marc has left

  449. marc has joined

  450. marc has left

  451. debacle has left

  452. marc has joined

  453. marc has left

  454. marc has joined

  455. marc has left

  456. marc has joined

  457. marc has left

  458. scorch has joined

  459. marc has joined

  460. marc has left

  461. marc has joined

  462. marc has left

  463. marc has joined

  464. marc has left

  465. marc has joined

  466. marc has left

  467. marc has joined

  468. marc has left

  469. marc has joined

  470. marc has left

  471. marc has joined

  472. marc has left

  473. marc has joined

  474. marc has left

  475. marc has joined

  476. marc has left

  477. marc has joined

  478. scorch has left

  479. marc has left

  480. marc has joined

  481. marc has left

  482. marc has joined

  483. marc has left

  484. marc has joined

  485. marc has left

  486. marc has joined

  487. marc has left

  488. marc has joined

  489. marc has left

  490. goffi has left

  491. marc has joined

  492. marc has left

  493. marc has joined

  494. marc has left

  495. marc has joined

  496. emus has left

  497. marc has left

  498. marc has joined

  499. marc has left

  500. marc has joined

  501. marc has left

  502. marc has joined

  503. marc has left

  504. marc has joined

  505. marc has left

  506. marc has joined

  507. marc has left

  508. marc has joined

  509. marc has left

  510. marc has joined

  511. marc has left

  512. marc has joined

  513. marc has left

  514. marc has joined

  515. marc has left

  516. marc has joined

  517. marc has left

  518. marc has joined

  519. marc has left

  520. marc has joined

  521. marc has left

  522. marc has joined

  523. marc has left

  524. marc has joined

  525. marc has left

  526. Kiwi has left

  527. marc has joined

  528. marc has left

  529. marc has joined

  530. marc has left

  531. marc has joined

  532. scorch has joined

  533. marc has left

  534. marc has joined

  535. marc has left

  536. marc has joined

  537. marc has left

  538. marc has joined

  539. marc has left

  540. marc has joined

  541. marc has left

  542. marc has joined

  543. marc has left

  544. marc has joined

  545. marc has left

  546. marc has joined

  547. marc has left

  548. marc has joined

  549. marc has left

  550. marc has joined

  551. nephele has joined

  552. marc has left

  553. nephele has left

  554. marc has joined

  555. marc has left

  556. marc has joined

  557. marc has left

  558. marc has joined

  559. marc has left

  560. marc has joined

  561. marc has left

  562. marc has joined

  563. marc has left

  564. marc has joined

  565. marc has left

  566. marc has joined

  567. marc has left

  568. gutuning has left

  569. gutuning has joined

  570. marc has joined

  571. marc has left

  572. marc has joined

  573. marc has left

  574. marc has joined

  575. marc has left

  576. marc has joined

  577. marc has left

  578. marc has joined

  579. marc has left

  580. marc has joined

  581. marc has left

  582. marc has joined

  583. marc has left

  584. marc has joined

  585. marc has left

  586. marc has joined

  587. marc has left

  588. marc has joined

  589. marc has left

  590. marc has joined

  591. marc has left

  592. kikuchiyo has left

  593. marc has joined

  594. marc has left

  595. marc has joined

  596. marc has left

  597. marc has joined

  598. marc has left

  599. marc has joined

  600. marc has left

  601. marc has joined

  602. marc has left

  603. marc has joined

  604. marc has left

  605. marc has joined

  606. marc has left

  607. marc has joined

  608. marc has left

  609. lovetox has left

  610. marc has joined

  611. marc has left

  612. marc has joined

  613. pasdesushi has left

  614. marc has left

  615. marc has joined

  616. marc has left

  617. marc has joined

  618. marc has left

  619. marc has joined

  620. marc has left

  621. marc has joined

  622. marc has left

  623. marc has joined

  624. marc has left

  625. marc has joined

  626. marc has left

  627. marc has joined

  628. marc has left

  629. marc has joined

  630. marc has left

  631. marc has joined

  632. marc has left

  633. marc has joined

  634. marc has left

  635. marc has joined

  636. marc has left

  637. marc has joined

  638. marc has left

  639. marc has joined

  640. marc has left

  641. marc has joined

  642. marc has left

  643. marc has joined

  644. marc has left

  645. marc has joined

  646. marc has left

  647. marc has joined

  648. marc has left

  649. marc has joined

  650. marc has left

  651. marc has joined

  652. wuuko has left

  653. marc has left

  654. lovetox has joined

  655. marc has joined

  656. marc has left

  657. marc has joined

  658. marc has left

  659. marc has joined

  660. marc has left

  661. marc has joined

  662. marc has left

  663. marc has joined

  664. marc has left

  665. marc has joined

  666. marc has left

  667. marc has joined

  668. marc has left

  669. marc has joined

  670. marc has left

  671. marc has joined

  672. marc has left

  673. marc has joined

  674. marc has left

  675. marc has joined

  676. marc has left

  677. marc has joined

  678. marc has left

  679. marc has joined

  680. marc has left

  681. marc has joined

  682. marc has left

  683. marc has joined

  684. marc has left

  685. marc has joined

  686. marc has left

  687. marc has joined

  688. marc has left

  689. marc has joined

  690. marc has left

  691. marc has joined

  692. marc has left

  693. marc has joined

  694. marc has left

  695. marc has joined

  696. marc has left