summaryrefslogtreecommitdiffstats
BranchCommit messageAuthorAge
nextmeta-agl-core: handle debug-tweaks removalScott Murray31 hours
masterweston-init-conf: Remove explicit backend in ini fileMarius Vlad31 hours
ricefishRoyal Ricefish: Prepare RR 18.0.3Jan-Simon Moeller5 days
quillbackPrepare Quirky Quillback 17.1.5Jan-Simon Moeller11 days
lampreyPrepare Lucky Lamprey 12.1.20Jan-Simon Moeller7 months
sandbox/jsmoeller/qt6WIP: Prepare for QT6Jan-Simon Moeller8 months
sandbox/jsmoeller/lampreymeta-agl-bsp/meta-ti: remove local patch from meta-agl-bsp before updateJan-Simon Moeller8 months
sandbox/jsmoeller/next-riscv-EW24Include visionfive2 board templatesJan-Simon Moeller8 months
sandbox/jsmoeller/canbusfdWIP canfdJan-Simon Moeller8 months
pikePrepare Prickly Pike 16.0.5Jan-Simon Moeller9 months
sandbox/YAMAGUCHINaoto/rk3588-nanopc-t6Add NanoPC-T6 support to wireplumberNaoto Yamaguchi13 months
octopusPrepare Optimistic Octopus 15.0.5Jan-Simon Moeller15 months
sandbox/hauvolecong/spec4808Restructure Salvator-x .inc filesHau Vo16 months
sandbox/nguyentanloc27/spec4808gstreamer1.0-plugins-bad_%.bbappend: Added a title/appidMarius Vlad16 months
sandbox/nguyentanloc27/S4SK-devAdding s4sk supportLoc Nguyen16 months
needlefishPrepare Nifty Needlefish 14.0.5Jan-Simon Moeller19 months
marlinPrepare Magic Marlin 13.0.3 releaseJan-Simon Moeller2 years
koiaglsetup: Fix append_fragment fails with heredocs on Ubuntu 21.04.vasyl3 years
sandbox/jsmoeller/rmappfwPrepare master for new framework integrationTagDownloadAuthorAge
18.0.3commit b4ceb8545f...Jan-Simon Moeller4 days
ricefish/18.0.3commit b4ceb8545f...Jan-Simon Moeller4 days
ricefish_18.0.3commit b4ceb8545f...Jan-Simon Moeller4 days
17.1.5commit a120153e6d...Jan-Simon Moeller< }
/*
 * Copyright (C) 2015 "IoT.bzh"
 * Author "Manuel Bachmann"
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "audio-api.h"

snd_mixer_selem_channel_id_t SCHANNELS[8] = {
 SND_MIXER_SCHN_FRONT_LEFT,
 SND_MIXER_SCHN_FRONT_RIGHT,
 SND_MIXER_SCHN_FRONT_CENTER,
 SND_MIXER_SCHN_REAR_LEFT,
 SND_MIXER_SCHN_REAR_RIGHT,
 SND_MIXER_SCHN_REAR_CENTER,
 SND_MIXER_SCHN_SIDE_LEFT,
 SND_MIXER_SCHN_SIDE_RIGHT
};

PUBLIC unsigned char _alsa_init (const char *name, audioCtxHandleT *ctx) {

    snd_pcm_t *dev;
    snd_pcm_hw_params_t *params;
    snd_mixer_t *mixer;
    snd_mixer_selem_id_t *mixer_sid;
    snd_mixer_elem_t *mixer_elm;
    snd_mixer_elem_t *mixer_elm_m;
    unsigned int rate = 22050;
    long vol, vol_min, vol_max;
    int num, i;

    if (snd_pcm_open (&dev, name, SND_PCM_STREAM_PLAYBACK, 0) < 0)
        return -1;

    snd_pcm_hw_params_malloc (&params);
    snd_pcm_hw_params_any (dev, params);
    snd_pcm_hw_params_set_access (dev, params, SND_PCM_ACCESS_RW_INTERLEAVED);
    snd_pcm_hw_params_set_format (dev, params, SND_PCM_FORMAT_S16_LE);
    snd_pcm_hw_params_set_rate_near (dev, params, &rate, 0);
    snd_pcm_hw_params_set_channels (dev, params, ctx->channels);
    if (snd_pcm_hw_params (dev, params) < 0) {
        snd_pcm_hw_params_free (params);
        return -1;
    }
    snd_pcm_prepare (dev);

    snd_mixer_open (&mixer, 0);
    if (snd_mixer_attach (mixer, name) < 0) {
        snd_pcm_hw_params_free (params);
        return -1;
    }
    snd_mixer_selem_register (mixer, NULL, NULL);
    snd_mixer_load (mixer);

    snd_mixer_selem_id_alloca (&mixer_sid);
    snd_mixer_selem_id_set_index (mixer_sid, 0);
    snd_mixer_selem_id_set_name (mixer_sid, "Master");

    mixer_elm = snd_mixer_find_selem (mixer, mixer_sid);
    mixer_elm_m = NULL;

    if (!mixer_elm) {
        /* no "Master" mixer ; we are probably on a board... search ! */
        for (mixer_elm = snd_mixer_first_elem (mixer); mixer_elm != NULL;
             mixer_elm = snd_mixer_elem_next (mixer_elm)) {
            if (snd_mixer_elem_info (mixer_elm) < 0)
                continue;
            snd_mixer_selem_get_id (mixer_elm, mixer_sid);
            if (strstr (snd_mixer_selem_id_get_name (mixer_sid), "DVC Out")) {

                /* this is Porter... let us found the specific mute switch */
                snd_mixer_selem_id_set_index (mixer_sid, 0);
                snd_mixer_selem_id_set_name (mixer_sid, "DVC Out Mute");
                mixer_elm_m = snd_mixer_find_selem (mixer, mixer_sid);

                break;
            }
        }
    }

    if (mixer_elm) {
        snd_mixer_selem_get_playback_volume_range (mixer_elm, &vol_min, &vol_max);
        snd_mixer_selem_get_playback_volume (mixer_elm, SND_MIXER_SCHN_FRONT_LEFT, &vol);
    }

    /* allocate the global array if it hasn't been done */
    if (!dev_ctx_a) {
        dev_ctx_a = (dev_ctx_alsa_T**) malloc (sizeof(dev_ctx_alsa_T));
        dev_ctx_a[0] = (dev_ctx_alsa_T*) malloc (sizeof(dev_ctx_alsa_T));
        dev_ctx_a[0]->name = NULL;
        dev_ctx_a[0]->dev = NULL;
    }

    /* is a card with similar name already opened ? */
    for (num = 0; num < (sizeof(dev_ctx_a)/sizeof(dev_ctx_alsa_T)); num++) {
        if (dev_ctx_a[num]->name &&
           !strcmp (dev_ctx_a[num]->name, name))
            return -1;
    }
    num++;

    /* it's not... let us add it to the global array */
    dev_ctx_a = (dev_ctx_alsa_T**) realloc (dev_ctx_a, (num+1)*sizeof(dev_ctx_alsa_T));
    dev_ctx_a[num] = (dev_ctx_alsa_T*) malloc (sizeof(dev_ctx_alsa_T));
    dev_ctx_a[num]->name = strdup (name);
    dev_ctx_a[num]->dev = dev;
    dev_ctx_a[num]->params = params;
    dev_ctx_a[num]->mixer_elm = mixer_elm;
    dev_ctx_a[num]->mixer_elm_m = mixer_elm_m;
    dev_ctx_a[num]->vol_max = vol_max;
    dev_ctx_a[num]->vol = vol;
    dev_ctx_a[num]->thr_should_run = 0;
    dev_ctx_a[num]->thr_finished = 0;

    /* make the client context aware of current card state */
    for (i = 0; i < 8; i++)
        ctx->volume[i] = _alsa_get_volume (num, i);
    ctx->mute = _alsa_get_mute (num);
    ctx->idx = num;

    return 0;
}

