Page 31 of 32 FirstFirst ... 2129303132 LastLast
Results 901 to 930 of 956

Thread: Paq8pxd dict

  1. #901
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    here are gathered information about enwik8 and enwik9 scores for paq8pxd v79 to v86 - big part of the scores are Kaitz and Sportman scores - thanks for this!
    I was curious how the latest changes improve compression - the change to previous version with the same setting is at the end of line. For new settings (-w, or -e) first comparison is to last version and option w/o this setting.
    Bolded scores are the best for version. Maybe this list would be usabel for someone .

    16'272'537 - enwik8 -s8 by Paq8pxd_v79_AVX2, change: -0,12%
    16'214'034 - enwik8 -x8 by Paq8pxd_v79_AVX2, change: -0,11%
    15'925'621 - enwik8 -s15 by Paq8pxd_v79_AVX2, change: -0,10%
    15'862'122 - enwik8 -x15 by Paq8pxd_v79_AVX2, change: -0,10%
    15'843'925 - enwik8.drt -x15 by Paq8pxd_v79_AVX2, change: -0,05%
    125'997'424 - enwik9 -s15 by Paq8pxd_v79_AVX2, change: 0,00%
    125'532'596 - enwik9 -x15 by Paq8pxd_v79_AVX2, change: -0,33%
    125'475'149 - enwik9_1423 -x15 by Paq8pxd_v79_AVX2, change: -0,26%
    126'282'907 estimated - enwik9_1423.drt -x15 by Paq8pxd_v79_AVX2, change: -0,05%


    16'265'881 - enwik8 -s8 by Paq8pxd_v80 / v81_AVX2, change: -0,04%
    16'222'997 - enwik8 -s8 -w by Paq8pxd_v80 / v81_AVX2, change: -0,30%
    16'207'724 - enwik8 -x8 by Paq8pxd_v80 / v81_AVX2, change: -0,04%
    16'162'663 - enwik8 -x8 -w by Paq8pxd_v80 / v81_AVX2, change: -0,32%
    15'919'839 - enwik8 -x10 -w by Paq8pxd_v80 / v81_AVX2, change: n/a
    15'924'798 - enwik8 -s15 by Paq8pxd_v80 / v81_AVX2, change: -0,01%
    15'898'839 - enwik8 -s15 -w by Paq8pxd_v80 / v81_AVX2, change: -0,17%
    15'861'418 - enwik8 -x15 by Paq8pxd_v80 / v81_AVX2, change: 0,00%
    15'835'340 - enwik8 -x15 -w by Paq8pxd_v80 / v81_AVX2, change: -0,17%
    15'849'095 - enwik8.drt -x15 by Paq8pxd_v80 / v81_AVX2, change: 0,03%
    125'592'281 - enwik9 -s15 by Paq8pxd_v80 / v81_AVX2, change: -0,32%
    125'354'436 - enwik9 -s15 -w by Paq8pxd_v80 / v81_AVX2, change: -0,51%
    125'156'067 - enwik9 -x15 by Paq8pxd_v80 / v81_AVX2, change: -0,30%
    124'905'286 - enwik9 -x15 -w by Paq8pxd_v80 / v81_AVX2, change: -0,50%
    125'101'814 - enwik9_1423 -x15 by Paq8pxd_v80 / v81_AVX2, change: -0,30%
    125'691'714 - enwik9_1423.drt -x15 by Paq8pxd_v80 / v81_AVX2, change: -0,47%


    16'214'678 - enwik8 -s8 -w by Paq8pxd_v82_AVX2, change: -0,05%
    16'154'836 - enwik8 -x8 -w by Paq8pxd_v82_AVX2, change: -0,05%
    15'915'083 - enwik8 -x10 -w by Paq8pxd_v82_AVX2, change: -0,03%
    15'895'227 - enwik8 -s15 -w by Paq8pxd_v82_AVX2, change: -0,02%
    15'831'678 - enwik8 -x15 -w by Paq8pxd_v82_AVX2, change: -0,02%
    128'613'028 - enwik9 -x9 -w by Paq8pxd_v82_AVX2, change: 0,00%
    126'615'900 - enwik9 -x10 -w by Paq8pxd_v82_AVX2, change: 0,00%
    125'622'750 - enwik9 -x11 -w by Paq8pxd_v82_AVX2, change: 0,00%
    125'241'759 - enwik9 -x12 -w by Paq8pxd_v82_AVX2, change: 0,00%
    124'992'597 - enwik9 -x13 -w by Paq8pxd_v82_AVX2, change: 0,00%
    124'741'041 - enwik9 -x14 -w by Paq8pxd_v82_AVX2, change: 0,00%
    125'153'111 - enwik9 -s15 -w by Paq8pxd_v82_AVX2, change: -0,16%
    124'688'860 - enwik9 -x15 -w by Paq8pxd_v82_AVX2, change: -0,17%


    16'183'695 - enwik8 -s8 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,19%
    16'125'408 - enwik8 -x8 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,18%
    15'887'640 - enwik8 -x10 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,17%
    15'867'233 - enwik8 -s15 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,18%
    15'804'790 - enwik8 -x15 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,17%
    124'822'840 - enwik9 -s15 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,26%
    124'368'902 - enwik9 -x15 -w by Paq8pxd_v82_AVX2_SSEmod, change: -0,26%


    16'183'661 - enwik8 -s8 -w by Paq8pxd_v83, change: 0,00%
    16'125'181 - enwik8 -x8 -w by Paq8pxd_v83, change: 0,00%
    15'888'145 - enwik8 -x10 -w by Paq8pxd_v83, change: 0,00%
    15'867'898 - enwik8 -s15 -w by Paq8pxd_v83, change: 0,00%
    15'805'730 - enwik8 -x15 -w by Paq8pxd_v83, change: 0,01%
    124'809'880 - enwik9 -s15 -w by Paq8pxd_v83, change: -0,01%
    124'359'068 - enwik9 -x15 -w by Paq8pxd_v83, change: -0,01%


    16'179'800 - enwik8 -s8 -w by Paq8pxd_v85, change: -0,02%
    16'057'444 - enwik8 -s8 -w -e1,english.dic by Paq8pxd_v85, change: -0,78%
    16'121'181 - enwik8 -x8 -w by Paq8pxd_v85, change: -0,02%
    15'997'379 - enwik8 -x8 -w -e1,english.dic by Paq8pxd_v85, change: -0,79%
    15'866'333 - enwik8 -x10 -w by Paq8pxd_v85, change: -0,14%
    15'748'830 - enwik8 -x10 -w -e1,english.dic by Paq8pxd_v85, change: -0,88%
    16'035'465 - enwik8 -x10 -w -e1,pa8px.dic by Paq8pxd_v85, change: 0,93%
    15'862'215 - enwik8 -s15 -w by Paq8pxd_v85, change: -0,04%
    15'749'003 - enwik8 -s15 -w -e1,english.dic by Paq8pxd_v85, change: -0,75%
    15'794'654 - enwik8 -x15 -w by Paq8pxd_v85, change: -0,07%
    15'674'853 - enwik8 -x15 -w -e1,english.dic by Paq8pxd_v85, change: -0,83%
    124'732'888 - enwik9 -s15 -w by Paq8pxd_v85, change: -0,06%
    124'315'764 - enwik9 -s15 -w -e1,english.dic by Paq8pxd_v85, change: -0,40%
    123'998'447 - enwik9 -x15 -w by Paq8pxd_v85, change: -0,29%
    123'523'709 - enwik9 -x15 -w -e1,english.dic by Paq8pxd_v85, change: -0,67%


    15'843'522 - enwik8 -s15 -w by Paq8pxd_v86, change: -0,12%
    15'731'843 - enwik8 -s15 -w -e1,english.dic by Paq8pxd_v86, change: -0,11%
    15'775'656 - enwik8 -x15 -w by Paq8pxd_v86, change: -0,12%
    15'657'566 - enwik8 -x15 -w -e1,english.dic by Paq8pxd_v86, change: -0,11%
    124'035'775 - enwik9 -s15 -w -e1,english.dic by Paq8pxd_v86, change: -0,23%
    123'250'680 - enwik9 -x15 -w -e1,english.dic by Paq8pxd_v86, change: -0,22%

  2. #902
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    @Kaitz - is there in paq8pxd serie PDF parser used?
    I think about all PDF files and for example Reymont file in Silesia corpus which is a just normal text of a novel putted into PDF file.
    Maybe it could be crushed even more with good parser and eventually additional polish dictionary used.

  3. #903
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    @Darek: Maybe you can test the effect of precomp on pdfs for paq8pxd?

    In my attempt it didn't help though:
    Code:
      841,687 jpeg-xl-whitepaper.pdf
    5,472,339 jpeg-xl-whitepaper-cn.pcf
    5,688,685 jpeg-xl-whitepaper-cn-t+P.pcf
    
    4,098,870 out
          374 hif
    4,099,244 2
    5,466,536 2-cn.pcf
    5,682,874 2-cn-t+P.pcf
    
      397,496 jpeg-xl-whitepaper.pdf.paq8pxd86
      536,237 jpeg-xl-whitepaper-cn.pcf.paq8pxd86
      407,145 jpeg-xl-whitepaper-cn-t+P.pcf.paq8pxd86
      532,319 2-cn.pcf.paq8pxd86
      403,150 2-cn-t+P.pcf.paq8pxd86

  4. Thanks:

    Darek (17th May 2020)

  5. #904
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    @Shelwien - it looks that precomp doesn't work with this file.
    Changes are negligible and then is communicate that precomp didn't use any of it's methods and there wouldn't be any gains in compression.

    precomp_0_4_7.exe -cn -t+P reymont.pdf

    Precomp v0.4.7 Windows 64-bit - ALPHA version - USE FOR TESTING ONLY
    Free for non-commercial use - Copyright 2006-2019 by Christian Schneider
    preflate v0.3.5 support - Copyright 2018 by Dirk Steinke

    Input file: reymont.pdf
    Output file: reymont.pcf

    Using packJPG for JPG recompression, packMP3 for MP3 recompression.
    --> packJPG library v2.5k (01/22/2016) by Matthias Stirner / Se <--
    --> packMP3 library v1.0g (01/22/2016) by Matthias Stirner <--
    More about packJPG and packMP3 here: http://www.matthiasstirner.com

    100.00% - New size: 6627226 instead of 6627202

    Done.
    Time: 62 millisecond(s)

    Recompressed streams: 0/0

    None of the given compression and memory levels could be used.
    There will be no gain compressing the output file.

  6. #905
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    I've wrote to Shnadeer but maybe resolving this issue of the file Reymont is easier.

    "I've checked the file on textual viewers then this file contains generally text (in Polish) but splitted by some strange numbers in the middle of words...
    Of course there are additionally polish special charts (ł,ś,ń,ó etc.) but there are strange split with words without these charts. Example:

    PDF text:

    Td[({)-412(Gran)29(ula,)-412(b)1(iedoto,)-412(gr)1(a)-1(n)29(ula!)

    As a pure text should be:

    Granula, biedoto, granula!

    Of corse with, some charts like space have -412 number as I understand but why there 1 or -1 figures in the middle of the word and if it's possible to separate it from the text.
    Of course I know that there numbers are neccessary for the file and it should be puttet back before decompression, but if it would be possible to separate all these numbers, maybe remove the brackets, then, using polish dictioanry is posssible to compress this file better ratio than is actually made."

    @Kaitz - I have additional question about the dictionary. I've made dictionary to Reymont but from some reason paq8pxd didn't use it. It's probably formatting issue... How I should made this kind of file?
    I've build it in Wordpad as an unformatted text. Should it be sorted from most offen to least offen words?

  7. #906
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    Here I made a script to extract the text.
    Have to compress .1+.2 instead of original file.
    Attached Files Attached Files

  8. Thanks (2):

    Darek (17th May 2020),schnaader (17th May 2020)

  9. #907
    Member
    Join Date
    Jun 2009
    Location
    Puerto Rico
    Posts
    233
    Thanks
    127
    Thanked 45 Times in 35 Posts
    Kaitz has released v89: https://github.com/kaitz/paq8pxd/releases/tag/v89

    Code:
    * fix subsamp reset on every new jpeg

  10. #908
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    V87 and v88 doesn' exists??
    Thank you Luca


    Quote Originally Posted by moisesmcardona View Post
    Kaitz has released v89: https://github.com/kaitz/paq8pxd/releases/tag/v89

    Code:
    * fix subsamp reset on every new jpeg

  11. Thanks:

    Darek (20th May 2020)

  12. #909
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts

  13. #910
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    Thank you moisesmcardona!
    The problem is that a can't find the sources at:

    https://github.com/kaitz/paq8pxd/releases/tag/v87
    https://github.com/kaitz/paq8pxd/releases/tag/v88


    Thank you
    ​Luca
    Last edited by LucaBiondi; 21st May 2020 at 09:48.

  14. Thanks:

    Darek (20th May 2020)

  15. #911
    Member
    Join Date
    Aug 2008
    Location
    Planet Earth
    Posts
    982
    Thanks
    96
    Thanked 396 Times in 276 Posts
    enwik8:
    15,785,209 bytes, 7,016.657 sec., paq8pxd_v89_avx2 -x15 -w (memory use 21,710,798,848 bytes total, sample at 99.99%‬)
    15,655,526 bytes, 7,364.336 sec., paq8pxd_v89_avx2 -x15 -w -e1,english.dic
    Last edited by Sportman; 21st May 2020 at 00:52.

  16. Thanks:

    Darek (20th May 2020)

  17. #912
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    Scores of my testset for paq8pxd_v89. Slight reverse in total testset. Mixed scores for textual files, worse scores for exe files.
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	paq8pxd_v89_DBA.jpg 
Views:	9 
Size:	773.6 KB 
ID:	7625  

  18. #913
    Member
    Join Date
    Jun 2009
    Location
    Puerto Rico
    Posts
    233
    Thanks
    127
    Thanked 45 Times in 35 Posts
    Quote Originally Posted by LucaBiondi View Post
    Thank you moisesmcardona!
    The problem is that a can't find the sources at:

    https://github.com/kaitz/paq8pxd/releases/tag/v87
    https://github.com/kaitz/paq8pxd/releases/tag/v88


    Thank you
    ​Luca
    The commits are there. Kaitz just didn't posted the compiled versions:

    v87: https://github.com/kaitz/paq8pxd/com...36a8cbda783961
    v88: https://github.com/kaitz/paq8pxd/com...b433994fea1f6d

    I've attached them with the source from their respective commits. Compiled with march=native on my AMD Ryzen 9 CPU.
    Attached Files Attached Files

  19. Thanks:

    Darek (24th May 2020)

  20. #914
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    Thank you!!
    Quote Originally Posted by moisesmcardona View Post
    The commits are there. Kaitz just didn't posted the compiled versions:

    v87: https://github.com/kaitz/paq8pxd/com...36a8cbda783961
    v88: https://github.com/kaitz/paq8pxd/com...b433994fea1f6d

    I've attached them with the source from their respective commits. Compiled with march=native on my AMD Ryzen 9 CPU.

  21. #915
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    Are there any changes worth to test v87 and v88?

  22. #916
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    I don't think so - there're bugfixes and various tweaks (mostly jpeg model), according to changelog. All changes should be included in v89.

    If you need something to test, why not test different ppmd parameters? https://github.com/kaitz/paq8pxd/blo...pxd.cpp#L12013
    These numbers there (12,6,210,64 etc) are somewhat random, so you can try increasing or decreasing them and check how it affects compression.
    (12 and 6 are PPM orders and 210,64 are memory allocation per ppmd instance).

  23. #917
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    Hi Shelwien,

    About testing parameters.

    for ppmd_12_256_1

    level 8 order 12 memory 210 MB
    level 9 order 16 memory 420 MB
    level 10 order 16 memory 840 MB
    level 11 order 16 memory 1680 MB
    level 12 order 16 memory 1680 MB
    level 13 order 16 memory 1680 MB
    level 14 order 16 memory 1680 MB
    level 15 order 16 memory 1680 MB



    for ppmd_6_64_2

    order 6 memory 64 MB (for each level)


    Do you know if there is a memory limitation allocating more than 1680 MB or 2000 MB?


    Thank you,
    Luca

  24. #918
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    > Do you know if there is a memory limitation allocating more than 1680 MB or 2000 MB?

    Afaik it should support up to 4095MB on x64.
    It uses 32-bit pointers for the tree, so no more than 4GB certainly, but up to that it should work.

    There's also a third parameter which controls whether ppmd resets statistics when its memory ends
    0 = full reset, 1 = tree reduction which leaves 75% of stats.
    In fact this is also a tunable parameter: https://github.com/kaitz/paq8pxd/blo..._ppmd.inc#L727
    (3*(M>>2))=3*M/4=75%. You can edit it to "GetUsedMemory()>96*(SubAllocatorSize>>7)",
    then try adjusting the coef (1..127 instead of 96 here).

  25. #919
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    Thank you!
    Probably could be useful store parameters into a text file (so ...no file and you will have standard behaviour) or again better have the possibilities to set them from the command line.
    Doing so we can avoid to recompile the sources every time.
    Luca



    Quote Originally Posted by Shelwien View Post
    > Do you know if there is a memory limitation allocating more than 1680 MB or 2000 MB?

    Afaik it should support up to 4095MB on x64.
    It uses 32-bit pointers for the tree, so no more than 4GB certainly, but up to that it should work.

    There's also a third parameter which controls whether ppmd resets statistics when its memory ends
    0 = full reset, 1 = tree reduction which leaves 75% of stats.
    In fact this is also a tunable parameter: https://github.com/kaitz/paq8pxd/blo..._ppmd.inc#L727
    (3*(M>>2))=3*M/4=75%. You can edit it to "GetUsedMemory()>96*(SubAllocatorSize>>7)",
    then try adjusting the coef (1..127 instead of 96 here).

  26. #920
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    Hi all,

    I am trying to compile latest sources of PAQ8PXD.
    I am using the script below that i used to compile PA8PX but i get errors..
    I am not good with c++
    Could some help me? Could some give me a script ?
    Thank you
    Luca



    This is the script:

    @echo off

    set incs=-DWINDOWS -DMT -msse2 -O3 -s -static -lz

    set opts=-fomit-frame-pointer -fstrict-aliasing -fno-stack-protector -fno-stack-check -fno-check-new -floop-interchange -floop-strip-mine -floop-block -funroll-loops -fpeel-loops -fweb
    :-finline-functions -ftree-vectorize -ftree-loop-vectorize -flto

    set arch=-march=native -mtune=native -m64 -ftree-vectorize -fprofile-use
    :-mpreferred-stack-boundary=3 -msse2 -fgcse-after-reload -funsafe-math-optimizations -fassociative-math -freciprocal-math -fbranch-probabilities

    :

    set arg=2
    if not (%1)==() set arg=%1

    if (%arg%)==(0) set gcc=C:\mingw\mingw64-w64\bin\g++.exe& set exe=paq8pxd.exe
    if (%arg%)==(1) set gcc=C:\mingw\mingw64-w64\bin\g++.exe& set exe=paq8pxd.exe
    if (%arg%)==(2) set gcc=C:\mingw\mingw64-w64\bin\g++.exe& set exe=paq8pxd.exe

    set path=%gcc%\..\

    %gcc%\..\gcc.exe -c -O9 %arch% %incs% %opts% -static @zliblist

    :-fno-exceptions -Ofast
    %gcc% -O9 -s %arch% %incs% %opts% -fwhole-program -fpermissive -std=gnu++1z -fno-rtti -static @list *.o -o %exe%

    del *.o
    inside zlist i put:

    paq8pxd.cpp
    wrtpre.cpp

    The error are...

    ected primary-expression before 'wordType'
    void XWRT_Encoder::encodeWord(U8* s,int s_size,EWordType wordType,int& c){
    ^~~~~~~~
    wrtpre.cpp:1361:67: error: expected primary-expression before 'int'
    void XWRT_Encoder::encodeWord(U8* s,int s_size,EWordType wordType,int& c){
    ^~~
    wrtpre.cpp:1553:31: error: variable or field 'WRT_encode' declared void
    void XWRT_Encoder::WRT_encode(U64 filelen){
    ^~~
    wrtpre.cpp:1553:31: error: 'U64' was not declared in this scope
    wrtpre.cpp: In member function 'void XWRT_Encoder::write_dict()':
    wrtpre.cpp:1788:5: error: 'U8' was not declared in this scope
    U8 *bound=(U8*)&word_hash[0]+HASH_TABLE_SIZE*sizeof(word_hash[0])-WORD_MAX_SIZE;
    ^~
    wrtpre.cpp:1788:9: error: 'bound' was not declared in this scope
    U8 *bound=(U8*)&word_hash[0]+HASH_TABLE_SIZE*sizeof(word_hash[0])-WORD_MAX_SIZE;
    ^~~~~
    wrtpre.cpp:1788:9: note: suggested alternative: 'bound4'
    U8 *bound=(U8*)&word_hash[0]+HASH_TABLE_SIZE*sizeof(word_hash[0])-WORD_MAX_SIZE;
    ^~~~~
    bound4
    wrtpre.cpp:1788:19: error: expected primary-expression before ')' token
    U8 *bound=(U8*)&word_hash[0]+HASH_TABLE_SIZE*sizeof(word_hash[0])-WORD_MAX_SIZE;
    ^
    wrtpre.cpp:1789:9: error: 'writeBuffer' was not declared in this scope
    U8 *writeBuffer=(U8*)&word_hash[0]; //putcBuffer;
    ^~~~~~~~~~~
    wrtpre.cpp:1789:9: note: suggested alternative: 'NdrFreeBuffer'
    U8 *writeBuffer=(U8*)&word_hash[0]; //putcBuffer;
    ^~~~~~~~~~~
    NdrFreeBuffer
    wrtpre.cpp:1789:25: error: expected primary-expression before ')' token
    U8 *writeBuffer=(U8*)&word_hash[0]; //putcBuffer;
    ^
    wrtpre.cpp:1790:9: error: 'bufferData' was not declared in this scope
    U8 *bufferData=writeBuffer+3;
    ^~~~~~~~~~
    wrtpre.cpp:1790:9: note: suggested alternative: 'DdeGetData'
    U8 *bufferData=writeBuffer+3;
    ^~~~~~~~~~
    DdeGetData
    wrtpre.cpp:1792:9: error: 'count_header' was not declared in this scope
    U8 *count_header=bufferData;
    ^~~~~~~~~~~~
    wrtpre.cpp:1792:9: note: suggested alternative: '__countof_helper'
    U8 *count_header=bufferData;
    ^~~~~~~~~~~~
    __countof_helper
    wrtpre.cpp:80:19: error: 'XWRT_fileout' was not declared in this scope
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^
    wrtpre.cpp:80:19: note: in definition of macro 'PUTC'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^~~~~~~~~~~~
    wrtpre.cpp:80:19: note: suggested alternative: 'XWRT_Common'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^
    wrtpre.cpp:80:19: note: in definition of macro 'PUTC'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^~~~~~~~~~~~
    wrtpre.cpp:80:19: error: 'XWRT_fileout' was not declared in this scope
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^
    wrtpre.cpp:80:19: note: in definition of macro 'PUTC'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^~~~~~~~~~~~
    wrtpre.cpp:80:19: note: suggested alternative: 'XWRT_Common'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^
    wrtpre.cpp:80:19: note: in definition of macro 'PUTC'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^~~~~~~~~~~~
    wrtpre.cpp:80:19: error: 'XWRT_fileout' was not declared in this scope
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^
    wrtpre.cpp:80:19: note: in definition of macro 'PUTC'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^~~~~~~~~~~~
    wrtpre.cpp:80:19: note: suggested alternative: 'XWRT_Common'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^
    wrtpre.cpp:80:19: note: in definition of macro 'PUTC'
    #define PUTC(c) { XWRT_fileout->putc(c); }
    ^~~~~~~~~~~~
    wrtpre.cpp:1819:21: error: expected primary-expression before ')' token
    fwrite_fast((U8*)writeBuffer+3,count,XWRT_fileout) ;
    ^
    wrtpre.cpp:1819:42: error: 'XWRT_fileout' was not declared in this scope
    fwrite_fast((U8*)writeBuffer+3,count,XWRT_fileout) ;
    ^~~~~~~~~~~~
    wrtpre.cpp:1819:42: note: suggested alternative: 'XWRT_Common'
    fwrite_fast((U8*)writeBuffer+3,count,XWRT_fileout) ;
    ^~~~~~~~~~~~
    XWRT_Common
    wrtpre.cpp:1819:54: error: 'fwrite_fast' cannot be used as a function
    fwrite_fast((U8*)writeBuffer+3,count,XWRT_fileout) ;
    ^
    wrtpre.cpp: At global scope:
    wrtpre.cpp:1822:39: error: variable or field 'WRT_start_encoding' declared void
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~~
    wrtpre.cpp:1822:39: error: 'File' was not declared in this scope
    wrtpre.cpp:1822:39: note: suggested alternative: 'Pie'
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~~
    Pie
    wrtpre.cpp:1822:45: error: 'in' was not declared in this scope
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~
    wrtpre.cpp:1822:45: note: suggested alternative: 'min'
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~
    min
    wrtpre.cpp:1822:49: error: 'File' was not declared in this scope
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~~
    wrtpre.cpp:1822:49: note: suggested alternative: 'Pie'
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~~
    Pie
    wrtpre.cpp:1822:55: error: 'out' was not declared in this scope
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~
    wrtpre.cpp:1822:55: note: suggested alternative: 'putw'
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~
    putw
    wrtpre.cpp:1822:59: error: 'U64' was not declared in this scope
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~
    wrtpre.cpp:1822:71: error: expected primary-expression before 'bool'
    void XWRT_Encoder::WRT_start_encoding(File* in, File* out,U64 fileLen,bool type_detected){
    ^~~~
    wrtpre.cpp:1865:37: error: variable or field 'checkWord' declared void
    inline void XWRT_Encoder::checkWord(U8* &s,int &s_size,int& c){
    ^~
    wrtpre.cpp:1865:37: error: 'U8' was not declared in this scope
    wrtpre.cpp:1865:42: error: 's' was not declared in this scope
    inline void XWRT_Encoder::checkWord(U8* &s,int &s_size,int& c){
    ^
    wrtpre.cpp:1865:44: error: expected primary-expression before 'int'
    inline void XWRT_Encoder::checkWord(U8* &s,int &s_size,int& c){
    ^~~
    wrtpre.cpp:1865:56: error: expected primary-expression before 'int'
    inline void XWRT_Encoder::checkWord(U8* &s,int &s_size,int& c){
    ^~~
    wrtpre.cpp:1911:38: error: 'int XWRT_Encoder::WRT_detectFileType' is not a static data member of 'class XWRT_Encoder'
    int XWRT_Encoder::WRT_detectFileType(U64 filelen){
    ^~~
    wrtpre.cpp:1911:38: error: 'U64' was not declared in this scope
    wrtpre.cpp: In function 'int compare_str(const void*, const void*)':
    wrtpre.cpp:1968:26: error: 'dict' was not declared in this scope
    return strcmp((char*)dict[a],(char*)dict[b]);
    ^~~~
    wrtpre.cpp:1968:26: note: suggested alternative: 'div'
    return strcmp((char*)dict[a],(char*)dict[b]);
    ^~~~
    div
    wrtpre.cpp: In function 'int compare_str_rev(const void*, const void*)':
    wrtpre.cpp:1973:18: error: 'dictlen' was not declared in this scope
    int minv=min(dictlen[a],dictlen[b]);
    ^
    wrtpre.cpp:45:21: note: in definition of macro 'min'
    #define min(a,b) (((a)>(b))?(b)a))
    ^
    wrtpre.cpp:1973:18: note: suggested alternative: 'dictfreq'
    int minv=min(dictlen[a],dictlen[b]);
    ^
    wrtpre.cpp:45:21: note: in definition of macro 'min'
    #define min(a,b) (((a)>(b))?(b)a))
    ^
    wrtpre.cpp:1975:13: error: 'dict' was not declared in this scope
    if (dict[a][dictlen[a]-i]!=dict[b][dictlen[b]-i])
    ^~~~
    wrtpre.cpp:1975:13: note: suggested alternative: 'div'
    if (dict[a][dictlen[a]-i]!=dict[b][dictlen[b]-i])
    ^~~~
    div
    wrtpre.cpp: In member function 'void XWRT_Encoder::sortDict(int, int)':
    wrtpre.cpp:1997:9: error: 'staticd' was not declared in this scope
    if (staticd==false){
    ^~~~~~~
    wrtpre.cpp:1997:9: note: suggested alternative: 'static'
    if (staticd==false){
    ^~~~~~~
    static
    wrtpre.cpp:2028:32: error: 'dict' was not declared in this scope
    std::string str=(char*)dict[inttable[i]];
    ^~~~
    wrtpre.cpp:2028:32: note: suggested alternative: 'div'
    std::string str=(char*)dict[inttable[i]];
    ^~~~
    div
    wrtpre.cpp: In member function 'void XWRT_Encoder::WRT_detectFinish()':
    wrtpre.cpp:2045:9: error: 'staticd' was not declared in this scope
    if (staticd==true){
    ^~~~~~~
    wrtpre.cpp:2045:9: note: suggested alternative: 'static'
    if (staticd==true){
    ^~~~~~~
    static
    wrtpre.cpp:2050:17: error: 'minfq' was not declared in this scope
    if (num>minfq) // from command line
    ^~~~~
    wrtpre.cpp:2050:17: note: suggested alternative: 'min'
    if (num>minfq) // from command line
    ^~~~~
    min
    wrtpre.cpp:2061:13: error: 'dict' was not declared in this scope
    dict[n]=dict[i];
    ^~~~
    wrtpre.cpp:2061:13: note: suggested alternative: 'div'
    dict[n]=dict[i];
    ^~~~
    div
    wrtpre.cpp:2062:9: error: 'dictlen' was not declared in this scope
    dictlen[n]=dictlen[i];
    ^~~~~~~
    wrtpre.cpp:2062:9: note: suggested alternative: 'dictfreq'
    dictlen[n]=dictlen[i];
    ^~~~~~~
    dictfreq
    wrtpre.cpp:2072:13: error: 'staticd' was not declared in this scope
    if (staticd==true){
    ^~~~~~~
    wrtpre.cpp:2072:13: note: suggested alternative: 'static'
    if (staticd==true){
    ^~~~~~~
    static
    wrtpre.cpp:2074:30: error: 'dict' was not declared in this scope
    if ( utf8len((char*)dict[i])>1|| (num>=minWordFreq*(staticd==true?2:1) && (staticd==true?((dictlen[i]>3)?1:0):1)) || (num>=minWordFreq2*(staticd==true?2:1) && (dictlen[i]>=7))
    ^~~~
    wrtpre.cpp:2074:30: note: suggested alternative: 'div'
    if ( utf8len((char*)dict[i])>1|| (num>=minWordFreq*(staticd==true?2:1) && (staticd==true?((dictlen[i]>3)?1:0):1)) || (num>=minWordFreq2*(staticd==true?2:1) && (dictlen[i]>=7))
    ^~~~
    div
    wrtpre.cpp:2074:101: error: 'dictlen' was not declared in this scope
    if ( utf8len((char*)dict[i])>1|| (num>=minWordFreq*(staticd==true?2:1) && (staticd==true?((dictlen[i]>3)?1:0):1)) || (num>=minWordFreq2*(staticd==true?2:1) && (dictlen[i]>=7))
    ^~~~~~~
    wrtpre.cpp:2074:101: note: suggested alternative: 'dictfreq'
    if ( utf8len((char*)dict[i])>1|| (num>=minWordFreq*(staticd==true?2:1) && (staticd==true?((dictlen[i]>3)?1:0):1)) || (num>=minWordFreq2*(staticd==true?2:1) && (dictlen[i]>=7))
    ^~~~~~~
    dictfreq
    wrtpre.cpp:2081:56: error: 'dictlen' was not declared in this scope
    if (num>=minWordFreq || (num>=minWordFreq2 && (dictlen[i]>=7))) ;
    ^~~~~~~
    wrtpre.cpp:2081:56: note: suggested alternative: 'dictfreq'
    if (num>=minWordFreq || (num>=minWordFreq2 && (dictlen[i]>=7))) ;
    ^~~~~~~
    dictfreq
    wrtpre.cpp:2095:9: error: 'dict' was not declared in this scope
    dict[i]=dict[j];
    ^~~~
    wrtpre.cpp:2095:9: note: suggested alternative: 'div'
    dict[i]=dict[j];
    ^~~~
    div
    wrtpre.cpp:2096:9: error: 'dictlen' was not declared in this scope
    dictlen[i]=dictlen[j];
    ^~~~~~~
    wrtpre.cpp:2096:9: note: suggested alternative: 'dictfreq'
    dictlen[i]=dictlen[j];
    ^~~~~~~
    dictfreq
    wrtpre.cpp: At global scope:
    wrtpre.cpp:114:17: warning: inline function 'void CMemoryBuffer::AllocTgtBuf(int)' used but never defined
    inline void AllocTgtBuf( U32 len = OUTPUT_BUFFER_MIN_SIZE );
    ^~~~~~~~~~~
    C:\Bin\paq8pxd\trunk>compila | more
    "more" non è riconosciuto come comando interno o esterno,
    un programma eseguibile o un file batch.


    Thank you as usual!
    Luca

  27. #921
    Member
    Join Date
    Aug 2015
    Location
    indonesia
    Posts
    299
    Thanks
    47
    Thanked 60 Times in 48 Posts
    Quote Originally Posted by LucaBiondi View Post
    Hi all,

    I am trying to compile latest sources of PAQ8PXD.
    I am using the script below that i used to compile PA8PX but i get errors..
    I am not good with c++
    Could some help me? Could some give me a script ?
    Thank you
    Luca



    This is the script:



    inside zlist i put:




    The error are...





    Thank you as usual!
    Luca
    Inside paq8sk19 archive there is g.bat to compile it ,just rename the cpp file
    https://encode.su/threads/3371-Paq8sk/page3

  28. Thanks:

    LucaBiondi (28th May 2020)

  29. #922
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    Works like this for me.
    You only need to compile one cpp file - pxd.cpp itself.
    It already includes everything else, except for zlib.
    Attached Files Attached Files

  30. Thanks (3):

    Darek (3rd June 2020),DZgas (30th May 2020),LucaBiondi (28th May 2020)

  31. #923
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    I've tested best options for Byron's dictionary on 4 Corpuses files. It was made for paq8pxd v85 version. Of course I realise that It could works only for some versions but it looks at now it works.
    The best results are for Silesia Corpus -> 74KB of gain which is worth to use, for other corpuses gains are smaller but there always something.
    Files not mentioned below didn't get any gain due to use -w option or -exx.

    file: option

    SILESIA
    dickens: -e77,dict
    mozilla: -e26,dict
    osdb: -w
    reymont: -w
    samba: -e133,dict
    sao: -w
    webster: -e373,dict
    TOTAL Silesia savings = 74'107 bytes

    CALGARY
    book1: -e47,dict
    book2: -e43,dict
    news: -e97,dict
    paper2: -e34,dict
    progp: -e75,dict
    Calgary.tar: -e49,dict
    TOTAL Calgary savings = 1'327 bytes
    Calgary.tar savings = 3'057 bytes

    CANTERBURY
    alice29.txt: -e38,dict
    asyoulik.txt: -e53,dict
    lcet10.txt: -e54,dict
    plrabn12.txt: -e110,dict
    Canterbury.tar: -e95,dict
    TOTAL Canterbury savings = 873 bytes
    Canterbury.tar savings = 1'615 bytes

    MAXIMUM COMPRESSION
    world95.txt: -e22,dict
    TOTAL Maximum Compression savings = 1'449 bytes

    Due to all settings and changes Maximum Compression score for paq8pxd v89 is below 6'000'000 bytes! First time ever! (w/o using tarball option, comprssing tar file got 5'993'762 bytes)
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	paq8pxd_v89_4_Corpuses.jpg 
Views:	13 
Size:	2.72 MB 
ID:	7638  
    Last edited by Darek; 3rd June 2020 at 22:38.

  32. Thanks:

    kaitz (6th June 2020)

  33. #924
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    Scores of enwik files (partially tested by Sportman):

    15'843'522 - enwik8 -s15 -w by Paq8pxd_v86, change: -0,12%
    15'731'843 - enwik8 -s15 -w -e1,english.dic by Paq8pxd_v86, change: -0,11%
    15'775'656 - enwik8 -x15 -w by Paq8pxd_v86, change: -0,12% - Sportman's score
    15'657'566 - enwik8 -x15 -w -e1,english.dic by Paq8pxd_v86, change: -0,11%
    124'035'775 - enwik9 -s15 -w -e1,english.dic by Paq8pxd_v86, change: -0,23%
    123'250'680 - enwik9 -x15 -w -e1,english.dic by Paq8pxd_v86, change: -0,22%

    15'851'594 - enwik8 -s15 -w by Paq8pxd_v89, change: 0,05%
    15'728'903 - enwik8 -s15 -w -e1,english.dic by Paq8pxd_v89, change: -0,02%
    15'785'209 - enwik8 -x15 -w by Paq8pxd_v89, change: 0,06% - Sportman's score
    15'655'526 - enwik8 -x15 -w -e1,english.dic by Paq8pxd_v89, change: -0,01% - Sportman's score
    124'093'032 - enwik9 -s15 -w -e1,english.dic by Paq8pxd_v89, change: 0,05%
    123'301'984 - enwik9 -x15 -w -e1,english.dic by Paq8pxd_v89, change: 0,04%

    Despite the best enwik8 score for -x15 -w -e1,english.dic, scores for enwik9 are worse than from paq8pxd_v86 version.

  34. #925
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    phda dictionary; i wonder if it would work.
    Attached Files Attached Files

  35. Thanks:

    Darek (7th June 2020)

  36. #926
    Member
    Join Date
    Dec 2008
    Location
    Poland, Warsaw
    Posts
    1,155
    Thanks
    706
    Thanked 455 Times in 352 Posts
    Looks like phda dictionary Isn't good for paq8pxd and enwik8. Maybe it works better with enwik9.
    15'655'526 - enwik8 -x15 -w -e1,english.dic by Paq8pxd_v89
    15'941'833 - enwik8 -x15 -w -e1,phda.dic by Paq8pxd_v89, change: +1,83%

  37. Thanks:

    Shelwien (9th June 2020)

  38. #927
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    > Isn't good for paq8pxd and enwik8. Maybe it works better with enwik9.

    1. Maybe try with higher -e# threshold?
    2. Try pxd -s0 with -e1,phda and some fast compression (ppmd,lpaq)?

  39. Thanks:

    Darek (9th June 2020)

  40. #928
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    Hi Guys,

    I am trying to do some modifications in order to use more memory.

    I take the class below:


    class ppmdModel1: public Model {
    BlockData& x;
    Buf& buf;
    ppmd_Model ppmd_12_256_1;
    ppmd_Model ppmd_6_64_2;
    public:
    ppmdModel1(BlockData& bd,U32 val=0):x(bd),buf(bd.buf){
    int ppmdmem=((210<<(level>8)<<(level>9))<<(level>10);
    ppmd_12_256_1.Init(12+(level>8?4:0),ppmdmem,1,0);
    ppmd_6_64_2.Init(6,64,1,0);
    }
    int inputs() {return 2;}
    int nets() {return 0;}
    int netcount() {return 0;}
    int p(Mixer& m,int val1=0,int val2=0){
    m.add(stretch(4096-ppmd_12_256_1.ppmd_Predict(4096,x.y)));
    m.add(stretch(4096-ppmd_6_64_2.ppmd_Predict(4096,x.y)));
    return 0;
    }
    virtual ~ppmdModel1(){ }
    };
    and i have done this modification:


    FROM


    int ppmdmem=((210<<(level>8)<<(level>9))<<(level>10);
    ppmd_12_256_1.Init(12+(level>8?4:0),ppmdmem,1,0);

    TO


    int ppmd = (((210<<(level>8)<<(level>9))<<(level>10))<<(level >11);
    ppmd_12_256_1.Init(12+(level>8?4:0),ppmdmem,1,0);



    This is to allow to use 3360 MB od memory instead of 1680 at level 12



    level 8 order 12 memory 210 MB
    level 9 order 16 memory 420 MB
    level 10 order 16 memory 840 MB
    level 11 order 16 memory 1680 MB
    level 12 order 16 memory 3360 MB <- NEW!



    I tried to compress enwik8 with the executable at level 12.

    I see that effectively more memory is used (25858 vs. 20818 GB)
    But the obtained file has the same dimensions as the original executable


    1/1 Filename: c:/compression/txt_testset/enwik8 (100000000 bytes)
    Block segmentation:
    0 | utf-8 | 100000000 [0 - 99999999]


    Segment data size: 14 bytes


    TN |Type name |Count |Total size
    -----------------------------------------
    20 |utf-8 | 1 | 100000000
    -----------------------------------------
    Total level 0 | 1 | 100000000


    bigtext wrt stream(10). Total 61802221
    WRT dict count 31748 words.
    WRT dict online.
    Stream(10) compressed from 61802221 to 15817775 bytes
    Segment data compressed from 14 to 14 bytes
    Total 100000000 bytes compressed to 15817848 bytes.
    Time 130237.58 sec, used 20818 MB (354478795 bytes) of memory
    I don't understand why..



    Instead if i change memory value in ppmd_6_62

    FROM


    ppmd_6_64_2.Init(6,64,1,0);

    TO


    ppmd_6_64_2.Init(6,256,1,0);


    I use more memory 199922 instead of 19346 but i gain 1396 bytes! :)


    paq8pxd_v89_AVX2 -x11 15.821.751 bytes 19346 GB RAM
    paq8pxd_v89_ppmd_6_256 -x11 15.820.355 byte 19922 GB RAM


    Any ideas?

    Why memory usage increase of (256 - 64) but for three times ?



    Thank you,
    Luca

  41. #929
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,915
    Thanks
    291
    Thanked 1,273 Times in 720 Posts
    ppmd uses the memory differently from usual CM - it doesn't use a hashtable, but incrementally builds a context tree within given memory pool.
    So at order16/enwik8 1680MB fills up only at ~92% of input data.
    You can use this for testing: https://github.com/Shelwien/ppmd_sh (like "pmd c enwik8 enwik8.pmd 16 1680")

  42. #930
    Member
    Join Date
    Sep 2014
    Location
    Italy
    Posts
    71
    Thanks
    76
    Thanked 31 Times in 20 Posts
    thank you!
    I am trying to learn some by modificating sources
    But probably in this moment this is too difficult form me.


    from: ppmd_12_256_1.Init(16, 1680 1,0);
    to: ppmd_12_256_1.Init(16, 3360 1,0);
    ...but if use more memory shouldn't I have more compression?

    Thank you!
    ​Luca

Page 31 of 32 FirstFirst ... 2129303132 LastLast

Similar Threads

  1. FreeArc compression suite (4x4, Tornado, REP, Delta, Dict...)
    By Bulat Ziganshin in forum Data Compression
    Replies: 554
    Last Post: 26th September 2018, 02:41
  2. Dict preprocessor
    By pat357 in forum Data Compression
    Replies: 5
    Last Post: 2nd May 2014, 21:51

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •