Log in

View Full Version : Subtitle Edit


Pages : 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

Ghitulescu
13th May 2014, 15:16
I remember a strange behaviour of SE 3.3.13

when loading a .M2TS file with another ending, as it comes from the receiver, it yields an error message that the file is too big.
however, should I replace the ending of thet file with .TS it works as intended.

Betsy25
16th May 2014, 13:25
Doh, Sorry for the incompleteness Nikse,

For dutch language, the same (as 2 posts above) is actually true for the following conditions (same rules apply as for 't abbrevs at start of sentence)

'k : (abbrev. for "Ik" (in English : "I" ) Example : 'k Heb = I have
'm : (special abbrev. for "Hij" (in English : "He" ) Example : 'm Heeft = He has
'n : (abbrev. for "Een" (in English : "An" ) Example : 'n Appel = An apple
'r : abbrev. for "Haar" (in English : "Her" ) Example : 'r Haar = Her hair

That's all, no other special abbrevs. exist in dutch language ;)

jmartinr
17th May 2014, 20:41
Doh, Sorry for the incompleteness Nikse,

For dutch language, the same (as 2 posts above) is actually true for the following conditions (same rules apply as for 't abbrevs at start of sentence)

'k : (abbrev. for "Ik" (in English : "I" ) Example : 'k Heb = I have
'm : (special abbrev. for "Hij" (in English : "He" ) Example : 'm Heeft = He has
'n : (abbrev. for "Een" (in English : "An" ) Example : 'n Appel = An apple
'r : abbrev. for "Haar" (in English : "Her" ) Example : 'r Haar = Her hair

That's all, no other special abbrevs. exist in dutch language ;)
And of course:
's Avonds

Betsy25
17th May 2014, 22:37
And of course:
's Avonds

Yep, but Nikolaj already took care (https://github.com/SubtitleEdit/subtitleedit/commit/1f0eddc66ff8697a972e24dfeb08914609c36ea9) of it also ! :)

jsa
19th May 2014, 14:32
Latest version of SE (installer version only) uses the roaming profile.

I only rarely update my installation (why update when it works so well), so I just recently experienced this. My installation, which is NOT from the installer, but copied from the portable zip, also now uses roaming profiles. Any possibility of adding the option of a truly portable setup again, using only files/folders in the installation directory?

I like having parallel installations, in case a new install breaks something, and after installing 3.3.15 (from zip), I cannot start my 3.3.14 installation (image OCR is broken in 3.3.15). 3.3.14 barfs on the 3.3.15 config file. See attachment.

mood
27th May 2014, 00:04
@Nikse555

what differentiates choose "Box for each line" or "one box" on border style?

I see no distinction when export, I have black box in all xml/png regardless of which option I choose.

It was nice to see that too in vobsub export option


But I think it is better to add this option as an option in the context menu as a tag like italic or bold tag and then when export read this tag and apply the style like italic or bold do when export.

Nikse555
27th May 2014, 18:05
@jsa: SE portable should not use the roaming profile... unless you install it under "Program files".

@mood: "Box for each line" makes a box behind each lines where "One box" just makes one box - you can only tell the difference if you have multiple lines.
OK, I've added "One box" for vobsub too.
It's always been possible to make boxing via SSA/ASS for single lines, but I've added it in the context menu for the list view too (right click in the list view in the export window).
thx for testing :)

Compile it from Github or try latest beta here: http://www.nikse.dk/SubtitleEdit.zip

mood
27th May 2014, 22:15
@jsa: SE portable should not use the roaming profile... unless you install it under "Program files".

@mood: "Box for each line" makes a box behind each lines where "One box" just makes one box - you can only tell the difference if you have multiple lines.
OK, I've added "One box" for vobsub too.
It's always been possible to make boxing via SSA/ASS for single lines, but I've added it in the context menu for the list view too (right click in the list view in the export window).
thx for testing :)

Compile it from Github or try latest beta here: http://www.nikse.dk/SubtitleEdit.zip

I have tested but when export not export the box.

If you select other line in list view the "one box" disappears even still the tag <BoxSingleLine> and not see the box in exported sub.




when I say add this to context menu a mean in main list view and not in list view on export window.

adding this to the list view of export window it is not practical

jsa
2nd June 2014, 15:18
@jsa: SE portable should not use the roaming profile... unless you install it under "Program files".


I originally copied the file structure from the zip file to:
C:\Program Files (x86)\Utils\SubtitleEdit\3.3.15\
This is under 'program files', but not where a normal install would place it. This used to work with local settings, but does not any more.

I tried moving the folder to a different place (not under 'program files'), and now a local settings.xml file is used. :thanks:

minhjirachi
5th June 2014, 09:31
I have a little problem when export the subtitle. When I watch the movie (Avatar) with .srt subtitle file, it match at all period. But when I export the subtitle to .sup or xml/png to muxing in Scenarist, the subtitle not match anymore. At the beginning of the movie, it's match. At the middle, the subtitle was late about 1s. And at the end of the movie, the subtitle was late about 3s or 4s.

So please fix that problem.

P/S: the subtitle edit still not save the configuration in export xml/png mode. I will try the latest version and report later.

von Suppé
6th June 2014, 06:43
Hi Nikse555

Did you read post# 149?

von Suppé

minhjirachi
6th June 2014, 09:21
No more problem about time drift on the latest beta version.

Nikse555
12th June 2014, 18:47
@von Suppé: I think I found the bug - a threading issue that could cause two different bitmaps to write to same header... which is of course very very bad!
C# source code change is here: https://github.com/SubtitleEdit/subtitleedit/commit/61ebdd92ea28cb959d1fc8582e5c23c1fc09b50e
Test version here: http://www.nikse.dk/SubtitleEdit.zip (.net 4, current source, portable version)

@mood: You can use ssa/ass for boxes in the main window

von Suppé
13th June 2014, 10:35
:thanks: Nikse555. Will try test version.

Music Fan
13th June 2014, 15:03
Hi Nikse555,
I tried to open a Hd-dvd sup file but it didn't work ; is this format supposed to be supported by SE ?

mariner
13th June 2014, 16:40
Greetings.

The subtitle duration change tool seems to limit the amount to 1sec. Is there a way to get around this?

If not, would anyone be kind enough suggest alternatives? Something simple for srt subs would suffice.

Thank you and best regards.

Nikse555
13th June 2014, 17:33
@Music Fan: Sorry, I never got around to it...

@marianer: I've added a few more values: http://www.nikse.dk/SubtitleEdit.zip (portable version, beta), or you could use percent or re-calculate durations using chars per sec

mariner
14th June 2014, 14:53
@marianer: I've added a few more values: http://www.nikse.dk/SubtitleEdit.zip (portable version, beta), or you could use percent or re-calculate durations using chars per sec

Thanks Nik.

It would be great if you could also include +10.

Many thanks for providing this extremely useful tool.

Music Fan
14th June 2014, 15:24
@Music Fan: Sorry, I never got around to it...
Do you believe you could add this format or you won't ?

Betsy25
16th June 2014, 18:51
The latest testversion from http://www.nikse.dk/SubtitleEdit.zip gives the following error when being run on Windows 7 32bit.

--> Screenshot (http://i.imgur.com/t2eHAQZ.png)

I forgot to make a backup of the previous testversion, anyone know of a working recent testversion please ?

Nikse555
16th June 2014, 20:01
@mariner: np, added here: http://www.nikse.dk/SubtitleEdit.zip

@Music Fan: I don't have any sample files - but it's probably not something that's very easy to add, but I don't mind taking a look if you think it will be useful (this format is probably dead, right?)

@Betsy25: Ups yes, try the above version.

mariner
18th June 2014, 13:23
@mariner: np, added here: http://www.nikse.dk/SubtitleEdit.zip

.

Thanks Nik. +10 works fine.

Having a little trouble with BD sup creation. It seems PotPlayer/PDVD only displays the sup created using Simple Rendering, while MPC-BE doesn't not have such issue. Appreciate if you could look into it.

Finally, how does one play with the Alpha setting?

Many thanks and best regards.

Nikse555
23rd June 2014, 20:23
Having a little trouble with BD sup creation. It seems PotPlayer/PDVD only displays the sup created using Simple Rendering, while MPC-BE doesn't not have such issue. Appreciate if you could look into it.

Finally, how does one play with the Alpha setting?

PotPlayer works with 'normal' rendering too - if alpha is 255 (fully visible).

You can now change alpha in the color picker dialog :)

mariner
24th June 2014, 06:17
PotPlayer works with 'normal' rendering too - if alpha is 255 (fully visible).

You can now change alpha in the color picker dialog :)

