diff --git a/kwalitee/cli.py b/kwalitee/cli.py
index d8ba0e426fa618adebc7d5f8c364890bd72105ac..1ab35a993f1943a45843bf61c89ad1b43365bfc1 100644
--- a/kwalitee/cli.py
+++ b/kwalitee/cli.py
@@ -25,7 +25,8 @@ class CliCtx():
             for repo_desc in self.config['repolist']:
                 url = repo_desc['url']
                 official = repo_desc.get('official', False)
-                self.repos.append(Repo(self.config, url, official))
+                compliant_cli = repo_desc.get('compliant_cli', False)
+                self.repos.append(Repo(self.config, url, official, compliant_cli))
 pass_ctx = click.make_pass_decorator(CliCtx)
 
 @click.group()
diff --git a/kwalitee/config.yml b/kwalitee/config.yml
index 0b7cd611e42253066741f55c61fee46e781a67da..779f610c7e79c11ea02a35dfcdcecabd4f0f559a 100644
--- a/kwalitee/config.yml
+++ b/kwalitee/config.yml
@@ -4,24 +4,37 @@ repodir: /data/ocrd_all
 repolist:
   - url: https://github.com/ASVLeipzig/cor-asv-ann
     official: true
+    compliant_cli: true
   - url: https://github.com/ASVLeipzig/cor-asv-fst
     official: true
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_calamari
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_im6convert
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_keraslm
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_kraken
+    compliant_cli: false
   - url: https://github.com/OCR-D/ocrd_ocropy
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_olena
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_segment
+    compliant_cli: true
   - url: https://github.com/OCR-D/ocrd_tesserocr
     official: true
+    compliant_cli: true
   - url: https://github.com/cisocrgroup/ocrd_cis
     official: true
   - url: https://github.com/OCR-D/ocrd_anybaseocr
     official: true
+    compliant_cli: false
   - url: https://github.com/ocr-d-modul-2-segmentierung/ocrd_pc_segmentation
     official: true
+    compliant_cli: true
   - url: https://github.com/qurator-spk/dinglehopper
   # - url: https://github.com/qurator-spk/pixelwise_segmentation_SBB
   - url: https://github.com/OCR-D/ocrd_typegroups_classifier
     official: true
+    compliant_cli: true
diff --git a/kwalitee/repo.py b/kwalitee/repo.py
index 1aaae73b3134fef6893c23a08be5645d9525e4ce..1624e2c38b913908a022f046d93ce911b7e5adbd 100644
--- a/kwalitee/repo.py
+++ b/kwalitee/repo.py
@@ -10,11 +10,12 @@ LOG = getLogger('kwalitee.repo')
 
 class Repo():
 
-    def __init__(self, config, url, official=False):
+    def __init__(self, config, url, official=False, compliant_cli=False):
         self.url = url
         self.config = config
         self.name = Path(url).name
         self.official = official
+        self.compliant_cli = compliant_cli
         self.path = Path(self.config['repodir'], self.name)
 
     def __str__(self):
@@ -75,6 +76,7 @@ class Repo():
         desc = {}
         desc['url'] = self.url
         desc['official'] = self.official
+        desc['compliant_cli'] = self.compliant_cli
         desc['org_plus_name'] = '/'.join(self.url.split('/')[-2:])
         desc['name'] = self.name
         desc['files'] = self.get_file_contents()
diff --git a/repos.json b/repos.json
index 14ade94f4e7727462cc66b0d9e6c8b301bf15008..bba166da04e2a646370dcb8173dd32fc782c92df 100644
--- a/repos.json
+++ b/repos.json
@@ -1,5 +1,6 @@
 [
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": null,
             "README.md": "# cor-asv-ann\n    OCR post-correction with encoder-attention-decoder LSTMs\n\n## Introduction\n\nThis is a tool for automatic OCR _post-correction_ (reducing optical character recognition errors) with recurrent neural networks. It uses sequence-to-sequence transduction on the _character level_ with a model architecture akin to neural machine translation, i.e. a stacked **encoder-decoder** network with attention mechanism. \n\nThe **attention model** always applies to full lines (in a _global_ configuration), and uses a linear _additive_ alignment model. (This transfers information between the encoder and decoder hidden layer states, and calculates a _soft alignment_ between input and output characters. It is imperative for character-level processing, because with a simple final-initial transfer, models tend to start \"forgetting\" the input altogether at some point in the line and behave like unconditional LM generators.)\n\n...FIXME: mention: \n- stacked architecture (with bidirectional bottom and attentional top), configurable depth/width\n- weight tying\n- underspecification and gap\n- confidence input and alternative input\n- CPU/GPU option\n- incremental training, LM transfer, shallow transfer\n- evaluation (CER, PPL)\n\n### Processing PAGE annotations\n\nWhen applied on PAGE-XML (as OCR-D workspace processor), this component also allows processing below the `TextLine` hierarchy level, i.e. on `Word` or `Glyph` level. For that it uses the soft alignment scores to calculate an optimal hard alignment path for characters, and thereby distributes the transduction onto the lower level elements (keeping their coordinates and other meta-data), while changing Word segmentation if necessary.\n\n...\n\n### Architecture\n\n...FIXME: show!\n\n### Input with confidence and/or alternatives\n\n...FIXME: explain!\n\n### Multi-OCR input\n\nnot yet!\n\n### Modes\n\nWhile the _encoder_ can always be run in parallel over a batch of lines and by passing the full sequence of characters in one tensor (padded to the longest line in the batch), which is very efficient with Keras backends like Tensorflow, a **beam-search** _decoder_ requires passing initial/final states character-by-character, with parallelism employed to capture multiple history hypotheses of a single line. However, one can also **greedily** use the best output only for each position (without beam search). And in doing so, another option is to feed back the softmax output directly into the decoder input instead of its argmax unit vector. This effectively passes the full probability distribution from state to state, which (not very surprisingly) can increase correction accuracy quite a lot \u2013 it can get as good as a medium-sized beam search results. This latter option also allows to run in parallel again, which is also much faster \u2013 consuming up to ten times less CPU time.\n\nThererfore, the backend function `lib.Sequence2Sequence.correct_lines` can operate the encoder-decoder network in either of the following modes:\n\n#### _fast_\n\nDecode greedily, but feeding back the full softmax distribution in batch mode.\n\n#### _greedy_\n\nDecode greedily, but feeding back the argmax unit vectors for each line separately.\n\n#### _default_\n\nDecode beamed, feeding back the argmax unit vectors for the best history/output hypotheses of each line. More specifically:\n\n> Start decoder with start-of-sequence, then keep decoding until\n> end-of-sequence is found or output length is way off, repeatedly.\n> Decode by using the best predicted output characters and several next-best\n> alternatives (up to some degradation threshold) as next input.\n> Follow-up on the N best overall candidates (estimated by accumulated\n> score, normalized by length and prospective cost), i.e. do A*-like\n> breadth-first search, with N equal `batch_size`.\n> Pass decoder initial/final states from character to character,\n> for each candidate respectively.\n> Reserve 1 candidate per iteration for running through `source_seq`\n> (as a rejection fallback) to ensure that path does not fall off the\n> beam and at least one solution can be found within the search limits.\n\n### Evaluation\n\nText lines can be compared (by aligning and computing a distance under some metric) across multiple inputs. (This would typically be GT and OCR vs post-correction.) This can be done both on plain text files (`cor-asv-ann-eval`) and PAGE-XML annotations (`ocrd-cor-asv-ann-evaluate`).\n\nThere are a number of distance metrics available:\n- `Levenshtein`: simple unweighted edit distance (fastest, standard)\n- `combining-e-umlauts`: like the former, but umlauts with combining letter e get smaller distance to precomposed umlauts (and vice versa), as in \"Wu\u0364\u017fte\" (as opposed to \"W\u00fc\u017fte\")\n- `historic_latin`: like the former, but with additional exceptions (i.e. zero distances) for certain (isolated) character confusions \u2013 roughly the difference between GT level 1 and 2\n- `NFC`: like `Levenshtein`, but apply Unicode normal form with canonical composition before (i.e. less than `historic_latin`)\n- `NFKC`: like `Levenshtein`, but apply Unicode normal form with compatibility composition before (i.e. more than `historic_latin`)\n\n\n## Installation\n\nRequired Ubuntu packages:\n\n* Python (``python`` or ``python3``)\n* pip (``python-pip`` or ``python3-pip``)\n* virtualenv (``python-virtualenv`` or ``python3-virtualenv``)\n\nCreate and activate a virtualenv as usual.\n\nTo install Python dependencies and this module, then do:\n```shell\nmake deps install\n```\nWhich is the equivalent of:\n```shell\npip install -r requirements.txt\npip install -e .\n```\n\n## Usage\n\nThis packages has the following user interfaces:\n\n### command line interface `cor-asv-ann-train`\n\nTo be used with string arguments and plain-text files.\n\n...\n\n### command line interface `cor-asv-ann-eval`\n\nTo be used with string arguments and plain-text files.\n\n...\n\n### command line interface `cor-asv-ann-repl`\n\ninteractive\n\n...\n\n### [OCR-D processor](https://github.com/OCR-D/core) interface `ocrd-cor-asv-ann-process`\n\nTo be used with [PageXML](https://www.primaresearch.org/tools/PAGELibraries) documents in an [OCR-D](https://github.com/OCR-D/spec/) annotation workflow. Input could be anything with a textual annotation (`TextEquiv` on the given `textequiv_level`). \n\n...\n\n```json\n    \"ocrd-cor-asv-ann-process\": {\n      \"executable\": \"ocrd-cor-asv-ann-process\",\n      \"categories\": [\n        \"Text recognition and optimization\"\n      ],\n      \"steps\": [\n        \"recognition/post-correction\"\n      ],\n      \"description\": \"Improve text annotation by character-level encoder-attention-decoder ANN model\",\n      \"input_file_grp\": [\n        \"OCR-D-OCR-TESS\",\n        \"OCR-D-OCR-KRAK\",\n        \"OCR-D-OCR-OCRO\",\n        \"OCR-D-OCR-CALA\",\n        \"OCR-D-OCR-ANY\"\n      ],\n      \"output_file_grp\": [\n        \"OCR-D-COR-ASV\"\n      ],\n      \"parameters\": {\n        \"model_file\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"content-type\": \"application/x-hdf;subtype=bag\",\n          \"description\": \"path of h5py weight/config file for model trained with cor-asv-ann-train\",\n          \"required\": true,\n          \"cacheable\": true\n        },\n        \"textequiv_level\": {\n          \"type\": \"string\",\n          \"enum\": [\"line\", \"word\", \"glyph\"],\n          \"default\": \"glyph\",\n          \"description\": \"PAGE XML hierarchy level to read/write TextEquiv input/output on\"\n        }\n      }\n    }\n```\n\n...\n\n### [OCR-D processor](https://github.com/OCR-D/core) interface `ocrd-cor-asv-ann-evaluate`\n\nTo be used with [PageXML](https://www.primaresearch.org/tools/PAGELibraries) documents in an [OCR-D](https://github.com/OCR-D/spec/) annotation workflow. Inputs could be anything with a textual annotation (`TextEquiv` on the line level), but at least 2. The first in the list of input file groups will be regarded as reference/GT.\n\n...\n\n```json\n    \"ocrd-cor-asv-ann-evaluate\": {\n      \"executable\": \"ocrd-cor-asv-ann-evaluate\",\n      \"categories\": [\n        \"Text recognition and optimization\"\n      ],\n      \"steps\": [\n        \"recognition/evaluation\"\n      ],\n      \"description\": \"Align different textline annotations and compute distance\",\n      \"parameters\": {\n        \"metric\": {\n          \"type\": \"string\",\n          \"enum\": [\"Levenshtein\", \"combining-e-umlauts\", \"NFC\", \"NFKC\", \"historic_latin\"],\n          \"default\": \"Levenshtein\",\n          \"description\": \"Distance metric to calculate and aggregate\"\n        }\n      }\n    }\n```\n\n...\n\n## Testing\n\nnot yet!\n...\n",
@@ -96,6 +97,7 @@
         "url": "https://github.com/ASVLeipzig/cor-asv-ann"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": null,
             "README.md": "# cor-asv-fst\n    OCR post-correction with error/lexicon Finite State Transducers and\n    chararacter-level LSTM language models\n\n## Introduction\n\n\n## Installation\n\nRequired Ubuntu packages:\n\n* Python (``python`` or ``python3``)\n* pip (``python-pip`` or ``python3-pip``)\n* virtualenv (``python-virtualenv`` or ``python3-virtualenv``)\n\nCreate and activate a virtualenv as usual.\n\nTo install Python dependencies and this module, then do:\n```shell\nmake deps install\n```\nWhich is the equivalent of:\n```shell\npip install -r requirements.txt\npip install -e .\n```\n\nIn addition to the requirements listed in `requirements.txt`, the tool\nrequires the\n[pynini](http://www.opengrm.org/twiki/bin/view/GRM/Pynini)\nlibrary, which has to be installed from source.\n\n## Usage\n\nThe package has two user interfaces:\n\n### Command Line Interface\n\nThe package contains a suite of CLI tools to work with plaintext data (prefix:\n`cor-asv-fst-*`). The minimal working examples and data formats are described\nbelow. Additionally, each tool has further optional parameters - for a detailed\ndescription, call the tool with the `--help` option.\n\n#### `cor-asv-fst-train`\n\nTrain FST models. The basic invocation is as follows:\n\n```shell\ncor-asv-fst-train -l LEXICON_FILE -e ERROR_MODEL_FILE -t TRAINING_FILE\n```\n\nThis will create two transducers, which will be stored in `LEXICON_FILE` and\n`ERROR_MODEL_FILE`, respectively. As the training of the lexicon and the error\nmodel is done independently, any of them can be skipped by omitting the\nrespective parameter.\n\n`TRAINING_FILE` is a plain text file in tab-separated, two-column format\ncontaining a line of OCR-output and the corresponding ground truth line:\n\n```\n\u00bb Bergebt mir, da\u00df ih niht wei\u00df, wie\t\u00bbVergebt mir, da\u00df ich nicht wei\u00df, wie\naus dem (Gei\u017fte aller Nationen Mahrunq\taus dem Gei\u017fte aller Nationen Nahrung\nKann\u017ft Du mir die re<h\u00e9e Bahn nich\u00e9 zeigen ?\tKann\u017ft Du mir die rechte Bahn nicht zeigen?\nfrag zu bringen. \u2014\ttrag zu bringen. \u2014\n\u017fie ins irdij<he Leben hinein, Mit leichtem,\t\u017fie ins irdi\u017fche Leben hinein. Mit leichtem,\n```\n\nEach line is treated independently. Alternatively to the above, the training\ndata may also be supplied as two files:\n\n```shell\ncor-asv-fst-train -l LEXICON_FILE -e ERROR_MODEL_FILE -i INPUT_FILE -g GT_FILE\n```\n\nIn this variant, `INPUT_FILE` and `GT_FILE` are both in tab-separated,\ntwo-column format, in which the first column is the line ID and the second the\nline:\n\n```\n>=== INPUT_FILE ===<\nalexis_ruhe01_1852_0018_022     ih denke. Aber was die \u017felige Frau Geheimr\u00e4th1n\nalexis_ruhe01_1852_0035_019     \u201eDas fann ich niht, c\u2019esl absolument impos-\nalexis_ruhe01_1852_0087_027     rend. In dem Augenbli> war 1hr niht wohl zu\nalexis_ruhe01_1852_0099_012     \u00fcr die fle \u017fich \u017fchlugen.\u201c\nalexis_ruhe01_1852_0147_009     \u017follte. Nur \u00dcber die Familien, wo man \u017fie einf\u00fchren\n\n>=== GT_FILE ===<\nalexis_ruhe01_1852_0018_022     ich denke. Aber was die \u017felige Frau Geheimr\u00e4thin\nalexis_ruhe01_1852_0035_019     \u201eDas kann ich nicht, c'est absolument impos\u2014\nalexis_ruhe01_1852_0087_027     rend. Jn dem Augenblick war ihr nicht wohl zu\nalexis_ruhe01_1852_0099_012     f\u00fcr die \u017fie \u017fich \u017fchlugen.\u201c\nalexis_ruhe01_1852_0147_009     \u017follte. Nur \u00fcber die Familien, wo man \u017fie einf\u00fchren\n```\n\n#### `cor-asv-fst-process`\n\nThis tool applies a trained model to correct plaintext data on a line basis.\nThe basic invocation is:\n\n```shell\ncor-asv-fst-process -i INPUT_FILE -o OUTPUT_FILE -l LEXICON_FILE -e ERROR_MODEL_FILE (-m LM_FILE)\n```\n\n`INPUT_FILE` is in the same format as for the training procedure. `OUTPUT_FILE`\ncontains the post-correction results in the same format.\n\n`LM_FILE` is a `ocrd_keraslm` language model - if supplied, it is used for\nrescoring.\n\n#### `cor-asv-fst-evaluate`\n\nThis tool can be used to evaluate the post-correction results. The minimal\nworking invocation is:\n\n```shell\ncor-asv-fst-evaluate -i INPUT_FILE -o OUTPUT_FILE -g GT_FILE\n```\n\nAdditionally, the parameter `-M` can be used to select the evaluation measure\n(`Levenshtein` by default). The files should be in the same two-column format\nas described above.\n\n### [OCR-D processor](https://ocr-d.github.io/cli) interface `ocrd-cor-asv-fst-process`\n\nTo be used with [PageXML](https://github.com/PRImA-Research-Lab/PAGE-XML)\ndocuments in an [OCR-D](https://ocr-d.github.io) annotation workflow.\nInput files need a textual annotation (`TextEquiv`) on the given\n`textequiv_level` (currently _only_ `word`!).\n\n...\n\n```json\n  \"tools\": {\n    \"cor-asv-fst-process\": {\n      \"executable\": \"cor-asv-fst-process\",\n      \"categories\": [\n        \"Text recognition and optimization\"\n      ],\n      \"steps\": [\n        \"recognition/post-correction\"\n      ],\n      \"description\": \"Improve text annotation by FST error and lexicon model with character-level LSTM language model\",\n      \"input_file_grp\": [\n        \"OCR-D-OCR-TESS\",\n        \"OCR-D-OCR-KRAK\",\n        \"OCR-D-OCR-OCRO\",\n        \"OCR-D-OCR-CALA\",\n        \"OCR-D-OCR-ANY\"\n      ],\n      \"output_file_grp\": [\n        \"OCR-D-COR-ASV\"\n      ],\n      \"parameters\": {\n        \"textequiv_level\": {\n          \"type\": \"string\",\n          \"enum\": [\"word\"],\n          \"default\": \"word\",\n          \"description\": \"PAGE XML hierarchy level to read TextEquiv input on (output will always be word level)\"\n        },\n        \"errorfst_file\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"content-type\": \"application/vnd.openfst\",\n          \"description\": \"path of FST file for error model\",\n          \"required\": true,\n          \"cacheable\": true\n        },\n        \"lexiconfst_file\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"content-type\": \"application/vnd.openfst\",\n          \"description\": \"path of FST file for lexicon model\",\n          \"required\": true,\n          \"cacheable\": true\n        },\n        \"pruning_weight\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"description\": \"transition weight for pruning the hypotheses in each word window FST\",\n          \"default\": 5.0\n        },\n        \"rejection_weight\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"description\": \"transition weight (per character) for unchanged input in each word window FST\",\n          \"default\": 1.5\n        },\n        \"keraslm_file\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"content-type\": \"application/x-hdf;subtype=bag\",\n          \"description\": \"path of h5py weight/config file for language model trained with keraslm\",\n          \"required\": true,\n          \"cacheable\": true\n        },\n        \"beam_width\": {\n          \"type\": \"number\",\n          \"format\": \"integer\",\n          \"description\": \"maximum number of best partial paths to consider during beam search in language modelling\",\n          \"default\": 100\n        },\n        \"lm_weight\": {\n          \"type\": \"number\",\n          \"format\": \"float\",\n          \"description\": \"share of the LM scores over the FST output confidences\",\n          \"default\": 0.5\n        }\n      }\n    }\n  }\n```\n\n...\n\n## Testing\n\n...\n",
@@ -206,6 +208,7 @@
         "url": "https://github.com/ASVLeipzig/cor-asv-fst"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": "FROM ocrd/core:edge\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\nENV PYTHONIOENCODING utf8\nENV LC_ALL C.UTF-8\nENV LANG C.UTF-8\n\nWORKDIR /build\nCOPY Makefile .\nCOPY setup.py .\nCOPY ocrd-tool.json .\nCOPY requirements.txt .\nCOPY ocrd_calamari ocrd_calamari\n\nRUN make calamari/build\nRUN pip3 install .\n\nENTRYPOINT [\"/usr/local/bin/ocrd-calamari-recognize\"]\n\n",
             "README.md": "# ocrd_calamari\n\n> Recognize text using [Calamari OCR](https://github.com/Calamari-OCR/calamari).\n\n[![image](https://circleci.com/gh/OCR-D/ocrd_calamari.svg?style=svg)](https://circleci.com/gh/OCR-D/ocrd_calamari)\n[![image](https://img.shields.io/pypi/v/ocrd_calamari.svg)](https://pypi.org/project/ocrd_calamari/)\n[![image](https://codecov.io/gh/OCR-D/ocrd_calamari/branch/master/graph/badge.svg)](https://codecov.io/gh/OCR-D/ocrd_calamari)\n\n## Introduction\n\nThis offers a OCR-D compliant workspace processor for some of the functionality of Calamari OCR.\n\nThis processor only operates on the text line level and so needs a line segmentation (and by extension a binarized \nimage) as its input.\n\n## Installation\n\n### From PyPI\n\n```\npip install ocrd_calamari\n```\n\n### From Repo\n\n```sh\npip install .\n```\n\n## Install models\n\nDownload models trained on GT4HistOCR data:\n\n```\nmake gt4histocr-calamari\nls gt4histocr-calamari\n```\n\n## Example Usage\n\n~~~\nocrd-calamari-recognize -p test-parameters.json -m mets.xml -I OCR-D-SEG-LINE -O OCR-D-OCR-CALAMARI\n~~~\n\nWith `test-parameters.json`:\n~~~\n{\n    \"checkpoint\": \"/path/to/some/trained/models/*.ckpt.json\"\n}\n~~~\n\n## Development & Testing\nFor information regarding development and testing, please see\n[README-DEV.md](README-DEV.md).\n",
@@ -462,6 +465,7 @@
         "url": "https://github.com/OCR-D/ocrd_calamari"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": "FROM ocrd/core\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\n\nENV PREFIX=/usr/local\n\nWORKDIR /build\nCOPY ocrd-im6convert .\nCOPY ocrd-tool.json .\nCOPY Makefile .\n\nRUN apt-get update && \\\n    apt-get -y install apt-utils && \\\n    apt-get -y install --no-install-recommends \\\n    ca-certificates \\\n    make\n\nRUN make deps-ubuntu install\n\nENV DEBIAN_FRONTEND teletype\n\n# no fixed entrypoint (e.g. also allow `convert` etc)\nCMD [\"/usr/local/bin/ocrd-im6convert\", \"--help\"]\n",
             "README.md": "# ocrd_imageconvert/\n\n> Thin wrapper around convert(1)\n\n## Introduction\n\n```sh\n# Actual conversion\nconvert \"$infile\" \"$outfile\"\n```\n### What it could do\n\n[One or more of these](http://www.fmwconcepts.com/imagemagick/textcleaner/index.php) or\n[these](http://web.archive.org/web/20110517204536/http://www.ict.griffith.edu.au/anthony/graphics/imagick6/quantize/)\nor convert to grayscale, binarize etc. With threshold configurable as a\nparameter.\n\n## Installation\n\n```\nmake install\n```\n\n## Usage\n...\n\n## Testing\n\nNone yet\n",
@@ -515,6 +519,7 @@
         "url": "https://github.com/OCR-D/ocrd_im6convert"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": null,
             "README.md": "# ocrd_keraslm\n    character-level language modelling using Keras\n\n\n## Introduction\n\nThis is a tool for statistical _language modelling_ (predicting text from context) with recurrent neural networks. It models probabilities not on the word level but the _character level_ so as to allow open vocabulary processing (avoiding morphology, historic orthography and word segmentation problems). It manages a vocabulary of mapped characters, which can be easily extended by training on more text. Above that, unmapped characters are treated with underspecification.\n\nIn addition to character sequences, (meta-data) context variables can be configured as extra input. \n\n### Architecture\n\nThe model consists of:\n\n0. an input layer: characters are represented as indexes from the vocabulary mapping, in windows of a number `length` of characters,\n1. a character embedding layer: window sequences are converted into dense vectors by looking up the indexes in an embedding weight matrix,\n2. a context embedding layer: context variables are converted into dense vectors by looking up the indexes in an embedding weight matrix, \n3. character and context vector sequences are concatenated,\n4. a number `depth` of hidden layers: each with a number `width` of hidden recurrent units of _LSTM cells_ (Long Short-term Memory) connected on top of each other,\n5. an output layer derived from the transposed character embedding matrix (weight tying): hidden activations are projected linearly to vectors of dimensionality equal to the character vocabulary size, then softmax is applied returning a probability for each possible value of the next character, respectively.\n\n![model graph depiction](model-graph.png \"graph with 1 context variable\")\n\nThe model is trained by feeding windows of text in index representation to the input layer, calculating output and comparing it to the same text shifted backward by 1 character, and represented as unit vectors (\"one-hot coding\") as target. The loss is calculated as the (unweighted) cross-entropy between target and output. Backpropagation yields error gradients for each layer, which is used to iteratively update the weights (stochastic gradient descent).\n\nThis is implemented in [Keras](https://keras.io) with [Tensorflow](https://www.tensorflow.org/) as backend. It automatically uses a fast CUDA-optimized LSTM implementation (Nividia GPU and Tensorflow installation with GPU support, see below), both in learning and in prediction phase, if available.\n\n\n### Modes of operation\n\nNotably, this model (by default) runs _statefully_, i.e. by implicitly passing hidden state from one window (batch of samples) to the next. That way, the context available for predictions can be arbitrarily long (above `length`, e.g. the complete document up to that point), or short (below `length`, e.g. at the start of a text). (However, this is a passive perspective above `length`, because errors are never back-propagated any further in time during gradient-descent training.) This is favourable to stateless mode because all characters can be output in parallel, and no partial windows need to be presented during training (which slows down).\n\nBesides stateful mode, the model can also be run _incrementally_, i.e. by explicitly passing hidden state from the caller. That way, multiple alternative hypotheses can be processed together. This is used for generation (sampling from the model) and alternative decoding (finding the best path through a sequence of alternatives).\n\n### Context conditioning\n\nEvery text has meta-data like time, author, text type, genre, production features (e.g. print vs typewriter vs digital born rich text, OCR version), language, structural element (e.g. title vs heading vs paragraph vs footer vs marginalia), font family (e.g. Antiqua vs Fraktura) and font shape (e.g. bold vs letter-spaced vs italic vs normal) etc. \n\nThis information (however noisy) can be very useful to facilitate stochastic modelling, since language has an extreme diversity and complexity. To that end, models can be conditioned on extra inputs here, termed _context variables_. The model learns to represent these high-dimensional discrete values as low-dimensional continuous vectors (embeddings), also entering the recurrent hidden layers (as a form of simple additive adaptation).\n\n### Underspecification\n\nIndex zero is reserved for unmapped characters (unseen contexts). During training, its embedding vector is regularised to occupy a center position of all mapped characters (all other contexts), and the hidden layers get to see it every now and then by random degradation. At runtime, therefore, some unknown character (some unknown context) represented as zero does not disturb follow-up predictions too much.\n\n\n## Installation\n\nRequired Ubuntu packages:\n\n* Python (``python`` or ``python3``)\n* pip (``python-pip`` or ``python3-pip``)\n* virtualenv (``python-virtualenv`` or ``python3-virtualenv``)\n\nCreate and activate a virtualenv as usual.\n\nIf you need a custom version of ``keras`` or ``tensorflow`` (like [GPU support](https://www.tensorflow.org/install/install_sources)), install them via `pip` now.\n\nTo install Python dependencies and this module, then do:\n```shell\nmake deps install\n```\nWhich is the equivalent of:\n```shell\npip install -r requirements.txt\npip install -e .\n```\n\nUseful environment variables are:\n- ``TF_CPP_MIN_LOG_LEVEL`` (set to `1` to suppress most of Tensorflow's messages\n- ``CUDA_VISIBLE_DEVICES`` (set empty to force CPU even in a GPU installation)\n\n\n## Usage\n\nThis packages has two user interfaces:\n\n### command line interface `keraslm-rate`\n\nTo be used with string arguments and plain-text files.\n\n```shell\nUsage: keraslm-rate [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n  --help  Show this message and exit.\n\nCommands:\n  train                           train a language model\n  test                            get overall perplexity from language model\n  apply                           get individual probabilities from language model\n  generate                        sample characters from language model\n  print-charset                   Print the mapped characters\n  prune-charset                   Delete one character from mapping\n  plot-char-embeddings-similarity\n                                  Paint a heat map of character embeddings\n  plot-context-embeddings-similarity\n                                  Paint a heat map of context embeddings\n  plot-context-embeddings-projection\n                                  Paint a 2-d PCA projection of context embeddings\n```\n\nExamples:\n```shell\nkeraslm-rate train --width 64 --depth 4 --length 256 --model model_dta_64_4_256.h5 dta_komplett_2017-09-01/txt/*.tcf.txt\nkeraslm-rate generate -m model_dta_64_4_256.h5 --number 6 \"f\u00fcr die Wi\u017f\u017fen\"\nkeraslm-rate apply -m model_dta_64_4_256.h5 \"so sch\u00e4dlich ist es Borkickheile zu pflanzen\"\nkeraslm-rate test -m model_dta_64_4_256.h5 dta_komplett_2017-09-01/txt/grimm_*.tcf.txt\n```\n\n### [OCR-D processor](https://github.com/OCR-D/core) interface `ocrd-keraslm-rate`\n\nTo be used with [PageXML](https://www.primaresearch.org/tools/PAGELibraries) documents in an [OCR-D](https://github.com/OCR-D/spec/) annotation workflow. Input could be anything with a textual annotation (`TextEquiv` on the given `textequiv_level`). The LM rater could be used for both quality control (without alternative decoding, using only each first index `TextEquiv`) and part of post-correction (with `alternative_decoding=True`, finding the best path among `TextEquiv` indexes).\n\n```json\n  \"tools\": {\n    \"ocrd-keraslm-rate\": {\n      \"executable\": \"ocrd-keraslm-rate\",\n      \"categories\": [\n        \"Text recognition and optimization\"\n      ],\n      \"steps\": [\n        \"recognition/text-recognition\"\n      ],\n      \"description\": \"Rate elements of the text with a character-level LSTM language model in Keras\",\n      \"input_file_grp\": [\n        \"OCR-D-OCR-TESS\",\n        \"OCR-D-OCR-KRAK\",\n        \"OCR-D-OCR-OCRO\",\n        \"OCR-D-OCR-CALA\",\n        \"OCR-D-OCR-ANY\",\n        \"OCR-D-COR-CIS\",\n        \"OCR-D-COR-ASV\"\n      ],\n      \"output_file_grp\": [\n        \"OCR-D-COR-LM\"\n      ],\n      \"parameters\": {\n        \"model_file\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"content-type\": \"application/x-hdf;subtype=bag\",\n          \"description\": \"path of h5py weight/config file for model trained with keraslm\",\n          \"required\": true,\n          \"cacheable\": true\n        },\n        \"textequiv_level\": {\n          \"type\": \"string\",\n          \"enum\": [\"region\", \"line\", \"word\", \"glyph\"],\n          \"default\": \"glyph\",\n          \"description\": \"PAGE XML hierarchy level to evaluate TextEquiv sequences on\"\n        },\n        \"alternative_decoding\": {\n          \"type\": \"boolean\",\n          \"description\": \"whether to process all TextEquiv alternatives, finding the best path via beam search, and delete each non-best alternative\",\n          \"default\": true\n        },\n        \"beam_width\": {\n          \"type\": \"number\",\n          \"format\": \"integer\",\n          \"description\": \"maximum number of best partial paths to consider during search with alternative_decoding\",\n          \"default\": 100\n        }\n      }\n    }\n  }\n```\n\nExamples:\n```shell\nmake deps-test # installs ocrd_tesserocr\nmake test/assets # downloads GT, imports PageXML, builds workspaces\nocrd workspace clone -a test/assets/kant_aufklaerung_1784/mets.xml ws1\ncd ws1\nocrd-tesserocr-segment-region -I OCR-D-IMG -O OCR-D-SEG-BLOCK\nocrd-tesserocr-segment-line -I OCR-D-SEG-BLOCK -O OCR-D-SEG-LINE\nocrd-tesserocr-recognize -I OCR-D-SEG-LINE -O OCR-D-OCR-TESS-WORD -p '{ \"textequiv_level\" : \"word\", \"model\" : \"Fraktur\" }'\nocrd-tesserocr-recognize -I OCR-D-SEG-LINE -O OCR-D-OCR-TESS-GLYPH -p '{ \"textequiv_level\" : \"glyph\", \"model\" : \"deu-frak\" }'\n# get confidences and perplexity:\nocrd-keraslm-rate -I OCR-D-OCR-TESS-WORD -O OCR-D-OCR-LM-WORD -p '{ \"model_file\": \"model_dta_64_4_256.h5\", \"textequiv_level\": \"word\", \"alternative_decoding\": false }'\n# also get best path:\nocrd-keraslm-rate -I OCR-D-OCR-TESS-GLYPH -O OCR-D-OCR-LM-GLYPH -p '{ \"model_file\": \"model_dta_64_4_256.h5\", \"textequiv_level\": \"glyph\", \"alternative_decoding\": true, \"beam_width\": 10 }'\n```\n\n## Testing\n\n```shell\nmake deps-test test\n```\nWhich is the equivalent of:\n```shell\npip install -r requirements_test.txt\ntest -e test/assets || test/prepare_gt.bash test/assets\ntest -f model_dta_test.h5 || keraslm-rate train -m model_dta_test.h5 test/assets/*.txt\nkeraslm-rate test -m model_dta_test.h5 test/assets/*.txt\npython -m pytest test $(PYTEST_ARGS)\n```\n\nSet `PYTEST_ARGS=\"-s --verbose\"` to see log output (`-s`) and individual test results (`--verbose`).\n",
@@ -767,6 +772,7 @@
         "url": "https://github.com/OCR-D/ocrd_keraslm"
     },
     {
+        "compliant_cli": false,
         "files": {
             "Dockerfile": "FROM ocrd/core\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\nENV PYTHONIOENCODING utf8\nENV LC_ALL C.UTF-8\nENV LANG C.UTF-8\n\nWORKDIR /build-ocrd\nCOPY setup.py .\nCOPY requirements.txt .\nRUN apt-get update && \\\n    apt-get -y install --no-install-recommends \\\n    ca-certificates \\\n    make \\\n    git\nCOPY ocrd_kraken ./ocrd_kraken\nRUN pip3 install --upgrade pip\nRUN pip3 install .\n\nENTRYPOINT [\"/bin/sh\", \"-c\"]\n",
             "README.md": "# ocrd_kraken\n\n> Wrapper for the kraken OCR engine\n\n[![image](https://travis-ci.org/OCR-D/ocrd_kraken.svg?branch=master)](https://travis-ci.org/OCR-D/ocrd_kraken)\n[![Docker Automated build](https://img.shields.io/docker/automated/ocrd/kraken.svg)](https://hub.docker.com/r/ocrd/kraken/tags/)\n[![image](https://circleci.com/gh/OCR-D/ocrd_kraken.svg?style=svg)](https://circleci.com/gh/OCR-D/ocrd_kraken)\n",
@@ -1096,6 +1102,7 @@
         "url": "https://github.com/OCR-D/ocrd_kraken"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": "FROM ocrd/core\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\nENV PYTHONIOENCODING utf8\nENV LC_ALL C.UTF-8\nENV LANG C.UTF-8\n\nWORKDIR /build-ocrd\nCOPY setup.py .\nCOPY requirements.txt .\nCOPY README.md .\nRUN apt-get update && \\\n    apt-get -y install --no-install-recommends \\\n    ca-certificates \\\n    make \\\n    git\nCOPY ocrd_ocropy ./ocrd_ocropy\nRUN pip3 install --upgrade pip\nRUN make deps install\n\nENTRYPOINT [\"/bin/sh\", \"-c\"]\n",
             "README.md": "# ocrd_ocropy\n\n[![image](https://travis-ci.org/OCR-D/ocrd_ocropy.svg?branch=master)](https://travis-ci.org/OCR-D/ocrd_ocropy)\n\n[![Docker Automated build](https://img.shields.io/docker/automated/ocrd/ocropy.svg)](https://hub.docker.com/r/ocrd/ocropy/tags/)\n\n> Wrapper for the ocropy OCR engine\n",
@@ -1403,6 +1410,7 @@
         "url": "https://github.com/OCR-D/ocrd_ocropy"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": "# Patch and build Olena from Git, then\n# Install OCR-D wrapper for binarization\nFROM ocrd/core\n\nMAINTAINER OCR-D\n\nENV PREFIX=/usr/local\n\nWORKDIR /build-olena\nCOPY olena-configure-boost.patch .\nCOPY olena-configure-python3.patch .\nCOPY olena-disable-doc.patch .\nCOPY olena-fix-magick-load-catch-exceptions.patch .\nCOPY Makefile .\nCOPY ocrd-tool.json .\nCOPY ocrd-olena-binarize .\nCOPY README.md /\n\nENV DEPS=\"g++ make automake git\"\nRUN apt-get update && \\\n    apt-get -y install --no-install-recommends $DEPS && \\\n    make deps-ubuntu && \\\n    make build-olena install clean-olena && \\\n    apt-get -y remove $DEPS && \\\n    apt-get -y autoremove && apt-get clean && \\\n    rm -fr /build-olena\n\nWORKDIR /data\nVOLUME /data\n\n#ENTRYPOINT [\"/usr/bin/ocrd-olena-binarize\"]\n#CMD [\"--help\"]\nCMD [\"/usr/bin/ocrd-olena-binarize\", \"--help\"]\n",
             "README.md": "# ocrd_olena\n\n> Binarize with Olena/scribo\n\n[![Build Status](https://travis-ci.org/OCR-D/ocrd_olena.svg?branch=master)](https://travis-ci.org/OCR-D/ocrd_olena)\n[![Docker Automated build](https://img.shields.io/docker/automated/ocrd/core.svg)](https://hub.docker.com/r/ocrd/olena/tags/)\n\n## Requirements\n\n```\nmake deps-ubuntu\n```\n\n...will try to install the required packages on Ubuntu.\n\n## Installation\n\n```\nmake build-olena\n```\n\n...will download, patch and build Olena/scribo from source, and install locally (in VIRTUAL_ENV or in CWD/local).\n\n```\nmake install\n```\n\n...will do that, but additionally install `ocrd-binarize-olena` (the OCR-D wrapper).\n\n## Testing\n\n```\nmake test\n```\n\n...will clone the assets repository from Github, make a workspace copy, and run checksum tests for binarization on them.\n\n## Usage\n\nThis package has the following user interfaces:\n\n### command line interface `scribo-cli`\n\nConverts images in any format to netpbm (monochrome portable bitmap).\n\n```\nUsage: scribo-cli [version] [help] COMMAND [ARGS]\n\nList of available COMMAND argument:\n\n  Full Toolchains\n  ---------------\n\n\n   * On documents\n\n     doc-ppc\t       Common preprocessing before looking for text.\n\n     doc-ocr           Find and recognize text. Output: the actual text\n     \t\t       and its location.\n\n     doc-dia           Analyse the document structure and extract the\n     \t\t       text. Output: an XML file with region and text\n     \t\t       information.\n\n\n\n   * On pictures\n\n     pic-loc           Try to localize text if there's any.\n\n     pic-ocr           Localize and try to recognize text.\n\n\n\n  Tools\n  -----\n\n\n     * xml2doc\t       Convert the XML results of document toolchains\n       \t\t       into user documents (HTML, PDF...).\n\n\n  Algorithms\n  ----------\n\n\n   * Binarization\n\n     sauvola           Sauvola's algorithm.\n\n     sauvola-ms        Multi-scale Sauvola's algorithm.\n\n     sauvola-ms-fg     Extract foreground objects and run multi-scale\n                       Sauvola's algorithm.\n\n     sauvola-ms-split  Run multi-scale Sauvola's algorithm on each color\n                       component and merge results.\n\n---------------------------------------------------------------------------\nSee 'scribo-cli COMMAND --help' for more information on a specific command.\n```\n\n### [OCR-D processor](https://ocr-d.github.com/cli) interface `ocrd-olena-binarize`\n\nTo be used with [PageXML](https://github.com/PRImA-Research-Lab/PAGE-XML) documents in an [OCR-D](https://ocr-d.github.io) annotation workflow. Input could be any valid workspace with source images available. Currently covers the `Page` hierarchy level only. Uses either (the last) `AlternativeImage`, if any, or `imageFilename`, otherwise. Adds an `AlternativeImage` with the result of binarization for every page.\n\n```json\n    \"ocrd-olena-binarize\": {\n      \"executable\": \"ocrd-olena-binarize\",\n      \"description\": \"OLENA's binarization algos for OCR-D (on page-level)\",\n      \"categories\": [\n        \"Image preprocessing\"\n      ],\n      \"steps\": [\n        \"preprocessing/optimization/binarization\"\n      ],\n      \"input_file_grp\": [\n        \"OCR-D-SEG-BLOCK\",\n        \"OCR-D-SEG-LINE\",\n        \"OCR-D-SEG-WORD\",\n        \"OCR-D-IMG\"\n      ],\n      \"output_file_grp\": [\n        \"OCR-D-SEG-BLOCK\",\n        \"OCR-D-SEG-LINE\",\n        \"OCR-D-SEG-WORD\"\n      ],\n      \"parameters\": {\n        \"impl\": {\n          \"description\": \"The name of the actual binarization algorithm\",\n          \"type\": \"string\",\n          \"required\": true,\n          \"enum\": [\"sauvola\", \"sauvola-ms\", \"sauvola-ms-fg\", \"sauvola-ms-split\", \"kim\", \"wolf\", \"niblack\", \"singh\", \"otsu\"]\n        },\n        \"win-size\": {\n          \"description\": \"Window size\",\n          \"type\": \"number\",\n          \"format\": \"integer\",\n          \"default\": 101\n        },\n        \"k\": {\n          \"description\": \"Sauvola's formulae parameter\",\n          \"format\": \"float\",\n          \"type\": \"number\",\n          \"default\": 0.34\n        }\n      }\n    }\n```\n",
@@ -1479,6 +1487,7 @@
         "url": "https://github.com/OCR-D/ocrd_olena"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": null,
             "README.md": "# ocrd_segment\n\nThis repository aims to provide a number of [OCR-D-compliant processors](https://ocr-d.github.io/cli) for layout analysis and evaluation.\n\n## Installation\n\nIn your virtual environment, run:\n```bash\npip install .\n```\n\n## Usage\n\n  - extracting page images (including results from preprocessing like cropping, deskewing or binarization) along with region polygon coordinates and metadata:\n    - [ocrd-segment-extract-regions](ocrd_segment/extract_regions.py)\n  - extracting line images (including results from preprocessing like cropping, deskewing, dewarping or binarization) along with line polygon coordinates and metadata:\n    - [ocrd-segment-extract-lines](ocrd_segment/extract_lines.py)\n  - comparing different layout segmentations (input file groups N = 2, compute the distance between two segmentations, e.g. automatic vs. manual):\n    - [ocrd-segment-evaluate](ocrd_segment/evaluate.py) :construction: (very early stage)\n  - repairing layout segmentations (input file groups N >= 1, based on heuristics implemented using Shapely):\n    - [ocrd-segment-repair](ocrd_segment/repair.py) :construction: (much to be done)\n  - pattern-based segmentation (input file groups N=1, based on a PAGE template, e.g. from Aletheia, and some XSLT or Python to apply it to the input file group)\n    - `ocrd-segment-via-template` :construction: (unpublished)\n  - data-driven segmentation (input file groups N=1, based on a statistical model, e.g. Neural Network)  \n    - `ocrd-segment-via-model` :construction: (unpublished)\n\nFor detailed description on input/output and parameters, see [ocrd-tool.json](ocrd_segment/ocrd-tool.json)\n\n## Testing\n\nNone yet.\n",
@@ -1719,6 +1728,7 @@
         "url": "https://github.com/OCR-D/ocrd_segment"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": "FROM ocrd/core\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\nENV PYTHONIOENCODING utf8\n\nWORKDIR /build-ocrd\nCOPY setup.py .\nCOPY README.md .\nCOPY requirements.txt .\nCOPY requirements_test.txt .\nCOPY ocrd_tesserocr ./ocrd_tesserocr\nCOPY Makefile .\nRUN make deps-ubuntu && \\\n    apt-get install -y --no-install-recommends \\\n    g++ \\\n    tesseract-ocr-script-frak \\\n    tesseract-ocr-deu \\\n    && make deps install \\\n    && rm -rf /build-ocrd \\\n    && apt-get -y remove --auto-remove g++ libtesseract-dev make\n",
             "README.md": "# ocrd_tesserocr\n\n> Crop, deskew, segment into regions / lines / words, or recognize with tesserocr\n\n[![image](https://circleci.com/gh/OCR-D/ocrd_tesserocr.svg?style=svg)](https://circleci.com/gh/OCR-D/ocrd_tesserocr)\n[![image](https://img.shields.io/pypi/v/ocrd_tesserocr.svg)](https://pypi.org/project/ocrd_tesserocr/)\n[![image](https://codecov.io/gh/OCR-D/ocrd_tesserocr/branch/master/graph/badge.svg)](https://codecov.io/gh/OCR-D/ocrd_tesserocr)\n[![Docker Automated build](https://img.shields.io/docker/automated/ocrd/tesserocr.svg)](https://hub.docker.com/r/ocrd/tesserocr/tags/)\n\n## Introduction\n\nThis offers [OCR-D](https://ocr-d.github.io) compliant workspace processors for (much of) the functionality of [Tesseract](https://github.com/tesseract-ocr) via its Python API wrapper [tesserocr](https://github.com/sirfz/tesserocr) . (Each processor is a step in the OCR-D functional model, and can be replaced with an alternative implementation. Data is represented within METS/PAGE.)\n\nThis includes image preprocessing (cropping, binarization, deskewing), layout analysis (region, line, word segmentation) and OCR proper. Most processors can operate on different levels of the PAGE hierarchy, depending on the workflow configuration. Image results are referenced (read and written) via `AlternativeImage`, text results via `TextEquiv`, deskewing via `@orientation`, cropping via `Border` and segmentation via `Region` / `TextLine` / `Word` elements with `Coords/@points`.\n\n## Installation\n\n### Required ubuntu packages:\n\n- Tesseract headers (`libtesseract-dev`)\n- Some tesseract language models (`tesseract-ocr-{eng,deu,frk,...}` or script models (`tesseract-ocr-script-{latn,frak,...}`)\n- Leptonica headers (`libleptonica-dev`)\n\n### From PyPI\n\nThis is the best option if you want to use the stable, released version.\n\n---\n\n**NOTE**\n\nocrd_tesserocr requires **Tesseract >= 4.1.0**. The Tesseract packages\nbundled with **Ubuntu < 19.10** are too old. If you are on Ubuntu 18.04 LTS,\nplease enable [Alexander Pozdnyakov PPA](https://launchpad.net/~alex-p/+archive/ubuntu/tesseract-ocr) which\nhas up-to-date builds of Tesseract and its dependencies:\n\n```sh\nsudo add-apt-repository ppa:alex-p/tesseract-ocr\nsudo apt-get update\n```\n\n---\n\n```sh\nsudo apt-get install git python3 python3-pip libtesseract-dev libleptonica-dev tesseract-ocr-eng tesseract-ocr wget\npip install ocrd_tesserocr\n```\n\n### With docker\n\nThis is the best option if you want to run the software in a container.\n\nYou need to have [Docker](https://docs.docker.com/install/linux/docker-ce/ubuntu/)\n\n```sh\ndocker pull ocrd/tesserocr\n```\n\n### From git \n\nThis is the best option if you want to change the source code or install the latest, unpublished changes.\n\nWe strongly recommend to use [venv](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/).\n\n```sh\ngit clone https://github.com/OCR-D/ocrd_tesserocr\ncd ocrd_tesserocr\nmake deps-ubuntu # or manually with apt-get\nmake deps        # or pip install -r requirements\nmake install     # or pip install .\n```\n\n## Usage\n\nSee docstrings and in the individual processors and [ocrd-tool.json](ocrd_tesserocr/ocrd-tool.json) descriptions.\n\nAvailable processors are:\n\n- [ocrd-tesserocr-crop](ocrd_tesserocr/crop.py)\n- [ocrd-tesserocr-deskew](ocrd_tesserocr/deskew.py)\n- [ocrd-tesserocr-binarize](ocrd_tesserocr/binarize.py)\n- [ocrd-tesserocr-segment-region](ocrd_tesserocr/segment_region.py)\n- [ocrd-tesserocr-segment-line](ocrd_tesserocr/segment_line.py)\n- [ocrd-tesserocr-segment-word](ocrd_tesserocr/segment_word.py)\n- [ocrd-tesserocr-recognize](ocrd_tesserocr/recognize.py)\n\n## Testing\n\nTo run with docker:\n\n```\ndocker run ocrd/tesserocr ocrd-tesserocrd-crop ...\n```\n\n## Testing\n\n```sh\nmake test\n```\n\nThis downloads some test data from https://github.com/OCR-D/assets under `repo/assets`, and runs some basic test of the Python API as well as the CLIs.\n\nSet `PYTEST_ARGS=\"-s --verbose\"` to see log output (`-s`) and individual test results (`--verbose`).\n\n## Development\n\nLatest changes that require pre-release of [ocrd >= 2.0.0](https://github.com/OCR-D/core/tree/edge) are kept in branch [`edge`](https://github.com/OCR-D/ocrd_tesserocr/tree/edge).\n",
@@ -2596,6 +2606,7 @@
         "url": "https://github.com/OCR-D/ocrd_tesserocr"
     },
     {
+        "compliant_cli": false,
         "files": {
             "Dockerfile": "FROM ocrd/core:latest\nENV VERSION=\"Mi 9. Okt 13:26:16 CEST 2019\"\nENV GITURL=\"https://github.com/cisocrgroup\"\nENV DOWNLOAD_URL=\"http://cis.lmu.de/~finkf\"\nENV DATA=\"/apps/ocrd-cis-post-correction\"\n\n# deps\nCOPY data/docker/deps.txt ${DATA}/deps.txt\nRUN apt-get update \\\n\t&& apt-get -y install --no-install-recommends $(cat ${DATA}/deps.txt)\n\n# locales\nRUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \\\n    && dpkg-reconfigure --frontend=noninteractive locales \\\n    && update-locale LANG=en_US.UTF-8\n\n# install the profiler\nRUN\tgit clone ${GITURL}/Profiler --branch devel --single-branch /tmp/profiler \\\n\t&& cd /tmp/profiler \\\n\t&& mkdir build \\\n\t&& cd build \\\n\t&& cmake -DCMAKE_BUILD_TYPE=release .. \\\n\t&& make compileFBDic trainFrequencyList profiler \\\n\t&& cp bin/compileFBDic bin/trainFrequencyList bin/profiler /apps/ \\\n\t&& cd / \\\n    && rm -rf /tmp/profiler\n\n# install the profiler's language backend\nRUN\tgit clone ${GITURL}/Resources --branch master --single-branch /tmp/resources \\\n\t&& cd /tmp/resources/lexica \\\n\t&& make FBDIC=/apps/compileFBDic TRAIN=/apps/trainFrequencyList \\\n\t&& mkdir -p /${DATA}/languages \\\n\t&& cp -r german latin greek german.ini latin.ini greek.ini /${DATA}/languages \\\n\t&& cd / \\\n\t&& rm -rf /tmp/resources\n\n# install ocrd_cis (python)\nCOPY Manifest.in Makefile setup.py ocrd-tool.json /tmp/build/\nCOPY ocrd_cis/ /tmp/build/ocrd_cis/\nCOPY bashlib/ /tmp/build/bashlib/\n# COPY . /tmp/ocrd_cis\nRUN cd /tmp/build \\\n\t&& make install \\\n\t&& cd / \\\n\t&& rm -rf /tmp/build\n\n# download ocr models and pre-trainded post-correction model\nRUN mkdir /apps/models \\\n\t&& cd /apps/models \\\n\t&& wget ${DOWNLOAD_URL}/model.zip >/dev/null 2>&1 \\\n\t&& wget ${DOWNLOAD_URL}/fraktur1-00085000.pyrnn.gz >/dev/null 2>&1 \\\n\t&& wget ${DOWNLOAD_URL}/fraktur2-00062000.pyrnn.gz >/dev/null 2>&1\n\nVOLUME [\"/data\"]\n",
             "README.md": "[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/cisocrgroup/ocrd_cis.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/cisocrgroup/ocrd_cis/context:python)\n[![Total alerts](https://img.shields.io/lgtm/alerts/g/cisocrgroup/ocrd_cis.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/cisocrgroup/ocrd_cis/alerts/)\n# ocrd_cis\n\n[CIS](http://www.cis.lmu.de) [OCR-D](http://ocr-d.de) command line\ntools for the automatic post-correction of OCR-results.\n\n## Introduction\n`ocrd_cis` contains different tools for the automatic post correction\nof OCR-results.  It contains tools for the training, evaluation and\nexecution of the post correction.  Most of the tools are following the\n[OCR-D cli conventions](https://ocr-d.github.io/cli).\n\nThere is a helper tool to align multiple OCR results as well as a\nversion of ocropy that works with python3.\n\n## Installation\nThere are multiple ways to install the `ocrd_cis` tools:\n * `make install` uses `pip` to install `ocrd_cis` (see below).\n * `make install-devel` uses `pip -e` to install `ocrd_cis` (see\n   below).\n * `pip install --upgrade pip ocrd_cis_dir`\n * `pip install -e --upgrade pip ocrd_cis_dir`\n\nIt is possible to install `ocrd_cis` in a custom directory using\n`virtualenv`:\n```sh\n python3 -m venv venv-dir\n source venv-dir/bin/activate\n make install # or any other command to install ocrd_cis (see above)\n # use ocrd_cis\n deactivate\n```\n\n## Usage\nMost tools follow the [OCR-D cli\nconventions](https://ocr-d.github.io/cli).  They accept the\n`--input-file-grp`, `--output-file-grp`, `--parameter`, `--mets`,\n`--log-level` command line arguments (short and long).  For some tools\n(most notably the alignment tool) expect a comma seperated list of\nmultiple input file groups.\n\nThe [ocrd-tool.json](ocrd_cis/ocrd-tool.json) contains a schema\ndescription of the parameter config file for the different tools that\naccept the `--parameter` argument.\n\n### ocrd-cis-post-correct.sh\nThis bash script runs the post correction using a pre-trained\n[model](http://cis.lmu.de/~finkf/model.zip).  If additional support\nOCRs should be used, models for these OCR steps are required and must\nbe configured in an according configuration file (see ocrd-tool.json).\n\nArguments:\n * `--parameter` path to configuration file\n * `--input-file-grp` name of the master-OCR file group\n * `--output-file-grp` name of the post-correction file group\n * `--log-level` set log level\n * `--mets` path to METS file in workspace\n\n### ocrd-cis-align\nAligns tokens of multiple input file groups to one output file group.\nThis tool is used to align the master OCR with any additional support\nOCRs.  It accepts a comma-separated list of input file groups, which\nit aligns in order.\n\nArguments:\n * `--parameter` path to configuration file\n * `--input-file-grp` comma seperated list of the input file groups;\n   first input file group is the master OCR\n * `--output-file-grp` name of the file group for the aligned result\n * `--log-level` set log level\n * `--mets` path to METS file in workspace\n\n### ocrd-cis-train.sh\nScript to train a model from a list of ground-truth archives (see\nocrd-tool.json) for the post correction.  The tool somewhat mimics the\nbehaviour of other ocrd tools:\n * `--mets` for the workspace\n * `--log-level` is passed to other tools\n * `--parameter` is used as configuration\n * `--output-file-grp` defines the output file group for the model\n\n### ocrd-cis-data\nHelper tool to get the path of the installed data files. Usage:\n`ocrd-cis-data [-jar|-3gs]` to get the path of the jar library or the\npath to th default 3-grams language model file.\n\n### ocrd-cis-wer\nHelper tool to calculate the word error rate aligned ocr files.  It\nwrites a simple JSON-formated stats file to the given output file group.\n\nArguments:\n * `--input-file-grp` input file group of aligned ocr results with\n   their respective ground truth.\n * `--output-file-grp` name of the file group for the stats file\n * `--log-level` set log level\n * `--mets` path to METS file in workspace\n\n### ocrd-cis-profile\nRun the profiler over the given files of the according the given input\nfile grp and adds a gzipped JSON-formatted profile to the output file\ngroup of the workspace.  This tools requires an installed [language\nprofiler](https://github.com/cisocrgroup/Profiler).\n\nArguments:\n * `--parameter` path to configuration file\n * `--input-file-grp` name of the input file group to profile\n * `--output-file-grp` name of the output file group where the profile\n   is stored\n * `--log-level` set log level\n * `--mets` path to METS file in the workspace\n\n### ocrd-cis-ocropy-train\nThe ocropy-train tool can be used to train LSTM models.\nIt takes ground truth from the workspace and saves (image+text) snippets from the corresponding pages.\nThen a model is trained on all snippets for 1 million (or the given number of) randomized iterations from the parameter file.\n```sh\nocrd-cis-ocropy-train \\\n  --input-file-grp OCR-D-GT-SEG-LINE \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-clip\nThe ocropy-clip tool can be used to remove intrusions of neighbouring segments in regions / lines of a workspace.\nIt runs a (ad-hoc binarization and) connected component analysis on every text region / line of every PAGE in the input file group, as well as its overlapping neighbours, and for each binary object of conflict, determines whether it belongs to the neighbour, and can therefore be clipped to white. It references the resulting segment image files in the output PAGE (as AlternativeImage).\n```sh\nocrd-cis-ocropy-clip \\\n  --input-file-grp OCR-D-SEG-LINE \\\n  --output-file-grp OCR-D-SEG-LINE-CLIP \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-resegment\nThe ocropy-resegment tool can be used to remove overlap between lines of a workspace.\nIt runs a (ad-hoc binarization and) line segmentation on every text region of every PAGE in the input file group, and for each line already annotated, determines the label of largest extent within the original coordinates (polygon outline) in that line, and annotates the resulting coordinates in the output PAGE.\n```sh\nocrd-cis-ocropy-resegment \\\n  --input-file-grp OCR-D-SEG-LINE \\\n  --output-file-grp OCR-D-SEG-LINE-RES \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-segment\nThe ocropy-segment tool can be used to segment regions into lines.\nIt runs a (ad-hoc binarization and) line segmentation on every text region of every PAGE in the input file group, and adds a TextLine element with the resulting polygon outline to the annotation of the output PAGE.\n```sh\nocrd-cis-ocropy-segment \\\n  --input-file-grp OCR-D-SEG-BLOCK \\\n  --output-file-grp OCR-D-SEG-LINE \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-deskew\nThe ocropy-deskew tool can be used to deskew pages / regions of a workspace.\nIt runs the Ocropy thresholding and deskewing estimation on every segment of every PAGE in the input file group and annotates the orientation angle in the output PAGE.\n```sh\nocrd-cis-ocropy-deskew \\\n  --input-file-grp OCR-D-SEG-LINE \\\n  --output-file-grp OCR-D-SEG-LINE-DES \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-denoise\nThe ocropy-denoise tool can be used to despeckle pages / regions / lines of a workspace.\nIt runs the Ocropy \"nlbin\" denoising on every segment of every PAGE in the input file group and references the resulting segment image files in the output PAGE (as AlternativeImage).\n```sh\nocrd-cis-ocropy-denoise \\\n  --input-file-grp OCR-D-SEG-LINE-DES \\\n  --output-file-grp OCR-D-SEG-LINE-DEN \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-binarize\nThe ocropy-binarize tool can be used to binarize, denoise and deskew pages / regions / lines of a workspace.\nIt runs the Ocropy \"nlbin\" adaptive thresholding, deskewing estimation and denoising on every segment of every PAGE in the input file group and references the resulting segment image files in the output PAGE (as AlternativeImage). (If a deskewing angle has already been annotated in a region, the tool respects that and rotates accordingly.) Images can also be produced grayscale-normalized.\n```sh\nocrd-cis-ocropy-binarize \\\n  --input-file-grp OCR-D-SEG-LINE-DES \\\n  --output-file-grp OCR-D-SEG-LINE-BIN \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-dewarp\nThe ocropy-dewarp tool can be used to dewarp text lines of a workspace.\nIt runs the Ocropy baseline estimation and dewarping on every line in every text region of every PAGE in the input file group and references the resulting line image files in the output PAGE (as AlternativeImage).\n```sh\nocrd-cis-ocropy-dewarp \\\n  --input-file-grp OCR-D-SEG-LINE-BIN \\\n  --output-file-grp OCR-D-SEG-LINE-DEW \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### ocrd-cis-ocropy-recognize\nThe ocropy-recognize tool can be used to recognize lines / words / glyphs from pages of a workspace.\nIt runs the Ocropy optical character recognition on every line in every text region of every PAGE in the input file group and adds the resulting text annotation in the output PAGE.\n```sh\nocrd-cis-ocropy-recognize \\\n  --input-file-grp OCR-D-SEG-LINE-DEW \\\n  --output-file-grp OCR-D-OCR-OCRO \\\n  --mets mets.xml\n  --parameter file:///path/to/config.json\n```\n\n### Tesserocr\nInstall essential system packages for Tesserocr\n```sh\nsudo apt-get install python3-tk \\\n  tesseract-ocr libtesseract-dev libleptonica-dev \\\n  libimage-exiftool-perl libxml2-utils\n```\n\nThen install Tesserocr from: https://github.com/OCR-D/ocrd_tesserocr\n```sh\npip install -r requirements.txt\npip install .\n```\n\nDownload and move tesseract models from:\nhttps://github.com/tesseract-ocr/tesseract/wiki/Data-Files\nor use your own models and\nplace them into: /usr/share/tesseract-ocr/4.00/tessdata\n\n## Workflow configuration\n\nA decent pipeline might look like this:\n\n1. page-level cropping\n2. page-level binarization\n3. page-level deskewing\n4. page-level dewarping\n5. region segmentation\n6. region-level clipping\n7. region-level deskewing\n8. line segmentation\n9. line-level clipping or resegmentation\n10. line-level dewarping\n11. line-level recognition\n12. line-level alignment\n\nIf GT is used, steps 1, 5 and 8 can be omitted. Else if a segmentation is used in 5 and 8 which does not produce overlapping sections, steps 6 and 9 can be omitted.\n\n## Testing\nTo run a few basic tests type `make test` (`ocrd_cis` has to be\ninstalled in order to run any tests).\n\n## OCR-D workspace\n\n* Create a new (empty) workspace: `ocrd workspace init workspace-dir`\n* cd into `workspace-dir`\n* Add new file to workspace: `ocrd workspace add file -G group -i id\n  -m mimetype`\n\n## OCR-D links\n\n- [OCR-D](https://ocr-d.github.io)\n- [Github](https://github.com/OCR-D)\n- [Project-page](http://www.ocr-d.de/)\n- [Ground-truth](http://www.ocr-d.de/sites/all/GTDaten/IndexGT.html)\n",
@@ -3469,6 +3480,7 @@
         "url": "https://github.com/cisocrgroup/ocrd_cis"
     },
     {
+        "compliant_cli": false,
         "files": {
             "Dockerfile": "FROM ocrd/core\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\nENV PYTHONIOENCODING utf8\n\nWORKDIR /build-layouterkennung\nCOPY setup.py .\nCOPY requirements.txt .\nCOPY README.md .\nCOPY ocrd_anybaseocr ./ocrd_anybaseocr\nRUN pip3 install .\n",
             "README.md": "# Document Preprocessing and Segmentation\n\n[![CircleCI](https://circleci.com/gh/mjenckel/OCR-D-LAYoutERkennung.svg?style=svg)](https://circleci.com/gh/mjenckel/OCR-D-LAYoutERkennung)\n\n> Tools for preprocessing scanned images for OCR\n\n# Installing\n\nTo install anyBaseOCR dependencies system-wide:\n\n    $ sudo pip install .\n\nAlternatively, dependencies can be installed into a Virtual Environment:\n\n    $ virtualenv venv\n    $ source venv/bin/activate\n    $ pip install -e .\n\n#Tools\n\n## Binarizer\n\n### Method Behaviour \n This function takes a scanned colored /gray scale document image as input and do the black and white binarize image.\n \n #### Usage:\n```sh\nocrd-anybaseocr-binarize -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-binarize \\\n   -m mets.xml \\\n   -I OCR-D-IMG \\\n   -O OCR-D-PAGE-BIN\n```\n\n## Deskewer\n\n### Method Behaviour \n This function takes a document image as input and do the skew correction of that document.\n \n #### Usage:\n```sh\nocrd-anybaseocr-deskew -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-deskew \\\n  -m mets.xml \\\n  -I OCR-D-PAGE-BIN \\\n  -O OCR-D-PAGE-DESKEW\n```\n\n## Cropper\n\n### Method Behaviour \n This function takes a document image as input and crops/selects the page content area only (that's mean remove textual noise as well as any other noise around page content area)\n \n #### Usage:\n```sh\nocrd-anybaseocr-crop -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-crop \\\n   -m mets.xml \\\n   -I OCR-D-PAGE-DESKEW \\\n   -O OCR-D-PAGE-CROP\n```\n\n\n## Dewarper\n\n### Method Behaviour \n This function takes a document image as input and make the text line straight if its curved.\n \n #### Usage:\n```sh\nocrd-anybaseocr-dewarp -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n\n#### Example: \n```sh\nCUDA_VISIBLE_DEVICES=0 ocrd-anybaseocr-dewarp \\\n   -m mets.xml \\\n   -I OCR-D-PAGE-CROP \\\n   -O OCR-D-PAGE-DEWARP\n```\n\n## Text/Non-Text Segmenter\n\n### Method Behaviour \n This function takes a document image as an input and separates the text and non-text part from the input document image.\n \n #### Usage:\n```sh\nocrd-anybaseocr-tiseg -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-tiseg \\\n   -m mets.xml \\\n   -I OCR-D-PAGE-CROP \\\n   -O OCR-D-PAGE-TISEG\n```\n\n## Textline Segmenter\n\n### Method Behaviour \n This function takes a cropped document image as an input and segment the image into textline images.\n \n #### Usage:\n```sh\nocrd-anybaseocr-textline -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-textline \\\n   -m mets.xml \\\n   -I OCR-D-PAGE-TISEG \\\n   -O OCR-D-PAGE-TL\n```\n\n## Block Segmenter\n\n### Method Behaviour \n This function takes raw document image as an input and segments the image into the different text blocks.\n \n #### Usage:\n```sh\nocrd-anybaseocr-block-segmenter -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-block-segmenter \\\n   -m mets.xml \\\n   -I OCR-IMG \\\n   -O OCR-D-PAGE-BLOCK\n```\n\n## Document Analyser\n\n### Method Behaviour \n This function takes all the cropped document images of a single book and its corresponding text regions as input and generates the logical structure on the book level.\n \n #### Usage:\n```sh\nocrd-anybaseocr-layout-analysis -m (path to METs input file) -I (Input group name) -O (Output group name) [-p (path to parameter file) -o (METs output filename)]\n```\n\n#### Example: \n```sh\nocrd-anybaseocr-layout-analysis \\\n   -m mets.xml \\\n   -I OCR-IMG \\\n   -O OCR-D-PAGE-BLOCK\n```\n\n\n## Testing\n\nTo test the tools, download [OCR-D/assets](https://github.com/OCR-D/assets). In\nparticular, the code is tested with the\n[dfki-testdata](https://github.com/OCR-D/assets/tree/master/data/dfki-testdata)\ndataset.\n\nRun `make test` to run all tests.\n\n## License\n\n\n```\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n ```\n",
@@ -4200,6 +4212,7 @@
         "url": "https://github.com/OCR-D/ocrd_anybaseocr"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": "# WORK IN PROGRESS - NOT READY\nFROM ocrd/core\nVOLUME [\"/data\"]\nMAINTAINER OCR-D\nENV DEBIAN_FRONTEND noninteractive\nENV PYTHONIOENCODING utf8\n\nWORKDIR /build-ocrd\nCOPY setup.py .\nCOPY README.md .\nCOPY requirements.txt .\n#COPY requirements_test.txt .\nCOPY ocrd_pc_segmentation ./ocrd_pc_segmentation\nCOPY Makefile .\nRUN apt-get update && \\\n    apt-get -y install --no-install-recommends \\\n        build-essential \\\n    && make deps install \\\n    && apt-get -y remove --auto-remove build-essential\n",
             "README.md": "# page-segmentation module for OCRd\n\n## Introduction\n\nThis module implements a page segmentation algorithm based on a Fully\nConvolutional Network (FCN). The FCN creates a classification for each pixel in\na binary image. This result is then segmented per class using XY cuts.\n\n## Requirements\n\n- For GPU-Support: [CUDA](https://developer.nvidia.com/cuda-downloads) and\n  [CUDNN](https://developer.nvidia.com/cudnn)\n- other requirements are installed via Makefile / pip, see `requirements.txt`\n  in repository root.\n\n## Installation\n\nIf you want to use GPU support, set the environment variable `TENSORFLOW_GPU`,\notherwise leave it unset. Then:\n\n```bash\nmake dep\n```\n\nto install dependencies and\n\n```sh\nmake install\n```\n\nto install the package.\n\nBoth are python packages installed via pip, so you may want to activate\na virtalenv before installing.\n\n## Usage\n\n`ocrd-pc-segmentation` follows the [ocrd CLI](https://ocr-d.github.io/cli).\n\nIt expects a binary page image and produces region entries in the PageXML file.\n\n## Configuration\n\nThe following parameters are recognized in the JSON parameter file:\n\n- `overwrite_regions`: remove previously existing text regions\n- `xheight`: height of character \"x\" in pixels used during training.\n- `model`: pixel-classifier model path\n- `gpu_allow_growth`: required for GPU use with some graphic cards\n  (set to true, if you get CUDNN_INTERNAL_ERROR)\n- `resize_height`: scale down pixelclassifier output to this height before postprocessing. Independent of training / used model.\n  (performance / quality tradeoff, defaults to 300)\n\n## Testing\n\nThere is a simple CLI test, that will run the tool on a single image from the assets repository.\n\n`make test-cli`\n\n## Training\n\nTo train models for the pixel classifier, see [its README](https://github.com/ocr-d-modul-2-segmentierung/page-segmentation/blob/master/README.md)\n",
@@ -4474,6 +4487,7 @@
         "url": "https://github.com/ocr-d-modul-2-segmentierung/ocrd_pc_segmentation"
     },
     {
+        "compliant_cli": false,
         "files": {
             "Dockerfile": null,
             "README.md": "dinglehopper\n============\n\ndinglehopper is an OCR evaluation tool and reads [ALTO](https://github.com/altoxml), [PAGE](https://github.com/PRImA-Research-Lab/PAGE-XML) and text files.\n\n[![Build Status](https://travis-ci.org/qurator-spk/dinglehopper.svg?branch=master)](https://travis-ci.org/qurator-spk/dinglehopper)\n\nGoals\n-----\n* Useful\n  * As a UI tool\n  * For an automated evaluation\n  * As a library\n* Unicode support\n\nInstallation\n------------\nIt's best to use pip, e.g.:\n~~~\nsudo pip install .\n~~~\n\nUsage\n-----\n~~~\ndinglehopper some-document.gt.page.xml some-document.ocr.alto.xml\n~~~\nThis generates `report.html` and `report.json`.\n\n\nAs a OCR-D processor:\n~~~\nocrd-dinglehopper -m mets.xml -I OCR-D-GT-PAGE,OCR-D-OCR-TESS -O OCR-D-OCR-TESS-EVAL\n~~~\nThis generates HTML and JSON reports in the `OCR-D-OCR-TESS-EVAL` filegroup.\n\n\n![dinglehopper displaying metrics and character differences](.screenshots/dinglehopper.png?raw=true)\n\nTesting\n-------\nUse `pytest` to run the tests in [the tests directory](qurator/dinglehopper/tests):\n~~~\nvirtualenv -p /usr/bin/python3 venv\n. venv/bin/activate\npip install -r requirements.txt\npip install pytest\npytest\n~~~\n",
@@ -4522,6 +4536,7 @@
         "url": "https://github.com/qurator-spk/dinglehopper"
     },
     {
+        "compliant_cli": true,
         "files": {
             "Dockerfile": null,
             "README.md": "# ocrd_typegroups_classifier\n\n> Typegroups classifier for OCR\n\n## Installation\n\n### From PyPI\n\n```sh\npip3 install ocrd_typegroup_classifier\n```\n\n### From source\n\nIf needed, create a virtual environment for Python 3 (it was tested\nsuccessfully with Python 3.7), activate it, and install ocrd.\n\n```sh\nvirtualenv -p python3 ocrd-venv3\nsource ocrd-venv3/bin/activate\npip3 install ocrd\n```\n\nEnter in the folder containing the tool:\n\n```\ncd ocrd_typegroups_classifier/\n```\n\nInstall the module and its dependencies\n\n```\nmake install\n```\n\nFinally, run the test:\n\n```\nsh test/test.sh\n```\n\n** Important: ** The test makes sure that the system does work. For\nspeed reasons, a very small neural network is used and applied only to\nthe top-left corner of the image, therefore the quality of the results\nwill be of poor quality.\n\n## Models\n\nThe model classifier-1.tgc is based on a ResNet-18, with less neurons\nper layer than the usual model. It was briefly trained on 12 classes:\nAdornment, Antiqua, Bastarda, Book covers and other irrelevant data,\nEmpty Pages, Fraktur, Griechisch, Hebr\u00e4isch, Kursiv, Rotunda, Textura,\nand Woodcuts - Engravings.\n\n## Heatmap Generation ##\nGiven a trained model, it is possible to produce heatmaps corresponding\nto classification results. Syntax:\n\n```\npython3 tools/heatmap.py ocrd_typegroups_classifier/models/classifier.tgc sample.jpg out\n```\n",
diff --git a/requirements.txt b/requirements.txt
index 1dadcc3ccdba12f7d2898fce314be1d9b11cb7b2..e2ea8074a67f88afaf970acfe9736f1b04e1f129 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
 click >=7
-ocrd >= 2.0.0a1
+ocrd
 pyyaml
 requests
diff --git a/webapp/dist/build.js b/webapp/dist/build.js
index 6ab8cd2582b2e13d6b2d2b4b186bd53f14b22393..aa6d3e6483fa90259e82dc83d2a795f9e147b242 100644
--- a/webapp/dist/build.js
+++ b/webapp/dist/build.js
@@ -721,14 +721,14 @@ eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__,
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorList_vue__ = __webpack_require__(232);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__OcrdProjectList_vue__ = __webpack_require__(235);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__OcrdProcessorListItem_vue__ = __webpack_require__(96);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__OcrdProjectListItem_vue__ = __webpack_require__(99);\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    OcrdProcessorList: __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorList_vue__[\"a\" /* default */],\n    OcrdProjectList: __WEBPACK_IMPORTED_MODULE_1__OcrdProjectList_vue__[\"a\" /* default */],\n    OcrdProcessorListItem: __WEBPACK_IMPORTED_MODULE_2__OcrdProcessorListItem_vue__[\"a\" /* default */],\n    OcrdProjectListItem: __WEBPACK_IMPORTED_MODULE_3__OcrdProjectListItem_vue__[\"a\" /* default */]\n  },\n  data: function data() {\n    return {};\n  },\n\n  computed: {\n    projects: function projects() {\n      return this.$root.projects;\n    },\n    processors: function processors() {\n      return this.projects.reduce(function (all, project) {\n        var tool_idx = 0;\n        if (project.ocrd_tool) all.push.apply(all, _toConsumableArray(Object.values(project.ocrd_tool.tools).map(function (tool) {\n          tool.idx = tool_idx++;\n          tool.part_of = project.org_plus_name;\n          tool.official = project.official;\n          return tool;\n        })));\n        return all;\n      }, []);\n    }\n  },\n  mounted: function mounted() {\n    this.$root.fetchprojectData();\n  },\n\n  methods: {}\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwcC52dWU/ZWE5OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RkFEQTtBQUVBLDBGQUZBO0FBR0Esc0dBSEE7QUFJQTtBQUpBLEdBREE7QUFPQSxNQVBBLGtCQU9BO0FBQ0E7QUFFQSxHQVZBOztBQVdBO0FBQ0EsWUFEQSxzQkFDQTtBQUNBO0FBQ0EsS0FIQTtBQUlBLGNBSkEsd0JBSUE7QUFDQTtBQUNBO0FBQ0EsK0JBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBTEE7QUFNQTtBQUNBLE9BVkEsRUFVQSxFQVZBO0FBV0E7QUFoQkEsR0FYQTtBQTZCQSxTQTdCQSxxQkE2QkE7QUFDQTtBQUNBLEdBL0JBOztBQWdDQTtBQWhDQSIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGItY29udGFpbmVyIGZsdWlkPlxuICAgIDxiLXJvdz5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwiJHJvb3QuZmV0Y2hwcm9qZWN0RGF0YVwiPkZldGNoITwvYnV0dG9uPlxuICAgIDwvYi1yb3c+XG4gICAgPGItdGFicz5cbiAgICAgIDxiLXRhYiB0aXRsZT1cIlByb2Nlc3NvcnNcIj5cbiAgICAgICAgPG9jcmQtcHJvY2Vzc29yLWxpc3RcbiAgICAgICAgICA6cHJvY2Vzc29ycz1cInByb2Nlc3NvcnNcIlxuICAgICAgICAgID48L29jcmQtcHJvY2Vzc29yLWxpc3Q+XG4gICAgICA8L2ItdGFiPlxuICAgICAgPGItdGFiIGFjdGl2ZSB0aXRsZT1cIlByb2plY3RzXCI+XG4gICAgICAgIDxvY3JkLXByb2plY3QtbGlzdFxuICAgICAgICAgIDpwcm9qZWN0cz1cInByb2plY3RzXCJcbiAgICAgICAgICA+PC9vY3JkLXByb2plY3QtbGlzdD5cbiAgICAgIDwvYi10YWI+XG4gICAgPC9iLXRhYnM+XG4gICAgPCEtLSA8Yi1tb2RhbCBpZD1cInByb2Nlc3Nvci1tb2RhbFwiPlxuICAgIDwvYi1tb2RhbD4gLS0+XG4gIDwvYi1jb250YWluZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IE9jcmRQcm9jZXNzb3JMaXN0IGZyb20gJy4vT2NyZFByb2Nlc3Nvckxpc3QudnVlJ1xuaW1wb3J0IE9jcmRQcm9qZWN0TGlzdCBmcm9tICcuL09jcmRQcm9qZWN0TGlzdC52dWUnXG5pbXBvcnQgT2NyZFByb2Nlc3Nvckxpc3RJdGVtIGZyb20gJy4vT2NyZFByb2Nlc3Nvckxpc3RJdGVtLnZ1ZSdcbmltcG9ydCBPY3JkUHJvamVjdExpc3RJdGVtIGZyb20gJy4vT2NyZFByb2plY3RMaXN0SXRlbS52dWUnXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBPY3JkUHJvY2Vzc29yTGlzdCxcbiAgICBPY3JkUHJvamVjdExpc3QsXG4gICAgT2NyZFByb2Nlc3Nvckxpc3RJdGVtLFxuICAgIE9jcmRQcm9qZWN0TGlzdEl0ZW1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9qZWN0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LnByb2plY3RzXG4gICAgfSxcbiAgICBwcm9jZXNzb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvamVjdHMucmVkdWNlKChhbGwsIHByb2plY3QpID0+IHtcbiAgICAgICAgbGV0IHRvb2xfaWR4ID0gMFxuICAgICAgICBpZiAocHJvamVjdC5vY3JkX3Rvb2wpXG4gICAgICAgICAgYWxsLnB1c2goLi4uT2JqZWN0LnZhbHVlcyhwcm9qZWN0Lm9jcmRfdG9vbC50b29scykubWFwKHRvb2wgPT4ge1xuICAgICAgICAgICAgdG9vbC5pZHggPSB0b29sX2lkeCsrXG4gICAgICAgICAgICB0b29sLnBhcnRfb2YgPSBwcm9qZWN0Lm9yZ19wbHVzX25hbWVcbiAgICAgICAgICAgIHRvb2wub2ZmaWNpYWwgPSBwcm9qZWN0Lm9mZmljaWFsXG4gICAgICAgICAgICByZXR1cm4gdG9vbFxuICAgICAgICAgIH0pKVxuICAgICAgICByZXR1cm4gYWxsXG4gICAgICB9LCBbXSlcbiAgICB9LFxuICB9LFxuICBtb3VudGVkKCkge1xuICAgICAgdGhpcy4kcm9vdC5mZXRjaHByb2plY3REYXRhKClcbiAgfSxcbiAgbWV0aG9kczoge31cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG48L3N0eWxlPlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9BcHAudnVlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///94\n");
+eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorList_vue__ = __webpack_require__(232);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__OcrdProjectList_vue__ = __webpack_require__(235);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__OcrdProcessorListItem_vue__ = __webpack_require__(96);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__OcrdProjectListItem_vue__ = __webpack_require__(99);\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    OcrdProcessorList: __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorList_vue__[\"a\" /* default */],\n    OcrdProjectList: __WEBPACK_IMPORTED_MODULE_1__OcrdProjectList_vue__[\"a\" /* default */],\n    OcrdProcessorListItem: __WEBPACK_IMPORTED_MODULE_2__OcrdProcessorListItem_vue__[\"a\" /* default */],\n    OcrdProjectListItem: __WEBPACK_IMPORTED_MODULE_3__OcrdProjectListItem_vue__[\"a\" /* default */]\n  },\n  data: function data() {\n    return {};\n  },\n\n  computed: {\n    projects: function projects() {\n      return this.$root.projects;\n    },\n    processors: function processors() {\n      return this.projects.reduce(function (all, project) {\n        var tool_idx = 0;\n        if (project.ocrd_tool) all.push.apply(all, _toConsumableArray(Object.values(project.ocrd_tool.tools).map(function (tool) {\n          tool.idx = tool_idx++;\n          tool.part_of = project.org_plus_name;\n          tool.official = project.official;\n          tool.compliant_cli = project.compliant_cli;\n          return tool;\n        })));\n        return all;\n      }, []);\n    }\n  },\n  mounted: function mounted() {\n    this.$root.fetchprojectData();\n  },\n\n  methods: {}\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwcC52dWU/ZWE5OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RkFEQTtBQUVBLDBGQUZBO0FBR0Esc0dBSEE7QUFJQTtBQUpBLEdBREE7QUFPQSxNQVBBLGtCQU9BO0FBQ0E7QUFFQSxHQVZBOztBQVdBO0FBQ0EsWUFEQSxzQkFDQTtBQUNBO0FBQ0EsS0FIQTtBQUlBLGNBSkEsd0JBSUE7QUFDQTtBQUNBO0FBQ0EsK0JBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FOQTtBQU9BO0FBQ0EsT0FYQSxFQVdBLEVBWEE7QUFZQTtBQWpCQSxHQVhBO0FBOEJBLFNBOUJBLHFCQThCQTtBQUNBO0FBQ0EsR0FoQ0E7O0FBaUNBO0FBakNBIiwiZmlsZSI6Ijk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8Yi1jb250YWluZXIgZmx1aWQ+XG4gICAgPGItcm93PlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCIkcm9vdC5mZXRjaHByb2plY3REYXRhXCI+RmV0Y2ghPC9idXR0b24+XG4gICAgPC9iLXJvdz5cbiAgICA8Yi10YWJzPlxuICAgICAgPGItdGFiIHRpdGxlPVwiUHJvY2Vzc29yc1wiPlxuICAgICAgICA8b2NyZC1wcm9jZXNzb3ItbGlzdFxuICAgICAgICAgIDpwcm9jZXNzb3JzPVwicHJvY2Vzc29yc1wiXG4gICAgICAgICAgPjwvb2NyZC1wcm9jZXNzb3ItbGlzdD5cbiAgICAgIDwvYi10YWI+XG4gICAgICA8Yi10YWIgYWN0aXZlIHRpdGxlPVwiUHJvamVjdHNcIj5cbiAgICAgICAgPG9jcmQtcHJvamVjdC1saXN0XG4gICAgICAgICAgOnByb2plY3RzPVwicHJvamVjdHNcIlxuICAgICAgICAgID48L29jcmQtcHJvamVjdC1saXN0PlxuICAgICAgPC9iLXRhYj5cbiAgICA8L2ItdGFicz5cbiAgICA8IS0tIDxiLW1vZGFsIGlkPVwicHJvY2Vzc29yLW1vZGFsXCI+XG4gICAgPC9iLW1vZGFsPiAtLT5cbiAgPC9iLWNvbnRhaW5lcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgT2NyZFByb2Nlc3Nvckxpc3QgZnJvbSAnLi9PY3JkUHJvY2Vzc29yTGlzdC52dWUnXG5pbXBvcnQgT2NyZFByb2plY3RMaXN0IGZyb20gJy4vT2NyZFByb2plY3RMaXN0LnZ1ZSdcbmltcG9ydCBPY3JkUHJvY2Vzc29yTGlzdEl0ZW0gZnJvbSAnLi9PY3JkUHJvY2Vzc29yTGlzdEl0ZW0udnVlJ1xuaW1wb3J0IE9jcmRQcm9qZWN0TGlzdEl0ZW0gZnJvbSAnLi9PY3JkUHJvamVjdExpc3RJdGVtLnZ1ZSdcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgIE9jcmRQcm9jZXNzb3JMaXN0LFxuICAgIE9jcmRQcm9qZWN0TGlzdCxcbiAgICBPY3JkUHJvY2Vzc29yTGlzdEl0ZW0sXG4gICAgT2NyZFByb2plY3RMaXN0SXRlbVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHByb2plY3RzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QucHJvamVjdHNcbiAgICB9LFxuICAgIHByb2Nlc3NvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9qZWN0cy5yZWR1Y2UoKGFsbCwgcHJvamVjdCkgPT4ge1xuICAgICAgICBsZXQgdG9vbF9pZHggPSAwXG4gICAgICAgIGlmIChwcm9qZWN0Lm9jcmRfdG9vbClcbiAgICAgICAgICBhbGwucHVzaCguLi5PYmplY3QudmFsdWVzKHByb2plY3Qub2NyZF90b29sLnRvb2xzKS5tYXAodG9vbCA9PiB7XG4gICAgICAgICAgICB0b29sLmlkeCA9IHRvb2xfaWR4KytcbiAgICAgICAgICAgIHRvb2wucGFydF9vZiA9IHByb2plY3Qub3JnX3BsdXNfbmFtZVxuICAgICAgICAgICAgdG9vbC5vZmZpY2lhbCA9IHByb2plY3Qub2ZmaWNpYWxcbiAgICAgICAgICAgIHRvb2wuY29tcGxpYW50X2NsaSA9IHByb2plY3QuY29tcGxpYW50X2NsaVxuICAgICAgICAgICAgcmV0dXJuIHRvb2xcbiAgICAgICAgICB9KSlcbiAgICAgICAgcmV0dXJuIGFsbFxuICAgICAgfSwgW10pXG4gICAgfSxcbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuJHJvb3QuZmV0Y2hwcm9qZWN0RGF0YSgpXG4gIH0sXG4gIG1ldGhvZHM6IHt9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLm5vbi1jb21wbGlhbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNjO1xufVxuPC9zdHlsZT5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvQXBwLnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///94\n");
 
 /***/ }),
 /* 95 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorListItem_vue__ = __webpack_require__(96);\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    OcrdProcessorListItem: __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorListItem_vue__[\"a\" /* default */]\n  },\n  data: function data() {\n    return _defineProperty({\n      step_filter: [],\n      show_unofficial: true,\n      category_filter: { require: true }\n    }, 'category_filter', []);\n  },\n\n  props: {\n    processors: { required: true }\n  },\n  computed: {\n    filtered_processors: function filtered_processors() {\n      var _this = this;\n\n      return this.processors.filter(function (tool) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = _this.step_filter[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var step_filter = _step.value;\n\n            if (tool.steps.indexOf(step_filter) == -1) return false;\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = _this.category_filter[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var category_filter = _step2.value;\n\n            if (tool.categories.indexOf(category_filter) == -1) return false;\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n\n        if (!(_this.show_unofficial || tool.official)) {\n          return false;\n        }\n        return true;\n      });\n    },\n    steps: function steps() {\n      return this.processors.reduce(function (all, processor) {\n        all.push.apply(all, _toConsumableArray(processor.steps.filter(function (step) {\n          return all.indexOf(step) == -1;\n        })));\n        return all;\n      }, []);\n    },\n    categories: function categories() {\n      return this.processors.reduce(function (all, processor) {\n        all.push.apply(all, _toConsumableArray(processor.categories.filter(function (category) {\n          return all.indexOf(category) == -1;\n        })));\n        return all;\n      }, []);\n    }\n  },\n  methods: {\n    toggleStepFilter: function toggleStepFilter(v) {\n      if (v in this.step_filter) {\n        this.step_filter = this.step_filter.splice(this.step_filter.indexOf(v), 1);\n      } else {\n        this.step_filter.push(v);\n      }\n    }\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9jZXNzb3JMaXN0LnZ1ZT83NDIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQSxHQURBO0FBSUEsTUFKQSxrQkFJQTtBQUNBO0FBQ0EscUJBREE7QUFFQSwyQkFGQTtBQUdBO0FBSEEsMEJBSUEsRUFKQTtBQU1BLEdBWEE7O0FBWUE7QUFDQTtBQURBLEdBWkE7QUFlQTtBQUNBLHVCQURBLGlDQUNBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFDQTtBQUFBOztBQUNBLHVEQUNBO0FBQ0E7QUFKQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUtBO0FBQUE7O0FBQ0EsZ0VBQ0E7QUFDQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWJBO0FBY0EsS0FoQkE7QUFpQkEsU0FqQkEsbUJBaUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBLE9BSEEsRUFHQSxFQUhBO0FBSUEsS0F0QkE7QUF1QkEsY0F2QkEsd0JBdUJBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBLE9BSEEsRUFHQSxFQUhBO0FBSUE7QUE1QkEsR0FmQTtBQTZDQTtBQUNBLG9CQURBLDRCQUNBLENBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQTdDQSIsImZpbGUiOiI5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8Yi1yb3c+XG4gICAgICA8Yi1idXR0b24gdi1iLXRvZ2dsZS5wcm9jZXNzb3ItY29udHJvbHMgY2xhc3M9XCJtLTFcIj5Ub2dnbGUgQ29udHJvbHM8L2ItYnV0dG9uPlxuICAgICAgPGItY29sbGFwc2UgaWQ9XCJwcm9jZXNzb3ItY29udHJvbHNcIj5cbiAgICAgICAgPGItY29udGFpbmVyPlxuICAgICAgICAgIDxiLXJvdz5cbiAgICAgICAgICAgIDxiLWZvcm0tY2hlY2tib3ggdi1tb2RlbD1cInNob3dfdW5vZmZpY2lhbFwiIG5hbWU9XCJjaGVjay1idXR0b25cIiBzd2l0Y2g+XG4gICAgICAgICAgICBVbm9mZmljaWFsIHByb2Nlc3NvcnMgPGI+KHt7IGNoZWNrZWQgPyBcIlNob3dcIiA6IFwiaGlkZVwiIH19KTwvYj5cbiAgICAgICAgICAgIDwvYi1mb3JtLWNoZWNrYm94PlxuICAgICAgICAgIDwvYi1yb3c+XG4gICAgICAgICAgPGItcm93PlxuICAgICAgICAgICAgRmlsdGVyIGJ5IGNhdGVnb3J5OlxuICAgICAgICAgICAgPGItYmFkZ2VcbiAgICAgICAgICAgICAgdi1mb3I9XCJjYXRlZ29yeSBpbiBjYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgOmtleT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgOnZhcmlhbnQ9XCJjYXRlZ29yeV9maWx0ZXIuaW5kZXhPZihjYXRlZ29yeSkgIT0gLTEgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgIEBjbGljaz1cImNhdGVnb3J5X2ZpbHRlci5pbmRleE9mKGNhdGVnb3J5KSAhPSAtMSA/IGNhdGVnb3J5X2ZpbHRlci5zcGxpY2UoY2F0ZWdvcnlfZmlsdGVyLmluZGV4T2YoY2F0ZWdvcnkpLCAxKSA6IGNhdGVnb3J5X2ZpbHRlci5wdXNoKGNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgY2F0ZWdvcnkgfX1cbiAgICAgICAgICAgIDwvYi1iYWRnZT5cbiAgICAgICAgICA8L2Itcm93PlxuICAgICAgICAgIDxiLXJvdz5cbiAgICAgICAgICAgIEZpbHRlciBieSBzdGVwOlxuICAgICAgICAgICAgPGItYmFkZ2VcbiAgICAgICAgICAgICAgdi1mb3I9XCJzdGVwIGluIHN0ZXBzXCJcbiAgICAgICAgICAgICAgOmtleT1cInN0ZXBcIlxuICAgICAgICAgICAgICA6dmFyaWFudD1cInN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCkgIT0gLTEgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCkgIT0gLTEgPyBzdGVwX2ZpbHRlci5zcGxpY2Uoc3RlcF9maWx0ZXIuaW5kZXhPZihzdGVwKSwgMSkgOiBzdGVwX2ZpbHRlci5wdXNoKHN0ZXApXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzdGVwIH19XG4gICAgICAgICAgICA8L2ItYmFkZ2U+XG4gICAgICAgICAgPC9iLXJvdz5cbiAgICAgICAgPC9iLWNvbnRhaW5lcj5cbiAgICAgIDwvYi1jb2xsYXBzZT5cbiAgICA8L2Itcm93PlxuICAgIDxiLXJvdz5cbiAgICAgICAgPG9jcmQtcHJvY2Vzc29yLWxpc3QtaXRlbVxuICAgICAgICAgIHYtZm9yPVwicHJvY2Vzc29yIGluIGZpbHRlcmVkX3Byb2Nlc3NvcnNcIlxuICAgICAgICAgIDprZXk9XCJwcm9jZXNzb3IuZXhlY3V0YWJsZVwiXG4gICAgICAgICAgOnByb2Nlc3Nvcj1cInByb2Nlc3NvclwiXG4gICAgICAgID48L29jcmQtcHJvY2Vzc29yLWxpc3QtaXRlbT5cbiAgICA8L2Itcm93PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgT2NyZFByb2Nlc3Nvckxpc3RJdGVtIGZyb20gJy4vT2NyZFByb2Nlc3Nvckxpc3RJdGVtLnZ1ZSdcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgIE9jcmRQcm9jZXNzb3JMaXN0SXRlbVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGVwX2ZpbHRlcjogW10sXG4gICAgICBzaG93X3Vub2ZmaWNpYWw6IHRydWUsXG4gICAgICBjYXRlZ29yeV9maWx0ZXI6IHtyZXF1aXJlOiB0cnVlfSxcbiAgICAgIGNhdGVnb3J5X2ZpbHRlcjogW10sXG4gICAgfVxuICB9LFxuICBwcm9wczoge1xuICAgIHByb2Nlc3NvcnM6IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmlsdGVyZWRfcHJvY2Vzc29ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NvcnMuZmlsdGVyKHRvb2wgPT4ge1xuICAgICAgICBmb3IgKGxldCBzdGVwX2ZpbHRlciBvZiB0aGlzLnN0ZXBfZmlsdGVyKSB7XG4gICAgICAgICAgaWYgKHRvb2wuc3RlcHMuaW5kZXhPZihzdGVwX2ZpbHRlcikgPT0gLTEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBjYXRlZ29yeV9maWx0ZXIgb2YgdGhpcy5jYXRlZ29yeV9maWx0ZXIpIHtcbiAgICAgICAgICBpZiAodG9vbC5jYXRlZ29yaWVzLmluZGV4T2YoY2F0ZWdvcnlfZmlsdGVyKSA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMuc2hvd191bm9mZmljaWFsIHx8IHRvb2wub2ZmaWNpYWwpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSxcbiAgICBzdGVwcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NvcnMucmVkdWNlKChhbGwsIHByb2Nlc3NvcikgPT4ge1xuICAgICAgICBhbGwucHVzaCguLi5wcm9jZXNzb3Iuc3RlcHMuZmlsdGVyKHN0ZXAgPT4gYWxsLmluZGV4T2Yoc3RlcCkgPT0gLTEpKVxuICAgICAgICByZXR1cm4gYWxsXG4gICAgICB9LCBbXSlcbiAgICB9LFxuICAgIGNhdGVnb3JpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzb3JzLnJlZHVjZSgoYWxsLCBwcm9jZXNzb3IpID0+IHtcbiAgICAgICAgYWxsLnB1c2goLi4ucHJvY2Vzc29yLmNhdGVnb3JpZXMuZmlsdGVyKGNhdGVnb3J5ID0+IGFsbC5pbmRleE9mKGNhdGVnb3J5KSA9PSAtMSkpXG4gICAgICAgIHJldHVybiBhbGxcbiAgICAgIH0sIFtdKVxuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVTdGVwRmlsdGVyKHYpIHtcbiAgICAgIGlmICh2IGluIHRoaXMuc3RlcF9maWx0ZXIpIHtcbiAgICAgICAgdGhpcy5zdGVwX2ZpbHRlciA9IHRoaXMuc3RlcF9maWx0ZXIuc3BsaWNlKHRoaXMuc3RlcF9maWx0ZXIuaW5kZXhPZih2KSwgMSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RlcF9maWx0ZXIucHVzaCh2KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL09jcmRQcm9jZXNzb3JMaXN0LnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///95\n");
+eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorListItem_vue__ = __webpack_require__(96);\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    OcrdProcessorListItem: __WEBPACK_IMPORTED_MODULE_0__OcrdProcessorListItem_vue__[\"a\" /* default */]\n  },\n  data: function data() {\n    return _defineProperty({\n      step_filter: [],\n      show_unofficial: true,\n      show_noncompliant: true,\n      category_filter: { require: true }\n    }, 'category_filter', []);\n  },\n\n  props: {\n    processors: { required: true }\n  },\n  computed: {\n    filtered_processors: function filtered_processors() {\n      var _this = this;\n\n      return this.processors.filter(function (tool) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = _this.step_filter[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var step_filter = _step.value;\n\n            if (tool.steps.indexOf(step_filter) == -1) return false;\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = _this.category_filter[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var category_filter = _step2.value;\n\n            if (tool.categories.indexOf(category_filter) == -1) return false;\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n\n        if (!(_this.show_unofficial || tool.official)) {\n          return false;\n        }\n        if (!(_this.show_noncompliant || project.compliant_cli)) {\n          return false;\n        }\n        return true;\n      });\n    },\n    steps: function steps() {\n      return this.processors.reduce(function (all, processor) {\n        all.push.apply(all, _toConsumableArray(processor.steps.filter(function (step) {\n          return all.indexOf(step) == -1;\n        })));\n        return all;\n      }, []);\n    },\n    categories: function categories() {\n      return this.processors.reduce(function (all, processor) {\n        all.push.apply(all, _toConsumableArray(processor.categories.filter(function (category) {\n          return all.indexOf(category) == -1;\n        })));\n        return all;\n      }, []);\n    }\n  },\n  methods: {\n    toggleStepFilter: function toggleStepFilter(v) {\n      if (v in this.step_filter) {\n        this.step_filter = this.step_filter.splice(this.step_filter.indexOf(v), 1);\n      } else {\n        this.step_filter.push(v);\n      }\n    }\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9jZXNzb3JMaXN0LnZ1ZT83NDIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9EQTtBQUNBO0FBQ0E7QUFDQTtBQURBLEdBREE7QUFJQSxNQUpBLGtCQUlBO0FBQ0E7QUFDQSxxQkFEQTtBQUVBLDJCQUZBO0FBR0EsNkJBSEE7QUFJQTtBQUpBLDBCQUtBLEVBTEE7QUFPQSxHQVpBOztBQWFBO0FBQ0E7QUFEQSxHQWJBO0FBZ0JBO0FBQ0EsdUJBREEsaUNBQ0E7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7O0FBQ0EsdURBQ0E7QUFDQTtBQUpBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBS0E7QUFBQTs7QUFDQSxnRUFDQTtBQUNBO0FBUkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BaEJBO0FBaUJBLEtBbkJBO0FBb0JBLFNBcEJBLG1CQW9CQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxPQUhBLEVBR0EsRUFIQTtBQUlBLEtBekJBO0FBMEJBLGNBMUJBLHdCQTBCQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxPQUhBLEVBR0EsRUFIQTtBQUlBO0FBL0JBLEdBaEJBO0FBaURBO0FBQ0Esb0JBREEsNEJBQ0EsQ0FEQSxFQUNBO0FBQ0E7QUFDQTtBQUNBLE9BRkEsTUFFQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBakRBIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxiLXJvdz5cbiAgICAgIDxiLWJ1dHRvbiB2LWItdG9nZ2xlLnByb2Nlc3Nvci1jb250cm9scyBjbGFzcz1cIm0tMVwiPlRvZ2dsZSBDb250cm9sczwvYi1idXR0b24+XG4gICAgICA8Yi1jb2xsYXBzZSBpZD1cInByb2Nlc3Nvci1jb250cm9sc1wiPlxuICAgICAgICA8Yi1jb250YWluZXI+XG4gICAgICAgICAgPGItcm93PlxuICAgICAgICAgICAgPGItZm9ybS1jaGVja2JveCB2LW1vZGVsPVwic2hvd19ub25jb21wbGlhbnRcIiBuYW1lPVwiY2hlY2stYnV0dG9uXCIgc3dpdGNoPlxuICAgICAgICAgICAgTm9uLWNvbXBsaWFudCBwcm9qZWN0cyA8Yj4oe3sgc2hvd19ub25jb21wbGlhbnQgPyBcIlNob3dcIiA6IFwiSGlkZVwiIH19KTwvYj5cbiAgICAgICAgICAgIDwvYi1mb3JtLWNoZWNrYm94PlxuICAgICAgICAgIDwvYi1yb3c+XG4gICAgICAgICAgPGItcm93PlxuICAgICAgICAgICAgPGItZm9ybS1jaGVja2JveCB2LW1vZGVsPVwic2hvd191bm9mZmljaWFsXCIgbmFtZT1cImNoZWNrLWJ1dHRvblwiIHN3aXRjaD5cbiAgICAgICAgICAgIFVub2ZmaWNpYWwgcHJvY2Vzc29ycyA8Yj4oe3sgc2hvd191bm9mZmljaWFsID8gXCJTaG93XCIgOiBcImhpZGVcIiB9fSk8L2I+XG4gICAgICAgICAgICA8L2ItZm9ybS1jaGVja2JveD5cbiAgICAgICAgICA8L2Itcm93PlxuICAgICAgICAgIDxiLXJvdz5cbiAgICAgICAgICAgIEZpbHRlciBieSBjYXRlZ29yeTpcbiAgICAgICAgICAgIDxiLWJhZGdlXG4gICAgICAgICAgICAgIHYtZm9yPVwiY2F0ZWdvcnkgaW4gY2F0ZWdvcmllc1wiXG4gICAgICAgICAgICAgIDprZXk9XCJjYXRlZ29yeVwiXG4gICAgICAgICAgICAgIDp2YXJpYW50PVwiY2F0ZWdvcnlfZmlsdGVyLmluZGV4T2YoY2F0ZWdvcnkpICE9IC0xID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSdcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJjYXRlZ29yeV9maWx0ZXIuaW5kZXhPZihjYXRlZ29yeSkgIT0gLTEgPyBjYXRlZ29yeV9maWx0ZXIuc3BsaWNlKGNhdGVnb3J5X2ZpbHRlci5pbmRleE9mKGNhdGVnb3J5KSwgMSkgOiBjYXRlZ29yeV9maWx0ZXIucHVzaChjYXRlZ29yeSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGNhdGVnb3J5IH19XG4gICAgICAgICAgICA8L2ItYmFkZ2U+XG4gICAgICAgICAgPC9iLXJvdz5cbiAgICAgICAgICA8Yi1yb3c+XG4gICAgICAgICAgICBGaWx0ZXIgYnkgc3RlcDpcbiAgICAgICAgICAgIDxiLWJhZGdlXG4gICAgICAgICAgICAgIHYtZm9yPVwic3RlcCBpbiBzdGVwc1wiXG4gICAgICAgICAgICAgIDprZXk9XCJzdGVwXCJcbiAgICAgICAgICAgICAgOnZhcmlhbnQ9XCJzdGVwX2ZpbHRlci5pbmRleE9mKHN0ZXApICE9IC0xID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSdcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwX2ZpbHRlci5pbmRleE9mKHN0ZXApICE9IC0xID8gc3RlcF9maWx0ZXIuc3BsaWNlKHN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCksIDEpIDogc3RlcF9maWx0ZXIucHVzaChzdGVwKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgc3RlcCB9fVxuICAgICAgICAgICAgPC9iLWJhZGdlPlxuICAgICAgICAgIDwvYi1yb3c+XG4gICAgICAgIDwvYi1jb250YWluZXI+XG4gICAgICA8L2ItY29sbGFwc2U+XG4gICAgPC9iLXJvdz5cbiAgICA8Yi1yb3c+XG4gICAgICAgIDxvY3JkLXByb2Nlc3Nvci1saXN0LWl0ZW1cbiAgICAgICAgICB2LWZvcj1cInByb2Nlc3NvciBpbiBmaWx0ZXJlZF9wcm9jZXNzb3JzXCJcbiAgICAgICAgICA6a2V5PVwicHJvY2Vzc29yLmV4ZWN1dGFibGVcIlxuICAgICAgICAgIDpwcm9jZXNzb3I9XCJwcm9jZXNzb3JcIlxuICAgICAgICA+PC9vY3JkLXByb2Nlc3Nvci1saXN0LWl0ZW0+XG4gICAgPC9iLXJvdz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IE9jcmRQcm9jZXNzb3JMaXN0SXRlbSBmcm9tICcuL09jcmRQcm9jZXNzb3JMaXN0SXRlbS52dWUnXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBPY3JkUHJvY2Vzc29yTGlzdEl0ZW1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RlcF9maWx0ZXI6IFtdLFxuICAgICAgc2hvd191bm9mZmljaWFsOiB0cnVlLFxuICAgICAgc2hvd19ub25jb21wbGlhbnQ6IHRydWUsXG4gICAgICBjYXRlZ29yeV9maWx0ZXI6IHtyZXF1aXJlOiB0cnVlfSxcbiAgICAgIGNhdGVnb3J5X2ZpbHRlcjogW10sXG4gICAgfVxuICB9LFxuICBwcm9wczoge1xuICAgIHByb2Nlc3NvcnM6IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmlsdGVyZWRfcHJvY2Vzc29ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NvcnMuZmlsdGVyKHRvb2wgPT4ge1xuICAgICAgICBmb3IgKGxldCBzdGVwX2ZpbHRlciBvZiB0aGlzLnN0ZXBfZmlsdGVyKSB7XG4gICAgICAgICAgaWYgKHRvb2wuc3RlcHMuaW5kZXhPZihzdGVwX2ZpbHRlcikgPT0gLTEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBjYXRlZ29yeV9maWx0ZXIgb2YgdGhpcy5jYXRlZ29yeV9maWx0ZXIpIHtcbiAgICAgICAgICBpZiAodG9vbC5jYXRlZ29yaWVzLmluZGV4T2YoY2F0ZWdvcnlfZmlsdGVyKSA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMuc2hvd191bm9mZmljaWFsIHx8IHRvb2wub2ZmaWNpYWwpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEodGhpcy5zaG93X25vbmNvbXBsaWFudCB8fCBwcm9qZWN0LmNvbXBsaWFudF9jbGkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSxcbiAgICBzdGVwcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NvcnMucmVkdWNlKChhbGwsIHByb2Nlc3NvcikgPT4ge1xuICAgICAgICBhbGwucHVzaCguLi5wcm9jZXNzb3Iuc3RlcHMuZmlsdGVyKHN0ZXAgPT4gYWxsLmluZGV4T2Yoc3RlcCkgPT0gLTEpKVxuICAgICAgICByZXR1cm4gYWxsXG4gICAgICB9LCBbXSlcbiAgICB9LFxuICAgIGNhdGVnb3JpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzb3JzLnJlZHVjZSgoYWxsLCBwcm9jZXNzb3IpID0+IHtcbiAgICAgICAgYWxsLnB1c2goLi4ucHJvY2Vzc29yLmNhdGVnb3JpZXMuZmlsdGVyKGNhdGVnb3J5ID0+IGFsbC5pbmRleE9mKGNhdGVnb3J5KSA9PSAtMSkpXG4gICAgICAgIHJldHVybiBhbGxcbiAgICAgIH0sIFtdKVxuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVTdGVwRmlsdGVyKHYpIHtcbiAgICAgIGlmICh2IGluIHRoaXMuc3RlcF9maWx0ZXIpIHtcbiAgICAgICAgdGhpcy5zdGVwX2ZpbHRlciA9IHRoaXMuc3RlcF9maWx0ZXIuc3BsaWNlKHRoaXMuc3RlcF9maWx0ZXIuaW5kZXhPZih2KSwgMSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RlcF9maWx0ZXIucHVzaCh2KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL09jcmRQcm9jZXNzb3JMaXN0LnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///95\n");
 
 /***/ }),
 /* 96 */
@@ -742,14 +742,14 @@ eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_mo
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  props: {\n    processor: { required: true }\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9jZXNzb3JMaXN0SXRlbS52dWU/NDk1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwiZmlsZSI6Ijk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8Yi1jYXJkXG4gICAgdGFnPVwiYXJ0aWNsZVwiXG4gICAgOnRpdGxlPVwicHJvY2Vzc29yLmV4ZWN1dGFibGUucmVwbGFjZSgnb2NyZC0nLCAnJylcIlxuICAgIGNsYXNzPVwibWItNVwiXG4gICAgPlxuICAgIDxiLWNhcmQtdGV4dD5cblxuICAgICAgPGItdGFicz5cbiAgICAgICAgPGItdGFiIHRpdGxlPVwiRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8YmxvY2txdW90ZT5cbiAgICAgICAgICAgIHt7IHByb2Nlc3Nvci5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgIDwvYmxvY2txdW90ZT5cbiAgICAgICAgICA8Yi1iYWRnZSB2YXJpYW50PVwiaW5mb1wiIHYtZm9yPVwic3RlcCBpbiBwcm9jZXNzb3Iuc3RlcHNcIiA6a2V5PVwic3RlcFwiPnt7IHN0ZXAgfX08L2ItYmFkZ2U+XG4gIDxiLWJhZGdlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgdi1mb3I9XCJjYXRlZ29yeSBpbiBwcm9jZXNzb3IuY2F0ZWdvcmllc1wiIDprZXk9XCJjYXRlZ29yeVwiPnt7IGNhdGVnb3J5IH19PC9iLWJhZGdlPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgUGFydCBvZiA8YSBocmVmPVwiXCI+e3sgcHJvY2Vzc29yLnBhcnRfb2YgfX08L2E+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPGEgaHJlZj1cIlwiPlJlYWQgdGhlIERvY3VtZW50YXRpb24hPC9hPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9iLXRhYj5cblxuICAgICAgICA8Yi10YWIgdGl0bGU9XCJQYXJhbWV0ZXJzXCI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpIHYtZm9yPVwicGFyYW0sIG5hbWUgaW4gcHJvY2Vzc29yLnBhcmFtZXRlcnNcIiA6a2V5PVwibmFtZVwiPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IG5hbWUgfX08L3N0cm9uZz4ge3sgcGFyYW0gfX1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9iLXRhYj5cblxuICAgICAgPC9iLXRhYnM+XG5cbiAgICA8L2ItY2FyZC10ZXh0PlxuICA8L2ItY2FyZD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgcHJvY2Vzc29yOiB7cmVxdWlyZWQ6IHRydWV9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9PY3JkUHJvY2Vzc29yTGlzdEl0ZW0udnVlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///97\n");
+eval("//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  props: {\n    processor: { required: true }\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9jZXNzb3JMaXN0SXRlbS52dWU/NDk1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDQTtBQUNBO0FBQ0E7QUFEQTtBQURBIiwiZmlsZSI6Ijk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8Yi1jYXJkXG4gICAgdGFnPVwiYXJ0aWNsZVwiXG4gICAgOnRpdGxlPVwicHJvY2Vzc29yLmV4ZWN1dGFibGUucmVwbGFjZSgnb2NyZC0nLCAnJylcIlxuICAgIDpjbGFzcz1cImBtYi01IG9jcmQtcHJvY2Vzc29yLWxpc3QtaXRlbSAke3Byb2Nlc3Nvci5jb21wbGlhbnRfY2xpID8gJ2NvbXBsaWFudCcgOiAnbm9uLWNvbXBsaWFudCd9YFwiXG4gICAgPlxuICAgIDxiLWNhcmQtdGV4dD5cblxuICAgICAgPGItdGFicz5cbiAgICAgICAgPGItdGFiIHRpdGxlPVwiRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8YmxvY2txdW90ZT5cbiAgICAgICAgICAgIHt7IHByb2Nlc3Nvci5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgIDwvYmxvY2txdW90ZT5cbiAgICAgICAgICA8Yi1iYWRnZSB2YXJpYW50PVwiaW5mb1wiIHYtZm9yPVwic3RlcCBpbiBwcm9jZXNzb3Iuc3RlcHNcIiA6a2V5PVwic3RlcFwiPnt7IHN0ZXAgfX08L2ItYmFkZ2U+XG4gIDxiLWJhZGdlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgdi1mb3I9XCJjYXRlZ29yeSBpbiBwcm9jZXNzb3IuY2F0ZWdvcmllc1wiIDprZXk9XCJjYXRlZ29yeVwiPnt7IGNhdGVnb3J5IH19PC9iLWJhZGdlPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgUGFydCBvZiA8YSBocmVmPVwiXCI+e3sgcHJvY2Vzc29yLnBhcnRfb2YgfX08L2E+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPGEgaHJlZj1cIlwiPlJlYWQgdGhlIERvY3VtZW50YXRpb24hPC9hPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9iLXRhYj5cblxuICAgICAgICA8Yi10YWIgdGl0bGU9XCJQYXJhbWV0ZXJzXCI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpIHYtZm9yPVwicGFyYW0sIG5hbWUgaW4gcHJvY2Vzc29yLnBhcmFtZXRlcnNcIiA6a2V5PVwibmFtZVwiPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IG5hbWUgfX08L3N0cm9uZz4ge3sgcGFyYW0gfX1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9iLXRhYj5cblxuICAgICAgPC9iLXRhYnM+XG5cbiAgICA8L2ItY2FyZC10ZXh0PlxuICA8L2ItY2FyZD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgcHJvY2Vzc29yOiB7cmVxdWlyZWQ6IHRydWV9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9PY3JkUHJvY2Vzc29yTGlzdEl0ZW0udnVlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///97\n");
 
 /***/ }),
 /* 98 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__OcrdProjectListItem_vue__ = __webpack_require__(99);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  data: function data() {\n    return {\n      name_filter: '',\n      show_unofficial: true,\n      tabIndex: 0\n    };\n  },\n\n  computed: {\n    filtered_projects: function filtered_projects() {\n      var _this = this;\n\n      return this.projects.filter(function (project) {\n        if (!(_this.show_unofficial || project.official)) {\n          return false;\n        }\n        return project.name.toLowerCase().includes(_this.name_filter.toLowerCase());\n      });\n    }\n  },\n  components: {\n    OcrdProjectListItem: __WEBPACK_IMPORTED_MODULE_0__OcrdProjectListItem_vue__[\"a\" /* default */]\n  },\n  props: {\n    projects: { required: true }\n  },\n  methods: {\n    switchTab: function switchTab(delta) {\n      this.tabIndex += delta;\n    }\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9qZWN0TGlzdC52dWU/ZDRmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ0E7QUFDQTtBQUNBLE1BREEsa0JBQ0E7QUFDQTtBQUNBLHFCQURBO0FBRUEsMkJBRkE7QUFHQTtBQUhBO0FBS0EsR0FQQTs7QUFRQTtBQUNBLHFCQURBLCtCQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEE7QUFNQTtBQVJBLEdBUkE7QUFrQkE7QUFDQTtBQURBLEdBbEJBO0FBcUJBO0FBQ0E7QUFEQSxHQXJCQTtBQXdCQTtBQUNBLGFBREEscUJBQ0EsS0FEQSxFQUNBO0FBQ0E7QUFDQTtBQUhBO0FBeEJBIiwiZmlsZSI6Ijk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxiLXJvdz5cbiAgICAgIDxiLWJ1dHRvbiB2LWItdG9nZ2xlLnByb2plY3QtY29udHJvbHMgY2xhc3M9XCJtLTFcIj5Ub2dnbGUgQ29udHJvbHM8L2ItYnV0dG9uPlxuICAgICAgPGItY29sbGFwc2UgaWQ9XCJwcm9qZWN0LWNvbnRyb2xzXCI+XG4gICAgICAgIDxiLWNvbnRhaW5lcj5cbiAgICAgICAgICA8Yi1yb3c+XG4gICAgICAgICAgICA8Yi1mb3JtLWNoZWNrYm94IHYtbW9kZWw9XCJzaG93X3Vub2ZmaWNpYWxcIiBuYW1lPVwiY2hlY2stYnV0dG9uXCIgc3dpdGNoPlxuICAgICAgICAgICAgVW5vZmZpY2lhbCBwcm9qZWN0cyA8Yj4oe3sgY2hlY2tlZCA/IFwiU2hvd1wiIDogXCJoaWRlXCIgfX0pPC9iPlxuICAgICAgICAgICAgPC9iLWZvcm0tY2hlY2tib3g+XG4gICAgICAgICAgPC9iLXJvdz5cbiAgICAgICAgICA8Yi1yb3c+XG4gICAgICAgICAgICBGaWx0ZXIgYnkgbmFtZTogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIm5hbWVfZmlsdGVyXCIvPiAoU2hvd2luZyB7eyBmaWx0ZXJlZF9wcm9qZWN0cy5sZW5ndGggfX0gb2Yge3sgcHJvamVjdHMubGVuZ3RofX0gcHJvamVjdHMpXG4gICAgICAgICAgPC9iLXJvdz5cbiAgICAgICAgICA8Yi1yb3c+XG4gICAgICAgICAgICBUYWJzOiA8Yi1idXR0b24gQGNsaWNrPVwidGFiSW5kZXggLT0gMVwiPiZsdDs8L2ItYnV0dG9uPiA8Yi1idXR0b24gQGNsaWNrPVwidGFiSW5kZXggKz0gMVwiPiZndDs8L2ItYnV0dG9uPlxuICAgICAgICAgIDwvYi1yb3c+XG4gICAgICAgIDwvYi1jb250YWluZXI+XG4gICAgICA8L2ItY29sbGFwc2U+XG4gICAgPC9iLXJvdz5cbiAgICA8Yi1yb3cgY2xhc3M9XCJsaXN0XCI+XG4gICAgICA8b2NyZC1wcm9qZWN0LWxpc3QtaXRlbVxuICAgICAgICB2LWZvcj1cInByb2plY3QsaWR4IGluIGZpbHRlcmVkX3Byb2plY3RzXCJcbiAgICAgICAgOmtleT1cInByb2plY3Qub3JnX3BsdXNfbmFtZVwiXG4gICAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXG4gICAgICAgIDp0YWJJbmRleD1cInRhYkluZGV4XCJcbiAgICAgICAgOnByb2plY3RJbmRleD1cImlkeFwiXG4gICAgICA+XG4gICAgICA8L29jcmQtcHJvamVjdC1saXN0LWl0ZW0+XG4gICAgPC9iLXJvdz5cblxuICAgIDxiLW1vZGFsIGlkPVwicHJvamVjdC1tb2RhbFwiXG4gICAgICAgICAgICAgc2l6ZT1cInhsXCJcbiAgICAgICAgICAgICA6aGlkZS1oZWFkZXI9XCJ0cnVlXCJcbiAgICAgICAgICAgICA6aGlkZS1mb290ZXI9XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgIDxvY3JkLXByb2plY3QtbGlzdC1pdGVtXG4gICAgICAgIDpwcm9qZWN0PVwicHJvamVjdHNbJHJvb3QubW9kYWxQcm9qZWN0SW5kZXhdXCJcbiAgICAgICAgOnByb2plY3RJbmRleD1cIiRyb290Lm1vZGFsUHJvamVjdEluZGV4XCJcbiAgICAgICAgOm1vZGFsPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgIDwvb2NyZC1wcm9qZWN0LWxpc3QtaXRlbT5cbiAgICA8L2ItbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBPY3JkUHJvamVjdExpc3RJdGVtIGZyb20gJy4vT2NyZFByb2plY3RMaXN0SXRlbS52dWUnXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVfZmlsdGVyOiAnJyxcbiAgICAgIHNob3dfdW5vZmZpY2lhbDogdHJ1ZSxcbiAgICAgIHRhYkluZGV4OiAwLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWx0ZXJlZF9wcm9qZWN0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2plY3RzLmZpbHRlcihwcm9qZWN0ID0+IHtcbiAgICAgICAgaWYgKCEodGhpcy5zaG93X3Vub2ZmaWNpYWwgfHwgcHJvamVjdC5vZmZpY2lhbCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvamVjdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5uYW1lX2ZpbHRlci50b0xvd2VyQ2FzZSgpKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBPY3JkUHJvamVjdExpc3RJdGVtXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgcHJvamVjdHM6IHtyZXF1aXJlZDogdHJ1ZX1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHN3aXRjaFRhYihkZWx0YSkge1xuICAgICAgdGhpcy50YWJJbmRleCArPSBkZWx0YVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuLmxpc3QgLm9jcmQtcHJvamVjdC1saXN0LWl0ZW0ge1xuICBtYXgtd2lkdGg6IDMwcmVtO1xuICBtYXgtaGVpZ2h0OiAzMHJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbjwvc3R5bGU+XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL09jcmRQcm9qZWN0TGlzdC52dWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///98\n");
+eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__OcrdProjectListItem_vue__ = __webpack_require__(99);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  data: function data() {\n    return {\n      name_filter: '',\n      show_unofficial: true,\n      show_noncompliant: true,\n      tabIndex: 0\n    };\n  },\n\n  computed: {\n    filtered_projects: function filtered_projects() {\n      var _this = this;\n\n      return this.projects.filter(function (project) {\n        if (!(_this.show_unofficial || project.official)) {\n          return false;\n        }\n        if (!(_this.show_noncompliant || project.compliant_cli)) {\n          return false;\n        }\n        return project.name.toLowerCase().includes(_this.name_filter.toLowerCase());\n      });\n    }\n  },\n  components: {\n    OcrdProjectListItem: __WEBPACK_IMPORTED_MODULE_0__OcrdProjectListItem_vue__[\"a\" /* default */]\n  },\n  props: {\n    projects: { required: true }\n  },\n  methods: {\n    switchTab: function switchTab(delta) {\n      this.tabIndex += delta;\n    }\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9qZWN0TGlzdC52dWU/ZDRmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9EQTtBQUNBO0FBQ0EsTUFEQSxrQkFDQTtBQUNBO0FBQ0EscUJBREE7QUFFQSwyQkFGQTtBQUdBLDZCQUhBO0FBSUE7QUFKQTtBQU1BLEdBUkE7O0FBU0E7QUFDQSxxQkFEQSwrQkFDQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVJBO0FBU0E7QUFYQSxHQVRBO0FBc0JBO0FBQ0E7QUFEQSxHQXRCQTtBQXlCQTtBQUNBO0FBREEsR0F6QkE7QUE0QkE7QUFDQSxhQURBLHFCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFIQTtBQTVCQSIsImZpbGUiOiI5OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8Yi1yb3c+XG4gICAgICA8Yi1idXR0b24gdi1iLXRvZ2dsZS5wcm9qZWN0LWNvbnRyb2xzIGNsYXNzPVwibS0xXCI+VG9nZ2xlIENvbnRyb2xzPC9iLWJ1dHRvbj5cbiAgICAgIDxiLWNvbGxhcHNlIGlkPVwicHJvamVjdC1jb250cm9sc1wiPlxuICAgICAgICA8Yi1jb250YWluZXI+XG4gICAgICAgICAgPGItcm93PlxuICAgICAgICAgICAgPGItZm9ybS1jaGVja2JveCB2LW1vZGVsPVwic2hvd19ub25jb21wbGlhbnRcIiBuYW1lPVwiY2hlY2stYnV0dG9uXCIgc3dpdGNoPlxuICAgICAgICAgICAgTm9uLWNvbXBsaWFudCBwcm9qZWN0cyA8Yj4oe3sgc2hvd19ub25jb21wbGlhbnQgPyBcIlNob3dcIiA6IFwiSGlkZVwiIH19KTwvYj5cbiAgICAgICAgICAgIDwvYi1mb3JtLWNoZWNrYm94PlxuICAgICAgICAgIDwvYi1yb3c+XG4gICAgICAgICAgPGItcm93PlxuICAgICAgICAgICAgPGItZm9ybS1jaGVja2JveCB2LW1vZGVsPVwic2hvd191bm9mZmljaWFsXCIgbmFtZT1cImNoZWNrLWJ1dHRvblwiIHN3aXRjaD5cbiAgICAgICAgICAgIFVub2ZmaWNpYWwgcHJvamVjdHMgPGI+KHt7IHNob3dfdW5vZmZpY2lhbCA/IFwiU2hvd1wiIDogXCJIaWRlXCIgfX0pPC9iPlxuICAgICAgICAgICAgPC9iLWZvcm0tY2hlY2tib3g+XG4gICAgICAgICAgPC9iLXJvdz5cbiAgICAgICAgICA8Yi1yb3c+XG4gICAgICAgICAgICBGaWx0ZXIgYnkgbmFtZTogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIm5hbWVfZmlsdGVyXCIvPiAoU2hvd2luZyB7eyBmaWx0ZXJlZF9wcm9qZWN0cy5sZW5ndGggfX0gb2Yge3sgcHJvamVjdHMubGVuZ3RofX0gcHJvamVjdHMpXG4gICAgICAgICAgPC9iLXJvdz5cbiAgICAgICAgICA8Yi1yb3c+XG4gICAgICAgICAgICBUYWJzOiA8Yi1idXR0b24gQGNsaWNrPVwidGFiSW5kZXggLT0gMVwiPiZsdDs8L2ItYnV0dG9uPiA8Yi1idXR0b24gQGNsaWNrPVwidGFiSW5kZXggKz0gMVwiPiZndDs8L2ItYnV0dG9uPlxuICAgICAgICAgIDwvYi1yb3c+XG4gICAgICAgIDwvYi1jb250YWluZXI+XG4gICAgICA8L2ItY29sbGFwc2U+XG4gICAgPC9iLXJvdz5cbiAgICA8Yi1yb3cgY2xhc3M9XCJsaXN0XCI+XG4gICAgICA8b2NyZC1wcm9qZWN0LWxpc3QtaXRlbVxuICAgICAgICB2LWZvcj1cInByb2plY3QsaWR4IGluIGZpbHRlcmVkX3Byb2plY3RzXCJcbiAgICAgICAgOmtleT1cInByb2plY3Qub3JnX3BsdXNfbmFtZVwiXG4gICAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXG4gICAgICAgIDp0YWJJbmRleD1cInRhYkluZGV4XCJcbiAgICAgICAgOnByb2plY3RJbmRleD1cImlkeFwiXG4gICAgICA+XG4gICAgICA8L29jcmQtcHJvamVjdC1saXN0LWl0ZW0+XG4gICAgPC9iLXJvdz5cblxuICAgIDxiLW1vZGFsIGlkPVwicHJvamVjdC1tb2RhbFwiXG4gICAgICAgICAgICAgc2l6ZT1cInhsXCJcbiAgICAgICAgICAgICA6aGlkZS1oZWFkZXI9XCJ0cnVlXCJcbiAgICAgICAgICAgICA6aGlkZS1mb290ZXI9XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgIDxvY3JkLXByb2plY3QtbGlzdC1pdGVtXG4gICAgICAgIDpwcm9qZWN0PVwicHJvamVjdHNbJHJvb3QubW9kYWxQcm9qZWN0SW5kZXhdXCJcbiAgICAgICAgOnByb2plY3RJbmRleD1cIiRyb290Lm1vZGFsUHJvamVjdEluZGV4XCJcbiAgICAgICAgOm1vZGFsPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgIDwvb2NyZC1wcm9qZWN0LWxpc3QtaXRlbT5cbiAgICA8L2ItbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBPY3JkUHJvamVjdExpc3RJdGVtIGZyb20gJy4vT2NyZFByb2plY3RMaXN0SXRlbS52dWUnXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVfZmlsdGVyOiAnJyxcbiAgICAgIHNob3dfdW5vZmZpY2lhbDogdHJ1ZSxcbiAgICAgIHNob3dfbm9uY29tcGxpYW50OiB0cnVlLFxuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpbHRlcmVkX3Byb2plY3RzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvamVjdHMuZmlsdGVyKHByb2plY3QgPT4ge1xuICAgICAgICBpZiAoISh0aGlzLnNob3dfdW5vZmZpY2lhbCB8fCBwcm9qZWN0Lm9mZmljaWFsKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMuc2hvd19ub25jb21wbGlhbnQgfHwgcHJvamVjdC5jb21wbGlhbnRfY2xpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9qZWN0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLm5hbWVfZmlsdGVyLnRvTG93ZXJDYXNlKCkpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIE9jcmRQcm9qZWN0TGlzdEl0ZW1cbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBwcm9qZWN0czoge3JlcXVpcmVkOiB0cnVlfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgc3dpdGNoVGFiKGRlbHRhKSB7XG4gICAgICB0aGlzLnRhYkluZGV4ICs9IGRlbHRhXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG4ubGlzdCAub2NyZC1wcm9qZWN0LWxpc3QtaXRlbSB7XG4gIG1heC13aWR0aDogMzByZW07XG4gIG1heC1oZWlnaHQ6IDMwcmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuPC9zdHlsZT5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvT2NyZFByb2plY3RMaXN0LnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n");
 
 /***/ }),
 /* 99 */
@@ -763,7 +763,7 @@ eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_mo
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked__ = __webpack_require__(240);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_marked__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_code_highlight__ = __webpack_require__(241);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    VueCodeHighlight: __WEBPACK_IMPORTED_MODULE_1_vue_code_highlight__[\"a\" /* component */]\n  },\n  props: {\n    project: { required: true },\n    tabIndex: { default: 0 },\n    projectIndex: { required: true },\n    modal: { default: false }\n  },\n  computed: {\n    cleanId: function cleanId() {\n      return this.project.org_plus_name.replace(/[^A-Za-z0-9]/g, '-');\n    },\n    compiledReadme: function compiledReadme() {\n      var src = this.project.files['README.md'];\n      if (!src) src = '`# NO README`';\n      return __WEBPACK_IMPORTED_MODULE_0_marked___default()(src);\n    }\n  },\n  methods: {}\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9qZWN0TGlzdEl0ZW0udnVlP2NjZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0RBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBREEsR0FEQTtBQUlBO0FBQ0EsK0JBREE7QUFFQSw0QkFGQTtBQUdBLG9DQUhBO0FBSUE7QUFKQSxHQUpBO0FBVUE7QUFDQSxXQURBLHFCQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUEsa0JBSkEsNEJBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBLEdBVkE7QUFvQkE7QUFwQkEiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8Yi1jYXJkXG4gICAgOnRpdGxlPVwicHJvamVjdC5vcmdfcGx1c19uYW1lXCJcbiAgICB0YWc9XCJhcnRpY2xlXCJcbiAgICBjbGFzcz1cIm1iLTUgb2NyZC1wcm9qZWN0LWxpc3QtaXRlbVwiXG4gICAgPlxuICAgIDxiLWNhcmQtdGV4dCB2LWlmPVwiIW1vZGFsXCI+XG4gICAgICA8Yi1idXR0b24gQGNsaWNrPVwiJHJvb3Quc2hvd01vZGFsKCdwcm9qZWN0JywgcHJvamVjdEluZGV4KVwiPkV4cGFuZDwvYi1idXR0b24+XG4gICAgPC9iLWNhcmQtdGV4dD5cbiAgICA8Yi10YWJzIHYtbW9kZWw9XCJ0YWJJbmRleFwiPlxuICAgICAgPGItdGFiIHRpdGxlPVwiUkVBRE1FXCI+XG4gICAgICAgIDxkaXYgdi1odG1sPVwiY29tcGlsZWRSZWFkbWVcIj48L2Rpdj5cbiAgICAgIDwvYi10YWI+XG4gICAgICA8Yi10YWIgdGl0bGU9XCJEb2NrZXJmaWxlXCI+XG4gICAgICAgIDx2dWUtY29kZS1oaWdobGlnaHQ+e3sgcHJvamVjdC5maWxlcy5Eb2NrZXJmaWxlIHx8ICcjIE5PIERPQ0tFUkZJTEUnIH19PC92dWUtY29kZS1oaWdobGlnaHQ+XG4gICAgICA8L2ItdGFiPlxuICAgICAgPGItdGFiIHRpdGxlPVwiR2l0XCI+XG4gICAgICAgIDxiLWNhcmQtdGV4dD5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJgaHR0cHM6Ly9weXBpLm9yZy9wcm9qZWN0LyR7IHByb2plY3QucHl0aG9uLm5hbWUgfS9gXCI+ICAgICAgICAgICAgIDxpbWcgOnNyYz1cImBodHRwczovL2ltZy5zaGllbGRzLmlvL3B5cGkvdi8keyBwcm9qZWN0LnB5dGhvbi5uYW1lIH0uc3ZnYFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDwvYT5cbiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImBodHRwczovL3RyYXZpcy1jaS5vcmcvJHsgcHJvamVjdC5vcmdfcGx1c19uYW1lIH1gXCI+ICAgICAgICAgICAgICAgPGltZyA6c3JjPVwiYGh0dHBzOi8vdHJhdmlzLWNpLm9yZy8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfS5zdmc/YnJhbmNoPW1hc3RlcmBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gPC9hPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImBodHRwczovL2NpcmNsZWNpLmNvbS9naC8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfWBcIj4gICAgICAgICAgICAgPGltZyA6c3JjPVwiYGh0dHBzOi8vY2lyY2xlY2kuY29tL2doLyR7IHByb2plY3Qub3JnX3BsdXNfbmFtZSB9LnN2Zz9zdHlsZT1zdmdgXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gPC9hPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImBodHRwczovL2h1Yi5kb2NrZXIuY29tL3Ivb2NyZC9jb3JlL3RhZ3MvYFwiPiAgICAgICAgICAgICAgICAgICAgIDxpbWcgOnNyYz1cImBodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci9hdXRvbWF0ZWQvb2NyZC9jb3JlLnN2Z2BcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA8L2E+IC0tPlxuICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiYGh0dHBzOi8vY29kZWNvdi5pby9naC8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfWBcIj4gICAgICAgICAgICAgICA8aW1nIDpzcmM9XCJgaHR0cHM6Ly9jb2RlY292LmlvL2doLyR7IHByb2plY3Qub3JnX3BsdXNfbmFtZSB9L2JyYW5jaC9tYXN0ZXIvZ3JhcGgvYmFkZ2Uuc3ZnYFwiICAgICAgICAgICAgICAgICAvPiA8L2E+IC0tPlxuICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiYGh0dHBzOi8vc2NydXRpbml6ZXItY2kuY29tL2cvJHsgcHJvamVjdC5vcmdfcGx1c19uYW1lIH1gXCI+ICAgICAgICA8aW1nIDpzcmM9XCJgaHR0cHM6Ly9zY3J1dGluaXplci1jaS5jb20vZy8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfS9iYWRnZXMvcXVhbGl0eS1zY29yZS5wbmc/Yj1tYXN0ZXJgXCIgICAgICAvPiA8L2E+IC0tPlxuICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiYGh0dHBzOi8vbGd0bS5jb20vcHJvamVjdHMvZy8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfS9hbGVydHMvYFwiPiA8aW1nIDpzcmM9XCJgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9sZ3RtL2FsZXJ0cy9nLyR7IHByb2plY3Qub3JnX3BsdXNfbmFtZSB9LnN2Zz9sb2dvPWxndG0mYW1wO2xvZ29XaWR0aD0xOGBcIiAvPiA8L2E+IC0tPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Yi10YWJsZSB2LWlmPVwicHJvamVjdC5naXRcIiA6aXRlbXM9XCJbcHJvamVjdC5naXRdXCI+PC9iLXRhYmxlPlxuICAgICAgICA8L2ItY2FyZC10ZXh0PlxuICAgICAgPC9iLXRhYj5cblxuICAgICAgPGItdGFiIHRpdGxlPVwib2NyZC10b29sIHZhbGlkYXRpb25cIj5cbiAgICAgICAgPGItY2FyZC10ZXh0PlxuICAgICAgICAgIDx2dWUtY29kZS1oaWdobGlnaHQ+e3sgcHJvamVjdC5vY3JkX3Rvb2xfdmFsaWRhdGUgfHwgJyMgTk8gdmFsaWRhdGlvbiBkYXRhJyB9fTwvdnVlLWNvZGUtaGlnaGxpZ2h0PlxuICAgICAgICA8L2ItY2FyZC10ZXh0PlxuICAgICAgPC9iLXRhYj5cblxuICAgICAgPGItdGFiIHRpdGxlPVwiUHl0aG9uXCI+XG4gICAgICAgIDxiLWNhcmQtdGV4dD5cbiAgICAgICAgICA8Yi10YWJsZSB2LWlmPVwicHJvamVjdC5weXRob25cIiA6aXRlbXM9XCJbcHJvamVjdC5weXRob25dXCI+PC9iLXRhYmxlPlxuICAgICAgICA8L2ItY2FyZC10ZXh0PlxuICAgICAgPC9iLXRhYj5cblxuICAgIDwvYi10YWJzPlxuICA8L2ItY2FyZD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgbWFya2VkIGZyb20gJ21hcmtlZCdcbmltcG9ydCB7IGNvbXBvbmVudCBhcyBWdWVDb2RlSGlnaGxpZ2h0IH0gZnJvbSAndnVlLWNvZGUtaGlnaGxpZ2h0J1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBWdWVDb2RlSGlnaGxpZ2h0XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgcHJvamVjdDoge3JlcXVpcmVkOiB0cnVlfSxcbiAgICB0YWJJbmRleDoge2RlZmF1bHQ6IDB9LFxuICAgIHByb2plY3RJbmRleDoge3JlcXVpcmVkOiB0cnVlfSxcbiAgICBtb2RhbDoge2RlZmF1bHQ6IGZhbHNlfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGNsZWFuSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9qZWN0Lm9yZ19wbHVzX25hbWUucmVwbGFjZSgvW15BLVphLXowLTldL2csICctJylcbiAgICB9LFxuICAgIGNvbXBpbGVkUmVhZG1lKCkge1xuICAgICAgbGV0IHNyYyA9IHRoaXMucHJvamVjdC5maWxlc1snUkVBRE1FLm1kJ11cbiAgICAgIGlmICghc3JjKSBzcmMgPSAnYCMgTk8gUkVBRE1FYCdcbiAgICAgIHJldHVybiBtYXJrZWQoc3JjKVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9PY3JkUHJvamVjdExpc3RJdGVtLnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///100\n");
+eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked__ = __webpack_require__(240);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_marked___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_marked__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_code_highlight__ = __webpack_require__(241);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    VueCodeHighlight: __WEBPACK_IMPORTED_MODULE_1_vue_code_highlight__[\"a\" /* component */]\n  },\n  props: {\n    project: { required: true },\n    tabIndex: { default: 0 },\n    projectIndex: { required: true },\n    modal: { default: false }\n  },\n  computed: {\n    cleanId: function cleanId() {\n      return this.project.org_plus_name.replace(/[^A-Za-z0-9]/g, '-');\n    },\n    compiledReadme: function compiledReadme() {\n      var src = this.project.files['README.md'];\n      if (!src) src = '`# NO README`';\n      return __WEBPACK_IMPORTED_MODULE_0_marked___default()(src);\n    }\n  },\n  methods: {}\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL09jcmRQcm9qZWN0TGlzdEl0ZW0udnVlP2NjZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0RBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBREEsR0FEQTtBQUlBO0FBQ0EsK0JBREE7QUFFQSw0QkFGQTtBQUdBLG9DQUhBO0FBSUE7QUFKQSxHQUpBO0FBVUE7QUFDQSxXQURBLHFCQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUEsa0JBSkEsNEJBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBLEdBVkE7QUFvQkE7QUFwQkEiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8Yi1jYXJkXG4gICAgOnRpdGxlPVwicHJvamVjdC5vcmdfcGx1c19uYW1lXCJcbiAgICB0YWc9XCJhcnRpY2xlXCJcbiAgICA6Y2xhc3M9XCJgbWItNSBvY3JkLXByb2plY3QtbGlzdC1pdGVtICR7cHJvamVjdC5jb21wbGlhbnRfY2xpID8gJ2NvbXBsaWFudCcgOiAnbm9uLWNvbXBsaWFudCd9YFwiXG4gICAgPlxuICAgIDxiLWNhcmQtdGV4dCB2LWlmPVwiIW1vZGFsXCI+XG4gICAgICA8Yi1idXR0b24gQGNsaWNrPVwiJHJvb3Quc2hvd01vZGFsKCdwcm9qZWN0JywgcHJvamVjdEluZGV4KVwiPkV4cGFuZDwvYi1idXR0b24+XG4gICAgPC9iLWNhcmQtdGV4dD5cbiAgICA8Yi10YWJzIHYtbW9kZWw9XCJ0YWJJbmRleFwiPlxuICAgICAgPGItdGFiIHRpdGxlPVwiUkVBRE1FXCI+XG4gICAgICAgIDxkaXYgdi1odG1sPVwiY29tcGlsZWRSZWFkbWVcIj48L2Rpdj5cbiAgICAgIDwvYi10YWI+XG4gICAgICA8Yi10YWIgdGl0bGU9XCJEb2NrZXJmaWxlXCI+XG4gICAgICAgIDx2dWUtY29kZS1oaWdobGlnaHQ+e3sgcHJvamVjdC5maWxlcy5Eb2NrZXJmaWxlIHx8ICcjIE5PIERPQ0tFUkZJTEUnIH19PC92dWUtY29kZS1oaWdobGlnaHQ+XG4gICAgICA8L2ItdGFiPlxuICAgICAgPGItdGFiIHRpdGxlPVwiR2l0XCI+XG4gICAgICAgIDxiLWNhcmQtdGV4dD5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxhIHYtaWY9XCJwcm9qZWN0LnB5dGhvblwiIGhyZWY9XCJgaHR0cHM6Ly9weXBpLm9yZy9wcm9qZWN0LyR7IHByb2plY3QucHl0aG9uLm5hbWUgfS9gXCI+ICAgICAgICAgICAgIDxpbWcgOnNyYz1cImBodHRwczovL2ltZy5zaGllbGRzLmlvL3B5cGkvdi8keyBwcm9qZWN0LnB5dGhvbi5uYW1lIH0uc3ZnYFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDwvYT5cbiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImBodHRwczovL3RyYXZpcy1jaS5vcmcvJHsgcHJvamVjdC5vcmdfcGx1c19uYW1lIH1gXCI+ICAgICAgICAgICAgICAgPGltZyA6c3JjPVwiYGh0dHBzOi8vdHJhdmlzLWNpLm9yZy8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfS5zdmc/YnJhbmNoPW1hc3RlcmBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gPC9hPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImBodHRwczovL2NpcmNsZWNpLmNvbS9naC8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfWBcIj4gICAgICAgICAgICAgPGltZyA6c3JjPVwiYGh0dHBzOi8vY2lyY2xlY2kuY29tL2doLyR7IHByb2plY3Qub3JnX3BsdXNfbmFtZSB9LnN2Zz9zdHlsZT1zdmdgXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gPC9hPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImBodHRwczovL2h1Yi5kb2NrZXIuY29tL3Ivb2NyZC9jb3JlL3RhZ3MvYFwiPiAgICAgICAgICAgICAgICAgICAgIDxpbWcgOnNyYz1cImBodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci9hdXRvbWF0ZWQvb2NyZC9jb3JlLnN2Z2BcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA8L2E+IC0tPlxuICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiYGh0dHBzOi8vY29kZWNvdi5pby9naC8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfWBcIj4gICAgICAgICAgICAgICA8aW1nIDpzcmM9XCJgaHR0cHM6Ly9jb2RlY292LmlvL2doLyR7IHByb2plY3Qub3JnX3BsdXNfbmFtZSB9L2JyYW5jaC9tYXN0ZXIvZ3JhcGgvYmFkZ2Uuc3ZnYFwiICAgICAgICAgICAgICAgICAvPiA8L2E+IC0tPlxuICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiYGh0dHBzOi8vc2NydXRpbml6ZXItY2kuY29tL2cvJHsgcHJvamVjdC5vcmdfcGx1c19uYW1lIH1gXCI+ICAgICAgICA8aW1nIDpzcmM9XCJgaHR0cHM6Ly9zY3J1dGluaXplci1jaS5jb20vZy8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfS9iYWRnZXMvcXVhbGl0eS1zY29yZS5wbmc/Yj1tYXN0ZXJgXCIgICAgICAvPiA8L2E+IC0tPlxuICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiYGh0dHBzOi8vbGd0bS5jb20vcHJvamVjdHMvZy8keyBwcm9qZWN0Lm9yZ19wbHVzX25hbWUgfS9hbGVydHMvYFwiPiA8aW1nIDpzcmM9XCJgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9sZ3RtL2FsZXJ0cy9nLyR7IHByb2plY3Qub3JnX3BsdXNfbmFtZSB9LnN2Zz9sb2dvPWxndG0mYW1wO2xvZ29XaWR0aD0xOGBcIiAvPiA8L2E+IC0tPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Yi10YWJsZSB2LWlmPVwicHJvamVjdC5naXRcIiA6aXRlbXM9XCJbcHJvamVjdC5naXRdXCI+PC9iLXRhYmxlPlxuICAgICAgICA8L2ItY2FyZC10ZXh0PlxuICAgICAgPC9iLXRhYj5cblxuICAgICAgPGItdGFiIHRpdGxlPVwib2NyZC10b29sIHZhbGlkYXRpb25cIj5cbiAgICAgICAgPGItY2FyZC10ZXh0PlxuICAgICAgICAgIDx2dWUtY29kZS1oaWdobGlnaHQ+e3sgcHJvamVjdC5vY3JkX3Rvb2xfdmFsaWRhdGUgfHwgJyMgTk8gdmFsaWRhdGlvbiBkYXRhJyB9fTwvdnVlLWNvZGUtaGlnaGxpZ2h0PlxuICAgICAgICA8L2ItY2FyZC10ZXh0PlxuICAgICAgPC9iLXRhYj5cblxuICAgICAgPGItdGFiIHRpdGxlPVwiUHl0aG9uXCI+XG4gICAgICAgIDxiLWNhcmQtdGV4dD5cbiAgICAgICAgICA8Yi10YWJsZSB2LWlmPVwicHJvamVjdC5weXRob25cIiA6aXRlbXM9XCJbcHJvamVjdC5weXRob25dXCI+PC9iLXRhYmxlPlxuICAgICAgICA8L2ItY2FyZC10ZXh0PlxuICAgICAgPC9iLXRhYj5cblxuICAgIDwvYi10YWJzPlxuICA8L2ItY2FyZD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgbWFya2VkIGZyb20gJ21hcmtlZCdcbmltcG9ydCB7IGNvbXBvbmVudCBhcyBWdWVDb2RlSGlnaGxpZ2h0IH0gZnJvbSAndnVlLWNvZGUtaGlnaGxpZ2h0J1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBWdWVDb2RlSGlnaGxpZ2h0XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgcHJvamVjdDoge3JlcXVpcmVkOiB0cnVlfSxcbiAgICB0YWJJbmRleDoge2RlZmF1bHQ6IDB9LFxuICAgIHByb2plY3RJbmRleDoge3JlcXVpcmVkOiB0cnVlfSxcbiAgICBtb2RhbDoge2RlZmF1bHQ6IGZhbHNlfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGNsZWFuSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9qZWN0Lm9yZ19wbHVzX25hbWUucmVwbGFjZSgvW15BLVphLXowLTldL2csICctJylcbiAgICB9LFxuICAgIGNvbXBpbGVkUmVhZG1lKCkge1xuICAgICAgbGV0IHNyYyA9IHRoaXMucHJvamVjdC5maWxlc1snUkVBRE1FLm1kJ11cbiAgICAgIGlmICghc3JjKSBzcmMgPSAnYCMgTk8gUkVBRE1FYCdcbiAgICAgIHJldHVybiBtYXJrZWQoc3JjKVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9PY3JkUHJvamVjdExpc3RJdGVtLnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///100\n");
 
 /***/ }),
 /* 101 */
@@ -1071,7 +1071,7 @@ eval("/* unused harmony export props */\n/* harmony export (binding) */ __webpac
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_html__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__normalize_slot__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_form_checkbox_form_checkbox__ = __webpack_require__(70);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_form_radio_form_radio__ = __webpack_require__(71);\n\n\n\n // @vue/component\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  mixins: [__WEBPACK_IMPORTED_MODULE_1__normalize_slot__[\"a\" /* default */]],\n  model: {\n    prop: 'checked',\n    event: 'input'\n  },\n  props: {\n    validated: {\n      type: Boolean,\n      default: false\n    },\n    ariaInvalid: {\n      type: [Boolean, String],\n      default: false\n    },\n    stacked: {\n      type: Boolean,\n      default: false\n    },\n    plain: {\n      type: Boolean,\n      default: false\n    },\n    buttons: {\n      // Render as button style\n      type: Boolean,\n      default: false\n    },\n    buttonVariant: {\n      // Only applicable when rendered with button style\n      type: String,\n      default: 'secondary'\n    }\n  },\n  computed: {\n    inline: function inline() {\n      return !this.stacked;\n    },\n    groupName: function groupName() {\n      // Checks/Radios tied to the same model must have the same name,\n      // especially for ARIA accessibility.\n      return this.name || this.safeId();\n    },\n    groupClasses: function groupClasses() {\n      if (this.buttons) {\n        return ['btn-group-toggle', this.inline ? 'btn-group' : 'btn-group-vertical', this.size ? \"btn-group-\".concat(this.size) : '', this.validated ? \"was-validated\" : ''];\n      }\n\n      return [this.validated ? \"was-validated\" : ''];\n    },\n    computedAriaInvalid: function computedAriaInvalid() {\n      var ariaInvalid = this.ariaInvalid;\n\n      if (ariaInvalid === true || ariaInvalid === 'true' || ariaInvalid === '') {\n        return 'true';\n      }\n\n      return this.computedState === false ? 'true' : null;\n    }\n  },\n  watch: {\n    checked: function checked(newVal, oldVal) {\n      this.localChecked = newVal;\n    },\n    localChecked: function localChecked(newVal, oldVal) {\n      this.$emit('input', newVal);\n    }\n  },\n  render: function render(h) {\n    var _this = this;\n\n    var inputs = this.formOptions.map(function (option, idx) {\n      var uid = \"_BV_option_\".concat(idx, \"_\");\n      return h(_this.isRadioGroup ? __WEBPACK_IMPORTED_MODULE_3__components_form_radio_form_radio__[\"a\" /* BFormRadio */] : __WEBPACK_IMPORTED_MODULE_2__components_form_checkbox_form_checkbox__[\"a\" /* BFormCheckbox */], {\n        key: uid,\n        props: {\n          id: _this.safeId(uid),\n          value: option.value,\n          // Individual radios or checks can be disabled in a group\n          disabled: option.disabled || false // We don't need to include these, since the input's will know they are inside here\n          // name: this.groupName,\n          // form: this.form || null,\n          // required: Boolean(this.name && this.required)\n\n        }\n      }, [h('span', {\n        domProps: Object(__WEBPACK_IMPORTED_MODULE_0__utils_html__[\"a\" /* htmlOrText */])(option.html, option.text)\n      })]);\n    });\n    return h('div', {\n      class: this.groupClasses,\n      attrs: {\n        id: this.safeId(),\n        role: this.isRadioGroup ? 'radiogroup' : 'group',\n        // Tabindex to allow group to be focused if needed\n        tabindex: '-1',\n        'aria-required': this.required ? 'true' : null,\n        'aria-invalid': this.computedAriaInvalid\n      }\n    }, [this.normalizeSlot('first'), inputs, this.normalizeSlot('default')]);\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwLXZ1ZS9lc20vbWl4aW5zL2Zvcm0tcmFkaW8tY2hlY2stZ3JvdXAuanM/ZTYzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEyQztBQUNPO0FBQ3dCO0FBQ1Q7O0FBRWxEO0FBQ2YsV0FBVyxnRUFBa0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0MscUZBQVUsR0FBRyw4RkFBYTtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1Asa0JBQWtCLHVFQUFVO0FBQzVCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh0bWxPclRleHQgfSBmcm9tICcuLi91dGlscy9odG1sJztcbmltcG9ydCBub3JtYWxpemVTbG90TWl4aW4gZnJvbSAnLi9ub3JtYWxpemUtc2xvdCc7XG5pbXBvcnQgeyBCRm9ybUNoZWNrYm94IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtLWNoZWNrYm94L2Zvcm0tY2hlY2tib3gnO1xuaW1wb3J0IHsgQkZvcm1SYWRpbyB9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS1yYWRpby9mb3JtLXJhZGlvJzsgLy8gQHZ1ZS9jb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtub3JtYWxpemVTbG90TWl4aW5dLFxuICBtb2RlbDoge1xuICAgIHByb3A6ICdjaGVja2VkJyxcbiAgICBldmVudDogJ2lucHV0J1xuICB9LFxuICBwcm9wczoge1xuICAgIHZhbGlkYXRlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBhcmlhSW52YWxpZDoge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc3RhY2tlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBwbGFpbjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBidXR0b25zOiB7XG4gICAgICAvLyBSZW5kZXIgYXMgYnV0dG9uIHN0eWxlXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGJ1dHRvblZhcmlhbnQ6IHtcbiAgICAgIC8vIE9ubHkgYXBwbGljYWJsZSB3aGVuIHJlbmRlcmVkIHdpdGggYnV0dG9uIHN0eWxlXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnc2Vjb25kYXJ5J1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbmxpbmU6IGZ1bmN0aW9uIGlubGluZSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5zdGFja2VkO1xuICAgIH0sXG4gICAgZ3JvdXBOYW1lOiBmdW5jdGlvbiBncm91cE5hbWUoKSB7XG4gICAgICAvLyBDaGVja3MvUmFkaW9zIHRpZWQgdG8gdGhlIHNhbWUgbW9kZWwgbXVzdCBoYXZlIHRoZSBzYW1lIG5hbWUsXG4gICAgICAvLyBlc3BlY2lhbGx5IGZvciBBUklBIGFjY2Vzc2liaWxpdHkuXG4gICAgICByZXR1cm4gdGhpcy5uYW1lIHx8IHRoaXMuc2FmZUlkKCk7XG4gICAgfSxcbiAgICBncm91cENsYXNzZXM6IGZ1bmN0aW9uIGdyb3VwQ2xhc3NlcygpIHtcbiAgICAgIGlmICh0aGlzLmJ1dHRvbnMpIHtcbiAgICAgICAgcmV0dXJuIFsnYnRuLWdyb3VwLXRvZ2dsZScsIHRoaXMuaW5saW5lID8gJ2J0bi1ncm91cCcgOiAnYnRuLWdyb3VwLXZlcnRpY2FsJywgdGhpcy5zaXplID8gXCJidG4tZ3JvdXAtXCIuY29uY2F0KHRoaXMuc2l6ZSkgOiAnJywgdGhpcy52YWxpZGF0ZWQgPyBcIndhcy12YWxpZGF0ZWRcIiA6ICcnXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt0aGlzLnZhbGlkYXRlZCA/IFwid2FzLXZhbGlkYXRlZFwiIDogJyddO1xuICAgIH0sXG4gICAgY29tcHV0ZWRBcmlhSW52YWxpZDogZnVuY3Rpb24gY29tcHV0ZWRBcmlhSW52YWxpZCgpIHtcbiAgICAgIHZhciBhcmlhSW52YWxpZCA9IHRoaXMuYXJpYUludmFsaWQ7XG5cbiAgICAgIGlmIChhcmlhSW52YWxpZCA9PT0gdHJ1ZSB8fCBhcmlhSW52YWxpZCA9PT0gJ3RydWUnIHx8IGFyaWFJbnZhbGlkID09PSAnJykge1xuICAgICAgICByZXR1cm4gJ3RydWUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlZFN0YXRlID09PSBmYWxzZSA/ICd0cnVlJyA6IG51bGw7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIGNoZWNrZWQ6IGZ1bmN0aW9uIGNoZWNrZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIHRoaXMubG9jYWxDaGVja2VkID0gbmV3VmFsO1xuICAgIH0sXG4gICAgbG9jYWxDaGVja2VkOiBmdW5jdGlvbiBsb2NhbENoZWNrZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuZm9ybU9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24sIGlkeCkge1xuICAgICAgdmFyIHVpZCA9IFwiX0JWX29wdGlvbl9cIi5jb25jYXQoaWR4LCBcIl9cIik7XG4gICAgICByZXR1cm4gaChfdGhpcy5pc1JhZGlvR3JvdXAgPyBCRm9ybVJhZGlvIDogQkZvcm1DaGVja2JveCwge1xuICAgICAgICBrZXk6IHVpZCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBpZDogX3RoaXMuc2FmZUlkKHVpZCksXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAvLyBJbmRpdmlkdWFsIHJhZGlvcyBvciBjaGVja3MgY2FuIGJlIGRpc2FibGVkIGluIGEgZ3JvdXBcbiAgICAgICAgICBkaXNhYmxlZDogb3B0aW9uLmRpc2FibGVkIHx8IGZhbHNlIC8vIFdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVzZSwgc2luY2UgdGhlIGlucHV0J3Mgd2lsbCBrbm93IHRoZXkgYXJlIGluc2lkZSBoZXJlXG4gICAgICAgICAgLy8gbmFtZTogdGhpcy5ncm91cE5hbWUsXG4gICAgICAgICAgLy8gZm9ybTogdGhpcy5mb3JtIHx8IG51bGwsXG4gICAgICAgICAgLy8gcmVxdWlyZWQ6IEJvb2xlYW4odGhpcy5uYW1lICYmIHRoaXMucmVxdWlyZWQpXG5cbiAgICAgICAgfVxuICAgICAgfSwgW2goJ3NwYW4nLCB7XG4gICAgICAgIGRvbVByb3BzOiBodG1sT3JUZXh0KG9wdGlvbi5odG1sLCBvcHRpb24udGV4dClcbiAgICAgIH0pXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGgoJ2RpdicsIHtcbiAgICAgIGNsYXNzOiB0aGlzLmdyb3VwQ2xhc3NlcyxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGlkOiB0aGlzLnNhZmVJZCgpLFxuICAgICAgICByb2xlOiB0aGlzLmlzUmFkaW9Hcm91cCA/ICdyYWRpb2dyb3VwJyA6ICdncm91cCcsXG4gICAgICAgIC8vIFRhYmluZGV4IHRvIGFsbG93IGdyb3VwIHRvIGJlIGZvY3VzZWQgaWYgbmVlZGVkXG4gICAgICAgIHRhYmluZGV4OiAnLTEnLFxuICAgICAgICAnYXJpYS1yZXF1aXJlZCc6IHRoaXMucmVxdWlyZWQgPyAndHJ1ZScgOiBudWxsLFxuICAgICAgICAnYXJpYS1pbnZhbGlkJzogdGhpcy5jb21wdXRlZEFyaWFJbnZhbGlkXG4gICAgICB9XG4gICAgfSwgW3RoaXMubm9ybWFsaXplU2xvdCgnZmlyc3QnKSwgaW5wdXRzLCB0aGlzLm5vcm1hbGl6ZVNsb3QoJ2RlZmF1bHQnKV0pO1xuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC12dWUvZXNtL21peGlucy9mb3JtLXJhZGlvLWNoZWNrLWdyb3VwLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n");
+eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_html__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__normalize_slot__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_form_checkbox_form_checkbox__ = __webpack_require__(70);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_form_radio_form_radio__ = __webpack_require__(71);\n\n\n\n // @vue/component\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  mixins: [__WEBPACK_IMPORTED_MODULE_1__normalize_slot__[\"a\" /* default */]],\n  model: {\n    prop: 'checked',\n    event: 'input'\n  },\n  props: {\n    validated: {\n      type: Boolean,\n      default: false\n    },\n    ariaInvalid: {\n      type: [Boolean, String],\n      default: false\n    },\n    stacked: {\n      type: Boolean,\n      default: false\n    },\n    plain: {\n      type: Boolean,\n      default: false\n    },\n    buttons: {\n      // Render as button style\n      type: Boolean,\n      default: false\n    },\n    buttonVariant: {\n      // Only applicable when rendered with button style\n      type: String,\n      default: 'secondary'\n    }\n  },\n  computed: {\n    inline: function inline() {\n      return !this.stacked;\n    },\n    groupName: function groupName() {\n      // Checks/Radios tied to the same model must have the same name,\n      // especially for ARIA accessibility.\n      return this.name || this.safeId();\n    },\n    groupClasses: function groupClasses() {\n      if (this.buttons) {\n        return ['btn-group-toggle', this.inline ? 'btn-group' : 'btn-group-vertical', this.size ? \"btn-group-\".concat(this.size) : '', this.validated ? \"was-validated\" : ''];\n      }\n\n      return [this.validated ? \"was-validated\" : ''];\n    },\n    computedAriaInvalid: function computedAriaInvalid() {\n      var ariaInvalid = this.ariaInvalid;\n\n      if (ariaInvalid === true || ariaInvalid === 'true' || ariaInvalid === '') {\n        return 'true';\n      }\n\n      return this.computedState === false ? 'true' : null;\n    }\n  },\n  watch: {\n    checked: function checked(newVal, oldVal) {\n      this.localChecked = newVal;\n    },\n    localChecked: function localChecked(newVal, oldVal) {\n      this.$emit('input', newVal);\n    }\n  },\n  render: function render(h) {\n    var _this = this;\n\n    var inputs = this.formOptions.map(function (option, idx) {\n      var uid = \"_BV_option_\".concat(idx, \"_\");\n      return h(_this.isRadioGroup ? __WEBPACK_IMPORTED_MODULE_3__components_form_radio_form_radio__[\"a\" /* BFormRadio */] : __WEBPACK_IMPORTED_MODULE_2__components_form_checkbox_form_checkbox__[\"a\" /* BFormCheckbox */], {\n        key: uid,\n        props: {\n          id: _this.safeId(uid),\n          value: option.value,\n          // Individual radios or checks can be disabled in a group\n          disabled: option.disabled || false // We don't need to include these, since the input's will know they are inside here\n          // name: this.groupName,\n          // form: this.form || null,\n          // required: Boolean(this.name && this.required)\n\n        }\n      }, [h('span', {\n        domProps: Object(__WEBPACK_IMPORTED_MODULE_0__utils_html__[\"a\" /* htmlOrText */])(option.html, option.text)\n      })]);\n    });\n    return h('div', {\n      class: this.groupClasses,\n      attrs: {\n        id: this.safeId(),\n        role: this.isRadioGroup ? 'radiogroup' : 'group',\n        // Tabindex to allow group to be focused if needed\n        tabindex: '-1',\n        'aria-required': this.required ? 'true' : null,\n        'aria-invalid': this.computedAriaInvalid\n      }\n    }, [this.normalizeSlot('first'), inputs, this.normalizeSlot('default')]);\n  }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwLXZ1ZS9lc20vbWl4aW5zL2Zvcm0tcmFkaW8tY2hlY2stZ3JvdXAuanM/ZTYzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEyQztBQUNPO0FBQ3dCO0FBQ1Q7O0FBRWpFLHlEQUFlO0FBQ2YsV0FBVyxnRUFBa0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0MscUZBQVUsR0FBRyw4RkFBYTtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1Asa0JBQWtCLHVFQUFVO0FBQzVCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh0bWxPclRleHQgfSBmcm9tICcuLi91dGlscy9odG1sJztcbmltcG9ydCBub3JtYWxpemVTbG90TWl4aW4gZnJvbSAnLi9ub3JtYWxpemUtc2xvdCc7XG5pbXBvcnQgeyBCRm9ybUNoZWNrYm94IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtLWNoZWNrYm94L2Zvcm0tY2hlY2tib3gnO1xuaW1wb3J0IHsgQkZvcm1SYWRpbyB9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS1yYWRpby9mb3JtLXJhZGlvJzsgLy8gQHZ1ZS9jb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtub3JtYWxpemVTbG90TWl4aW5dLFxuICBtb2RlbDoge1xuICAgIHByb3A6ICdjaGVja2VkJyxcbiAgICBldmVudDogJ2lucHV0J1xuICB9LFxuICBwcm9wczoge1xuICAgIHZhbGlkYXRlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBhcmlhSW52YWxpZDoge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc3RhY2tlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBwbGFpbjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBidXR0b25zOiB7XG4gICAgICAvLyBSZW5kZXIgYXMgYnV0dG9uIHN0eWxlXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGJ1dHRvblZhcmlhbnQ6IHtcbiAgICAgIC8vIE9ubHkgYXBwbGljYWJsZSB3aGVuIHJlbmRlcmVkIHdpdGggYnV0dG9uIHN0eWxlXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnc2Vjb25kYXJ5J1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbmxpbmU6IGZ1bmN0aW9uIGlubGluZSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5zdGFja2VkO1xuICAgIH0sXG4gICAgZ3JvdXBOYW1lOiBmdW5jdGlvbiBncm91cE5hbWUoKSB7XG4gICAgICAvLyBDaGVja3MvUmFkaW9zIHRpZWQgdG8gdGhlIHNhbWUgbW9kZWwgbXVzdCBoYXZlIHRoZSBzYW1lIG5hbWUsXG4gICAgICAvLyBlc3BlY2lhbGx5IGZvciBBUklBIGFjY2Vzc2liaWxpdHkuXG4gICAgICByZXR1cm4gdGhpcy5uYW1lIHx8IHRoaXMuc2FmZUlkKCk7XG4gICAgfSxcbiAgICBncm91cENsYXNzZXM6IGZ1bmN0aW9uIGdyb3VwQ2xhc3NlcygpIHtcbiAgICAgIGlmICh0aGlzLmJ1dHRvbnMpIHtcbiAgICAgICAgcmV0dXJuIFsnYnRuLWdyb3VwLXRvZ2dsZScsIHRoaXMuaW5saW5lID8gJ2J0bi1ncm91cCcgOiAnYnRuLWdyb3VwLXZlcnRpY2FsJywgdGhpcy5zaXplID8gXCJidG4tZ3JvdXAtXCIuY29uY2F0KHRoaXMuc2l6ZSkgOiAnJywgdGhpcy52YWxpZGF0ZWQgPyBcIndhcy12YWxpZGF0ZWRcIiA6ICcnXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt0aGlzLnZhbGlkYXRlZCA/IFwid2FzLXZhbGlkYXRlZFwiIDogJyddO1xuICAgIH0sXG4gICAgY29tcHV0ZWRBcmlhSW52YWxpZDogZnVuY3Rpb24gY29tcHV0ZWRBcmlhSW52YWxpZCgpIHtcbiAgICAgIHZhciBhcmlhSW52YWxpZCA9IHRoaXMuYXJpYUludmFsaWQ7XG5cbiAgICAgIGlmIChhcmlhSW52YWxpZCA9PT0gdHJ1ZSB8fCBhcmlhSW52YWxpZCA9PT0gJ3RydWUnIHx8IGFyaWFJbnZhbGlkID09PSAnJykge1xuICAgICAgICByZXR1cm4gJ3RydWUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlZFN0YXRlID09PSBmYWxzZSA/ICd0cnVlJyA6IG51bGw7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIGNoZWNrZWQ6IGZ1bmN0aW9uIGNoZWNrZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIHRoaXMubG9jYWxDaGVja2VkID0gbmV3VmFsO1xuICAgIH0sXG4gICAgbG9jYWxDaGVja2VkOiBmdW5jdGlvbiBsb2NhbENoZWNrZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuZm9ybU9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24sIGlkeCkge1xuICAgICAgdmFyIHVpZCA9IFwiX0JWX29wdGlvbl9cIi5jb25jYXQoaWR4LCBcIl9cIik7XG4gICAgICByZXR1cm4gaChfdGhpcy5pc1JhZGlvR3JvdXAgPyBCRm9ybVJhZGlvIDogQkZvcm1DaGVja2JveCwge1xuICAgICAgICBrZXk6IHVpZCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBpZDogX3RoaXMuc2FmZUlkKHVpZCksXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAvLyBJbmRpdmlkdWFsIHJhZGlvcyBvciBjaGVja3MgY2FuIGJlIGRpc2FibGVkIGluIGEgZ3JvdXBcbiAgICAgICAgICBkaXNhYmxlZDogb3B0aW9uLmRpc2FibGVkIHx8IGZhbHNlIC8vIFdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVzZSwgc2luY2UgdGhlIGlucHV0J3Mgd2lsbCBrbm93IHRoZXkgYXJlIGluc2lkZSBoZXJlXG4gICAgICAgICAgLy8gbmFtZTogdGhpcy5ncm91cE5hbWUsXG4gICAgICAgICAgLy8gZm9ybTogdGhpcy5mb3JtIHx8IG51bGwsXG4gICAgICAgICAgLy8gcmVxdWlyZWQ6IEJvb2xlYW4odGhpcy5uYW1lICYmIHRoaXMucmVxdWlyZWQpXG5cbiAgICAgICAgfVxuICAgICAgfSwgW2goJ3NwYW4nLCB7XG4gICAgICAgIGRvbVByb3BzOiBodG1sT3JUZXh0KG9wdGlvbi5odG1sLCBvcHRpb24udGV4dClcbiAgICAgIH0pXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGgoJ2RpdicsIHtcbiAgICAgIGNsYXNzOiB0aGlzLmdyb3VwQ2xhc3NlcyxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGlkOiB0aGlzLnNhZmVJZCgpLFxuICAgICAgICByb2xlOiB0aGlzLmlzUmFkaW9Hcm91cCA/ICdyYWRpb2dyb3VwJyA6ICdncm91cCcsXG4gICAgICAgIC8vIFRhYmluZGV4IHRvIGFsbG93IGdyb3VwIHRvIGJlIGZvY3VzZWQgaWYgbmVlZGVkXG4gICAgICAgIHRhYmluZGV4OiAnLTEnLFxuICAgICAgICAnYXJpYS1yZXF1aXJlZCc6IHRoaXMucmVxdWlyZWQgPyAndHJ1ZScgOiBudWxsLFxuICAgICAgICAnYXJpYS1pbnZhbGlkJzogdGhpcy5jb21wdXRlZEFyaWFJbnZhbGlkXG4gICAgICB9XG4gICAgfSwgW3RoaXMubm9ybWFsaXplU2xvdCgnZmlyc3QnKSwgaW5wdXRzLCB0aGlzLm5vcm1hbGl6ZVNsb3QoJ2RlZmF1bHQnKV0pO1xuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC12dWUvZXNtL21peGlucy9mb3JtLXJhZGlvLWNoZWNrLWdyb3VwLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n");
 
 /***/ }),
 /* 145 */
@@ -1669,7 +1669,7 @@ eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// lo
 /* 230 */
 /***/ (function(module, exports, __webpack_require__) {
 
-eval("exports = module.exports = __webpack_require__(22)(true);\n// imports\n\n\n// module\nexports.push([module.i, \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\", \"\", {\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"file\":\"App.vue\",\"sourceRoot\":\"\"}]);\n\n// exports\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8wMzI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQixtQkFBTyxDQUFDLEVBQTRDO0FBQy9FOzs7QUFHQTtBQUNBLGNBQWMsUUFBUywySUFBMkksbUZBQW1GOztBQUVyUCIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKHRydWUpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJcIixcImZpbGVcIjpcIkFwcC52dWVcIixcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyP3NvdXJjZU1hcCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zdHlsZS1jb21waWxlcj97XCJ2dWVcIjp0cnVlLFwiaWRcIjpcImRhdGEtdi03YmE1YmQ5MFwiLFwic2NvcGVkXCI6ZmFsc2UsXCJoYXNJbmxpbmVDb25maWdcIjpmYWxzZX0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zdHlsZXMmaW5kZXg9MCEuL3NyYy9BcHAudnVlXG4vLyBtb2R1bGUgaWQgPSAyMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///230\n");
+eval("exports = module.exports = __webpack_require__(22)(true);\n// imports\n\n\n// module\nexports.push([module.i, \"\\n.non-compliant {\\n  background-color: #fcc;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/data/monorepo/ocrd-kwalitee/webapp/src/src/App.vue\"],\"names\":[],\"mappings\":\";AAiEA;EACA,uBAAA;CACA\",\"file\":\"App.vue\",\"sourcesContent\":[\"<template>\\n  <b-container fluid>\\n    <b-row>\\n      <button @click=\\\"$root.fetchprojectData\\\">Fetch!</button>\\n    </b-row>\\n    <b-tabs>\\n      <b-tab title=\\\"Processors\\\">\\n        <ocrd-processor-list\\n          :processors=\\\"processors\\\"\\n          ></ocrd-processor-list>\\n      </b-tab>\\n      <b-tab active title=\\\"Projects\\\">\\n        <ocrd-project-list\\n          :projects=\\\"projects\\\"\\n          ></ocrd-project-list>\\n      </b-tab>\\n    </b-tabs>\\n    <!-- <b-modal id=\\\"processor-modal\\\">\\n    </b-modal> -->\\n  </b-container>\\n</template>\\n\\n<script>\\nimport OcrdProcessorList from './OcrdProcessorList.vue'\\nimport OcrdProjectList from './OcrdProjectList.vue'\\nimport OcrdProcessorListItem from './OcrdProcessorListItem.vue'\\nimport OcrdProjectListItem from './OcrdProjectListItem.vue'\\nexport default {\\n  components: {\\n    OcrdProcessorList,\\n    OcrdProjectList,\\n    OcrdProcessorListItem,\\n    OcrdProjectListItem\\n  },\\n  data() {\\n    return {\\n    }\\n  },\\n  computed: {\\n    projects() {\\n      return this.$root.projects\\n    },\\n    processors() {\\n      return this.projects.reduce((all, project) => {\\n        let tool_idx = 0\\n        if (project.ocrd_tool)\\n          all.push(...Object.values(project.ocrd_tool.tools).map(tool => {\\n            tool.idx = tool_idx++\\n            tool.part_of = project.org_plus_name\\n            tool.official = project.official\\n            tool.compliant_cli = project.compliant_cli\\n            return tool\\n          }))\\n        return all\\n      }, [])\\n    },\\n  },\\n  mounted() {\\n      this.$root.fetchprojectData()\\n  },\\n  methods: {}\\n}\\n</script>\\n\\n<style>\\n.non-compliant {\\n  background-color: #fcc;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8wMzI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQixtQkFBTyxDQUFDLEVBQTRDO0FBQy9FOzs7QUFHQTtBQUNBLGNBQWMsUUFBUyxxQkFBcUIsMkJBQTJCLEdBQUcsVUFBVSxzR0FBc0csTUFBTSxXQUFXLCsxQkFBKzFCLGlCQUFpQix3R0FBd0csYUFBYSxjQUFjLE9BQU8sS0FBSyxnQkFBZ0Isa0JBQWtCLHlDQUF5QyxxQkFBcUIsdURBQXVELHNJQUFzSSxpT0FBaU8sK0JBQStCLFlBQVksTUFBTSxnQkFBZ0IsMENBQTBDLGdCQUFnQixHQUFHLHdDQUF3QywyQkFBMkIsR0FBRywrQkFBK0I7O0FBRTM2RCIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKHRydWUpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuLm5vbi1jb21wbGlhbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjYztcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi9kYXRhL21vbm9yZXBvL29jcmQta3dhbGl0ZWUvd2ViYXBwL3NyYy9zcmMvQXBwLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiO0FBaUVBO0VBQ0EsdUJBQUE7Q0FDQVwiLFwiZmlsZVwiOlwiQXBwLnZ1ZVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCI8dGVtcGxhdGU+XFxuICA8Yi1jb250YWluZXIgZmx1aWQ+XFxuICAgIDxiLXJvdz5cXG4gICAgICA8YnV0dG9uIEBjbGljaz1cXFwiJHJvb3QuZmV0Y2hwcm9qZWN0RGF0YVxcXCI+RmV0Y2ghPC9idXR0b24+XFxuICAgIDwvYi1yb3c+XFxuICAgIDxiLXRhYnM+XFxuICAgICAgPGItdGFiIHRpdGxlPVxcXCJQcm9jZXNzb3JzXFxcIj5cXG4gICAgICAgIDxvY3JkLXByb2Nlc3Nvci1saXN0XFxuICAgICAgICAgIDpwcm9jZXNzb3JzPVxcXCJwcm9jZXNzb3JzXFxcIlxcbiAgICAgICAgICA+PC9vY3JkLXByb2Nlc3Nvci1saXN0PlxcbiAgICAgIDwvYi10YWI+XFxuICAgICAgPGItdGFiIGFjdGl2ZSB0aXRsZT1cXFwiUHJvamVjdHNcXFwiPlxcbiAgICAgICAgPG9jcmQtcHJvamVjdC1saXN0XFxuICAgICAgICAgIDpwcm9qZWN0cz1cXFwicHJvamVjdHNcXFwiXFxuICAgICAgICAgID48L29jcmQtcHJvamVjdC1saXN0PlxcbiAgICAgIDwvYi10YWI+XFxuICAgIDwvYi10YWJzPlxcbiAgICA8IS0tIDxiLW1vZGFsIGlkPVxcXCJwcm9jZXNzb3ItbW9kYWxcXFwiPlxcbiAgICA8L2ItbW9kYWw+IC0tPlxcbiAgPC9iLWNvbnRhaW5lcj5cXG48L3RlbXBsYXRlPlxcblxcbjxzY3JpcHQ+XFxuaW1wb3J0IE9jcmRQcm9jZXNzb3JMaXN0IGZyb20gJy4vT2NyZFByb2Nlc3Nvckxpc3QudnVlJ1xcbmltcG9ydCBPY3JkUHJvamVjdExpc3QgZnJvbSAnLi9PY3JkUHJvamVjdExpc3QudnVlJ1xcbmltcG9ydCBPY3JkUHJvY2Vzc29yTGlzdEl0ZW0gZnJvbSAnLi9PY3JkUHJvY2Vzc29yTGlzdEl0ZW0udnVlJ1xcbmltcG9ydCBPY3JkUHJvamVjdExpc3RJdGVtIGZyb20gJy4vT2NyZFByb2plY3RMaXN0SXRlbS52dWUnXFxuZXhwb3J0IGRlZmF1bHQge1xcbiAgY29tcG9uZW50czoge1xcbiAgICBPY3JkUHJvY2Vzc29yTGlzdCxcXG4gICAgT2NyZFByb2plY3RMaXN0LFxcbiAgICBPY3JkUHJvY2Vzc29yTGlzdEl0ZW0sXFxuICAgIE9jcmRQcm9qZWN0TGlzdEl0ZW1cXG4gIH0sXFxuICBkYXRhKCkge1xcbiAgICByZXR1cm4ge1xcbiAgICB9XFxuICB9LFxcbiAgY29tcHV0ZWQ6IHtcXG4gICAgcHJvamVjdHMoKSB7XFxuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QucHJvamVjdHNcXG4gICAgfSxcXG4gICAgcHJvY2Vzc29ycygpIHtcXG4gICAgICByZXR1cm4gdGhpcy5wcm9qZWN0cy5yZWR1Y2UoKGFsbCwgcHJvamVjdCkgPT4ge1xcbiAgICAgICAgbGV0IHRvb2xfaWR4ID0gMFxcbiAgICAgICAgaWYgKHByb2plY3Qub2NyZF90b29sKVxcbiAgICAgICAgICBhbGwucHVzaCguLi5PYmplY3QudmFsdWVzKHByb2plY3Qub2NyZF90b29sLnRvb2xzKS5tYXAodG9vbCA9PiB7XFxuICAgICAgICAgICAgdG9vbC5pZHggPSB0b29sX2lkeCsrXFxuICAgICAgICAgICAgdG9vbC5wYXJ0X29mID0gcHJvamVjdC5vcmdfcGx1c19uYW1lXFxuICAgICAgICAgICAgdG9vbC5vZmZpY2lhbCA9IHByb2plY3Qub2ZmaWNpYWxcXG4gICAgICAgICAgICB0b29sLmNvbXBsaWFudF9jbGkgPSBwcm9qZWN0LmNvbXBsaWFudF9jbGlcXG4gICAgICAgICAgICByZXR1cm4gdG9vbFxcbiAgICAgICAgICB9KSlcXG4gICAgICAgIHJldHVybiBhbGxcXG4gICAgICB9LCBbXSlcXG4gICAgfSxcXG4gIH0sXFxuICBtb3VudGVkKCkge1xcbiAgICAgIHRoaXMuJHJvb3QuZmV0Y2hwcm9qZWN0RGF0YSgpXFxuICB9LFxcbiAgbWV0aG9kczoge31cXG59XFxuPC9zY3JpcHQ+XFxuXFxuPHN0eWxlPlxcbi5ub24tY29tcGxpYW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2M7XFxufVxcbjwvc3R5bGU+XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXI/c291cmNlTWFwIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLWNvbXBpbGVyP3tcInZ1ZVwiOnRydWUsXCJpZFwiOlwiZGF0YS12LTdiYTViZDkwXCIsXCJzY29wZWRcIjpmYWxzZSxcImhhc0lubGluZUNvbmZpZ1wiOmZhbHNlfSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXN0eWxlcyZpbmRleD0wIS4vc3JjL0FwcC52dWVcbi8vIG1vZHVsZSBpZCA9IDIzMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n");
 
 /***/ }),
 /* 231 */
@@ -1689,14 +1689,14 @@ eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_mo
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"b-card\",\n    {\n      staticClass: \"mb-5\",\n      attrs: {\n        tag: \"article\",\n        title: _vm.processor.executable.replace(\"ocrd-\", \"\")\n      }\n    },\n    [\n      _c(\n        \"b-card-text\",\n        [\n          _c(\n            \"b-tabs\",\n            [\n              _c(\n                \"b-tab\",\n                { attrs: { title: \"Description\" } },\n                [\n                  _c(\"blockquote\", [\n                    _vm._v(\n                      \"\\n          \" +\n                        _vm._s(_vm.processor.description) +\n                        \"\\n        \"\n                    )\n                  ]),\n                  _vm._v(\" \"),\n                  _vm._l(_vm.processor.steps, function(step) {\n                    return _c(\n                      \"b-badge\",\n                      { key: step, attrs: { variant: \"info\" } },\n                      [_vm._v(_vm._s(step))]\n                    )\n                  }),\n                  _vm._v(\" \"),\n                  _vm._l(_vm.processor.categories, function(category) {\n                    return _c(\n                      \"b-badge\",\n                      { key: category, attrs: { variant: \"success\" } },\n                      [_vm._v(_vm._s(category))]\n                    )\n                  }),\n                  _vm._v(\" \"),\n                  _c(\"p\", [\n                    _vm._v(\"\\n          Part of \"),\n                    _c(\"a\", { attrs: { href: \"\" } }, [\n                      _vm._v(_vm._s(_vm.processor.part_of))\n                    ])\n                  ]),\n                  _vm._v(\" \"),\n                  _c(\"p\", [\n                    _c(\"a\", { attrs: { href: \"\" } }, [\n                      _vm._v(\"Read the Documentation!\")\n                    ])\n                  ])\n                ],\n                2\n              ),\n              _vm._v(\" \"),\n              _c(\"b-tab\", { attrs: { title: \"Parameters\" } }, [\n                _c(\n                  \"ul\",\n                  _vm._l(_vm.processor.parameters, function(param, name) {\n                    return _c(\"li\", { key: name }, [\n                      _c(\"strong\", [_vm._v(_vm._s(name))]),\n                      _vm._v(\" \" + _vm._s(param) + \"\\n          \")\n                    ])\n                  }),\n                  0\n                )\n              ])\n            ],\n            1\n          )\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-7a8fbc74\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3RJdGVtLnZ1ZT8wYWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUyx1QkFBdUIsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0JBQW9CLGtCQUFrQixFQUFFO0FBQy9EO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0JBQXdCLHFCQUFxQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFNBQVMsV0FBVyxFQUFFO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsU0FBUyxXQUFXLEVBQUU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUyxzQkFBc0IsRUFBRTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsWUFBWTtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ0Ysa0VBQVM7QUFDeEIsSUFBSSxLQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYi1jYXJkXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwibWItNVwiLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdGFnOiBcImFydGljbGVcIixcbiAgICAgICAgdGl0bGU6IF92bS5wcm9jZXNzb3IuZXhlY3V0YWJsZS5yZXBsYWNlKFwib2NyZC1cIiwgXCJcIilcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImItY2FyZC10ZXh0XCIsXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYi10YWJzXCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi10YWJcIixcbiAgICAgICAgICAgICAgICB7IGF0dHJzOiB7IHRpdGxlOiBcIkRlc2NyaXB0aW9uXCIgfSB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiYmxvY2txdW90ZVwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnByb2Nlc3Nvci5kZXNjcmlwdGlvbikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0ucHJvY2Vzc29yLnN0ZXBzLCBmdW5jdGlvbihzdGVwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcImItYmFkZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGtleTogc3RlcCwgYXR0cnM6IHsgdmFyaWFudDogXCJpbmZvXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHN0ZXApKV1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5wcm9jZXNzb3IuY2F0ZWdvcmllcywgZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiYi1iYWRnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBjYXRlZ29yeSwgYXR0cnM6IHsgdmFyaWFudDogXCJzdWNjZXNzXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGNhdGVnb3J5KSldXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwicFwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICBQYXJ0IG9mIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgYXR0cnM6IHsgaHJlZjogXCJcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5wcm9jZXNzb3IucGFydF9vZikpXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInBcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBcIlwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlJlYWQgdGhlIERvY3VtZW50YXRpb24hXCIpXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImItdGFiXCIsIHsgYXR0cnM6IHsgdGl0bGU6IFwiUGFyYW1ldGVyc1wiIH0gfSwgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5wcm9jZXNzb3IucGFyYW1ldGVycywgZnVuY3Rpb24ocGFyYW0sIG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwibGlcIiwgeyBrZXk6IG5hbWUgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3Ryb25nXCIsIFtfdm0uX3YoX3ZtLl9zKG5hbWUpKV0pLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiArIF92bS5fcyhwYXJhbSkgKyBcIlxcbiAgICAgICAgICBcIilcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG52YXIgZXNFeHBvcnRzID0geyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfVxuZXhwb3J0IGRlZmF1bHQgZXNFeHBvcnRzXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTdhOGZiYzc0XCIsIGVzRXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtN2E4ZmJjNzRcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3RJdGVtLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///233\n");
+eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"b-card\",\n    {\n      class:\n        \"mb-5 ocrd-processor-list-item \" +\n        (_vm.processor.compliant_cli ? \"compliant\" : \"non-compliant\"),\n      attrs: {\n        tag: \"article\",\n        title: _vm.processor.executable.replace(\"ocrd-\", \"\")\n      }\n    },\n    [\n      _c(\n        \"b-card-text\",\n        [\n          _c(\n            \"b-tabs\",\n            [\n              _c(\n                \"b-tab\",\n                { attrs: { title: \"Description\" } },\n                [\n                  _c(\"blockquote\", [\n                    _vm._v(\n                      \"\\n          \" +\n                        _vm._s(_vm.processor.description) +\n                        \"\\n        \"\n                    )\n                  ]),\n                  _vm._v(\" \"),\n                  _vm._l(_vm.processor.steps, function(step) {\n                    return _c(\n                      \"b-badge\",\n                      { key: step, attrs: { variant: \"info\" } },\n                      [_vm._v(_vm._s(step))]\n                    )\n                  }),\n                  _vm._v(\" \"),\n                  _vm._l(_vm.processor.categories, function(category) {\n                    return _c(\n                      \"b-badge\",\n                      { key: category, attrs: { variant: \"success\" } },\n                      [_vm._v(_vm._s(category))]\n                    )\n                  }),\n                  _vm._v(\" \"),\n                  _c(\"p\", [\n                    _vm._v(\"\\n          Part of \"),\n                    _c(\"a\", { attrs: { href: \"\" } }, [\n                      _vm._v(_vm._s(_vm.processor.part_of))\n                    ])\n                  ]),\n                  _vm._v(\" \"),\n                  _c(\"p\", [\n                    _c(\"a\", { attrs: { href: \"\" } }, [\n                      _vm._v(\"Read the Documentation!\")\n                    ])\n                  ])\n                ],\n                2\n              ),\n              _vm._v(\" \"),\n              _c(\"b-tab\", { attrs: { title: \"Parameters\" } }, [\n                _c(\n                  \"ul\",\n                  _vm._l(_vm.processor.parameters, function(param, name) {\n                    return _c(\"li\", { key: name }, [\n                      _c(\"strong\", [_vm._v(_vm._s(name))]),\n                      _vm._v(\" \" + _vm._s(param) + \"\\n          \")\n                    ])\n                  }),\n                  0\n                )\n              ])\n            ],\n            1\n          )\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-7a8fbc74\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3RJdGVtLnZ1ZT8wYWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVMsdUJBQXVCLEVBQUU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQixrQkFBa0IsRUFBRTtBQUMvRDtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHdCQUF3QixxQkFBcUIsRUFBRTtBQUN0RTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLFdBQVcsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFNBQVMsV0FBVyxFQUFFO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFNBQVMsc0JBQXNCLEVBQUU7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFlBQVk7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNGLGtFQUFTO0FBQ3hCLElBQUksS0FBVTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImItY2FyZFwiLFxuICAgIHtcbiAgICAgIGNsYXNzOlxuICAgICAgICBcIm1iLTUgb2NyZC1wcm9jZXNzb3ItbGlzdC1pdGVtIFwiICtcbiAgICAgICAgKF92bS5wcm9jZXNzb3IuY29tcGxpYW50X2NsaSA/IFwiY29tcGxpYW50XCIgOiBcIm5vbi1jb21wbGlhbnRcIiksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0YWc6IFwiYXJ0aWNsZVwiLFxuICAgICAgICB0aXRsZTogX3ZtLnByb2Nlc3Nvci5leGVjdXRhYmxlLnJlcGxhY2UoXCJvY3JkLVwiLCBcIlwiKVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYi1jYXJkLXRleHRcIixcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLXRhYnNcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJiLXRhYlwiLFxuICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgdGl0bGU6IFwiRGVzY3JpcHRpb25cIiB9IH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJibG9ja3F1b3RlXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucHJvY2Vzc29yLmRlc2NyaXB0aW9uKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5wcm9jZXNzb3Iuc3RlcHMsIGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiYi1iYWRnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBzdGVwLCBhdHRyczogeyB2YXJpYW50OiBcImluZm9cIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3Moc3RlcCkpXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnByb2Nlc3Nvci5jYXRlZ29yaWVzLCBmdW5jdGlvbihjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJiLWJhZGdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBrZXk6IGNhdGVnb3J5LCBhdHRyczogeyB2YXJpYW50OiBcInN1Y2Nlc3NcIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoY2F0ZWdvcnkpKV1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJwXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIFBhcnQgb2YgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBcIlwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnByb2Nlc3Nvci5wYXJ0X29mKSlcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwicFwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiYVwiLCB7IGF0dHJzOiB7IGhyZWY6IFwiXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiUmVhZCB0aGUgRG9jdW1lbnRhdGlvbiFcIilcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwiYi10YWJcIiwgeyBhdHRyczogeyB0aXRsZTogXCJQYXJhbWV0ZXJzXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnByb2Nlc3Nvci5wYXJhbWV0ZXJzLCBmdW5jdGlvbihwYXJhbSwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJsaVwiLCB7IGtleTogbmFtZSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdHJvbmdcIiwgW192bS5fdihfdm0uX3MobmFtZSkpXSksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiICsgX3ZtLl9zKHBhcmFtKSArIFwiXFxuICAgICAgICAgIFwiKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbnZhciBlc0V4cG9ydHMgPSB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9XG5leHBvcnQgZGVmYXVsdCBlc0V4cG9ydHNcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtN2E4ZmJjNzRcIiwgZXNFeHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi03YThmYmM3NFwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy9PY3JkUHJvY2Vzc29yTGlzdEl0ZW0udnVlXG4vLyBtb2R1bGUgaWQgPSAyMzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n");
 
 /***/ }),
 /* 234 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _c(\n        \"b-row\",\n        [\n          _c(\n            \"b-button\",\n            {\n              directives: [\n                {\n                  name: \"b-toggle\",\n                  rawName: \"v-b-toggle.processor-controls\",\n                  modifiers: { \"processor-controls\": true }\n                }\n              ],\n              staticClass: \"m-1\"\n            },\n            [_vm._v(\"Toggle Controls\")]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-collapse\",\n            { attrs: { id: \"processor-controls\" } },\n            [\n              _c(\n                \"b-container\",\n                [\n                  _c(\n                    \"b-row\",\n                    [\n                      _c(\n                        \"b-form-checkbox\",\n                        {\n                          attrs: { name: \"check-button\", switch: \"\" },\n                          model: {\n                            value: _vm.show_unofficial,\n                            callback: function($$v) {\n                              _vm.show_unofficial = $$v\n                            },\n                            expression: \"show_unofficial\"\n                          }\n                        },\n                        [\n                          _vm._v(\"\\n          Unofficial processors \"),\n                          _c(\"b\", [\n                            _vm._v(\n                              \"(\" + _vm._s(_vm.checked ? \"Show\" : \"hide\") + \")\"\n                            )\n                          ])\n                        ]\n                      )\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _vm._v(\"\\n          Filter by category:\\n          \"),\n                      _vm._l(_vm.categories, function(category) {\n                        return _c(\n                          \"b-badge\",\n                          {\n                            key: category,\n                            attrs: {\n                              variant:\n                                _vm.category_filter.indexOf(category) != -1\n                                  ? \"primary\"\n                                  : \"secondary\"\n                            },\n                            on: {\n                              click: function($event) {\n                                _vm.category_filter.indexOf(category) != -1\n                                  ? _vm.category_filter.splice(\n                                      _vm.category_filter.indexOf(category),\n                                      1\n                                    )\n                                  : _vm.category_filter.push(category)\n                              }\n                            }\n                          },\n                          [\n                            _vm._v(\n                              \"\\n            \" +\n                                _vm._s(category) +\n                                \"\\n          \"\n                            )\n                          ]\n                        )\n                      })\n                    ],\n                    2\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _vm._v(\"\\n          Filter by step:\\n          \"),\n                      _vm._l(_vm.steps, function(step) {\n                        return _c(\n                          \"b-badge\",\n                          {\n                            key: step,\n                            attrs: {\n                              variant:\n                                _vm.step_filter.indexOf(step) != -1\n                                  ? \"primary\"\n                                  : \"secondary\"\n                            },\n                            on: {\n                              click: function($event) {\n                                _vm.step_filter.indexOf(step) != -1\n                                  ? _vm.step_filter.splice(\n                                      _vm.step_filter.indexOf(step),\n                                      1\n                                    )\n                                  : _vm.step_filter.push(step)\n                              }\n                            }\n                          },\n                          [\n                            _vm._v(\n                              \"\\n            \" + _vm._s(step) + \"\\n          \"\n                            )\n                          ]\n                        )\n                      })\n                    ],\n                    2\n                  )\n                ],\n                1\n              )\n            ],\n            1\n          )\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"b-row\",\n        _vm._l(_vm.filtered_processors, function(processor) {\n          return _c(\"ocrd-processor-list-item\", {\n            key: processor.executable,\n            attrs: { processor: processor }\n          })\n        }),\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-5757c97e\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3QudnVlP2YzMzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUywyQkFBMkIsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxtQ0FBbUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDRixrRUFBUztBQUN4QixJQUFJLEtBQVU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImItYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcImItdG9nZ2xlXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtYi10b2dnbGUucHJvY2Vzc29yLWNvbnRyb2xzXCIsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnM6IHsgXCJwcm9jZXNzb3ItY29udHJvbHNcIjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtLTFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJUb2dnbGUgQ29udHJvbHNcIildXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLWNvbGxhcHNlXCIsXG4gICAgICAgICAgICB7IGF0dHJzOiB7IGlkOiBcInByb2Nlc3Nvci1jb250cm9sc1wiIH0gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJiLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImItcm93XCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYi1mb3JtLWNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IFwiY2hlY2stYnV0dG9uXCIsIHN3aXRjaDogXCJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd191bm9mZmljaWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93X3Vub2ZmaWNpYWwgPSAkJHZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd191bm9mZmljaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIFVub2ZmaWNpYWwgcHJvY2Vzc29ycyBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiYlwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIoXCIgKyBfdm0uX3MoX3ZtLmNoZWNrZWQgPyBcIlNob3dcIiA6IFwiaGlkZVwiKSArIFwiKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIEZpbHRlciBieSBjYXRlZ29yeTpcXG4gICAgICAgICAgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0uY2F0ZWdvcmllcywgZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWJhZGdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2F0ZWdvcnlfZmlsdGVyLmluZGV4T2YoY2F0ZWdvcnkpICE9IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmNhdGVnb3J5X2ZpbHRlci5pbmRleE9mKGNhdGVnb3J5KSAhPSAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLmNhdGVnb3J5X2ZpbHRlci5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jYXRlZ29yeV9maWx0ZXIuaW5kZXhPZihjYXRlZ29yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5jYXRlZ29yeV9maWx0ZXIucHVzaChjYXRlZ29yeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKGNhdGVnb3J5KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIEZpbHRlciBieSBzdGVwOlxcbiAgICAgICAgICBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5zdGVwcywgZnVuY3Rpb24oc3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImItYmFkZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RlcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCkgIT0gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3RlcF9maWx0ZXIuaW5kZXhPZihzdGVwKSAhPSAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnN0ZXBfZmlsdGVyLnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5zdGVwX2ZpbHRlci5wdXNoKHN0ZXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArIF92bS5fcyhzdGVwKSArIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICBfdm0uX2woX3ZtLmZpbHRlcmVkX3Byb2Nlc3NvcnMsIGZ1bmN0aW9uKHByb2Nlc3Nvcikge1xuICAgICAgICAgIHJldHVybiBfYyhcIm9jcmQtcHJvY2Vzc29yLWxpc3QtaXRlbVwiLCB7XG4gICAgICAgICAgICBrZXk6IHByb2Nlc3Nvci5leGVjdXRhYmxlLFxuICAgICAgICAgICAgYXR0cnM6IHsgcHJvY2Vzc29yOiBwcm9jZXNzb3IgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG52YXIgZXNFeHBvcnRzID0geyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfVxuZXhwb3J0IGRlZmF1bHQgZXNFeHBvcnRzXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTU3NTdjOTdlXCIsIGVzRXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNTc1N2M5N2VcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3QudnVlXG4vLyBtb2R1bGUgaWQgPSAyMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///234\n");
+eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _c(\n        \"b-row\",\n        [\n          _c(\n            \"b-button\",\n            {\n              directives: [\n                {\n                  name: \"b-toggle\",\n                  rawName: \"v-b-toggle.processor-controls\",\n                  modifiers: { \"processor-controls\": true }\n                }\n              ],\n              staticClass: \"m-1\"\n            },\n            [_vm._v(\"Toggle Controls\")]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-collapse\",\n            { attrs: { id: \"processor-controls\" } },\n            [\n              _c(\n                \"b-container\",\n                [\n                  _c(\n                    \"b-row\",\n                    [\n                      _c(\n                        \"b-form-checkbox\",\n                        {\n                          attrs: { name: \"check-button\", switch: \"\" },\n                          model: {\n                            value: _vm.show_noncompliant,\n                            callback: function($$v) {\n                              _vm.show_noncompliant = $$v\n                            },\n                            expression: \"show_noncompliant\"\n                          }\n                        },\n                        [\n                          _vm._v(\"\\n          Non-compliant projects \"),\n                          _c(\"b\", [\n                            _vm._v(\n                              \"(\" +\n                                _vm._s(\n                                  _vm.show_noncompliant ? \"Show\" : \"Hide\"\n                                ) +\n                                \")\"\n                            )\n                          ])\n                        ]\n                      )\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _c(\n                        \"b-form-checkbox\",\n                        {\n                          attrs: { name: \"check-button\", switch: \"\" },\n                          model: {\n                            value: _vm.show_unofficial,\n                            callback: function($$v) {\n                              _vm.show_unofficial = $$v\n                            },\n                            expression: \"show_unofficial\"\n                          }\n                        },\n                        [\n                          _vm._v(\"\\n          Unofficial processors \"),\n                          _c(\"b\", [\n                            _vm._v(\n                              \"(\" +\n                                _vm._s(_vm.show_unofficial ? \"Show\" : \"hide\") +\n                                \")\"\n                            )\n                          ])\n                        ]\n                      )\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _vm._v(\"\\n          Filter by category:\\n          \"),\n                      _vm._l(_vm.categories, function(category) {\n                        return _c(\n                          \"b-badge\",\n                          {\n                            key: category,\n                            attrs: {\n                              variant:\n                                _vm.category_filter.indexOf(category) != -1\n                                  ? \"primary\"\n                                  : \"secondary\"\n                            },\n                            on: {\n                              click: function($event) {\n                                _vm.category_filter.indexOf(category) != -1\n                                  ? _vm.category_filter.splice(\n                                      _vm.category_filter.indexOf(category),\n                                      1\n                                    )\n                                  : _vm.category_filter.push(category)\n                              }\n                            }\n                          },\n                          [\n                            _vm._v(\n                              \"\\n            \" +\n                                _vm._s(category) +\n                                \"\\n          \"\n                            )\n                          ]\n                        )\n                      })\n                    ],\n                    2\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _vm._v(\"\\n          Filter by step:\\n          \"),\n                      _vm._l(_vm.steps, function(step) {\n                        return _c(\n                          \"b-badge\",\n                          {\n                            key: step,\n                            attrs: {\n                              variant:\n                                _vm.step_filter.indexOf(step) != -1\n                                  ? \"primary\"\n                                  : \"secondary\"\n                            },\n                            on: {\n                              click: function($event) {\n                                _vm.step_filter.indexOf(step) != -1\n                                  ? _vm.step_filter.splice(\n                                      _vm.step_filter.indexOf(step),\n                                      1\n                                    )\n                                  : _vm.step_filter.push(step)\n                              }\n                            }\n                          },\n                          [\n                            _vm._v(\n                              \"\\n            \" + _vm._s(step) + \"\\n          \"\n                            )\n                          ]\n                        )\n                      })\n                    ],\n                    2\n                  )\n                ],\n                1\n              )\n            ],\n            1\n          )\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"b-row\",\n        _vm._l(_vm.filtered_processors, function(processor) {\n          return _c(\"ocrd-processor-list-item\", {\n            key: processor.executable,\n            attrs: { processor: processor }\n          })\n        }),\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-5757c97e\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3QudnVlP2YzMzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUywyQkFBMkIsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxtQ0FBbUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLG1DQUFtQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDRixrRUFBUztBQUN4QixJQUFJLEtBQVU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImItYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcImItdG9nZ2xlXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtYi10b2dnbGUucHJvY2Vzc29yLWNvbnRyb2xzXCIsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnM6IHsgXCJwcm9jZXNzb3ItY29udHJvbHNcIjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtLTFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJUb2dnbGUgQ29udHJvbHNcIildXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLWNvbGxhcHNlXCIsXG4gICAgICAgICAgICB7IGF0dHJzOiB7IGlkOiBcInByb2Nlc3Nvci1jb250cm9sc1wiIH0gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJiLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImItcm93XCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYi1mb3JtLWNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IFwiY2hlY2stYnV0dG9uXCIsIHN3aXRjaDogXCJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd19ub25jb21wbGlhbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNob3dfbm9uY29tcGxpYW50ID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dfbm9uY29tcGxpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIE5vbi1jb21wbGlhbnQgcHJvamVjdHMgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImJcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93X25vbmNvbXBsaWFudCA/IFwiU2hvd1wiIDogXCJIaWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImItZm9ybS1jaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBuYW1lOiBcImNoZWNrLWJ1dHRvblwiLCBzd2l0Y2g6IFwiXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dfdW5vZmZpY2lhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd191bm9mZmljaWFsID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dfdW5vZmZpY2lhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICBVbm9mZmljaWFsIHByb2Nlc3NvcnMgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImJcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5zaG93X3Vub2ZmaWNpYWwgPyBcIlNob3dcIiA6IFwiaGlkZVwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIEZpbHRlciBieSBjYXRlZ29yeTpcXG4gICAgICAgICAgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0uY2F0ZWdvcmllcywgZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWJhZGdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2F0ZWdvcnlfZmlsdGVyLmluZGV4T2YoY2F0ZWdvcnkpICE9IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmNhdGVnb3J5X2ZpbHRlci5pbmRleE9mKGNhdGVnb3J5KSAhPSAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLmNhdGVnb3J5X2ZpbHRlci5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jYXRlZ29yeV9maWx0ZXIuaW5kZXhPZihjYXRlZ29yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5jYXRlZ29yeV9maWx0ZXIucHVzaChjYXRlZ29yeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKGNhdGVnb3J5KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICAgIEZpbHRlciBieSBzdGVwOlxcbiAgICAgICAgICBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5zdGVwcywgZnVuY3Rpb24oc3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImItYmFkZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RlcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCkgIT0gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3RlcF9maWx0ZXIuaW5kZXhPZihzdGVwKSAhPSAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnN0ZXBfZmlsdGVyLnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN0ZXBfZmlsdGVyLmluZGV4T2Yoc3RlcCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5zdGVwX2ZpbHRlci5wdXNoKHN0ZXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArIF92bS5fcyhzdGVwKSArIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICBfdm0uX2woX3ZtLmZpbHRlcmVkX3Byb2Nlc3NvcnMsIGZ1bmN0aW9uKHByb2Nlc3Nvcikge1xuICAgICAgICAgIHJldHVybiBfYyhcIm9jcmQtcHJvY2Vzc29yLWxpc3QtaXRlbVwiLCB7XG4gICAgICAgICAgICBrZXk6IHByb2Nlc3Nvci5leGVjdXRhYmxlLFxuICAgICAgICAgICAgYXR0cnM6IHsgcHJvY2Vzc29yOiBwcm9jZXNzb3IgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG52YXIgZXNFeHBvcnRzID0geyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfVxuZXhwb3J0IGRlZmF1bHQgZXNFeHBvcnRzXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTU3NTdjOTdlXCIsIGVzRXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNTc1N2M5N2VcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvT2NyZFByb2Nlc3Nvckxpc3QudnVlXG4vLyBtb2R1bGUgaWQgPSAyMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///234\n");
 
 /***/ }),
 /* 235 */
@@ -1715,7 +1715,7 @@ eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// lo
 /* 237 */
 /***/ (function(module, exports, __webpack_require__) {
 
-eval("exports = module.exports = __webpack_require__(22)(true);\n// imports\n\n\n// module\nexports.push([module.i, \"\\n.list .ocrd-project-list-item {\\n  max-width: 30rem;\\n  max-height: 30rem;\\n  overflow: auto;\\n}\\n\\n\", \"\", {\"version\":3,\"sources\":[\"/data/monorepo/ocrd-kwalitee/webapp/src/src/OcrdProjectList.vue\"],\"names\":[],\"mappings\":\";AAkFA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;CACA\",\"file\":\"OcrdProjectList.vue\",\"sourcesContent\":[\"<template>\\n  <div>\\n    <b-row>\\n      <b-button v-b-toggle.project-controls class=\\\"m-1\\\">Toggle Controls</b-button>\\n      <b-collapse id=\\\"project-controls\\\">\\n        <b-container>\\n          <b-row>\\n            <b-form-checkbox v-model=\\\"show_unofficial\\\" name=\\\"check-button\\\" switch>\\n            Unofficial projects <b>({{ checked ? \\\"Show\\\" : \\\"hide\\\" }})</b>\\n            </b-form-checkbox>\\n          </b-row>\\n          <b-row>\\n            Filter by name: <input type=\\\"text\\\" v-model=\\\"name_filter\\\"/> (Showing {{ filtered_projects.length }} of {{ projects.length}} projects)\\n          </b-row>\\n          <b-row>\\n            Tabs: <b-button @click=\\\"tabIndex -= 1\\\">&lt;</b-button> <b-button @click=\\\"tabIndex += 1\\\">&gt;</b-button>\\n          </b-row>\\n        </b-container>\\n      </b-collapse>\\n    </b-row>\\n    <b-row class=\\\"list\\\">\\n      <ocrd-project-list-item\\n        v-for=\\\"project,idx in filtered_projects\\\"\\n        :key=\\\"project.org_plus_name\\\"\\n        :project=\\\"project\\\"\\n        :tabIndex=\\\"tabIndex\\\"\\n        :projectIndex=\\\"idx\\\"\\n      >\\n      </ocrd-project-list-item>\\n    </b-row>\\n\\n    <b-modal id=\\\"project-modal\\\"\\n             size=\\\"xl\\\"\\n             :hide-header=\\\"true\\\"\\n             :hide-footer=\\\"true\\\"\\n      >\\n      <ocrd-project-list-item\\n        :project=\\\"projects[$root.modalProjectIndex]\\\"\\n        :projectIndex=\\\"$root.modalProjectIndex\\\"\\n        :modal=\\\"true\\\"\\n        >\\n      </ocrd-project-list-item>\\n    </b-modal>\\n  </div>\\n</template>\\n\\n<script>\\nimport OcrdProjectListItem from './OcrdProjectListItem.vue'\\nexport default {\\n  data() {\\n    return {\\n      name_filter: '',\\n      show_unofficial: true,\\n      tabIndex: 0,\\n    }\\n  },\\n  computed: {\\n    filtered_projects() {\\n      return this.projects.filter(project => {\\n        if (!(this.show_unofficial || project.official)) {\\n          return false\\n        }\\n        return project.name.toLowerCase().includes(this.name_filter.toLowerCase())\\n      })\\n    }\\n  },\\n  components: {\\n    OcrdProjectListItem\\n  },\\n  props: {\\n    projects: {required: true}\\n  },\\n  methods: {\\n    switchTab(delta) {\\n      this.tabIndex += delta\\n    }\\n  }\\n}\\n</script>\\n\\n<style>\\n\\n.list .ocrd-project-list-item {\\n  max-width: 30rem;\\n  max-height: 30rem;\\n  overflow: auto;\\n}\\n\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2plY3RMaXN0LnZ1ZT85NzVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQixtQkFBTyxDQUFDLEVBQTRDO0FBQy9FOzs7QUFHQTtBQUNBLGNBQWMsUUFBUyxvQ0FBb0MscUJBQXFCLHNCQUFzQixtQkFBbUIsR0FBRyxZQUFZLGtIQUFrSCxNQUFNLFdBQVcsV0FBVyxVQUFVLGtZQUFrWSxpQ0FBaUMsb0tBQW9LLDRCQUE0QixNQUFNLGtCQUFrQiw0R0FBNEcsbURBQW1ELHUyQkFBdTJCLFlBQVksY0FBYyxpRkFBaUYsS0FBSyxnQkFBZ0IsMkJBQTJCLGdEQUFnRCw0REFBNEQsbUNBQW1DLDZGQUE2RixRQUFRLEtBQUssa0JBQWtCLDhCQUE4QixhQUFhLGlCQUFpQixlQUFlLEtBQUssZUFBZSx3QkFBd0IscUNBQXFDLEtBQUssR0FBRyx5REFBeUQscUJBQXFCLHNCQUFzQixtQkFBbUIsR0FBRyxpQ0FBaUM7O0FBRXRvRiIsImZpbGUiOiIyMzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKHRydWUpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuLmxpc3QgLm9jcmQtcHJvamVjdC1saXN0LWl0ZW0ge1xcbiAgbWF4LXdpZHRoOiAzMHJlbTtcXG4gIG1heC1oZWlnaHQ6IDMwcmVtO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcblxcblwiLCBcIlwiLCB7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCIvZGF0YS9tb25vcmVwby9vY3JkLWt3YWxpdGVlL3dlYmFwcC9zcmMvc3JjL09jcmRQcm9qZWN0TGlzdC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIjtBQWtGQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0NBQ0FcIixcImZpbGVcIjpcIk9jcmRQcm9qZWN0TGlzdC52dWVcIixcInNvdXJjZXNDb250ZW50XCI6W1wiPHRlbXBsYXRlPlxcbiAgPGRpdj5cXG4gICAgPGItcm93PlxcbiAgICAgIDxiLWJ1dHRvbiB2LWItdG9nZ2xlLnByb2plY3QtY29udHJvbHMgY2xhc3M9XFxcIm0tMVxcXCI+VG9nZ2xlIENvbnRyb2xzPC9iLWJ1dHRvbj5cXG4gICAgICA8Yi1jb2xsYXBzZSBpZD1cXFwicHJvamVjdC1jb250cm9sc1xcXCI+XFxuICAgICAgICA8Yi1jb250YWluZXI+XFxuICAgICAgICAgIDxiLXJvdz5cXG4gICAgICAgICAgICA8Yi1mb3JtLWNoZWNrYm94IHYtbW9kZWw9XFxcInNob3dfdW5vZmZpY2lhbFxcXCIgbmFtZT1cXFwiY2hlY2stYnV0dG9uXFxcIiBzd2l0Y2g+XFxuICAgICAgICAgICAgVW5vZmZpY2lhbCBwcm9qZWN0cyA8Yj4oe3sgY2hlY2tlZCA/IFxcXCJTaG93XFxcIiA6IFxcXCJoaWRlXFxcIiB9fSk8L2I+XFxuICAgICAgICAgICAgPC9iLWZvcm0tY2hlY2tib3g+XFxuICAgICAgICAgIDwvYi1yb3c+XFxuICAgICAgICAgIDxiLXJvdz5cXG4gICAgICAgICAgICBGaWx0ZXIgYnkgbmFtZTogPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHYtbW9kZWw9XFxcIm5hbWVfZmlsdGVyXFxcIi8+IChTaG93aW5nIHt7IGZpbHRlcmVkX3Byb2plY3RzLmxlbmd0aCB9fSBvZiB7eyBwcm9qZWN0cy5sZW5ndGh9fSBwcm9qZWN0cylcXG4gICAgICAgICAgPC9iLXJvdz5cXG4gICAgICAgICAgPGItcm93PlxcbiAgICAgICAgICAgIFRhYnM6IDxiLWJ1dHRvbiBAY2xpY2s9XFxcInRhYkluZGV4IC09IDFcXFwiPiZsdDs8L2ItYnV0dG9uPiA8Yi1idXR0b24gQGNsaWNrPVxcXCJ0YWJJbmRleCArPSAxXFxcIj4mZ3Q7PC9iLWJ1dHRvbj5cXG4gICAgICAgICAgPC9iLXJvdz5cXG4gICAgICAgIDwvYi1jb250YWluZXI+XFxuICAgICAgPC9iLWNvbGxhcHNlPlxcbiAgICA8L2Itcm93PlxcbiAgICA8Yi1yb3cgY2xhc3M9XFxcImxpc3RcXFwiPlxcbiAgICAgIDxvY3JkLXByb2plY3QtbGlzdC1pdGVtXFxuICAgICAgICB2LWZvcj1cXFwicHJvamVjdCxpZHggaW4gZmlsdGVyZWRfcHJvamVjdHNcXFwiXFxuICAgICAgICA6a2V5PVxcXCJwcm9qZWN0Lm9yZ19wbHVzX25hbWVcXFwiXFxuICAgICAgICA6cHJvamVjdD1cXFwicHJvamVjdFxcXCJcXG4gICAgICAgIDp0YWJJbmRleD1cXFwidGFiSW5kZXhcXFwiXFxuICAgICAgICA6cHJvamVjdEluZGV4PVxcXCJpZHhcXFwiXFxuICAgICAgPlxcbiAgICAgIDwvb2NyZC1wcm9qZWN0LWxpc3QtaXRlbT5cXG4gICAgPC9iLXJvdz5cXG5cXG4gICAgPGItbW9kYWwgaWQ9XFxcInByb2plY3QtbW9kYWxcXFwiXFxuICAgICAgICAgICAgIHNpemU9XFxcInhsXFxcIlxcbiAgICAgICAgICAgICA6aGlkZS1oZWFkZXI9XFxcInRydWVcXFwiXFxuICAgICAgICAgICAgIDpoaWRlLWZvb3Rlcj1cXFwidHJ1ZVxcXCJcXG4gICAgICA+XFxuICAgICAgPG9jcmQtcHJvamVjdC1saXN0LWl0ZW1cXG4gICAgICAgIDpwcm9qZWN0PVxcXCJwcm9qZWN0c1skcm9vdC5tb2RhbFByb2plY3RJbmRleF1cXFwiXFxuICAgICAgICA6cHJvamVjdEluZGV4PVxcXCIkcm9vdC5tb2RhbFByb2plY3RJbmRleFxcXCJcXG4gICAgICAgIDptb2RhbD1cXFwidHJ1ZVxcXCJcXG4gICAgICAgID5cXG4gICAgICA8L29jcmQtcHJvamVjdC1saXN0LWl0ZW0+XFxuICAgIDwvYi1tb2RhbD5cXG4gIDwvZGl2PlxcbjwvdGVtcGxhdGU+XFxuXFxuPHNjcmlwdD5cXG5pbXBvcnQgT2NyZFByb2plY3RMaXN0SXRlbSBmcm9tICcuL09jcmRQcm9qZWN0TGlzdEl0ZW0udnVlJ1xcbmV4cG9ydCBkZWZhdWx0IHtcXG4gIGRhdGEoKSB7XFxuICAgIHJldHVybiB7XFxuICAgICAgbmFtZV9maWx0ZXI6ICcnLFxcbiAgICAgIHNob3dfdW5vZmZpY2lhbDogdHJ1ZSxcXG4gICAgICB0YWJJbmRleDogMCxcXG4gICAgfVxcbiAgfSxcXG4gIGNvbXB1dGVkOiB7XFxuICAgIGZpbHRlcmVkX3Byb2plY3RzKCkge1xcbiAgICAgIHJldHVybiB0aGlzLnByb2plY3RzLmZpbHRlcihwcm9qZWN0ID0+IHtcXG4gICAgICAgIGlmICghKHRoaXMuc2hvd191bm9mZmljaWFsIHx8IHByb2plY3Qub2ZmaWNpYWwpKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHByb2plY3QubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMubmFtZV9maWx0ZXIudG9Mb3dlckNhc2UoKSlcXG4gICAgICB9KVxcbiAgICB9XFxuICB9LFxcbiAgY29tcG9uZW50czoge1xcbiAgICBPY3JkUHJvamVjdExpc3RJdGVtXFxuICB9LFxcbiAgcHJvcHM6IHtcXG4gICAgcHJvamVjdHM6IHtyZXF1aXJlZDogdHJ1ZX1cXG4gIH0sXFxuICBtZXRob2RzOiB7XFxuICAgIHN3aXRjaFRhYihkZWx0YSkge1xcbiAgICAgIHRoaXMudGFiSW5kZXggKz0gZGVsdGFcXG4gICAgfVxcbiAgfVxcbn1cXG48L3NjcmlwdD5cXG5cXG48c3R5bGU+XFxuXFxuLmxpc3QgLm9jcmQtcHJvamVjdC1saXN0LWl0ZW0ge1xcbiAgbWF4LXdpZHRoOiAzMHJlbTtcXG4gIG1heC1oZWlnaHQ6IDMwcmVtO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcblxcbjwvc3R5bGU+XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXI/c291cmNlTWFwIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLWNvbXBpbGVyP3tcInZ1ZVwiOnRydWUsXCJpZFwiOlwiZGF0YS12LWExNWMzNWYwXCIsXCJzY29wZWRcIjpmYWxzZSxcImhhc0lubGluZUNvbmZpZ1wiOmZhbHNlfSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXN0eWxlcyZpbmRleD0wIS4vc3JjL09jcmRQcm9qZWN0TGlzdC52dWVcbi8vIG1vZHVsZSBpZCA9IDIzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///237\n");
+eval("exports = module.exports = __webpack_require__(22)(true);\n// imports\n\n\n// module\nexports.push([module.i, \"\\n.list .ocrd-project-list-item {\\n  max-width: 30rem;\\n  max-height: 30rem;\\n  overflow: auto;\\n}\\n\\n\", \"\", {\"version\":3,\"sources\":[\"/data/monorepo/ocrd-kwalitee/webapp/src/src/OcrdProjectList.vue\"],\"names\":[],\"mappings\":\";AA2FA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;CACA\",\"file\":\"OcrdProjectList.vue\",\"sourcesContent\":[\"<template>\\n  <div>\\n    <b-row>\\n      <b-button v-b-toggle.project-controls class=\\\"m-1\\\">Toggle Controls</b-button>\\n      <b-collapse id=\\\"project-controls\\\">\\n        <b-container>\\n          <b-row>\\n            <b-form-checkbox v-model=\\\"show_noncompliant\\\" name=\\\"check-button\\\" switch>\\n            Non-compliant projects <b>({{ show_noncompliant ? \\\"Show\\\" : \\\"Hide\\\" }})</b>\\n            </b-form-checkbox>\\n          </b-row>\\n          <b-row>\\n            <b-form-checkbox v-model=\\\"show_unofficial\\\" name=\\\"check-button\\\" switch>\\n            Unofficial projects <b>({{ show_unofficial ? \\\"Show\\\" : \\\"Hide\\\" }})</b>\\n            </b-form-checkbox>\\n          </b-row>\\n          <b-row>\\n            Filter by name: <input type=\\\"text\\\" v-model=\\\"name_filter\\\"/> (Showing {{ filtered_projects.length }} of {{ projects.length}} projects)\\n          </b-row>\\n          <b-row>\\n            Tabs: <b-button @click=\\\"tabIndex -= 1\\\">&lt;</b-button> <b-button @click=\\\"tabIndex += 1\\\">&gt;</b-button>\\n          </b-row>\\n        </b-container>\\n      </b-collapse>\\n    </b-row>\\n    <b-row class=\\\"list\\\">\\n      <ocrd-project-list-item\\n        v-for=\\\"project,idx in filtered_projects\\\"\\n        :key=\\\"project.org_plus_name\\\"\\n        :project=\\\"project\\\"\\n        :tabIndex=\\\"tabIndex\\\"\\n        :projectIndex=\\\"idx\\\"\\n      >\\n      </ocrd-project-list-item>\\n    </b-row>\\n\\n    <b-modal id=\\\"project-modal\\\"\\n             size=\\\"xl\\\"\\n             :hide-header=\\\"true\\\"\\n             :hide-footer=\\\"true\\\"\\n      >\\n      <ocrd-project-list-item\\n        :project=\\\"projects[$root.modalProjectIndex]\\\"\\n        :projectIndex=\\\"$root.modalProjectIndex\\\"\\n        :modal=\\\"true\\\"\\n        >\\n      </ocrd-project-list-item>\\n    </b-modal>\\n  </div>\\n</template>\\n\\n<script>\\nimport OcrdProjectListItem from './OcrdProjectListItem.vue'\\nexport default {\\n  data() {\\n    return {\\n      name_filter: '',\\n      show_unofficial: true,\\n      show_noncompliant: true,\\n      tabIndex: 0,\\n    }\\n  },\\n  computed: {\\n    filtered_projects() {\\n      return this.projects.filter(project => {\\n        if (!(this.show_unofficial || project.official)) {\\n          return false\\n        }\\n        if (!(this.show_noncompliant || project.compliant_cli)) {\\n          return false\\n        }\\n        return project.name.toLowerCase().includes(this.name_filter.toLowerCase())\\n      })\\n    }\\n  },\\n  components: {\\n    OcrdProjectListItem\\n  },\\n  props: {\\n    projects: {required: true}\\n  },\\n  methods: {\\n    switchTab(delta) {\\n      this.tabIndex += delta\\n    }\\n  }\\n}\\n</script>\\n\\n<style>\\n\\n.list .ocrd-project-list-item {\\n  max-width: 30rem;\\n  max-height: 30rem;\\n  overflow: auto;\\n}\\n\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n\n// exports\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2plY3RMaXN0LnZ1ZT85NzVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQixtQkFBTyxDQUFDLEVBQTRDO0FBQy9FOzs7QUFHQTtBQUNBLGNBQWMsUUFBUyxvQ0FBb0MscUJBQXFCLHNCQUFzQixtQkFBbUIsR0FBRyxZQUFZLGtIQUFrSCxNQUFNLFdBQVcsV0FBVyxVQUFVLHVZQUF1WSwyQ0FBMkMsNE1BQTRNLHlDQUF5QyxvS0FBb0ssNEJBQTRCLE1BQU0sa0JBQWtCLDRHQUE0RyxtREFBbUQsdTJCQUF1MkIsWUFBWSxjQUFjLGlIQUFpSCxLQUFLLGdCQUFnQiwyQkFBMkIsZ0RBQWdELDREQUE0RCxtQ0FBbUMsbUVBQW1FLG1DQUFtQyw2RkFBNkYsUUFBUSxLQUFLLGtCQUFrQiw4QkFBOEIsYUFBYSxpQkFBaUIsZUFBZSxLQUFLLGVBQWUsd0JBQXdCLHFDQUFxQyxLQUFLLEdBQUcseURBQXlELHFCQUFxQixzQkFBc0IsbUJBQW1CLEdBQUcsaUNBQWlDOztBQUVoaEciLCJmaWxlIjoiMjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSh0cnVlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIlxcbi5saXN0IC5vY3JkLXByb2plY3QtbGlzdC1pdGVtIHtcXG4gIG1heC13aWR0aDogMzByZW07XFxuICBtYXgtaGVpZ2h0OiAzMHJlbTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiL2RhdGEvbW9ub3JlcG8vb2NyZC1rd2FsaXRlZS93ZWJhcHAvc3JjL3NyYy9PY3JkUHJvamVjdExpc3QudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCI7QUEyRkE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtDQUNBXCIsXCJmaWxlXCI6XCJPY3JkUHJvamVjdExpc3QudnVlXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjx0ZW1wbGF0ZT5cXG4gIDxkaXY+XFxuICAgIDxiLXJvdz5cXG4gICAgICA8Yi1idXR0b24gdi1iLXRvZ2dsZS5wcm9qZWN0LWNvbnRyb2xzIGNsYXNzPVxcXCJtLTFcXFwiPlRvZ2dsZSBDb250cm9sczwvYi1idXR0b24+XFxuICAgICAgPGItY29sbGFwc2UgaWQ9XFxcInByb2plY3QtY29udHJvbHNcXFwiPlxcbiAgICAgICAgPGItY29udGFpbmVyPlxcbiAgICAgICAgICA8Yi1yb3c+XFxuICAgICAgICAgICAgPGItZm9ybS1jaGVja2JveCB2LW1vZGVsPVxcXCJzaG93X25vbmNvbXBsaWFudFxcXCIgbmFtZT1cXFwiY2hlY2stYnV0dG9uXFxcIiBzd2l0Y2g+XFxuICAgICAgICAgICAgTm9uLWNvbXBsaWFudCBwcm9qZWN0cyA8Yj4oe3sgc2hvd19ub25jb21wbGlhbnQgPyBcXFwiU2hvd1xcXCIgOiBcXFwiSGlkZVxcXCIgfX0pPC9iPlxcbiAgICAgICAgICAgIDwvYi1mb3JtLWNoZWNrYm94PlxcbiAgICAgICAgICA8L2Itcm93PlxcbiAgICAgICAgICA8Yi1yb3c+XFxuICAgICAgICAgICAgPGItZm9ybS1jaGVja2JveCB2LW1vZGVsPVxcXCJzaG93X3Vub2ZmaWNpYWxcXFwiIG5hbWU9XFxcImNoZWNrLWJ1dHRvblxcXCIgc3dpdGNoPlxcbiAgICAgICAgICAgIFVub2ZmaWNpYWwgcHJvamVjdHMgPGI+KHt7IHNob3dfdW5vZmZpY2lhbCA/IFxcXCJTaG93XFxcIiA6IFxcXCJIaWRlXFxcIiB9fSk8L2I+XFxuICAgICAgICAgICAgPC9iLWZvcm0tY2hlY2tib3g+XFxuICAgICAgICAgIDwvYi1yb3c+XFxuICAgICAgICAgIDxiLXJvdz5cXG4gICAgICAgICAgICBGaWx0ZXIgYnkgbmFtZTogPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHYtbW9kZWw9XFxcIm5hbWVfZmlsdGVyXFxcIi8+IChTaG93aW5nIHt7IGZpbHRlcmVkX3Byb2plY3RzLmxlbmd0aCB9fSBvZiB7eyBwcm9qZWN0cy5sZW5ndGh9fSBwcm9qZWN0cylcXG4gICAgICAgICAgPC9iLXJvdz5cXG4gICAgICAgICAgPGItcm93PlxcbiAgICAgICAgICAgIFRhYnM6IDxiLWJ1dHRvbiBAY2xpY2s9XFxcInRhYkluZGV4IC09IDFcXFwiPiZsdDs8L2ItYnV0dG9uPiA8Yi1idXR0b24gQGNsaWNrPVxcXCJ0YWJJbmRleCArPSAxXFxcIj4mZ3Q7PC9iLWJ1dHRvbj5cXG4gICAgICAgICAgPC9iLXJvdz5cXG4gICAgICAgIDwvYi1jb250YWluZXI+XFxuICAgICAgPC9iLWNvbGxhcHNlPlxcbiAgICA8L2Itcm93PlxcbiAgICA8Yi1yb3cgY2xhc3M9XFxcImxpc3RcXFwiPlxcbiAgICAgIDxvY3JkLXByb2plY3QtbGlzdC1pdGVtXFxuICAgICAgICB2LWZvcj1cXFwicHJvamVjdCxpZHggaW4gZmlsdGVyZWRfcHJvamVjdHNcXFwiXFxuICAgICAgICA6a2V5PVxcXCJwcm9qZWN0Lm9yZ19wbHVzX25hbWVcXFwiXFxuICAgICAgICA6cHJvamVjdD1cXFwicHJvamVjdFxcXCJcXG4gICAgICAgIDp0YWJJbmRleD1cXFwidGFiSW5kZXhcXFwiXFxuICAgICAgICA6cHJvamVjdEluZGV4PVxcXCJpZHhcXFwiXFxuICAgICAgPlxcbiAgICAgIDwvb2NyZC1wcm9qZWN0LWxpc3QtaXRlbT5cXG4gICAgPC9iLXJvdz5cXG5cXG4gICAgPGItbW9kYWwgaWQ9XFxcInByb2plY3QtbW9kYWxcXFwiXFxuICAgICAgICAgICAgIHNpemU9XFxcInhsXFxcIlxcbiAgICAgICAgICAgICA6aGlkZS1oZWFkZXI9XFxcInRydWVcXFwiXFxuICAgICAgICAgICAgIDpoaWRlLWZvb3Rlcj1cXFwidHJ1ZVxcXCJcXG4gICAgICA+XFxuICAgICAgPG9jcmQtcHJvamVjdC1saXN0LWl0ZW1cXG4gICAgICAgIDpwcm9qZWN0PVxcXCJwcm9qZWN0c1skcm9vdC5tb2RhbFByb2plY3RJbmRleF1cXFwiXFxuICAgICAgICA6cHJvamVjdEluZGV4PVxcXCIkcm9vdC5tb2RhbFByb2plY3RJbmRleFxcXCJcXG4gICAgICAgIDptb2RhbD1cXFwidHJ1ZVxcXCJcXG4gICAgICAgID5cXG4gICAgICA8L29jcmQtcHJvamVjdC1saXN0LWl0ZW0+XFxuICAgIDwvYi1tb2RhbD5cXG4gIDwvZGl2PlxcbjwvdGVtcGxhdGU+XFxuXFxuPHNjcmlwdD5cXG5pbXBvcnQgT2NyZFByb2plY3RMaXN0SXRlbSBmcm9tICcuL09jcmRQcm9qZWN0TGlzdEl0ZW0udnVlJ1xcbmV4cG9ydCBkZWZhdWx0IHtcXG4gIGRhdGEoKSB7XFxuICAgIHJldHVybiB7XFxuICAgICAgbmFtZV9maWx0ZXI6ICcnLFxcbiAgICAgIHNob3dfdW5vZmZpY2lhbDogdHJ1ZSxcXG4gICAgICBzaG93X25vbmNvbXBsaWFudDogdHJ1ZSxcXG4gICAgICB0YWJJbmRleDogMCxcXG4gICAgfVxcbiAgfSxcXG4gIGNvbXB1dGVkOiB7XFxuICAgIGZpbHRlcmVkX3Byb2plY3RzKCkge1xcbiAgICAgIHJldHVybiB0aGlzLnByb2plY3RzLmZpbHRlcihwcm9qZWN0ID0+IHtcXG4gICAgICAgIGlmICghKHRoaXMuc2hvd191bm9mZmljaWFsIHx8IHByb2plY3Qub2ZmaWNpYWwpKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCEodGhpcy5zaG93X25vbmNvbXBsaWFudCB8fCBwcm9qZWN0LmNvbXBsaWFudF9jbGkpKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHByb2plY3QubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMubmFtZV9maWx0ZXIudG9Mb3dlckNhc2UoKSlcXG4gICAgICB9KVxcbiAgICB9XFxuICB9LFxcbiAgY29tcG9uZW50czoge1xcbiAgICBPY3JkUHJvamVjdExpc3RJdGVtXFxuICB9LFxcbiAgcHJvcHM6IHtcXG4gICAgcHJvamVjdHM6IHtyZXF1aXJlZDogdHJ1ZX1cXG4gIH0sXFxuICBtZXRob2RzOiB7XFxuICAgIHN3aXRjaFRhYihkZWx0YSkge1xcbiAgICAgIHRoaXMudGFiSW5kZXggKz0gZGVsdGFcXG4gICAgfVxcbiAgfVxcbn1cXG48L3NjcmlwdD5cXG5cXG48c3R5bGU+XFxuXFxuLmxpc3QgLm9jcmQtcHJvamVjdC1saXN0LWl0ZW0ge1xcbiAgbWF4LXdpZHRoOiAzMHJlbTtcXG4gIG1heC1oZWlnaHQ6IDMwcmVtO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcblxcbjwvc3R5bGU+XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXI/c291cmNlTWFwIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLWNvbXBpbGVyP3tcInZ1ZVwiOnRydWUsXCJpZFwiOlwiZGF0YS12LWExNWMzNWYwXCIsXCJzY29wZWRcIjpmYWxzZSxcImhhc0lubGluZUNvbmZpZ1wiOmZhbHNlfSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXN0eWxlcyZpbmRleD0wIS4vc3JjL09jcmRQcm9qZWN0TGlzdC52dWVcbi8vIG1vZHVsZSBpZCA9IDIzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///237\n");
 
 /***/ }),
 /* 238 */
@@ -1753,14 +1753,14 @@ eval("module.exports = function(originalModule) {\r\n\tif(!originalModule.webpac
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"b-card\",\n    {\n      staticClass: \"mb-5 ocrd-project-list-item\",\n      attrs: { title: _vm.project.org_plus_name, tag: \"article\" }\n    },\n    [\n      !_vm.modal\n        ? _c(\n            \"b-card-text\",\n            [\n              _c(\n                \"b-button\",\n                {\n                  on: {\n                    click: function($event) {\n                      return _vm.$root.showModal(\"project\", _vm.projectIndex)\n                    }\n                  }\n                },\n                [_vm._v(\"Expand\")]\n              )\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"b-tabs\",\n        {\n          model: {\n            value: _vm.tabIndex,\n            callback: function($$v) {\n              _vm.tabIndex = $$v\n            },\n            expression: \"tabIndex\"\n          }\n        },\n        [\n          _c(\"b-tab\", { attrs: { title: \"README\" } }, [\n            _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.compiledReadme) } })\n          ]),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"Dockerfile\" } },\n            [\n              _c(\"vue-code-highlight\", [\n                _vm._v(\n                  _vm._s(_vm.project.files.Dockerfile || \"# NO DOCKERFILE\")\n                )\n              ])\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"Git\" } },\n            [\n              _c(\n                \"b-card-text\",\n                [\n                  _c(\"p\", [\n                    _c(\n                      \"a\",\n                      {\n                        attrs: {\n                          href:\n                            \"`https://pypi.org/project/${ project.python.name }/`\"\n                        }\n                      },\n                      [\n                        _c(\"img\", {\n                          attrs: {\n                            src:\n                              \"https://img.shields.io/pypi/v/\" +\n                              _vm.project.python.name +\n                              \".svg\"\n                          }\n                        })\n                      ]\n                    )\n                  ]),\n                  _vm._v(\" \"),\n                  _vm.project.git\n                    ? _c(\"b-table\", { attrs: { items: [_vm.project.git] } })\n                    : _vm._e()\n                ],\n                1\n              )\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"ocrd-tool validation\" } },\n            [\n              _c(\n                \"b-card-text\",\n                [\n                  _c(\"vue-code-highlight\", [\n                    _vm._v(\n                      _vm._s(\n                        _vm.project.ocrd_tool_validate || \"# NO validation data\"\n                      )\n                    )\n                  ])\n                ],\n                1\n              )\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"Python\" } },\n            [\n              _c(\n                \"b-card-text\",\n                [\n                  _vm.project.python\n                    ? _c(\"b-table\", { attrs: { items: [_vm.project.python] } })\n                    : _vm._e()\n                ],\n                1\n              )\n            ],\n            1\n          )\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-ab156a8a\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2plY3RMaXN0SXRlbS52dWU/NzUzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx1QkFBdUIsU0FBUyxrQkFBa0IsRUFBRTtBQUNwRCx1QkFBdUIsWUFBWSx3Q0FBd0MsRUFBRTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUyxzQkFBc0IsRUFBRTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVMsZUFBZSxFQUFFO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELHNCQUFzQjtBQUMvRTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsU0FBUywyQkFBMkIsRUFBRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUyxnQ0FBZ0MsRUFBRTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTLGtCQUFrQixFQUFFO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsU0FBUyw4QkFBOEIsRUFBRTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNGLGtFQUFTO0FBQ3hCLElBQUksS0FBVTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImItY2FyZFwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcIm1iLTUgb2NyZC1wcm9qZWN0LWxpc3QtaXRlbVwiLFxuICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5wcm9qZWN0Lm9yZ19wbHVzX25hbWUsIHRhZzogXCJhcnRpY2xlXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgIV92bS5tb2RhbFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJiLWNhcmQtdGV4dFwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImItYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJHJvb3Quc2hvd01vZGFsKFwicHJvamVjdFwiLCBfdm0ucHJvamVjdEluZGV4KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KFwiRXhwYW5kXCIpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJiLXRhYnNcIixcbiAgICAgICAge1xuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnRhYkluZGV4LFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0udGFiSW5kZXggPSAkJHZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInRhYkluZGV4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImItdGFiXCIsIHsgYXR0cnM6IHsgdGl0bGU6IFwiUkVBRE1FXCIgfSB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5jb21waWxlZFJlYWRtZSkgfSB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImItdGFiXCIsXG4gICAgICAgICAgICB7IGF0dHJzOiB7IHRpdGxlOiBcIkRvY2tlcmZpbGVcIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidnVlLWNvZGUtaGlnaGxpZ2h0XCIsIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnByb2plY3QuZmlsZXMuRG9ja2VyZmlsZSB8fCBcIiMgTk8gRE9DS0VSRklMRVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLXRhYlwiLFxuICAgICAgICAgICAgeyBhdHRyczogeyB0aXRsZTogXCJHaXRcIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi1jYXJkLXRleHRcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYGh0dHBzOi8vcHlwaS5vcmcvcHJvamVjdC8keyBwcm9qZWN0LnB5dGhvbi5uYW1lIH0vYFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodHRwczovL2ltZy5zaGllbGRzLmlvL3B5cGkvdi9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucHJvamVjdC5weXRob24ubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi5zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLnByb2plY3QuZ2l0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJiLXRhYmxlXCIsIHsgYXR0cnM6IHsgaXRlbXM6IFtfdm0ucHJvamVjdC5naXRdIH0gfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYi10YWJcIixcbiAgICAgICAgICAgIHsgYXR0cnM6IHsgdGl0bGU6IFwib2NyZC10b29sIHZhbGlkYXRpb25cIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi1jYXJkLXRleHRcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInZ1ZS1jb2RlLWhpZ2hsaWdodFwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ucHJvamVjdC5vY3JkX3Rvb2xfdmFsaWRhdGUgfHwgXCIjIE5PIHZhbGlkYXRpb24gZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYi10YWJcIixcbiAgICAgICAgICAgIHsgYXR0cnM6IHsgdGl0bGU6IFwiUHl0aG9uXCIgfSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImItY2FyZC10ZXh0XCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLnByb2plY3QucHl0aG9uXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJiLXRhYmxlXCIsIHsgYXR0cnM6IHsgaXRlbXM6IFtfdm0ucHJvamVjdC5weXRob25dIH0gfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxudmFyIGVzRXhwb3J0cyA9IHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH1cbmV4cG9ydCBkZWZhdWx0IGVzRXhwb3J0c1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi1hYjE1NmE4YVwiLCBlc0V4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LWFiMTU2YThhXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL09jcmRQcm9qZWN0TGlzdEl0ZW0udnVlXG4vLyBtb2R1bGUgaWQgPSAyNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///243\n");
+eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"b-card\",\n    {\n      class:\n        \"mb-5 ocrd-project-list-item \" +\n        (_vm.project.compliant_cli ? \"compliant\" : \"non-compliant\"),\n      attrs: { title: _vm.project.org_plus_name, tag: \"article\" }\n    },\n    [\n      !_vm.modal\n        ? _c(\n            \"b-card-text\",\n            [\n              _c(\n                \"b-button\",\n                {\n                  on: {\n                    click: function($event) {\n                      return _vm.$root.showModal(\"project\", _vm.projectIndex)\n                    }\n                  }\n                },\n                [_vm._v(\"Expand\")]\n              )\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"b-tabs\",\n        {\n          model: {\n            value: _vm.tabIndex,\n            callback: function($$v) {\n              _vm.tabIndex = $$v\n            },\n            expression: \"tabIndex\"\n          }\n        },\n        [\n          _c(\"b-tab\", { attrs: { title: \"README\" } }, [\n            _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.compiledReadme) } })\n          ]),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"Dockerfile\" } },\n            [\n              _c(\"vue-code-highlight\", [\n                _vm._v(\n                  _vm._s(_vm.project.files.Dockerfile || \"# NO DOCKERFILE\")\n                )\n              ])\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"Git\" } },\n            [\n              _c(\n                \"b-card-text\",\n                [\n                  _c(\"p\", [\n                    _vm.project.python\n                      ? _c(\n                          \"a\",\n                          {\n                            attrs: {\n                              href:\n                                \"`https://pypi.org/project/${ project.python.name }/`\"\n                            }\n                          },\n                          [\n                            _c(\"img\", {\n                              attrs: {\n                                src:\n                                  \"https://img.shields.io/pypi/v/\" +\n                                  _vm.project.python.name +\n                                  \".svg\"\n                              }\n                            })\n                          ]\n                        )\n                      : _vm._e()\n                  ]),\n                  _vm._v(\" \"),\n                  _vm.project.git\n                    ? _c(\"b-table\", { attrs: { items: [_vm.project.git] } })\n                    : _vm._e()\n                ],\n                1\n              )\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"ocrd-tool validation\" } },\n            [\n              _c(\n                \"b-card-text\",\n                [\n                  _c(\"vue-code-highlight\", [\n                    _vm._v(\n                      _vm._s(\n                        _vm.project.ocrd_tool_validate || \"# NO validation data\"\n                      )\n                    )\n                  ])\n                ],\n                1\n              )\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-tab\",\n            { attrs: { title: \"Python\" } },\n            [\n              _c(\n                \"b-card-text\",\n                [\n                  _vm.project.python\n                    ? _c(\"b-table\", { attrs: { items: [_vm.project.python] } })\n                    : _vm._e()\n                ],\n                1\n              )\n            ],\n            1\n          )\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-ab156a8a\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2plY3RMaXN0SXRlbS52dWU/NzUzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsdUJBQXVCLFNBQVMsa0JBQWtCLEVBQUU7QUFDcEQsdUJBQXVCLFlBQVksd0NBQXdDLEVBQUU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVMsc0JBQXNCLEVBQUU7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTLGVBQWUsRUFBRTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELHNCQUFzQjtBQUNuRjtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxTQUFTLDJCQUEyQixFQUFFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTLGdDQUFnQyxFQUFFO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVMsa0JBQWtCLEVBQUU7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxTQUFTLDhCQUE4QixFQUFFO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ0Ysa0VBQVM7QUFDeEIsSUFBSSxLQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYi1jYXJkXCIsXG4gICAge1xuICAgICAgY2xhc3M6XG4gICAgICAgIFwibWItNSBvY3JkLXByb2plY3QtbGlzdC1pdGVtIFwiICtcbiAgICAgICAgKF92bS5wcm9qZWN0LmNvbXBsaWFudF9jbGkgPyBcImNvbXBsaWFudFwiIDogXCJub24tY29tcGxpYW50XCIpLFxuICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5wcm9qZWN0Lm9yZ19wbHVzX25hbWUsIHRhZzogXCJhcnRpY2xlXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgIV92bS5tb2RhbFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJiLWNhcmQtdGV4dFwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImItYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJHJvb3Quc2hvd01vZGFsKFwicHJvamVjdFwiLCBfdm0ucHJvamVjdEluZGV4KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KFwiRXhwYW5kXCIpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJiLXRhYnNcIixcbiAgICAgICAge1xuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnRhYkluZGV4LFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0udGFiSW5kZXggPSAkJHZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInRhYkluZGV4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImItdGFiXCIsIHsgYXR0cnM6IHsgdGl0bGU6IFwiUkVBRE1FXCIgfSB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5jb21waWxlZFJlYWRtZSkgfSB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImItdGFiXCIsXG4gICAgICAgICAgICB7IGF0dHJzOiB7IHRpdGxlOiBcIkRvY2tlcmZpbGVcIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidnVlLWNvZGUtaGlnaGxpZ2h0XCIsIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnByb2plY3QuZmlsZXMuRG9ja2VyZmlsZSB8fCBcIiMgTk8gRE9DS0VSRklMRVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLXRhYlwiLFxuICAgICAgICAgICAgeyBhdHRyczogeyB0aXRsZTogXCJHaXRcIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi1jYXJkLXRleHRcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0ucHJvamVjdC5weXRob25cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImBodHRwczovL3B5cGkub3JnL3Byb2plY3QvJHsgcHJvamVjdC5weXRob24ubmFtZSB9L2BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS92L1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucHJvamVjdC5weXRob24ubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIuc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLnByb2plY3QuZ2l0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJiLXRhYmxlXCIsIHsgYXR0cnM6IHsgaXRlbXM6IFtfdm0ucHJvamVjdC5naXRdIH0gfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYi10YWJcIixcbiAgICAgICAgICAgIHsgYXR0cnM6IHsgdGl0bGU6IFwib2NyZC10b29sIHZhbGlkYXRpb25cIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi1jYXJkLXRleHRcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInZ1ZS1jb2RlLWhpZ2hsaWdodFwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ucHJvamVjdC5vY3JkX3Rvb2xfdmFsaWRhdGUgfHwgXCIjIE5PIHZhbGlkYXRpb24gZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYi10YWJcIixcbiAgICAgICAgICAgIHsgYXR0cnM6IHsgdGl0bGU6IFwiUHl0aG9uXCIgfSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImItY2FyZC10ZXh0XCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLnByb2plY3QucHl0aG9uXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJiLXRhYmxlXCIsIHsgYXR0cnM6IHsgaXRlbXM6IFtfdm0ucHJvamVjdC5weXRob25dIH0gfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxudmFyIGVzRXhwb3J0cyA9IHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH1cbmV4cG9ydCBkZWZhdWx0IGVzRXhwb3J0c1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi1hYjE1NmE4YVwiLCBlc0V4cG9ydHMpXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LWFiMTU2YThhXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL09jcmRQcm9qZWN0TGlzdEl0ZW0udnVlXG4vLyBtb2R1bGUgaWQgPSAyNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///243\n");
 
 /***/ }),
 /* 244 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _c(\n        \"b-row\",\n        [\n          _c(\n            \"b-button\",\n            {\n              directives: [\n                {\n                  name: \"b-toggle\",\n                  rawName: \"v-b-toggle.project-controls\",\n                  modifiers: { \"project-controls\": true }\n                }\n              ],\n              staticClass: \"m-1\"\n            },\n            [_vm._v(\"Toggle Controls\")]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-collapse\",\n            { attrs: { id: \"project-controls\" } },\n            [\n              _c(\n                \"b-container\",\n                [\n                  _c(\n                    \"b-row\",\n                    [\n                      _c(\n                        \"b-form-checkbox\",\n                        {\n                          attrs: { name: \"check-button\", switch: \"\" },\n                          model: {\n                            value: _vm.show_unofficial,\n                            callback: function($$v) {\n                              _vm.show_unofficial = $$v\n                            },\n                            expression: \"show_unofficial\"\n                          }\n                        },\n                        [\n                          _vm._v(\"\\n          Unofficial projects \"),\n                          _c(\"b\", [\n                            _vm._v(\n                              \"(\" + _vm._s(_vm.checked ? \"Show\" : \"hide\") + \")\"\n                            )\n                          ])\n                        ]\n                      )\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _c(\"b-row\", [\n                    _vm._v(\"\\n          Filter by name: \"),\n                    _c(\"input\", {\n                      directives: [\n                        {\n                          name: \"model\",\n                          rawName: \"v-model\",\n                          value: _vm.name_filter,\n                          expression: \"name_filter\"\n                        }\n                      ],\n                      attrs: { type: \"text\" },\n                      domProps: { value: _vm.name_filter },\n                      on: {\n                        input: function($event) {\n                          if ($event.target.composing) {\n                            return\n                          }\n                          _vm.name_filter = $event.target.value\n                        }\n                      }\n                    }),\n                    _vm._v(\n                      \" (Showing \" +\n                        _vm._s(_vm.filtered_projects.length) +\n                        \" of \" +\n                        _vm._s(_vm.projects.length) +\n                        \" projects)\\n        \"\n                    )\n                  ]),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _vm._v(\"\\n          Tabs: \"),\n                      _c(\n                        \"b-button\",\n                        {\n                          on: {\n                            click: function($event) {\n                              _vm.tabIndex -= 1\n                            }\n                          }\n                        },\n                        [_vm._v(\"<\")]\n                      ),\n                      _vm._v(\" \"),\n                      _c(\n                        \"b-button\",\n                        {\n                          on: {\n                            click: function($event) {\n                              _vm.tabIndex += 1\n                            }\n                          }\n                        },\n                        [_vm._v(\">\")]\n                      )\n                    ],\n                    1\n                  )\n                ],\n                1\n              )\n            ],\n            1\n          )\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"b-row\",\n        { staticClass: \"list\" },\n        _vm._l(_vm.filtered_projects, function(project, idx) {\n          return _c(\"ocrd-project-list-item\", {\n            key: project.org_plus_name,\n            attrs: {\n              project: project,\n              tabIndex: _vm.tabIndex,\n              projectIndex: idx\n            }\n          })\n        }),\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"b-modal\",\n        {\n          attrs: {\n            id: \"project-modal\",\n            size: \"xl\",\n            \"hide-header\": true,\n            \"hide-footer\": true\n          }\n        },\n        [\n          _c(\"ocrd-project-list-item\", {\n            attrs: {\n              project: _vm.projects[_vm.$root.modalProjectIndex],\n              projectIndex: _vm.$root.modalProjectIndex,\n              modal: true\n            }\n          })\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-a15c35f0\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2plY3RMaXN0LnZ1ZT9kYTZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVMseUJBQXlCLEVBQUU7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsbUNBQW1DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGVBQWU7QUFDN0MsaUNBQWlDLHlCQUF5QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHNCQUFzQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ0Ysa0VBQVM7QUFDeEIsSUFBSSxLQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYi1yb3dcIixcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLWJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJiLXRvZ2dsZVwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LWItdG9nZ2xlLnByb2plY3QtY29udHJvbHNcIixcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogeyBcInByb2plY3QtY29udHJvbHNcIjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtLTFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJUb2dnbGUgQ29udHJvbHNcIildXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLWNvbGxhcHNlXCIsXG4gICAgICAgICAgICB7IGF0dHJzOiB7IGlkOiBcInByb2plY3QtY29udHJvbHNcIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImItZm9ybS1jaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBuYW1lOiBcImNoZWNrLWJ1dHRvblwiLCBzd2l0Y2g6IFwiXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dfdW5vZmZpY2lhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd191bm9mZmljaWFsID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dfdW5vZmZpY2lhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICBVbm9mZmljaWFsIHByb2plY3RzIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJiXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIihcIiArIF92bS5fcyhfdm0uY2hlY2tlZCA/IFwiU2hvd1wiIDogXCJoaWRlXCIpICsgXCIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiYi1yb3dcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgICAgRmlsdGVyIGJ5IG5hbWU6IFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm5hbWVfZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm5hbWVfZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwidGV4dFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5uYW1lX2ZpbHRlciB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5uYW1lX2ZpbHRlciA9ICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCIgKFNob3dpbmcgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5maWx0ZXJlZF9wcm9qZWN0cy5sZW5ndGgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIG9mIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucHJvamVjdHMubGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBwcm9qZWN0cylcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImItcm93XCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgICAgVGFiczogXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50YWJJbmRleCAtPSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIjxcIildXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50YWJJbmRleCArPSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIj5cIildXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImItcm93XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibGlzdFwiIH0sXG4gICAgICAgIF92bS5fbChfdm0uZmlsdGVyZWRfcHJvamVjdHMsIGZ1bmN0aW9uKHByb2plY3QsIGlkeCkge1xuICAgICAgICAgIHJldHVybiBfYyhcIm9jcmQtcHJvamVjdC1saXN0LWl0ZW1cIiwge1xuICAgICAgICAgICAga2V5OiBwcm9qZWN0Lm9yZ19wbHVzX25hbWUsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0LFxuICAgICAgICAgICAgICB0YWJJbmRleDogX3ZtLnRhYkluZGV4LFxuICAgICAgICAgICAgICBwcm9qZWN0SW5kZXg6IGlkeFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImItbW9kYWxcIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpZDogXCJwcm9qZWN0LW1vZGFsXCIsXG4gICAgICAgICAgICBzaXplOiBcInhsXCIsXG4gICAgICAgICAgICBcImhpZGUtaGVhZGVyXCI6IHRydWUsXG4gICAgICAgICAgICBcImhpZGUtZm9vdGVyXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIm9jcmQtcHJvamVjdC1saXN0LWl0ZW1cIiwge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgcHJvamVjdDogX3ZtLnByb2plY3RzW192bS4kcm9vdC5tb2RhbFByb2plY3RJbmRleF0sXG4gICAgICAgICAgICAgIHByb2plY3RJbmRleDogX3ZtLiRyb290Lm1vZGFsUHJvamVjdEluZGV4LFxuICAgICAgICAgICAgICBtb2RhbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbnZhciBlc0V4cG9ydHMgPSB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9XG5leHBvcnQgZGVmYXVsdCBlc0V4cG9ydHNcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtYTE1YzM1ZjBcIiwgZXNFeHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi1hMTVjMzVmMFwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy9PY3JkUHJvamVjdExpc3QudnVlXG4vLyBtb2R1bGUgaWQgPSAyNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///244\n");
+eval("var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _c(\n        \"b-row\",\n        [\n          _c(\n            \"b-button\",\n            {\n              directives: [\n                {\n                  name: \"b-toggle\",\n                  rawName: \"v-b-toggle.project-controls\",\n                  modifiers: { \"project-controls\": true }\n                }\n              ],\n              staticClass: \"m-1\"\n            },\n            [_vm._v(\"Toggle Controls\")]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"b-collapse\",\n            { attrs: { id: \"project-controls\" } },\n            [\n              _c(\n                \"b-container\",\n                [\n                  _c(\n                    \"b-row\",\n                    [\n                      _c(\n                        \"b-form-checkbox\",\n                        {\n                          attrs: { name: \"check-button\", switch: \"\" },\n                          model: {\n                            value: _vm.show_noncompliant,\n                            callback: function($$v) {\n                              _vm.show_noncompliant = $$v\n                            },\n                            expression: \"show_noncompliant\"\n                          }\n                        },\n                        [\n                          _vm._v(\"\\n          Non-compliant projects \"),\n                          _c(\"b\", [\n                            _vm._v(\n                              \"(\" +\n                                _vm._s(\n                                  _vm.show_noncompliant ? \"Show\" : \"Hide\"\n                                ) +\n                                \")\"\n                            )\n                          ])\n                        ]\n                      )\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _c(\n                        \"b-form-checkbox\",\n                        {\n                          attrs: { name: \"check-button\", switch: \"\" },\n                          model: {\n                            value: _vm.show_unofficial,\n                            callback: function($$v) {\n                              _vm.show_unofficial = $$v\n                            },\n                            expression: \"show_unofficial\"\n                          }\n                        },\n                        [\n                          _vm._v(\"\\n          Unofficial projects \"),\n                          _c(\"b\", [\n                            _vm._v(\n                              \"(\" +\n                                _vm._s(_vm.show_unofficial ? \"Show\" : \"Hide\") +\n                                \")\"\n                            )\n                          ])\n                        ]\n                      )\n                    ],\n                    1\n                  ),\n                  _vm._v(\" \"),\n                  _c(\"b-row\", [\n                    _vm._v(\"\\n          Filter by name: \"),\n                    _c(\"input\", {\n                      directives: [\n                        {\n                          name: \"model\",\n                          rawName: \"v-model\",\n                          value: _vm.name_filter,\n                          expression: \"name_filter\"\n                        }\n                      ],\n                      attrs: { type: \"text\" },\n                      domProps: { value: _vm.name_filter },\n                      on: {\n                        input: function($event) {\n                          if ($event.target.composing) {\n                            return\n                          }\n                          _vm.name_filter = $event.target.value\n                        }\n                      }\n                    }),\n                    _vm._v(\n                      \" (Showing \" +\n                        _vm._s(_vm.filtered_projects.length) +\n                        \" of \" +\n                        _vm._s(_vm.projects.length) +\n                        \" projects)\\n        \"\n                    )\n                  ]),\n                  _vm._v(\" \"),\n                  _c(\n                    \"b-row\",\n                    [\n                      _vm._v(\"\\n          Tabs: \"),\n                      _c(\n                        \"b-button\",\n                        {\n                          on: {\n                            click: function($event) {\n                              _vm.tabIndex -= 1\n                            }\n                          }\n                        },\n                        [_vm._v(\"<\")]\n                      ),\n                      _vm._v(\" \"),\n                      _c(\n                        \"b-button\",\n                        {\n                          on: {\n                            click: function($event) {\n                              _vm.tabIndex += 1\n                            }\n                          }\n                        },\n                        [_vm._v(\">\")]\n                      )\n                    ],\n                    1\n                  )\n                ],\n                1\n              )\n            ],\n            1\n          )\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"b-row\",\n        { staticClass: \"list\" },\n        _vm._l(_vm.filtered_projects, function(project, idx) {\n          return _c(\"ocrd-project-list-item\", {\n            key: project.org_plus_name,\n            attrs: {\n              project: project,\n              tabIndex: _vm.tabIndex,\n              projectIndex: idx\n            }\n          })\n        }),\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"b-modal\",\n        {\n          attrs: {\n            id: \"project-modal\",\n            size: \"xl\",\n            \"hide-header\": true,\n            \"hide-footer\": true\n          }\n        },\n        [\n          _c(\"ocrd-project-list-item\", {\n            attrs: {\n              project: _vm.projects[_vm.$root.modalProjectIndex],\n              projectIndex: _vm.$root.modalProjectIndex,\n              modal: true\n            }\n          })\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\nif (false) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-a15c35f0\", esExports)\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvT2NyZFByb2plY3RMaXN0LnZ1ZT9kYTZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVMseUJBQXlCLEVBQUU7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsbUNBQW1DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxtQ0FBbUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGVBQWU7QUFDN0MsaUNBQWlDLHlCQUF5QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHNCQUFzQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ0Ysa0VBQVM7QUFDeEIsSUFBSSxLQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYi1yb3dcIixcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLWJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJiLXRvZ2dsZVwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LWItdG9nZ2xlLnByb2plY3QtY29udHJvbHNcIixcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogeyBcInByb2plY3QtY29udHJvbHNcIjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtLTFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJUb2dnbGUgQ29udHJvbHNcIildXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJiLWNvbGxhcHNlXCIsXG4gICAgICAgICAgICB7IGF0dHJzOiB7IGlkOiBcInByb2plY3QtY29udHJvbHNcIiB9IH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJiLXJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImItZm9ybS1jaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBuYW1lOiBcImNoZWNrLWJ1dHRvblwiLCBzd2l0Y2g6IFwiXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dfbm9uY29tcGxpYW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93X25vbmNvbXBsaWFudCA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93X25vbmNvbXBsaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICBOb24tY29tcGxpYW50IHByb2plY3RzIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJiXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd19ub25jb21wbGlhbnQgPyBcIlNob3dcIiA6IFwiSGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiYi1yb3dcIixcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWZvcm0tY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbmFtZTogXCJjaGVjay1idXR0b25cIiwgc3dpdGNoOiBcIlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93X3Vub2ZmaWNpYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNob3dfdW5vZmZpY2lhbCA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93X3Vub2ZmaWNpYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgICAgVW5vZmZpY2lhbCBwcm9qZWN0cyBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiYlwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnNob3dfdW5vZmZpY2lhbCA/IFwiU2hvd1wiIDogXCJIaWRlXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiYi1yb3dcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgICAgRmlsdGVyIGJ5IG5hbWU6IFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm5hbWVfZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm5hbWVfZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwidGV4dFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5uYW1lX2ZpbHRlciB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5uYW1lX2ZpbHRlciA9ICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCIgKFNob3dpbmcgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5maWx0ZXJlZF9wcm9qZWN0cy5sZW5ndGgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIG9mIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucHJvamVjdHMubGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBwcm9qZWN0cylcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImItcm93XCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgICAgVGFiczogXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50YWJJbmRleCAtPSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIjxcIildXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50YWJJbmRleCArPSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIj5cIildXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImItcm93XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibGlzdFwiIH0sXG4gICAgICAgIF92bS5fbChfdm0uZmlsdGVyZWRfcHJvamVjdHMsIGZ1bmN0aW9uKHByb2plY3QsIGlkeCkge1xuICAgICAgICAgIHJldHVybiBfYyhcIm9jcmQtcHJvamVjdC1saXN0LWl0ZW1cIiwge1xuICAgICAgICAgICAga2V5OiBwcm9qZWN0Lm9yZ19wbHVzX25hbWUsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0LFxuICAgICAgICAgICAgICB0YWJJbmRleDogX3ZtLnRhYkluZGV4LFxuICAgICAgICAgICAgICBwcm9qZWN0SW5kZXg6IGlkeFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImItbW9kYWxcIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpZDogXCJwcm9qZWN0LW1vZGFsXCIsXG4gICAgICAgICAgICBzaXplOiBcInhsXCIsXG4gICAgICAgICAgICBcImhpZGUtaGVhZGVyXCI6IHRydWUsXG4gICAgICAgICAgICBcImhpZGUtZm9vdGVyXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIm9jcmQtcHJvamVjdC1saXN0LWl0ZW1cIiwge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgcHJvamVjdDogX3ZtLnByb2plY3RzW192bS4kcm9vdC5tb2RhbFByb2plY3RJbmRleF0sXG4gICAgICAgICAgICAgIHByb2plY3RJbmRleDogX3ZtLiRyb290Lm1vZGFsUHJvamVjdEluZGV4LFxuICAgICAgICAgICAgICBtb2RhbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbnZhciBlc0V4cG9ydHMgPSB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9XG5leHBvcnQgZGVmYXVsdCBlc0V4cG9ydHNcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtYTE1YzM1ZjBcIiwgZXNFeHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi1hMTVjMzVmMFwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy9PY3JkUHJvamVjdExpc3QudnVlXG4vLyBtb2R1bGUgaWQgPSAyNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///244\n");
 
 /***/ }),
 /* 245 */
