pax_global_header 0000666 0000000 0000000 00000000064 14037770304 0014517 g ustar 00root root 0000000 0000000 52 comment=6657a9cc2014749c8e20572027f3ce64f8bcf582
organize-1.10.1/ 0000775 0000000 0000000 00000000000 14037770304 0013415 5 ustar 00root root 0000000 0000000 organize-1.10.1/.editorconfig 0000664 0000000 0000000 00000000446 14037770304 0016076 0 ustar 00root root 0000000 0000000 # EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 4
[{*.bat,Makefile}]
indent_style = tab
[*.rst]
indent_size = 2
[{*.yml,*.yaml}]
indent_size = 2
organize-1.10.1/.github/ 0000775 0000000 0000000 00000000000 14037770304 0014755 5 ustar 00root root 0000000 0000000 organize-1.10.1/.github/FUNDING.yml 0000664 0000000 0000000 00000001127 14037770304 0016573 0 ustar 00root root 0000000 0000000 # These are supported funding model platforms
# github: tfeldmann
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ["paypal.me/tfeldmann42"]
organize-1.10.1/.github/workflows/ 0000775 0000000 0000000 00000000000 14037770304 0017012 5 ustar 00root root 0000000 0000000 organize-1.10.1/.github/workflows/tests.yml 0000664 0000000 0000000 00000002561 14037770304 0020703 0 ustar 00root root 0000000 0000000 name: tests
on:
push:
branches: [master]
pull_request:
branches: [master]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- name: Checkout sources
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install poetry
poetry install -E textract
- name: General info
run: |
poetry run python main.py list
poetry run python main.py config --path
poetry run python main.py --version
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
poetry run flake8 --count --select=E9,F63,F7,F82 --show-source --statistics organize
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
poetry run flake8 --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics organize
- name: Test with pytest
run: |
poetry run pytest
- name: Check with MyPy
run: |
poetry run mypy -porganize
organize-1.10.1/.gitignore 0000664 0000000 0000000 00000002675 14037770304 0015417 0 ustar 00root root 0000000 0000000 .configs
.pytest_cache/
# Created by https://www.gitignore.io/api/python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
# End of https://www.gitignore.io/api/python
# Created by https://www.gitignore.io/api/visualstudiocode
### VisualStudioCode ###
.vscode
.history
# End of https://www.gitignore.io/api/visualstudiocode
.idea
organize-1.10.1/.readthedocs.yml 0000664 0000000 0000000 00000001107 14037770304 0016502 0 ustar 00root root 0000000 0000000 # .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/conf.py
# Build documentation with MkDocs
#mkdocs:
# configuration: mkdocs.yml
# Optionally build your docs in additional formats such as PDF and ePub
formats: all
build:
image: latest
# Optionally set the version of Python and requirements required to build your docs
python:
version: 3.7
install:
- method: pip
path: .
organize-1.10.1/CHANGELOG.md 0000664 0000000 0000000 00000010432 14037770304 0015226 0 ustar 00root root 0000000 0000000 # Changelog
## v1.10.1 (2021-04-21)
- Action `macos_tags` now supports colors and placeholders.
- Show full expanded path if folder is not found.
## v1.10.0 (2021-04-20)
- Add filter `mimetype`
- Add action `macos_tags`
- Support [`simplematch`](https://github.com/tfeldmann/simplematch) syntax in
`filename`-filter.
- Updated dependencies
- Because installing `textract` is quite hard on some platforms it is now an optional
dependency. Install it with `pip install organize-tool[textract]`
- This version needs python 3.6 minimum. Some dependencies that were simply backports
(pathlib2, typing) are removed.
- Add timezones in created and last_modified filters (Thank you, @win0err!)
## v1.9.1 (2020-11-10)
- Add {env} variable
- Add {now} variable
## v1.9 (2020-06-12)
- Add filter `Duplicate`.
## v1.8.2 (2020-04-03)
- Fix a bug in the filename filter config parsing algorithm with digits-only filenames.
## v1.8.1 (2020-03-28)
- Flatten filter and action lists to allow enhanced config file configuration (Thanks to @rawdamedia!)
- Add support for multiline content filters (Thanks to @zor-el!)
## v1.8.0 (2020-03-04)
- Added action `Delete`.
- Added filter `FileContent`.
- Python 3.4 is officially deprecated and no longer supported.
- `--config-file` command line option now supports `~` for user folder and expansion
of environment variables
- Added `years`, `months`, `weeks` and `seconds` parameter to filter `created` and
`lastmodified`
## v1.7.0 (2019-11-26)
- Added filter `Exif` to filter by image exif data.
- Placeholder variable properties are now case insensitve.
## v1.6.2 (2019-11-22)
- Fix `Rename` action (`'PosixPath' object has no attribute 'items'`).
- Use type hints everywhere.
## v1.6.1 (2019-10-25)
- Shows a warning for missing folders instead of raising an exception.
## v1.6 (2019-08-19)
- Added filter: `Python`
- Added filter: `FileSize`
- The organize module can now be run directly: `python3 -m organize`
- Various code simplifications and speedups.
- Fixes an issue with globstring file exclusion.
- Remove `clint` dependency as it is no longer maintained.
- Added various integration tests
- The "~~ SIMULATION ~~"-banner now takes up the whole terminal width
## v1.5.3 (2019-08-01)
- Filename filter now supports lists.
## v1.5.2 (2019-07-29)
- Environment variables in folder pathes are now expanded (syntax `$name` or `${name}`
and additionally `%name%` on windows).
For example this allows the usage of e.g. `%public/Desktop%` in windows.
## v1.5.1 (2019-07-23)
- New filter "Created" to filter by creation date.
- Fixes issue #39 where globstrings don't work most of the time.
- Integration test for issue #39
- Support indented config files
## v1.5 (2019-07-17)
- Fixes issue #31 where the {path} variable always resolves to the source path
- Updated dependencies
- Exclude changelog and readme from published wheel
## v1.4.5 (2019-07-03)
- Filter and Actions names are now case-insensitive
## v1.4.4 (2019-07-02)
- Fixes issues #36 with umlauts in config file on windows
## v1.4.3 (2019-06-05)
- Use safe YAML loader to fix a deprecation warning. (Thanks mope1!)
- Better error message if a folder does not exist. (Again thanks mope1!)
- Fix example code in documentation for LastModified filter.
- Custom config file locations (given by cmd line argument or environment variable).
- `config --debug` now shows the full path to the config file.
## v1.4.2 (2018-11-14)
- Fixes a bug with command line arguments in the ``$EDITOR`` environment
variable.
- Fixes a bug where an empty config wouldn't show the correct error message.
- Fix binary wheel creation in setup.py by using environment markers
## v1.4.1 (2018-10-05)
- A custom separator ``counter_separator`` can now be set in the actions Move,
Copy and Rename.
## v1.4 (2018-09-21)
- Fixes a bug where glob wildcards are not detected correctly
- Adds support for excluding folders and files via glob syntax.
- Makes sure that files are only handled once per rule.
## v1.3 (2018-07-06)
- Glob support in folder configuration.
- New variable {relative_path} is now available in actions.
## v1.2 (2018-03-19)
- Shows the relative path to files in subfolders.
## v1.1 (2018-03-13)
- Removes the colon from extension filter output so `{extension.lower}` now
returns `'png'` instead of `'.png'`.
## v1.0 (2018-03-13)
- Initial release.
organize-1.10.1/LICENSE.txt 0000664 0000000 0000000 00000002065 14037770304 0015243 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) Thomas Feldmann
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
organize-1.10.1/README.md 0000664 0000000 0000000 00000016431 14037770304 0014701 0 ustar 00root root 0000000 0000000
[](https://github.com/tfeldmann/organize/actions/workflows/tests.yml)
[](https://organize.readthedocs.io/en/latest/?badge=latest)
[](/LICENSE)
[](https://pypi.org/project/organize-tool/)
---
organize - The file management automation tool
Full documentation at Read the docs
- [About](#about)
- [Getting started](#getting-started)
- [Installation](#installation)
- [Creating your first rule](#creating-your-first-rule)
- [Example rules](#example-rules)
- [Advanced usage](#advanced-usage)
- [Command line interface](#command-line-interface)
## About
Your desktop is a mess? You cannot find anything in your downloads and
documents? Sorting and renaming all these files by hand is too tedious?
Time to automate it once and benefit from it forever.
**organize** is a command line, open-source alternative to apps like Hazel (macOS)
or File Juggler (Windows).
## Getting started
### Installation
Python 3.6+ is needed. Install it via your package manager or from [python.org](https://python.org).
Installation is done via pip. Note that the package name is `organize-tool`:
```bash
pip3 install -U organize-tool
```
If you want the text extraction capabilities, install with `textract` like this:
```bash
pip3 install -U organize-tool[textract]
```
This command can also be used to update to the newest version. Now you can run `organize --help` to check if the installation was successful.
### Creating your first rule
In your shell, **run `organize config`** to edit the configuration:
```yaml
rules:
- folders: ~/Downloads
subfolders: true
filters:
- extension: pdf
actions:
- echo: "Found PDF!"
```
> If you have problems editing the configuration you can run `organize config --open-folder` to reveal the configuration folder in your file manager. You can then edit the `config.yaml` in your favourite editor.
>
> Alternatively you can run `organize config --path` to see the full path to
> your `config.yaml`)
**Save your config file and run `organize run`.**
You will see a list of all `.pdf` files you have in your downloads folder (+ subfolders). For now we only show the text `Found PDF!` for each file, but this will change soon...
(If it shows `Nothing to do` you simply don't have any pdfs in your downloads folder).
Run `organize config` again and add a `copy`-action to your rule:
```yaml
actions:
- echo: "Found PDF!"
- move: ~/Documents/PDFs/
```
**Now run `organize sim` to see what would happen without touching your files**. You will see that your pdf-files would be moved over to your `Documents/PDFs` folder.
Congratulations, you just automated your first task. You can now run `organize run` whenever you like and all your pdfs are a bit more organized. It's that easy.
> There is so much more. You want to rename / copy files, run custom shell- or python scripts, match filenames with regular expressions or use placeholder variables? organize has you covered. Have a look at the advanced usage example below!
## Example rules
Here are some examples of simple organization and cleanup rules. Modify to your needs!
Move all invoices, orders or purchase documents into your documents folder:
```yaml
rules:
# sort my invoices and receipts
- folders: ~/Downloads
subfolders: true
filters:
- extension: pdf
- filename:
contains:
- Invoice
- Order
- Purchase
case_sensitive: false
actions:
- move: ~/Documents/Shopping/
```
Move incomplete downloads older than 30 days into the trash:
```yaml
rules:
# move incomplete downloads older > 30 days into the trash
- folders: ~/Downloads
filters:
- extension:
- download
- crdownload
- part
- lastmodified:
days: 30
mode: older
actions:
- trash
```
Delete empty files from downloads and desktop:
```yaml
rules:
# delete empty files from downloads and desktop
- folders:
- ~/Downloads
- ~/Desktop
filters:
- filesize: 0
actions:
- trash
```
Move screenshots into a "Screenshots" folder on your desktop:
```yaml
rules:
# move screenshots into "Screenshots" folder
- folders: ~/Desktop
filters:
- filename:
startswith: "Screen Shot"
actions:
- move: ~/Desktop/Screenshots/
```
Organize your font downloads:
```yaml
rules:
# organize your font files but keep the folder structure:
# "~/Downloads/favourites/helvetica/helvetica-bold.ttf"
# is moved to
# "~/Documents/FONTS/favourites/helvetica/helvetica-bold.ttf"
- folders: ~/Downloads/**/*.ttf
actions:
- Move: "~/Documents/FONTS/{relative_path}"
```
You'll find many more examples in the full documentation.
## Advanced usage
This example shows some advanced features like placeholder variables, pluggable
actions, recursion through subfolders and glob syntax:
```yaml
rules:
- folders: ~/Documents/**/*
filters:
- extension:
- pdf
- docx
- created
actions:
- move: "~/Documents/{extension.upper}/{created.year}{created.month:02}/"
- shell: 'open "{path}"'
```
Given we have two files in our `~/Documents` folder (or any of its subfolders)
named `script.docx` from january 2018 and `demo.pdf` from december 2016 this will
happen:
- `script.docx` will be moved to `~/Documents/DOCX/2018-01/script.docx`
- `demo.pdf` will be moved to `~/Documents/PDF/2016-12/demo.pdf`
- The files will be opened (`open` command in macOS) _from their new location_.
- Note the format syntax for `{created.month}` to make sure the month is prepended with a zero.
## Command line interface
```
The file management automation tool.
Usage:
organize sim [--config-file=]
organize run [--config-file=]
organize config [--open-folder | --path | --debug] [--config-file=]
organize list
organize --help
organize --version
Arguments:
sim Simulate a run. Does not touch your files.
run Organizes your files according to your rules.
config Open the configuration file in $EDITOR.
list List available filters and actions.
--version Show program version and exit.
-h, --help Show this screen and exit.
Options:
-o, --open-folder Open the folder containing the configuration files.
-p, --path Show the path to the configuration file.
-d, --debug Debug your configuration file.
Full documentation: https://organize.readthedocs.io
```
organize-1.10.1/docs/ 0000775 0000000 0000000 00000000000 14037770304 0014345 5 ustar 00root root 0000000 0000000 organize-1.10.1/docs/Makefile 0000664 0000000 0000000 00000001142 14037770304 0016003 0 ustar 00root root 0000000 0000000 # Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = python3 -msphinx
SPHINXPROJ = organize
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
organize-1.10.1/docs/_static/ 0000775 0000000 0000000 00000000000 14037770304 0015773 5 ustar 00root root 0000000 0000000 organize-1.10.1/docs/_static/organize.pdf 0000664 0000000 0000000 00001132025 14037770304 0020310 0 ustar 00root root 0000000 0000000 %PDF-1.5
%
1 0 obj
<>/OCGs[7 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
application/pdf
organize
2017-10-06T16:23:53+02:00
2017-10-06T16:23:53+02:00
2017-10-06T16:23:53+02:00
Adobe Illustrator CS6 (Macintosh)
256
56
JPEG
/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAOAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FUk87ebNP8
peVtR8wX5/cWMRdY60Mkp+GKJfd3IXFXln/ONXnfz/5xj8w6n5ivBc6ZHOiWSmNF4TOC8qIygHgi
FNjXr88Ve3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyV/zkB55/NrS/zNksrW/1
DS9OQx/oOGyeSKK4UqhLUjIE7GQ0IatPs0xV9NeSLrXrvyho915gi9HWprSF9QjKhCJWQFuSDZWP
Ur2O2Kp3irsVdirsVdirsVeK/k9+T/n/AMpefNZ1/wAw61Ff21/FIjGOSV3uZXkVlmmR1VVKqp7m
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
KuxV2KuxV2KuxV2KuxV//9k=
uuid:1e5d5c86-71a7-ba4b-a79c-97169be62009
xmp.did:0380117407206811822AF33CB0CB0D8F
uuid:5D20892493BFDB11914A8590D31508C8
proof:pdf
xmp.iid:0280117407206811822AF33CB0CB0D8F
xmp.did:0280117407206811822AF33CB0CB0D8F
uuid:5D20892493BFDB11914A8590D31508C8
proof:pdf
saved
xmp.iid:0180117407206811822AF33CB0CB0D8F
2017-10-06T16:19:14+02:00
Adobe Illustrator CS6 (Macintosh)
/
saved
xmp.iid:0380117407206811822AF33CB0CB0D8F
2017-10-06T16:23:51+02:00
Adobe Illustrator CS6 (Macintosh)
/
Print
False
False
1
219.780556
59.266667
Millimeters
FiraCode-Medium
Fira Code
Medium
Open Type
Version 1.204
False
FiraCode-Medium.ttf
FiraCode-Bold
Fira Code
Bold
Open Type
Version 1.204
False
FiraCode-Bold.ttf
Black
Standard-Farbfeldgruppe
0
Weiß
CMYK
PROCESS
0.000000
0.000000
0.000000
0.000000
Schwarz
CMYK
PROCESS
0.000000
0.000000
0.000000
100.000000
CMYK Rot
CMYK
PROCESS
0.000000
100.000000
100.000000
0.000000
CMYK Gelb
CMYK
PROCESS
0.000000
0.000000
100.000000
0.000000
CMYK Grün
CMYK
PROCESS
100.000000
0.000000
100.000000
0.000000
CMYK Cyan
CMYK
PROCESS
100.000000
0.000000
0.000000
0.000000
CMYK Blau
CMYK
PROCESS
100.000000
100.000000
0.000000
0.000000
CMYK Magenta
CMYK
PROCESS
0.000000
100.000000
0.000000
0.000000
C=15 M=100 Y=90 K=10
CMYK
PROCESS
14.999998
100.000000
90.000000
10.000002
C=0 M=90 Y=85 K=0
CMYK
PROCESS
0.000000
90.000000
85.000000
0.000000
C=0 M=80 Y=95 K=0
CMYK
PROCESS
0.000000
80.000000
95.000000
0.000000
C=0 M=50 Y=100 K=0
CMYK
PROCESS
0.000000
50.000000
100.000000
0.000000
C=0 M=35 Y=85 K=0
CMYK
PROCESS
0.000000
35.000004
85.000000
0.000000
C=5 M=0 Y=90 K=0
CMYK
PROCESS
5.000001
0.000000
90.000000
0.000000
C=20 M=0 Y=100 K=0
CMYK
PROCESS
19.999998
0.000000
100.000000
0.000000
C=50 M=0 Y=100 K=0
CMYK
PROCESS
50.000000
0.000000
100.000000
0.000000
C=75 M=0 Y=100 K=0
CMYK
PROCESS
75.000000
0.000000
100.000000
0.000000
C=85 M=10 Y=100 K=10
CMYK
PROCESS
85.000000
10.000002
100.000000
10.000002
C=90 M=30 Y=95 K=30
CMYK
PROCESS
90.000000
30.000002
95.000000
30.000002
C=75 M=0 Y=75 K=0
CMYK
PROCESS
75.000000
0.000000
75.000000
0.000000
C=80 M=10 Y=45 K=0
CMYK
PROCESS
80.000000
10.000002
45.000000
0.000000
C=70 M=15 Y=0 K=0
CMYK
PROCESS
70.000000
14.999998
0.000000
0.000000
C=85 M=50 Y=0 K=0
CMYK
PROCESS
85.000000
50.000000
0.000000
0.000000
C=100 M=95 Y=5 K=0
CMYK
PROCESS
100.000000
95.000000
5.000001
0.000000
C=100 M=100 Y=25 K=25
CMYK
PROCESS
100.000000
100.000000
25.000000
25.000000
C=75 M=100 Y=0 K=0
CMYK
PROCESS
75.000000
100.000000
0.000000
0.000000
C=50 M=100 Y=0 K=0
CMYK
PROCESS
50.000000
100.000000
0.000000
0.000000
C=35 M=100 Y=35 K=10
CMYK
PROCESS
35.000004
100.000000
35.000004
10.000002
C=10 M=100 Y=50 K=0
CMYK
PROCESS
10.000002
100.000000
50.000000
0.000000
C=0 M=95 Y=20 K=0
CMYK
PROCESS
0.000000
95.000000
19.999998
0.000000
C=25 M=25 Y=40 K=0
CMYK
PROCESS
25.000000
25.000000
39.999996
0.000000
C=40 M=45 Y=50 K=5
CMYK
PROCESS
39.999996
45.000000
50.000000
5.000001
C=50 M=50 Y=60 K=25
CMYK
PROCESS
50.000000
50.000000
60.000004
25.000000
C=55 M=60 Y=65 K=40
CMYK
PROCESS
55.000000
60.000004
65.000000
39.999996
C=25 M=40 Y=65 K=0
CMYK
PROCESS
25.000000
39.999996
65.000000
0.000000
C=30 M=50 Y=75 K=10
CMYK
PROCESS
30.000002
50.000000
75.000000
10.000002
C=35 M=60 Y=80 K=25
CMYK
PROCESS
35.000004
60.000004
80.000000
25.000000
C=40 M=65 Y=90 K=35
CMYK
PROCESS
39.999996
65.000000
90.000000
35.000004
C=40 M=70 Y=100 K=50
CMYK
PROCESS
39.999996
70.000000
100.000000
50.000000
C=50 M=70 Y=80 K=70
CMYK
PROCESS
50.000000
70.000000
80.000000
70.000000
Graustufen
1
C=0 M=0 Y=0 K=100
CMYK
PROCESS
0.000000
0.000000
0.000000
100.000000
C=0 M=0 Y=0 K=90
CMYK
PROCESS
0.000000
0.000000
0.000000
89.999405
C=0 M=0 Y=0 K=80
CMYK
PROCESS
0.000000
0.000000
0.000000
79.998795
C=0 M=0 Y=0 K=70
CMYK
PROCESS
0.000000
0.000000
0.000000
69.999702
C=0 M=0 Y=0 K=60
CMYK
PROCESS
0.000000
0.000000
0.000000
59.999104
C=0 M=0 Y=0 K=50
CMYK
PROCESS
0.000000
0.000000
0.000000
50.000000
C=0 M=0 Y=0 K=40
CMYK
PROCESS
0.000000
0.000000
0.000000
39.999401
C=0 M=0 Y=0 K=30
CMYK
PROCESS
0.000000
0.000000
0.000000
29.998802
C=0 M=0 Y=0 K=20
CMYK
PROCESS
0.000000
0.000000
0.000000
19.999701
C=0 M=0 Y=0 K=10
CMYK
PROCESS
0.000000
0.000000
0.000000
9.999103
C=0 M=0 Y=0 K=5
CMYK
PROCESS
0.000000
0.000000
0.000000
4.998803
Strahlende Farben
1
C=0 M=100 Y=100 K=0
CMYK
PROCESS
0.000000
100.000000
100.000000
0.000000
C=0 M=75 Y=100 K=0
CMYK
PROCESS
0.000000
75.000000
100.000000
0.000000
C=0 M=10 Y=95 K=0
CMYK
PROCESS
0.000000
10.000002
95.000000
0.000000
C=85 M=10 Y=100 K=0
CMYK
PROCESS
85.000000
10.000002
100.000000
0.000000
C=100 M=90 Y=0 K=0
CMYK
PROCESS
100.000000
90.000000
0.000000
0.000000
C=60 M=90 Y=0 K=0
CMYK
PROCESS
60.000004
90.000000
0.003099
0.003099
Adobe PDF library 10.01
endstream
endobj
3 0 obj
<>
endobj
9 0 obj
<>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 13 0 R/TrimBox[0.0 0.0 623.0 168.0]/Type/Page>>
endobj
10 0 obj
<>stream
HlK\E+2 uzo"V!Zb=
03"
n h{\/߽Njo^/>ˇO#Ogǯ\~gKqy*nxLץ9:JQ/i~XNwjEu6yגcfǵӪCknK>]yi.vBN9kx͗pywy4u\xr7ΫMލfW \8;d
~"2i5ԫ.6 "2~#PN>S ^ @
ӆLtZhwV$גS )X{+pOzl,tDONHB\@!%rA4 {(%\/ו80P+0g7"ȵWH`!