Thanks for the reply, Nik.

1. It appears "normally rendered" sups only work with PotPlayer if Shadow Width is set to 0. Alpha setting doesn't seem to have any effect. Another interesting observation: if fed into BDSup2Sub and saved without any changes, the new sup works.

2. The 3.3.15 seems to have problem retaining "960x540" video resolution setting. The XML output shows "640x272".

3. Is there a way for SubEdit to transform the following timecoed format into proper srt sub with a fixed duration?


00:00:02.000
aaaa
bbbb
.
.


Many thanks and best regards.

Nikse555
24th June 2014, 07:11
1) I'm pretty sure it's an alpha setting thing... and I'm also pretty sure that next version of PotPlayer will be able to play bdsup files with partly transparent shadow or box :)

2) What and how exactly?

3) Post or email a more complete file and I'll take a look.

Ghitulescu
24th June 2014, 07:51
Just a side remark - test the software against hardware players, otherwise you may end with a product that is custom-taylored to a player (in this case PotPlayer) that tomorrow may change.

mariner
24th June 2014, 12:07
1) I'm pretty sure it's an alpha setting thing... and I'm also pretty sure that next version of PotPlayer will be able to play bdsup files with partly transparent shadow or box :)


Attached are three sup files:
0.sup has 0 shadow width and works with PorPlayer,
1.sup has SW=1 Alpha=255, and does not work,
1_exp.sup is processed by BDSup2Sub and works.

14253

2) What and how exactly?

This is the setting for 960x540, and the XML shows 640x272.

14252

<?xml version="1.0" encoding="UTF-8"?>
<BDN Version="0.93" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BD-03-006-0093b BDN File Format.xsd">
<Description><Name Title="subtitle_exp" Content="" /><Language Code="eng" />
<Format VideoFormat="640x272" FrameRate="25" DropFrame="False" />
<Events Type="Graphic" FirstEventInTC="00:00:02:00" LastEventOutTC="00:10:01:13" NumberofEvents="4" />
</Description><Events><Event InTC="00:00:02:00" OutTC="00:00:12:00" Forced="False">
<Graphic Width="470" Height="260" X="245" Y="260">0001.png</Graphic>
</Event>
<Event InTC="00:04:41:12" OutTC="00:04:51:12" Forced="False">
<Graphic Width="470" Height="194" X="245" Y="326">0002.png</Graphic>
</Event>
<Event InTC="00:05:55:00" OutTC="00:06:05:00" Forced="False">
<Graphic Width="438" Height="194" X="261" Y="326">0003.png</Graphic>
</Event>
<Event InTC="00:09:51:13" OutTC="00:10:01:13" Forced="False">
<Graphic Width="437" Height="194" X="261" Y="326">0004.png</Graphic>
</Event>
</Events></BDN>


3) Post or email a more complete file and I'll take a look.

Something like this, say for 10s duration.

00:00:02.000
Junior Semifinal, part 1
Aidiba Talamunuer, Berezan
Bogdan Voloshin, Yaroslavl
Alexandr Doronin, Almaty

00:04:41.480
G. Zhubanova
«Kui»
Aidiba Talamunuer, Berezan

00:05:55.000
N. Mendigaliev
«Steppe»
Bogdan Voloshin, Yaroslavl

00:09:51.520
A. Lokshin
«Dance»
Alexandr Doronin, Almaty


Many thanks and best regards.

mariner
24th June 2014, 12:14
Just a side remark - test the software against hardware players, otherwise you may end with a product that is custom-taylored to a player (in this case PotPlayer) that tomorrow may change.

Have not tested on a player yet.

SE has the unique ability to create sups with non standard video resolution. Want to make sure everything is in order.

Music Fan
24th June 2014, 12:26
@Music Fan: I don't have any sample files - but it's probably not something that's very easy to add, but I don't mind taking a look if you think it will be useful (this format is probably dead, right?)
I found another program (BDSup2Sub) able to convert Hd-dvd sup into BD Sup, so if it's not easy to add in SE, don't waste your time.;)

Nikse555
25th June 2014, 19:16
@mariner: Could you test this version: http://www.nikse.dk/SubtitleEdit.zip (beta, portable version) - does the file format work + resolution? (if not, how to you get to the export bdn xml window?)
Notice that both "border" and "shadow" can have alpha adjusted.

@Music Fan: OK, I'll use my time for preparing SE 3.4 instead :)

mariner
26th June 2014, 07:14
@mariner: Could you test this version: http://www.nikse.dk/SubtitleEdit.zip (beta, portable version) - does the file format work + resolution? (if not, how to you get to the export bdn xml window?)
Notice that both "border" and "shadow" can have alpha adjusted.


Thanks for posting build 435, Nik.

1. PotPlayer issue: no change.

I've posted what BDSup2sub reports when reading a sup file. It seems the difference between the bad and good sup file is the update entries. All the good ones, including the one fixed by BDSup2sub, have less than 256 entries. Is this related to the issue at hand?

Bad sup
BDSup2Sub++ 1.0.2 - a converter from Blu-Ray/HD-DVD SUP to DVD SUB/IDX and more
0xdeadbeef, mjuhasz, Adam T.
Official thread at Doom9: https://forum.doom9.org/showthread.php?t=167051

Loading G:/sup/1/j.200.sup
PCS ofs:0x00000000, START, size:0x0013, comp#: 0, Object Id: 0, forced: false, palID: 0, objID: 0
PTS start: 00:00:01.955, screen size: 960*540
WDS ofs:0x00000020, size:0x000a, windows 0 dim: 335*155
PDS ofs:0x00000037, size:0x0502, ID: 0, update: 0, 256 entries
ODS ofs:0x00000546, size:0x5561, img size: 335*155
END ofs: 0x00005ab4
#< 1 (00:00:01.955)
PCS ofs:0x00005ac1, START, size:0x000b, comp#: 1
PTS start: 00:00:11.955, screen size: 960*540
WDS ofs:0x00005ad9, size:0x000a, windows 0 dim: 335*155
END ofs: 0x00005af0
PCS ofs:0x00005afd, START, size:0x0013, comp#: 0, Object Id: 0, forced: false, palID: 0, objID: 0
PTS start: 00:00:21.435, screen size: 960*540
WDS ofs:0x00005b1d, size:0x000a, windows 0 dim: 335*119
PDS ofs:0x00005b34, size:0x0502, ID: 0, update: 0, 256 entries
ODS ofs:0x00006043, size:0x270a, img size: 335*119
END ofs: 0x0000875a
#< 2 (00:00:21.435)
PCS ofs:0x00008767, START, size:0x000b, comp#: 1
PTS start: 00:00:31.435, screen size: 960*540
WDS ofs:0x0000877f, size:0x000a, windows 0 dim: 335*119
END ofs: 0x00008796

"Fixed" by BDSup2sub
BDSup2Sub++ 1.0.2 - a converter from Blu-Ray/HD-DVD SUP to DVD SUB/IDX and more
0xdeadbeef, mjuhasz, Adam T.
Official thread at Doom9: https://forum.doom9.org/showthread.php?t=167051

Loading G:/sup/1/j.200_exp.sup
PCS ofs:0x00000000, START, size:0x0013, comp#: 0, Object Id: 0, forced: false, palID: 0, objID: 0
PTS start: 00:00:01.960, screen size: 960*540
WDS ofs:0x00000020, size:0x000a, windows 0 dim: 336*156
PDS ofs:0x00000037, size:0x04f8, ID: 0, update: 0, 254 entries
ODS ofs:0x0000053c, size:0x59ea, img size: 336*156
END ofs: 0x00005f33
#< 1 (00:00:01.960)
PCS ofs:0x00005f40, START, size:0x000b, comp#: 1
PTS start: 00:00:11.960, screen size: 960*540
WDS ofs:0x00005f58, size:0x000a, windows 0 dim: 336*156
END ofs: 0x00005f6f
PCS ofs:0x00005f7c, START, size:0x0013, comp#: 2, Object Id: 0, forced: false, palID: 0, objID: 0
PTS start: 00:00:21.440, screen size: 960*540
WDS ofs:0x00005f9c, size:0x000a, windows 0 dim: 336*120
PDS ofs:0x00005fb3, size:0x04fd, ID: 0, update: 0, 255 entries
ODS ofs:0x000064bd, size:0x296b, img size: 336*120
END ofs: 0x00008e35
#< 2 (00:00:21.440)
PCS ofs:0x00008e42, START, size:0x000b, comp#: 3
PTS start: 00:00:31.440, screen size: 960*540
WDS ofs:0x00008e5a, size:0x000a, windows 0 dim: 336*120
END ofs: 0x00008e71