diff --git a/webapp/package-lock.json b/webapp/package-lock.json
index d9629cf2e847c8e49e67c478cc44e21f462ddbbf..69c370c76308929ea6fa4fe146f1ad881bf59ff5 100644
--- a/webapp/package-lock.json
+++ b/webapp/package-lock.json
@@ -2801,12 +2801,14 @@
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -2821,17 +2823,20 @@
         "code-point-at": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -2948,7 +2953,8 @@
         "inherits": {
           "version": "2.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
@@ -2960,6 +2966,7 @@
           "version": "1.0.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -2974,6 +2981,7 @@
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
@@ -2981,12 +2989,14 @@
         "minimist": {
           "version": "0.0.8",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "minipass": {
           "version": "2.3.5",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -3005,6 +3015,7 @@
           "version": "0.5.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -3085,7 +3096,8 @@
         "number-is-nan": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -3097,6 +3109,7 @@
           "version": "1.4.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -3218,6 +3231,7 @@
           "version": "1.0.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
diff --git a/webapp/src/App.vue b/webapp/src/App.vue
index a5de04f097d0cbab00851735b965f77beee74f57..d0be692706289cdca295260aa31379ce7e30fa56 100644
--- a/webapp/src/App.vue
+++ b/webapp/src/App.vue
@@ -48,6 +48,7 @@ export default {
             tool.idx = tool_idx++
             tool.part_of = project.org_plus_name
             tool.official = project.official
+            tool.compliant_cli = project.compliant_cli
             return tool
           }))
         return all
@@ -62,4 +63,7 @@ export default {
 </script>
 
 <style>
+.non-compliant {
+  background-color: #fcc;
+}
 </style>
diff --git a/webapp/src/OcrdProcessorList.vue b/webapp/src/OcrdProcessorList.vue
index 8aeab3050f5c742e9db8b75be3e860536a890ae9..2f9e391d8b09f64a41a770bf92a7b5c8bd66d42a 100644
--- a/webapp/src/OcrdProcessorList.vue
+++ b/webapp/src/OcrdProcessorList.vue
@@ -4,9 +4,14 @@
       <b-button v-b-toggle.processor-controls class="m-1">Toggle Controls</b-button>
       <b-collapse id="processor-controls">
         <b-container>
+          <b-row>
+            <b-form-checkbox v-model="show_noncompliant" name="check-button" switch>
+            Non-compliant projects <b>({{ show_noncompliant ? "Show" : "Hide" }})</b>
+            </b-form-checkbox>
+          </b-row>
           <b-row>
             <b-form-checkbox v-model="show_unofficial" name="check-button" switch>
-            Unofficial processors <b>({{ checked ? "Show" : "hide" }})</b>
+            Unofficial processors <b>({{ show_unofficial ? "Show" : "hide" }})</b>
             </b-form-checkbox>
           </b-row>
           <b-row>
@@ -54,6 +59,7 @@ export default {
     return {
       step_filter: [],
       show_unofficial: true,
+      show_noncompliant: true,
       category_filter: {require: true},
       category_filter: [],
     }
@@ -75,6 +81,9 @@ export default {
         if (!(this.show_unofficial || tool.official)) {
           return false
         }
+        if (!(this.show_noncompliant || project.compliant_cli)) {
+          return false
+        }
         return true
       })
     },
diff --git a/webapp/src/OcrdProcessorListItem.vue b/webapp/src/OcrdProcessorListItem.vue
index e1de9c5e3806a5ec2da8383258842c89a0dfceeb..21e0cf6ddb53ea8145cc2b31117f8ef5622c6360 100644
--- a/webapp/src/OcrdProcessorListItem.vue
+++ b/webapp/src/OcrdProcessorListItem.vue
@@ -2,7 +2,7 @@
   <b-card
     tag="article"
     :title="processor.executable.replace('ocrd-', '')"
-    class="mb-5"
+    :class="`mb-5 ocrd-processor-list-item ${processor.compliant_cli ? 'compliant' : 'non-compliant'}`"
     >
     <b-card-text>
 
diff --git a/webapp/src/OcrdProjectList.vue b/webapp/src/OcrdProjectList.vue
index 64711b20f9d96fa17a9be5c6b907f472a073fa2a..e246a5a6252de977305bf7000f6976e4c2f49331 100644
--- a/webapp/src/OcrdProjectList.vue
+++ b/webapp/src/OcrdProjectList.vue
@@ -4,9 +4,14 @@
       <b-button v-b-toggle.project-controls class="m-1">Toggle Controls</b-button>
       <b-collapse id="project-controls">
         <b-container>
+          <b-row>
+            <b-form-checkbox v-model="show_noncompliant" name="check-button" switch>
+            Non-compliant projects <b>({{ show_noncompliant ? "Show" : "Hide" }})</b>
+            </b-form-checkbox>
+          </b-row>
           <b-row>
             <b-form-checkbox v-model="show_unofficial" name="check-button" switch>
-            Unofficial projects <b>({{ checked ? "Show" : "hide" }})</b>
+            Unofficial projects <b>({{ show_unofficial ? "Show" : "Hide" }})</b>
             </b-form-checkbox>
           </b-row>
           <b-row>
@@ -51,6 +56,7 @@ export default {
     return {
       name_filter: '',
       show_unofficial: true,
+      show_noncompliant: true,
       tabIndex: 0,
     }
   },
@@ -60,6 +66,9 @@ export default {
         if (!(this.show_unofficial || project.official)) {
           return false
         }
+        if (!(this.show_noncompliant || project.compliant_cli)) {
+          return false
+        }
         return project.name.toLowerCase().includes(this.name_filter.toLowerCase())
       })
     }
diff --git a/webapp/src/OcrdProjectListItem.vue b/webapp/src/OcrdProjectListItem.vue
index 15892de3b1057aada686862d87836c95d93d6250..7e77c386b92da4c71054df6048e7b8db598a4825 100644
--- a/webapp/src/OcrdProjectListItem.vue
+++ b/webapp/src/OcrdProjectListItem.vue
@@ -2,7 +2,7 @@
   <b-card
     :title="project.org_plus_name"
     tag="article"
-    class="mb-5 ocrd-project-list-item"
+    :class="`mb-5 ocrd-project-list-item ${project.compliant_cli ? 'compliant' : 'non-compliant'}`"
     >
     <b-card-text v-if="!modal">
       <b-button @click="$root.showModal('project', projectIndex)">Expand</b-button>
@@ -17,7 +17,7 @@
       <b-tab title="Git">
         <b-card-text>
           <p>
-            <a href="`https://pypi.org/project/${ project.python.name }/`">             <img :src="`https://img.shields.io/pypi/v/${ project.python.name }.svg`"                                     /> </a>
+            <a v-if="project.python" href="`https://pypi.org/project/${ project.python.name }/`">             <img :src="`https://img.shields.io/pypi/v/${ project.python.name }.svg`"                                     /> </a>
             <!-- <a href="`https://travis-ci.org/${ project.org_plus_name }`">               <img :src="`https://travis-ci.org/${ project.org_plus_name }.svg?branch=master`"                             /> </a> -->
             <!-- <a href="`https://circleci.com/gh/${ project.org_plus_name }`">             <img :src="`https://circleci.com/gh/${ project.org_plus_name }.svg?style=svg`"                               /> </a> -->
             <!-- <a href="`https://hub.docker.com/r/ocrd/core/tags/`">                     <img :src="`https://img.shields.io/docker/automated/ocrd/core.svg`"                                        /> </a> -->