PUBLIC void _alsa_free (const char *name) {

    int num;

    for (num = 0; num < (sizeof(dev_ctx_a)/sizeof(dev_ctx_alsa_T)); num++) {
        if (dev_ctx_a[num]->name &&
           !strcmp (dev_ctx_a[num]->name, name)) {
            snd_pcm_close (dev_ctx_a[num]->dev);
            snd_pcm_hw_params_free (dev_ctx_a[num]->params);
            free (dev_ctx_a[num]->name);
            dev_ctx_a[num]->dev = NULL;
            dev_ctx_a[num]->name = NULL;
            free (dev_ctx_a[num]);
            return;
        }
    }
}

PUBLIC void _alsa_play (unsigned int num) {

    if (!dev_ctx_a || !dev_ctx_a[num] || dev_ctx_a[num]->thr_should_run ||
        access (AUDIO_BUFFER, F_OK) == -1)
        return;

    dev_ctx_a[num]->thr_should_run = 1;
    dev_ctx_a[num]->thr_finished = 0;
    pthread_create (&dev_ctx_a[num]->thr, NULL, _alsa_play_thread_fn, (void*)dev_ctx_a[num]);
}

PUBLIC void _alsa_stop (unsigned int num) {

    if (!dev_ctx_a || !dev_ctx_a[num] || !dev_ctx_a[num]->thr_should_run)
        return;

    /* stop the "while" loop in thread */
    dev_ctx_a[num]->thr_should_run = 0;

    while (!dev_ctx_a[num]->thr_finished)
        usleep(100000);

    pthread_join (dev_ctx_a[num]->thr, NULL);
}

PUBLIC int _alsa_get_volume (unsigned int num, unsigned int channel) {

    if (!dev_ctx_a || !dev_ctx_a[num] || !dev_ctx_a[num]->mixer_elm)
        return;

    snd_mixer_selem_get_playback_volume (dev_ctx_a[num]->mixer_elm, SCHANNELS[channel], &dev_ctx_a[num]->vol);

    return (int)(dev_ctx_a[num]->vol*100)/dev_ctx_a[num]->vol_max;
}

PUBLIC void _alsa_set_volume (unsigned int num, unsigned int channel, int vol) {

    if (!dev_ctx_a || !dev_ctx_a[num] || !dev_ctx_a[num]->mixer_elm ||
        0 > vol > 100)
        return;

    snd_mixer_selem_set_playback_volume (dev_ctx_a[num]->mixer_elm, SCHANNELS[channel], (vol*dev_ctx_a[num]->vol_max)/100);

}

PUBLIC void _alsa_set_volume_all (unsigned int num, int vol) {

    if (!dev_ctx_a || !dev_ctx_a[num] || !dev_ctx_a[num]->mixer_elm ||
        0 > vol > 100)

    snd_mixer_selem_set_playback_volume_all (dev_ctx_a[num]->mixer_elm, (vol*dev_ctx_a[num]->vol_max)/100);
}

PUBLIC unsigned char _alsa_get_mute (unsigned int num) {

    int mute = 0;
    snd_mixer_elem_t *elm_m;

    if (!dev_ctx_a || !dev_ctx_a[num] || !dev_ctx_a[num]->mixer_elm)
        return;

    dev_ctx_a[num]->mixer_elm_m ? (elm_m = dev_ctx_a[num]->mixer_elm_m) :
                                  (elm_m = dev_ctx_a[num]->mixer_elm);

    if (snd_mixer_selem_has_playback_switch (elm_m)) {
        snd_mixer_selem_get_playback_switch (elm_m, SND_MIXER_SCHN_FRONT_LEFT, &mute);
        snd_mixer_selem_get_playback_switch (elm_m, SND_MIXER_SCHN_FRONT_RIGHT, &mute);
    }

    if (dev_ctx_a[num]->mixer_elm_m)
        return (unsigned char)mute;
    else
        return (unsigned char)!mute;
}

PUBLIC void _alsa_set_mute (unsigned int num, unsigned char tomute) {

    snd_mixer_elem_t *elm_m;
    int mute;

    if (!dev_ctx_a || !dev_ctx_a[num] || !dev_ctx_a[num]->mixer_elm || 1 < tomute < 0)
        return;

    if (dev_ctx_a[num]->mixer_elm_m) {
        elm_m = dev_ctx_a[num]->mixer_elm_m;
        mute = (int)!tomute;
    } else {
        elm_m = dev_ctx_a[num]->mixer_elm;
        mute = (int)tomute;
    }

    if (snd_mixer_selem_has_playback_switch (elm_m))
        snd_mixer_selem_set_playback_switch_all (elm_m, !mute);
}