2. XML video format issue:

The 960x540 format is now correctly shown, but 1280x720 is shown as 1080p.

3. XML timecode for 23.976, 29.97 and 59.94 fps.

I notice SE does not follow the usual convention of speeding up the XML timecode by a factor of 1.001 when the fps is one of the above mentioned. So when the XML produced by SE is used by BDSup2sub, the resulting BD sup is slowed down by a factor of 1.001.

Any good reason for doing this?

Many thanks and best regards.

Nikse555
26th June 2014, 14:28
1) Thx a lot for the info - yes, one less entry in the color palette seems to fix this :)
http://www.nikse.dk/SubtitleEdit.zip (new beta, portable version, )

2 would you rather have just the resolution? (I think I saw 1080p in a bd xml file)

3 Well, I mostly work with srt... but I've given it a try for File -> Export -> BDN xmp/png (does it work in above beta version?)

mariner
27th June 2014, 09:35
1) Thx a lot for the info - yes, one less entry in the color palette seems to fix this :)
http://www.nikse.dk/SubtitleEdit.zip (new beta, portable version, )


255 appears to do the trick. Thanks.

What's wrong with 256?

2 would you rather have just the resolution? (I think I saw 1080p in a bd xml file)

I would think you want the subtitle to follow the resolution of the video?


3 Well, I mostly work with srt... but I've given it a try for File -> Export -> BDN xmp/png (does it work in above beta version?)

No change.

4. Timecode import.

Thanks for adding the feature. Is there a way to make the duration fixed?

Many thanks and best regards.

Nikse555
30th June 2014, 19:13
I've no clue what's wrong with 256... it's the max number of values for a byte so 256 sounds more correct than 255 - but I've never seen the bluray sup specs :(

2) Thx, my bad (reading)... should be fixed in latest beta - http://www.nikse.dk/SubtitleEdit.zip

3) If you choose those drop-frame time codes the times should now be multiplied by 1.001... I think.

4) One way could be Tools -> Adjust durations and add 10 seconds, the use Tools -> Apply duration limits (with 10 seconds as max duration)

Superb
30th June 2014, 22:50
Without reading the rest of the issue (I've only read the first line of the comment above me):
255 is the maximum number for a byte. Don't forget that the counting starts from 0.
So 0-255 are 256 different values (or 2^8; the number of unique binary combinations of 8 bits).

Nikse555
1st July 2014, 16:11
@Superb: Yes, I was unclear... now SE creates index 0-254 palettes for bluray sup (255 values), and ealier SE created 0-255 index palettes (256 different palettes), but that caused some programs not to display the subtitles... I would like to know what the specification says ;)

mariner
2nd July 2014, 06:44
I've no clue what's wrong with 256... it's the max number of values for a byte so 256 sounds more correct than 255 - but I've never seen the bluray sup specs :(

2) Thx, my bad (reading)... should be fixed in latest beta - http://www.nikse.dk/SubtitleEdit.zip

3) If you choose those drop-frame time codes the times should now be multiplied by 1.001... I think.


Perhaps you'd like to discuss these matters with ps auxw. He'd e also be able to advise you on how to render contiguous subtitles without flickering.


4) One way could be Tools -> Adjust durations and add 10 seconds, the use Tools -> Apply duration limits (with 10 seconds as max duration)

Brilliant.

Many thanks and best regards.

Music Fan
2nd July 2014, 11:16
I noticed a little problem with VLC when playing video including Blu-ray sup : if there is no space (in time) between 2 successive subtitles in the original srt, the sup are not correctly displayed.
Example ;
1
00:01:48,955 --> 00:01:51,082
Hello guys,

2
00:01:51,082 --> 00:01:53,300
how are you ?

I guess the solution is to shorten the first subtitle and get this (for example) ;
1
00:01:48,955 --> 00:01:50,900

Is it possible to detect it with SE (for srt) and shorten the subtitles only when their end timecode is the same than the debut timecode of the following subtitle ?
I could apply duration limits but I'm afraid that some non problematic subtitles would become too short.

minhjirachi
4th July 2014, 11:43
When I export the subtitle as xml/png, I can't import that xml to Scenarist. So please fix that problem.

Thank you so much.

von Suppé
6th July 2014, 23:21
Hi Nikse555

First tests with latest version show that the hash-check numbers of multiple, same exports to SUP format are equal. Thanks for this fix.

Music Fan
14th July 2014, 01:29
Is there a way to convert DVB-SUB (from HDTV TS) to Blu-ray SUP without doing OCR ?
Because the OCR does not work well with one of my recordings while the original sup is correctly displayed by SE, thus a simple conversion is enough if possible.

kalehrl
14th July 2014, 08:11
Is Blu-ray SUP just the ordinary SUP?
If so, then ProjectX converts DVB subtitles to SUP format and also to VobSub.

Music Fan
14th July 2014, 09:03
Thanks, I know, I already tried ProjectX but the conversion is not very well done.

Nikse555
14th July 2014, 09:13
SE 3.4 out :)

@Music Fan: I've added a small overlap fix in 3.4 for outputting bluray sup when end time = next start time, then the end time will be shortened by one ms... but it might not be enough. SE -> Tools -> Min display time between subtitles might help though.
To convert imaged based formats to Blu-ray sup, just right click in the list view in the ocr window and choose Export -> Bluray sup...

@minhjirachi: What's the error message? How can I test it?

@von Suppé: Thx for testing :)

Music Fan
14th July 2014, 10:42
SE 3.4 out :)

@Music Fan: I've added a small overlap fix in 3.4 when outputting bluray sup when end time = next start time, then the end time will be shortened by one ms... but it might not be enough. SE -> Tools -> Min display time between subtitles might help though.
Great, I will have a look on this :)

To convert imaged based formats to Blu-ray sup, just right click in the list view in the ocr window and choose Export -> Bluray sup...
Thanks, very well hidden option ;)
It works but the subtitle size is much smaller than the original (both played by VLC) while the font size can't be changed in SE in this case.
I chose 1080p for resolution because this is the video resolution, but the original sub has maybe a wrong size (for example 576p while it should be 1080p) which could explain the size change when exporting in 1080p.:confused:
How to export in 1080p keeping the same size ?

Nikse555
14th July 2014, 10:46
Sorry, SE don't have any re-sizing of subtitle images, so you would have to do the resizing in BDSup2Sub... or ocr and export.

Music Fan
14th July 2014, 11:17
Ok thanks, and do you know why VLC does not display the original dvb-sub and the blu-ray sup (remuxed with TSMuxer) with the same size ? Could it be related to the SE conversion ?

Music Fan
14th July 2014, 11:54
Other question : is there a way to change sup maximum duration and gap without doing OCR ?
These option are not available in the OCR window, and if I do ok in the OCR window without doing OCR, I get the timecodes without text in the main window, but the maximum duration and gap can be changed there.
Then, if I export in Blu-ray sup, the subtitle are empty. If I save it in srt, I have a file with the corrected timecodes but without text.
If these changes can't be applied in the OCR window, could you add an option to load the timecodes from an external srt (actually the srt without text created just before) and apply it to the sup (if possible) ?
Thanks for your work ;)

Nikse555
14th July 2014, 16:00
I've tried to add an "Import new time codes"... http://www.nikse.dk/SubtitleEdit.zip (portable version)
Does it work?

Music Fan
14th July 2014, 16:50
Yes, you rule !:)
But there is a minor problem : curiously, when I open the sup with modified timecodes (thus after having imported new time codes and exported in Blu-ray sup), the timecodes are all displayed 44 ms sooner than those in the srt used as new time codes.
For example, if the time code of the first line of the good srt is ;
1
00:00:07,921 --> 00:00:12,241
I get this in the corrected sup ;
1
00:00:07,877 --> 00:00:12,197

But as I can change srt's timecode easily with SE to compensate this little change, that's not a big problem.;)