PUBLIC void _alsa_set_rate (unsigned int num, unsigned int rate) {

    if (!dev_ctx_a || !dev_ctx_a[num])
        return;

    snd_pcm_hw_params_set_rate_near (dev_ctx_a[num]->dev, dev_ctx_a[num]->params, &rate, 0);
}

PUBLIC void _alsa_set_channels (unsigned int num, unsigned int channels) {

    if (!dev_ctx_a || !dev_ctx_a[num])
        return;

    snd_pcm_hw_params_set_channels (dev_ctx_a[num]->dev, dev_ctx_a[num]->params, channels);
}

 /* ---- LOCAL THREADED FUNCTIONS ---- */

STATIC void* _alsa_play_thread_fn (void *ctx) {

    dev_ctx_alsa_T *dev_ctx_a = (dev_ctx_alsa_T *)ctx;
    FILE *file = NULL;
    char *buf = NULL;
    long size;
    int frames, res;

    file = fopen (AUDIO_BUFFER, "rb");

    while (dev_ctx_a->thr_should_run && file && (access (AUDIO_BUFFER, F_OK) != -1) ) {
        fseek (file, 0, SEEK_END);
        size = ftell (file);
        buf = (char*) realloc (buf, size * sizeof(char));
        frames = (size * sizeof(char)) / 4;

        fseek (file, 0, SEEK_SET);
        fread (buf, 1, size, file);
        fflush (file);

        if ((res = snd_pcm_writei (dev_ctx_a->dev, buf, frames)) != frames) {
            snd_pcm_recover (dev_ctx_a->dev, res, 0);
            snd_pcm_prepare (dev_ctx_a->dev);
        }
        /* snd_pcm_drain (dev_ctx->dev); */
    }
    if (buf) free(buf);
    if (file) fclose(file);

    dev_ctx_a->thr_finished = 1;
    return 0;
}
lass='inline' src='//seccdn.libravatar.org/avatar/dbea2f73adfa9706f1ed7aa2332b605e?s=13&d=retro' />Jan-Simon Moeller
12 months
12.1.16commit 512d244d48...Jan-Simon Moeller13 months
lamprey/12.1.16commit 512d244d48...Jan-Simon Moeller13 months
lamprey_12.1.16commit 512d244d48...Jan-Simon Moeller13 months
16.91.0commit 4c9618f6af...Jan-Simon Moeller13 months
quillback/16.91.0commit 4c9618f6af...Jan-Simon Moeller13 months
quillback_16.91.0commit 4c9618f6af...Jan-Simon Moeller13 months
16.91.1commit c764d00258...Jan-Simon Moeller13 months
quillback/16.91.1commit c764d00258...Jan-Simon Moeller13 months
quillback_16.91.1commit c764d00258...Jan-Simon Moeller13 months
16.0.2commit ae3e2918a0...Jan-Simon Moeller13 months
pike/16.0.2commit ae3e2918a0...Jan-Simon Moeller13 months
pike_16.0.2commit ae3e2918a0...Jan-Simon Moeller13 months
12.1.15commit 280f7e70af...Jan-Simon Moeller14 months
lamprey/12.1.15commit 280f7e70af...Jan-Simon Moeller14 months
lamprey_12.1.15commit 280f7e70af...Jan-Simon Moeller14 months
15.0.5commit 36d25dc63d...Jan-Simon Moeller15 months
octopus/15.0.5commit 36d25dc63d...Jan-Simon Moeller15 months
octopus_15.0.5commit 36d25dc63d...Jan-Simon Moeller15 months
16.0.1commit 9af4ff37f3...Jan-Simon Moeller15 months
pike/16.0.1commit 9af4ff37f3...Jan-Simon Moeller15 months
pike_16.0.1commit 9af4ff37f3...Jan-Simon Moeller15 months
12.1.14commit e0f6590189...Jan-Simon Moeller16 months
lamprey/12.1.14commit e0f6590189...Jan-Simon Moeller16 months
lamprey_12.1.14commit e0f6590189...Jan-Simon Moeller16 months
15.0.4commit f0783c76a5...Jan-Simon Moeller16 months
octopus/15.0.4commit f0783c76a5...Jan-Simon Moeller16 months
octopus_15.0.4commit f0783c76a5...Jan-Simon Moeller16 months
16.0.0commit 1c7b328ce8...Jan-Simon Moeller16 months
pike/16.0.0commit 1c7b328ce8...Jan-Simon Moeller16 months
pike_16.0.0commit 1c7b328ce8...Jan-Simon Moeller16 months
15.93.0commit 903e108049...Jan-Simon Moeller16 months
pike/15.93.0commit 903e108049...Jan-Simon Moeller16 months
pike_15.93.0commit 903e108049...Jan-Simon Moeller16 months
15.92.0commit 2d0f4726b3...Jan-Simon Moeller17 months
pike/15.92.0commit 2d0f4726b3...Jan-Simon Moeller17 months
pike_15.92.0commit 2d0f4726b3...Jan-Simon Moeller17 months
12.1.13commit 583f80f8e9...Jan-Simon Moeller17 months
lamprey/12.1.13commit 583f80f8e9...Jan-Simon Moeller17 months
lamprey_12.1.13commit 583f80f8e9...Jan-Simon Moeller17 months
15.0.3commit 2fc0726d1f...Jan-Simon Moeller18 months
octopus/15.0.3commit 2fc0726d1f...Jan-Simon Moeller18 months
octopus_15.0.3commit 2fc0726d1f...Jan-Simon Moeller18 months
15.91.1commit e3c77539cd...Jan-Simon Moeller18 months
pike/15.91.1commit e3c77539cd...Jan-Simon Moeller18 months
pike_15.91.1commit e3c77539cd...Jan-Simon Moeller18 months
15.91.0commit cce8856658...Jan-Simon Moeller18 months
pike/15.91.0commit cce8856658...Jan-Simon Moeller18 months
pike_15.91.0commit cce8856658...Jan-Simon Moeller18 months
12.1.12commit 009153010c...Jan-Simon Moeller18 months
lamprey/12.1.12commit 009153010c...Jan-Simon Moeller18 months
lamprey_12.1.12commit 009153010c...Jan-Simon Moeller18 months
15.0.2commit 89143beca6...Jan-Simon Moeller19 months
octopus/15.0.2commit 89143beca6...Jan-Simon Moeller19 months
octopus_15.0.2commit 89143beca6...Jan-Simon Moeller19 months
14.0.5commit 48af618813...Jan-Simon Moeller19 months
needlefish/14.0.5commit 48af618813...Jan-Simon Moeller19 months
needlefish_14.0.5commit 48af618813...Jan-Simon Moeller19 months
12.1.11commit bb1af1fb24...Jan-Simon Moeller20 months
lamprey/12.1.11commit bb1af1fb24...Jan-Simon Moeller20 months
lamprey_12.1.11commit bb1af1fb24...Jan-Simon Moeller20 months
14.0.4commit a0fd17fd51...Jan-Simon Moeller20 months
needlefish/14.0.4commit a0fd17fd51...Jan-Simon Moeller20 months
needlefish_14.0.4commit a0fd17fd51...Jan-Simon Moeller20 months
15.0.1commit 33ac6e22d9...Jan-Simon Moeller20 months
octopus/15.0.1commit 33ac6e22d9...Jan-Simon Moeller20 months
octopus_15.0.1commit 33ac6e22d9...Jan-Simon Moeller20 months
12.1.10commit b86985a00f...Jan-Simon Moeller21 months
lamprey/12.1.10commit b86985a00f...Jan-Simon Moeller21 months
lamprey_12.1.10commit b86985a00f...Jan-Simon Moeller21 months
15.0.0commit cc1710f95b...Jan-Simon Moeller22 months
octopus/15.0.0commit cc1710f95b...Jan-Simon Moeller22 months
octopus_15.0.0commit cc1710f95b...Jan-Simon Moeller22 months
12.1.9commit 13f0267039...Jan-Simon Moeller22 months
lamprey/12.1.9commit 13f0267039...Jan-Simon Moeller22 months
lamprey_12.1.9commit 13f0267039...Jan-Simon Moeller22 months
14.94.0commit d32e234309...Jan-Simon Moeller22 months
octopus/14.94.0commit d32e234309...Jan-Simon Moeller22 months
octopus_14.94.0commit d32e234309...Jan-Simon Moeller22 months
14.93.0commit b9d4796f44...Jan-Simon Moeller23 months
octopus/14.93.0commit b9d4796f44...Jan-Simon Moeller23 months
octopus_14.93.0commit b9d4796f44...Jan-Simon Moeller23 months
14.0.3commit 0ff2cdad22...Jan-Simon Moeller23 months
needlefish/14.0.3commit 0ff2cdad22...Jan-Simon Moeller23 months
needlefish_14.0.3commit 0ff2cdad22...Jan-Simon Moeller23 months
12.1.8commit ae982d798a...Jan-Simon Moeller24 months
lamprey/12.1.8commit ae982d798a...Jan-Simon Moeller24 months
lamprey_12.1.8commit ae982d798a...Jan-Simon Moeller24 months
14.92.0commit 7406bdefc6...Jan-Simon Moeller24 months
octopus/14.92.0commit 7406bdefc6...Jan-Simon Moeller24 months
octopus_14.92.0commit 7406bdefc6...Jan-Simon Moeller24 months
14.91.0commit fc9f15eef8...Jan-Simon Moeller2 years
octopus/14.91.0commit fc9f15eef8...Jan-Simon Moeller2 years
octopus_14.91.0commit fc9f15eef8...Jan-Simon Moeller2 years
14.0.2commit fdcfaf6bc2...Jan-Simon Moeller2 years
needlefish/14.0.2commit fdcfaf6bc2...Jan-Simon Moeller2 years
needlefish_14.0.2commit fdcfaf6bc2...Jan-Simon Moeller2 years
12.1.7commit 8e87a90505...Jan-Simon Moeller2 years
lamprey/12.1.7commit 8e87a90505...Jan-Simon Moeller2 years
lamprey_12.1.7commit 8e87a90505...Jan-Simon Moeller2 years
12.1.6commit 10a00fc8e9...Jan-Simon Moeller2 years
lamprey/12.1.6commit 10a00fc8e9...Jan-Simon Moeller2 years
lamprey_12.1.6commit 10a00fc8e9...Jan-Simon Moeller2 years
14.0.1commit 5181312423...Jan-Simon Moeller2 years
needlefish/14.0.1commit 5181312423...Jan-Simon Moeller2 years
needlefish_14.0.1commit 5181312423...Jan-Simon Moeller2 years
13.0.3commit ce1e486b05...Jan-Simon Moeller2 years
marlin/13.0.3commit ce1e486b05...Jan-Simon Moeller2 years
marlin_13.0.3commit ce1e486b05...Jan-Simon Moeller2 years
12.1.5commit 68942b0d3c...Jan-Simon Moeller2 years
lamprey/12.1.5commit 68942b0d3c...Jan-Simon Moeller2 years
lamprey_12.1.5commit 68942b0d3c...Jan-Simon Moeller2 years
14.0.0commit 02eef14403...Jan-Simon Moeller2 years
needlefish/14.0.0commit 02eef14403...Jan-Simon Moeller2 years
needlefish_14.0.0commit 02eef14403...Jan-Simon Moeller2 years
13.93.0commit 015a9b684d...Jan-Simon Moeller2 years
needlefish/13.93.0commit 015a9b684d...Jan-Simon Moeller2 years
needlefish_13.93.0commit 015a9b684d...Jan-Simon Moeller2 years
13.92.0commit 1cf04e3f6e...Jan-Simon Moeller2 years
needlefish/13.92.0commit 1cf04e3f6e...Jan-Simon Moeller2 years
needlefish_13.92.0commit 1cf04e3f6e...Jan-Simon Moeller2 years
13.0.2commit 92fb641075...Jan-Simon Moeller2 years
marlin/13.0.2commit 92fb641075...Jan-Simon Moeller2 years
marlin_13.0.2commit 92fb641075...Jan-Simon Moeller2 years
13.91.0commit b5044156fc...Jan-Simon Moeller2 years
needlefish/13.91.0commit b5044156fc...Jan-Simon Moeller2 years
needlefish_13.91.0commit b5044156fc...Jan-Simon Moeller2 years
12.1.4commit dc4729dd4c...Jan-Simon Moeller2 years
lamprey/12.1.4commit dc4729dd4c...Jan-Simon Moeller2 years
lamprey_12.1.4commit dc4729dd4c...Jan-Simon Moeller2 years
13.0.1commit 3a11fd6479...Jan-Simon Moeller3 years
marlin/13.0.1commit 3a11fd6479...Jan-Simon Moeller3 years
marlin_13.0.1commit 3a11fd6479...Jan-Simon Moeller3 years
12.1.3commit be6f8e99b3...Jan-Simon Moeller3 years
lamprey/12.1.3commit be6f8e99b3...Jan-Simon Moeller3 years
lamprey_12.1.3commit be6f8e99b3...Jan-Simon Moeller3 years
12.1.2commit 825a674a08...Jan-Simon Moeller3 years
lamprey/12.1.2commit 825a674a08...Jan-Simon Moeller3 years
lamprey_12.1.2commit 825a674a08...Jan-Simon Moeller3 years
13.0.0commit 70ee918271...Jan-Simon Moeller3 years
marlin/13.0.0commit 70ee918271...Jan-Simon Moeller3 years
marlin_13.0.0commit 70ee918271...Jan-Simon Moeller3 years
12.93.0commit 381e2a9405...Jan-Simon Moeller3 years
marlin/12.93.0commit 381e2a9405...Jan-Simon Moeller3 years
marlin_12.93.0commit 381e2a9405...Jan-Simon Moeller3 years
12.1.1commit e1a973f86e...Jan-Simon Moeller3 years
lamprey/12.1.1commit e1a973f86e...Jan-Simon Moeller3 years
lamprey_12.1.1commit e1a973f86e...Jan-Simon Moeller3 years
12.92.0commit c31a7ac007...Jan-Simon Moeller3 years
marlin/12.92.0commit c31a7ac007...Jan-Simon Moeller3 years
marlin_12.92.0commit c31a7ac007...Jan-Simon Moeller3 years
12.91.0commit 8b273d4b3c...Jan-Simon Moeller3 years
marlin/12.91.0commit 8b273d4b3c...Jan-Simon Moeller3 years
marlin_12.91.0commit 8b273d4b3c...Jan-Simon Moeller3 years
11.0.5commit 38eb21d8a2...Jan-Simon Moeller3 years
koi/11.0.5commit 38eb21d8a2...Jan-Simon Moeller3 years
koi_11.0.5commit 38eb21d8a2...Jan-Simon Moeller3 years
12.1.0commit 663448671f...Jan-Simon Moeller3 years
lamprey/12.1.0commit 663448671f...Jan-Simon Moeller3 years
lamprey_12.1.0commit 663448671f...Jan-Simon Moeller3 years
12.90.1commit abc4742a71...Jan-Simon Möller3 years
marlin/12.90.1commit abc4742a71...Jan-Simon Möller3 years
marlin_12.90.1commit abc4742a71...Jan-Simon Möller3 years
12.0.1commit 1b6d5c8ecf...Jan-Simon Möller3 years
lamprey/12.0.1commit 1b6d5c8ecf...Jan-Simon Möller3 years
lamprey_12.0.1commit 1b6d5c8ecf...Jan-Simon Möller3 years
11.0.4commit b0896b1c70...Jan-Simon Möller3 years
koi/11.0.4commit b0896b1c70...Jan-Simon Möller3 years
koi_11.0.4commit b0896b1c70...Jan-Simon Möller3 years
11.0.3commit 6ae3e85c24...Jan-Simon Moeller3 years
koi/11.0.3commit 6ae3e85c24...Jan-Simon Moeller3 years
koi_11.0.3commit 6ae3e85c24...Jan-Simon Moeller3 years
11.93.0commit 9e95c7ed53...Jan-Simon Möller3 years
lamprey/11.93.0commit 9e95c7ed53...Jan-Simon Möller3 years
lamprey_11.93.0commit 9e95c7ed53...Jan-Simon Möller3 years
12.0.0commit d85019a3ec...Jan-Simon Möller3 years
lamprey/12.0.0commit d85019a3ec...Jan-Simon Möller3 years
lamprey_12.0.0commit d85019a3ec...Jan-Simon Möller3 years
12.90.0commit 552e691f4e...Jan-Simon Möller3 years
marlin/12.90.0commit 552e691f4e...Jan-Simon Möller3 years
marlin_12.90.0commit 552e691f4e...Jan-Simon Möller3 years
11.92.0commit 042f81bc91...Jan-Simon Moeller4 years
lamprey/11.92.0commit 042f81bc91...Jan-Simon Moeller4 years
lamprey_11.92.0commit 042f81bc91...Jan-Simon Moeller4 years
11.0.2commit 496a849e4d...Jan-Simon Moeller4 years
koi/11.0.2commit 496a849e4d...Jan-Simon Moeller4 years
koi_11.0.2commit 496a849e4d...Jan-Simon Moeller4 years
11.91.0commit 851c0a0968...Jan-Simon Möller4 years
lamprey/11.91.0commit 851c0a0968...Jan-Simon Möller4 years
lamprey_11.91.0commit 851c0a0968...Jan-Simon Möller4 years
10.0.3commit 384499f6ac...Jan-Simon Moeller4 years
jellyfish/10.0.3commit 384499f6ac...Jan-Simon Moeller4 years
jellyfish_10.0.3commit 384499f6ac...Jan-Simon Moeller4 years
11.0.1commit 795f0f7aef...Jan-Simon Möller4 years
koi/11.0.1commit 795f0f7aef...Jan-Simon Möller4 years
koi_11.0.1commit 795f0f7aef...Jan-Simon Möller4 years
10.0.2commit 85cc5622e6...Jan-Simon Möller4 years
jellyfish/10.0.2commit 85cc5622e6...Jan-Simon Möller4 years
jellyfish_10.0.2commit 85cc5622e6...Jan-Simon Möller4 years
11.0.0commit 4b755c4e17...Jan-Simon Möller4 years
koi/11.0.0commit 4b755c4e17...Jan-Simon Möller4 years
koi_11.0.0commit 4b755c4e17...Jan-Simon Möller4 years
10.93.1commit 2bab673a36...Jan-Simon Möller4 years
koi/10.93.1commit 2bab673a36...Jan-Simon Möller4 years
koi_10.93.1commit 2bab673a36...Jan-Simon Möller4 years
10.93.0commit 710583ec2e...Jan-Simon Möller4 years
koi/10.93.0commit 710583ec2e...Jan-Simon Möller4 years
koi_10.93.0commit 710583ec2e...Jan-Simon Möller4 years
10.92.0commit 7edeebda38...Jan-Simon Möller4 years
koi/10.92.0commit 7edeebda38...Jan-Simon Möller4 years
koi_10.92.0commit 7edeebda38...Jan-Simon Möller4 years
10.91.0commit d3f1db09e7...Jan-Simon Möller4 years
koi/10.91.0commit d3f1db09e7...Jan-Simon Möller4 years
koi_10.91.0commit d3f1db09e7...Jan-Simon Möller4 years
9.0.4commit e2abf967b9...Jan-Simon Möller4 years
icefish/9.0.4commit e2abf967b9...Jan-Simon Möller4 years
icefish_9.0.4commit e2abf967b9...Jan-Simon Möller4 years
10.0.1commit f092b22cc5...Jan-Simon Möller4 years
jellyfish/10.0.1commit f092b22cc5...Jan-Simon Möller4 years
jellyfish_10.0.1commit f092b22cc5...Jan-Simon Möller4 years
10.0.0commit 2bea3a629b...Jan-Simon Möller4 years
jellyfish/10.0.0commit 2bea3a629b...Jan-Simon Möller4 years
jellyfish_10.0.0commit 2bea3a629b...Jan-Simon Möller4 years
9.99.4commit 6920e60a3d...Jan-Simon Möller4 years
jellyfish/9.99.4commit 6920e60a3d...Jan-Simon Möller4 years
jellyfish_9.99.4commit 6920e60a3d...Jan-Simon Möller4 years
9.99.3commit 4e751e3b5a...Jan-Simon Möller4 years
jellyfish/9.99.3commit 4e751e3b5a...Jan-Simon Möller4 years
jellyfish_9.99.3commit 4e751e3b5a...Jan-Simon Möller4 years
9.0.3commit fdcaa09ee5...Jan-Simon Möller4 years
icefish/9.0.3commit fdcaa09ee5...Jan-Simon Möller4 years
icefish_9.0.3commit fdcaa09ee5...Jan-Simon Möller4 years
9.99.2commit 5e12e21bf0...Jan-Simon Moeller4 years
jellyfish/9.99.2commit 5e12e21bf0...Jan-Simon Moeller4 years
jellyfish_9.99.2commit 5e12e21bf0...Jan-Simon Moeller4 years
9.99.1commit 7a1e961b48...Jan-Simon Möller4 years
jellyfish/9.99.1commit 7a1e961b48...Jan-Simon Möller4 years
jellyfish_9.99.1commit 7a1e961b48...Jan-Simon Möller4 years
9.0.2commit a69184212e...Jan-Simon Möller5 years
icefish/9.0.2commit a69184212e...Jan-Simon Möller5 years
icefish_9.0.2commit a69184212e...Jan-Simon Möller5 years
9.0.1commit be63118538...Jan-Simon Möller5 years
icefish/9.0.1commit be63118538...Jan-Simon Möller5 years
icefish_9.0.1commit be63118538...Jan-Simon Möller5 years
8.0.6commit 052722a079...Jan-Simon Möller5 years
halibut/8.0.6commit 052722a079...Jan-Simon Möller5 years
halibut_8.0.6commit 052722a079...Jan-Simon Möller5 years
9.0.0commit 60308c26c7...Jan-Simon Möller5 years
icefish/9.0.0commit 60308c26c7...Jan-Simon Möller5 years
icefish_9.0.0commit 60308c26c7...Jan-Simon Möller5 years
8.99.5commit 908d7992e1...Jan-Simon Möller5 years
icefish/8.99.5commit 908d7992e1...Jan-Simon Möller5 years
icefish_8.99.5commit 908d7992e1...Jan-Simon Möller5 years
8.0.5commit 9319e53e82...Jan-Simon Möller5 years
halibut/8.0.5commit 9319e53e82...Jan-Simon Möller5 years
halibut_8.0.5commit 9319e53e82...Jan-Simon Möller5 years
8.99.4commit 40fbceab58...Jan-Simon Möller5 years
icefish/8.99.4commit 40fbceab58...Jan-Simon Möller5 years
icefish_8.99.4commit 40fbceab58...Jan-Simon Möller5 years
8.0.4commit ab4c19fb01...Jan-Simon Möller5 years
halibut/8.0.4commit ab4c19fb01...Jan-Simon Möller5 years
halibut_8.0.4commit ab4c19fb01...Jan-Simon Möller5 years
8.99.3commit d444569564...Jan-Simon Möller5 years
icefish/8.99.3commit d444569564...Jan-Simon Möller5 years
icefish_8.99.3commit d444569564...Jan-Simon Möller5 years
8.99.2commit dc3958ce86...Jan-Simon Möller5 years
icefish/8.99.2commit dc3958ce86...Jan-Simon Möller5 years
icefish_8.99.2commit dc3958ce86...Jan-Simon Möller5 years
8.99.1commit 66c26d2329...Jan-Simon Möller5 years
icefish/8.99.1commit 66c26d2329...Jan-Simon Möller5 years
icefish_8.99.1commit 66c26d2329...Jan-Simon Möller5 years
8.0.3commit e15a9df48b...Jan-Simon Möller5 years
halibut/8.0.3commit e15a9df48b...Jan-Simon Möller5 years
halibut_8.0.3commit e15a9df48b...Jan-Simon Möller5 years
8.0.2commit 8a7ddd4627...Jan-Simon Möller5 years
halibut/8.0.2commit 8a7ddd4627...Jan-Simon Möller5 years
halibut_8.0.2commit 8a7ddd4627...Jan-Simon Möller5 years
7.0.4commit 57824f4d8f...Jan-Simon Möller5 years
guppy/7.0.4commit 57824f4d8f...Jan-Simon Möller5 years
guppy_7.0.4commit 57824f4d8f...Jan-Simon Möller5 years
8.0.1commit b4099c5fd7...Jan-Simon Möller5 years
halibut/8.0.1commit b4099c5fd7...Jan-Simon Möller5 years
halibut_8.0.1commit b4099c5fd7...Jan-Simon Möller5 years
8.0.0commit 59f37556d1...Jan-Simon Möller5 years
halibut/8.0.0commit 59f37556d1...Jan-Simon Möller5 years
halibut_8.0.0commit 59f37556d1...Jan-Simon Möller5 years
7.99.3commit 42ab2045be...Jan-Simon Möller5 years
halibut/7.99.3commit 42ab2045be...Jan-Simon Möller5 years
halibut_7.99.3commit 42ab2045be...Jan-Simon Möller5 years
7.0.3commit 5855c1d849...Jan-Simon Möller5 years
guppy/7.0.3commit 5855c1d849...Jan-Simon Möller5 years
guppy_7.0.3commit 5855c1d849...Jan-Simon Möller5 years
7.99.2commit 0723ce7012...Jan-Simon Möller5 years
halibut/7.99.2commit 0723ce7012...Jan-Simon Möller5 years
halibut_7.99.2commit 0723ce7012...Jan-Simon Möller5 years
7.99.1commit a039cce097...Jan-Simon Möller5 years
halibut/7.99.1commit a039cce097...Jan-Simon Möller5 years
halibut_7.99.1commit a039cce097...Jan-Simon Möller5 years
7.0.2commit 6c60ed66a4...Jan-Simon Möller6 years
guppy/7.0.2commit 6c60ed66a4...Jan-Simon Möller6 years
guppy_7.0.2commit 6c60ed66a4...Jan-Simon Möller6 years
7.0.1commit 6a170f94b3...Jan-Simon Möller6 years
guppy/7.0.1commit 6a170f94b3...Jan-Simon Möller6 years
guppy_7.0.1commit 6a170f94b3...Jan-Simon Möller6 years
6.0.5commit bf364d8911...Jan-Simon Möller6 years
flounder/6.0.5commit bf364d8911...Jan-Simon Möller6 years
flounder_6.0.5commit bf364d8911...Jan-Simon Möller6 years
7.0.0commit 725d3c3177...Jan-Simon Möller6 years
guppy/7.0.0commit 725d3c3177...Jan-Simon Möller6 years
guppy_7.0.0commit 725d3c3177...Jan-Simon Möller6 years
7.90.0commit 8117996305...Jan-Simon Möller6 years
halibut/7.90.0commit 8117996305...Jan-Simon Möller6 years
halibut_7.90.0commit 8117996305...Jan-Simon Möller6 years
6.99.5commit 59abc08de3...Jan-Simon Möller6 years
guppy/6.99.5commit 59abc08de3...Jan-Simon Möller6 years
guppy_6.99.5commit 59abc08de3...Jan-Simon Möller6 years
6.0.4commit 4ea0b93b14...Jan-Simon Möller6 years
flounder/6.0.4commit 4ea0b93b14...Jan-Simon Möller6 years
flounder_6.0.4commit 4ea0b93b14...Jan-Simon Möller6 years
6.99.4commit f835ee311c...Jan-Simon Möller6 years
guppy/6.99.4commit f835ee311c...Jan-Simon Möller6 years
guppy_6.99.4commit f835ee311c...Jan-Simon Möller6 years
6.99.3commit cf71a3e8fd...Jan-Simon Möller6 years
guppy/6.99.3commit cf71a3e8fd...Jan-Simon Möller6 years
guppy_6.99.3commit cf71a3e8fd...Jan-Simon Möller6 years
6.0.3commit 0f1bcdcbe3...Jan-Simon Möller6 years
flounder/6.0.3commit 0f1bcdcbe3...Jan-Simon Möller6 years
flounder_6.0.3commit 0f1bcdcbe3...Jan-Simon Möller6 years
6.99.2commit c46d25ae06...Jan-Simon Möller6 years
guppy/6.99.2commit c46d25ae06...Jan-Simon Möller6 years
guppy_6.99.2commit c46d25ae06...Jan-Simon Möller6 years
6.99.1commit 7d027fc628...Jan-Simon Möller6 years
guppy/6.99.1commit 7d027fc628...Jan-Simon Möller6 years
guppy_6.99.1commit 7d027fc628...Jan-Simon Möller6 years
6.0.2commit f76872c5b8...Jan-Simon Möller6 years
flounder/6.0.2commit f76872c5b8...Jan-Simon Möller6 years
flounder_6.0.2commit f76872c5b8...Jan-Simon Möller6 years
6.0.1commit 7a6616c138...Jan-Simon Möller6 years
flounder/6.0.1commit 7a6616c138...Jan-Simon Möller6 years
flounder_6.0.1commit 7a6616c138...Jan-Simon Möller6 years
6.90.0commit 065eb6fcd2...Jan-Simon Möller6 years
guppy/6.90.0commit 065eb6fcd2...Jan-Simon Möller6 years
guppy_6.90.0commit 065eb6fcd2...Jan-Simon Möller6 years
6.0.0commit 0fde830e52...Jan-Simon Möller6 years
flounder/6.0.0commit 0fde830e52...Jan-Simon Möller6 years
flounder_6.0.0commit 0fde830e52...Jan-Simon Möller6 years
5.99.7commit a37385c65b...Jan-Simon Möller6 years
flounder/5.99.7commit a37385c65b...Jan-Simon Möller6 years
flounder_5.99.7commit a37385c65b...Jan-Simon Möller6 years
5.99.6commit 1ac6af91ec...Jan-Simon Möller6 years
flounder/5.99.6commit 1ac6af91ec...Jan-Simon Möller6 years
flounder_5.99.6commit 1ac6af91ec...Jan-Simon Möller6 years
5.99.5commit ea20324404...Jan-Simon Möller6 years
flounder/5.99.5commit ea20324404...Jan-Simon Möller6 years
flounder_5.99.5commit ea20324404...Jan-Simon Möller6 years
5.99.4commit 8ca211abd1...Jan-Simon Möller6 years
flounder/5.99.4commit 8ca211abd1...Jan-Simon Möller6 years
flounder_5.99.4commit 8ca211abd1...Jan-Simon Möller6 years
5.99.3commit 499444bfa9...Jan-Simon Möller6 years
flounder/5.99.3commit 499444bfa9...Jan-Simon Möller6 years
flounder_5.99.3commit 499444bfa9...Jan-Simon Möller6 years
5.99.2commit f126a1cb09...Jan-Simon Möller6 years
flounder/5.99.2commit f126a1cb09...Jan-Simon Möller6 years
flounder_5.99.2commit f126a1cb09...Jan-Simon Möller6 years
5.1.0commit e5cb9cdea2...Jan-Simon Möller6 years
eel/5.1.0commit e5cb9cdea2...Jan-Simon Möller6 years
eel_5.1.0commit e5cb9cdea2...Jan-Simon Möller6 years
5.99.1commit d12df8891a...Jan-Simon Möller6 years
flounder/5.99.1commit d12df8891a...Jan-Simon Möller6 years
flounder_5.99.1commit d12df8891a...Jan-Simon Möller6 years
5.0.3commit e1b558e1f0...Jan-Simon Möller7 years
eel/5.0.3commit e1b558e1f0...Jan-Simon Möller7 years
eel_5.0.3commit e1b558e1f0...Jan-Simon Möller7 years
5.0.2commit 14579523b8...Jan-Simon Möller7 years
eel/5.0.2commit 14579523b8...Jan-Simon Möller7 years
eel_5.0.2commit 14579523b8...Jan-Simon Möller7 years
4.0.3commit 1b2addabaa...Jan-Simon Möller7 years
dab/4.0.3commit 1b2addabaa...Jan-Simon Möller7 years
dab_4.0.3commit 1b2addabaa...Jan-Simon Möller7 years
5.0.1commit bd48aea823...Jan-Simon Möller7 years
eel/5.0.1commit bd48aea823...Jan-Simon Möller7 years
eel_5.0.1commit bd48aea823...Jan-Simon Möller7 years
5.0.0commit b3084b0edd...Jan-Simon Möller7 years
eel/5.0.0commit b3084b0edd...Jan-Simon Möller7 years
eel_5.0.0commit b3084b0edd...Jan-Simon Möller7 years
4.99.5commit 2a1c8e5e89...Jan-Simon Möller7 years
eel/4.99.5commit 2a1c8e5e89...Jan-Simon Möller7 years
eel_4.99.5commit 2a1c8e5e89...Jan-Simon Möller7 years
4.99.4commit 2c5e0e646a...Jan-Simon Möller7 years
eel/4.99.4commit 2c5e0e646a...Jan-Simon Möller7 years
eel_4.99.4commit 2c5e0e646a...Jan-Simon Möller7 years
4.99.3commit 9cdd1e7b56...Jan-Simon Möller7 years
eel/4.99.3commit 9cdd1e7b56...Jan-Simon Möller7 years
eel_4.99.3commit 9cdd1e7b56...Jan-Simon Möller7 years
4.99.2commit f0e87b1656...Jan-Simon Möller7 years
eel/4.99.2commit f0e87b1656...Jan-Simon Möller7 years
eel_4.99.2commit f0e87b1656...Jan-Simon Möller7 years
4.99.1commit 970a7f8e15...Jan-Simon Möller7 years
eel/4.99.1commit 970a7f8e15...Jan-Simon Möller7 years
eel_4.99.1commit 970a7f8e15...Jan-Simon Möller7 years
4.0.2commit a5f69d3d31...Jan-Simon Möller7 years
dab/4.0.2commit a5f69d3d31...Jan-Simon Möller7 years
dab_4.0.2commit a5f69d3d31...Jan-Simon Möller7 years
4.0.1commit 7b971469a8...Jan-Simon Möller7 years
dab/4.0.1commit 7b971469a8...Jan-Simon Möller7 years
dab_4.0.1commit 7b971469a8...Jan-Simon Möller7 years
3.0.5commit 29c296c3e1...Jan-Simon Möller7 years
chinook/3.0.5commit 29c296c3e1...Jan-Simon Möller7 years
chinook_3.0.5commit 29c296c3e1...Jan-Simon Möller7 years
4.0.0commit 84f2e448c6...Jan-Simon Möller7 years
dab/4.0.0commit 84f2e448c6...Jan-Simon Möller7 years
dab_4.0.0commit 84f2e448c6...Jan-Simon Möller7 years
3.99.3commit 4307ed5d28...Jan-Simon Möller7 years
dab/3.99.3commit 4307ed5d28...Jan-Simon Möller7 years
dab_3.99.3commit 4307ed5d28...Jan-Simon Möller7 years
3.99.2commit 0c484021ac...Jan-Simon Möller7 years
dab/3.99.2commit 0c484021ac...Jan-Simon Möller7 years
dab_3.99.2commit 0c484021ac...Jan-Simon Möller7 years
3.0.4commit 29c296c3e1...Jan-Simon Möller7 years
chinook/3.0.4commit 29c296c3e1...Jan-Simon Möller7 years
chinook_3.0.4commit 29c296c3e1...Jan-Simon Möller7 years
3.99.1commit 79fe06d7b1...Jan-Simon Möller8 years
dab/3.99.1commit 79fe06d7b1...Jan-Simon Möller8 years
dab_3.99.1commit 79fe06d7b1...Jan-Simon Möller8 years
3.0.3commit 900c064d04...Jan-Simon Möller8 years
chinook/3.0.3commit 900c064d04...Jan-Simon Möller8 years
chinook_3.0.3commit 900c064d04...Jan-Simon Möller8 years
3.0.2commit f12cf6c411...Jan-Simon Möller8 years
chinook/3.0.2commit f12cf6c411...Jan-Simon Möller8 years
chinook_3.0.2commit f12cf6c411...Jan-Simon Möller8 years
2.0.5commit 775d5687d4...Jan-Simon Möller8 years
blowfish_2.0.5commit 775d5687d4...Jan-Simon Möller8 years
3.0.1commit 301c9b3236...Jan-Simon Möller8 years
chinook/3.0.1commit 301c9b3236...Jan-Simon Möller8 years
chinook_3.0.1commit 301c9b3236...Jan-Simon Möller8 years
3.0.0commit fb57dd647f...Jan-Simon Möller8 years
chinook/3.0.0commit fb57dd647f...Jan-Simon Möller8 years
chinook_3.0.0commit fb57dd647f...Jan-Simon Möller8 years
2.0.4commit 775d5687d4...Jan-Simon Möller8 years
blowfish_2.0.4commit 775d5687d4...Jan-Simon Möller8 years
2.0.3commit fe44384501...Jan-Simon Möller8 years
blowfish_2.0.3commit fe44384501...Jan-Simon Möller8 years
2.0.2commit 2031b8aad4...Tadao Tanikawa8 years
blowflish_2.0.2commit 2031b8aad4...Tadao Tanikawa8 years
blowfish_2.0.1commit 744c7b1093...Jan-Simon Möller8 years
2.0.1commit 744c7b1093...Jan-Simon Möller8 years
2.0.0commit cc54151075...Jan-Simon Möller8 years
blowfish_2.0.0commit cc54151075...Jan-Simon Möller8 years
albacore_1.0commit b346f282b1...Jan-Simon Möller9 years
0.2015.33commit 752f9723fe...Paul Sherwood9 years